diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/AUTHORS b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/AUTHORS new file mode 100644 index 000000000..f296b02ad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/AUTHORS @@ -0,0 +1,10 @@ +Intel Linux graphics team working on the driver: +Chang Zhou +Gwenole Beauchesne +Haihao Xiang (primary author) +Nanhai Zou + +Additional contributors: +Alexander Osin +Damien Lespiau +Edgar Hucek diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Android.mk b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Android.mk new file mode 100644 index 000000000..5cbb9d8cc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Android.mk @@ -0,0 +1,4 @@ +# Recursive call sub-folder Android.mk +# + + include $(call all-subdir-makefiles) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/COPYING b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/COPYING new file mode 100644 index 000000000..900e77549 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/COPYING @@ -0,0 +1,19 @@ + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile new file mode 100644 index 000000000..38d774d3e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile @@ -0,0 +1,92 @@ +LIBRARY = i965-video + +CC = kos32-gcc +AR = kos32-ar +LD = kos32-ld +STRIP = kos32-strip + +CFLAGS = -U_Win32 -U_WIN32 -U__MINGW32__ -c -O2 -Wall -Winline -fno-ident +CFLAGS+= -mno-ms-bitfields -fomit-frame-pointer + +LDFLAGS = -shared -s -nostdlib -T ../../newlib/dll.lds --entry _DllStartup --image-base=0 +LDFLAGS+= --version-script i965-video.ver --out-implib lib$(LIBRARY).dll.a + +ARFLAGS = crs + +INCLUDES= -I../../newlib/libc/include -I../../libdrm -I../../libdrm/intel -I../../libdrm/include/drm +INCLUDES+= -I../libva-1.6.2 + +LIBPATH:= -L../../../lib -L/home/autobuild/tools/win32/mingw32/lib + +LIBS:= -ldll -ldrm -lc.dll -lgcc + +DEFINES:= -DHAVE_CONFIG_H + +SOURCES = \ + src/gen6_mfc.c \ + src/gen6_mfc_common.c \ + src/gen6_mfd.c \ + src/gen6_vme.c \ + src/gen7_mfc.c \ + src/gen7_mfd.c \ + src/gen7_vme.c \ + src/gen75_mfc.c \ + src/gen75_mfd.c \ + src/gen75_picture_process.c \ + src/gen75_vme.c \ + src/gen75_vpp_gpe.c \ + src/gen75_vpp_vebox.c \ + src/gen8_mfc.c \ + src/gen8_mfd.c \ + src/gen8_post_processing.c \ + src/gen8_render.c \ + src/gen8_vme.c \ + src/gen9_mfc.c \ + src/gen9_mfc_hevc.c \ + src/gen9_mfd.c \ + src/gen9_post_processing.c \ + src/gen9_render.c \ + src/gen9_vme.c \ + src/i965_avc_bsd.c \ + src/i965_avc_hw_scoreboard.c \ + src/i965_avc_ildb.c \ + src/i965_decoder_utils.c \ + src/i965_device_info.c \ + src/i965_drv_video.c \ + src/i965_encoder.c \ + src/i965_encoder_utils.c \ + src/i965_gpe_utils.c \ + src/i965_media.c \ + src/i965_media_h264.c \ + src/i965_media_mpeg2.c \ + src/i965_post_processing.c \ + src/i965_render.c \ + src/i965_vpp_avs.c \ + src/i965_yuv_coefs.c \ + src/intel_batchbuffer.c \ + src/intel_driver.c \ + src/intel_memman.c \ + src/object_heap.c \ + src/intel_media_common.c + + +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) + +# targets + +all: $(LIBRARY).dll + +$(LIBRARY).dll: $(OBJECTS) Makefile + $(LD) $(LDFLAGS) $(LIBPATH) -o $@ $(OBJECTS) $(LIBS) + $(STRIP) $@ + mv -f $@ ../../../bin + mv -f lib$(LIBRARY).dll.a ../../../lib + + +%.o : %.c Makefile + $(CC) $(INCLUDES) $(CFLAGS) $(DEFINES) -o $@ $< + + +clean: + -rm -f *.o + \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.am new file mode 100644 index 000000000..093adef83 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.am @@ -0,0 +1,25 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = debian.upstream src + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = \ + aclocal.m4 compile config.guess config.sub \ + configure depcomp install-sh ltmain.sh \ + Makefile.in missing + +DEB_BUILDDIR = debian.build + +deb: + @[ -d debian ] || ln -s debian.upstream debian + dpkg-buildpackage -rfakeroot -uc -us + +deb.upstream: dist + -mkdir -p $(DEB_BUILDDIR) + cd $(DEB_BUILDDIR) && \ + rm -rf $(PACKAGE)-$(VERSION) && \ + tar zxvf ../$(PACKAGE)-$(VERSION).tar.gz && \ + cd $(PACKAGE)-$(VERSION) && \ + $(MAKE) deb -f Makefile.am + +EXTRA_DIST = Android.mk diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.in new file mode 100644 index 000000000..fa122845d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/Makefile.in @@ -0,0 +1,828 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) AUTHORS COPYING \ + NEWS README compile config.guess config.sub depcomp install-sh \ + missing ltmain.sh +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +AUTOMAKE_OPTIONS = foreign +SUBDIRS = debian.upstream src + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = \ + aclocal.m4 compile config.guess config.sub \ + configure depcomp install-sh ltmain.sh \ + Makefile.in missing + +DEB_BUILDDIR = debian.build +EXTRA_DIST = Android.mk +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +deb: + @[ -d debian ] || ln -s debian.upstream debian + dpkg-buildpackage -rfakeroot -uc -us + +deb.upstream: dist + -mkdir -p $(DEB_BUILDDIR) + cd $(DEB_BUILDDIR) && \ + rm -rf $(PACKAGE)-$(VERSION) && \ + tar zxvf ../$(PACKAGE)-$(VERSION).tar.gz && \ + cd $(PACKAGE)-$(VERSION) && \ + $(MAKE) deb -f Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/NEWS b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/NEWS new file mode 100644 index 000000000..b54e7f2ce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/NEWS @@ -0,0 +1,250 @@ +libva-intel-driver NEWS -- summary of changes. 2015-12-15 +Copyright (C) 2009-2015 Intel Corporation + +Version 1.6.2 - 15.Dec.2015 +* Add support for Broxton + - Decoding: H.264/MPEG-2/VC-1/JPEG/VP8/HEVC/HEVC 10-bit/VP9 + - Encoding: H.264/JPEG/VP8/HEVC + - VPP: CSC/scaling/NoiseReduction/Deinterlacing{Bob, MotionAdaptive, MotionCompensated}/ColorBalance/STD +* Add support for HEVC CBR on SKL +* Fix the broken VA_FILTER_SCALING_HQ on SKL +* Fix the incorrect loading of GPU shaders on GEN8/GEN9 +* Fix the wrong address relocation in VPP on GEN8/GEN9 +* Fix the wrong VAImage foramt + (https://bugs.freedesktop.org/show_bug.cgi?id=92088) +* Fix YUV to RGB conversion on GEN7/GEN8/GEN9 +* Fix the segmentation fault causing by NULL buffer object on SNB + (The issue mentioned in https://bugs.freedesktop.org/show_bug.cgi?id=92811) +* Fix the wrong coordinate used in VPP + (The issue mentioned in https://bugs.freedesktop.org/show_bug.cgi?id=92811) + +Version 1.6.1 - 09.Sep.2015 +* Wrapper other backend driver to support VP9 hybrid decoding on BDW/BSW/SKL (--enable-hybrid-codec) +* Fix HEVC decoding issue on BSW/SKL +* Fix HEVC encoding on SKL GT3 +* Fix GPU hang issue when decoding H.264 MBAFF clips + (https://bugs.freedesktop.org/show_bug.cgi?id=91207) +* Fix issues detected by klockwork scan +* Combine csc/scaling together to optimize the performance + +Version 1.6.0 - 01.Jul.2015 +* Add support for VP8 encoding (CQP, CBR) on BSW/SKL +* Add support for HEVC decoding on BSW +* Add support for HEVC encoding (CQP) on SKL +* Add support for low-power mode (VA_PROC_PIPELINE_FAST) in VPP to discard + any complex operation that would consume too many HW resources +* Fix memory leak issue for JPEG decoding +* Fix HEVC decoding issue on BSW/SKL +* Fix GPU hang issue caused by VP8 decoding on BDW/BSW +* Fix MADI/MCDI issues on SNB/IVB +* Improve the JPEG encoding quality +* Optimize MPEG-2 start code search on IVB + +Version 1.5.1 - DD.03.2015 +* Fix forward reference requirement for Bob deinterlacing +* Fix a lot of potential rendering issues on GEN8+ +* Fix scaling of NV12 surfaces when no output_region is set +* Fix the broken attribute setting of i965_GetConfigAttrib +* Fix the GetConfigAttributes() for JPEGBaseline profile +* Fix the wrong overlap setting for VC-1 decoding on GEN6+ +* Fix VP8 decoding issue on GEN8+, HW needs 1 extra byte for each partition +* Fix JPEG encoding issue. +* Add support for aub dump +* Enhance STD on GEN8+ +* Implement max width and height in QuerySurfaceAttributes +* Add new SKL PCI ids + +Version 1.5.0 - 28.Dec.2014 +* Add support for Skylake + - Decoding: H.264/MPEG-2/VC-1/JPEG/VP8/HEVC + - Encoding: H.264/MPEG-2/JPEG + - VPP: CSC/scaling/NoiseReduction/Deinterlacing{Bob, MotionAdaptive, MotionCompensated}/ColorBalance/STD +* Add support for JPEG encoding on Braswell +* Add enhancement for video post/pre processing +* Fix out of tree builds (Emil Velikov) + +Version 1.4.1 - 24.Oct.2014 +* Use a new method to detect encoding capabilitiy on Haswell + +Version 1.4.0 - 30.Sep.2014 +* Add support for exporting VA buffer +* Add support for MVC decoding/encoding +* Add support for encoding quality level on Sandybride and newer +* Add support of inserting packed slice header & raw data for encoding +* Add support for Cherryview +* Fix the GPU hang issue on Ivybridge when using the gstreamer and mplayer to play back one H264 clip + (https://bugs.freedesktop.org/show_bug.cgi?id=80720) +* Fix the GPU hang issue on Sandybride and newer when playing back one H264 clip + (https://bugs.freedesktop.org/show_bug.cgi?id=76363) +* Fix the GPU hang issue on Haswell when using XBMC to play back one H264 clip + (https://bugs.freedesktop.org/show_bug.cgi?id=81447) + +Version 1.3.2 - 16.Jun.2014 +* Export JPEG format by vaDeriveImage() +* Add support for MADI on SNB +* H.264: fix the support for grayscale format (Y800) +* Fix vaGetConfigAttributes() to validate the profile/entrypoint pair +* Fix vaCreateConfig() to not override user chroma format +* Fix the scaling issue on IVB/HSW/BDW +* Fix https://bugs.freedesktop.org/show_bug.cgi?id=73424 +* Fix https://bugs.freedesktop.org/show_bug.cgi?id=72522 +* Fix https://bugs.freedesktop.org/show_bug.cgi?id=77041 +* Quality improvement for H.264 encoding on BDW + +Version 1.3.1 - 09.May.2014 +* Add support for STE on Broadwell +* Add support for YV16 +* Add support for user specified tiling and stride +* Fix VP8 decoding on Broadwell +* Fix the wrong alpha when convert NV12 into RGBA +* Fix https://bugs.freedesktop.org/show_bug.cgi?id=77386 + +Version 1.3.0 - 24.Mar.2014 +* Add support for Broadwell + - Decoding: H.264/MPEG-2/VC-1/JPEG/VP8 + - Encoding: H.264/MPEG-2 + - VPP: CSC/scaling/NoiseReduction/Deinterlacing{Bob, MotionAdaptive, MotionCompensated}/Sharpening/ColorBalance +* Fix the wrong setting in MI_BATCH_BATCH_START + +Version 1.2.2 - 16.Dec.2013 +* Motion compensation DI on HSW +* Optimization of FPS for H.264 encoding on HSW +* Add brightness/contrast/hue/saturation support for rendering. +* Support BT601/BT709/SMPTE240 in vaPutSurface() +* Expose Constrained Baseline Profile instead of Baseline Profile for H.264 +* Bug fixes + +Version 1.2.1 - 23.Sep.2013 +* Add PCI IDs for Bay Trail +* Performance improvement for MPEG-2 Encoding on IVB/HSW +* Add basic processing support for packed YUV to packed YUV on ILK+ +* Check the underlying OS support for VEBOX on HSW +* Quality improvement for BobDI on SNB/IVB +* Add support for Motion Adaptive Deinterlacing on IVB +* vaDeriveImage() works for UYVY formats +* Fix thread safety issue +* Fix GPU hang issue when decoding some videos on SNB +* Fix output filter count from QueryVideoProcFilters() + +Version 1.2.0 - 26.Jun.2013 +* The new H.264 encoding API on SNB/IVB/HSW + - Profile: BP/MP/HP + - Entropy Coding: CAVLC/CABAC + - Rate Control: CQP, CBR + - Progressive frame + - Multi Slice encoding + - Configurable GOP Structure +* MPEG-2 encoding on IVB/HSW + - Profile: SP/MP + - Progressive frame + - Configurable GOP Structure +* Video process on ILK/SNB/IVB/HSW + - CSC/scaling on ILK + - CSC/scaling/NoiseReduction/Deinterlacing{Bob} on SNB/IVB + - CSC/scaling/NoiseReduction/Deinterlacing{Bob,MotionAdaptive}/Sharpening/ColorBalance on HSW +* Implement vaQuerySurfaceAttributes() +* Implement the new version of vaCreateSurfaces() + - Create VA surface with specified fourcc + - Create VA surface from external buffer + . flinked GEM buffer + . prime/dma buffer +* Optimize H.264 encoding on IVB/HSW +* More reserved PCI IDs for HSW +* A lot of bug fixes + +Version 1.0.20 - 19.Mar.2013 +* Add support for wayland 1.0 protocol (Rob Bradford) +* Add global alpha support for subpicture +* Add support for IA88/AI88 subpicture +* Support up to 4 subpictures for each VA surface +* Update PCI IDs for Haswell CRW +* Automake 1.13 fixups (Armin K) +* Fix libva-intel-driver-1.0.19 display corruption on IVB GT1 + https://bugs.freedesktop.org/show_bug.cgi?id=57323 +* Fix decoding with FREXT02_JVC_C.264 on SNB + https://bugs.freedesktop.org/show_bug.cgi?id=57720 +* Fix H.264 decoding broken/visual errors on ILK (Tobias Jakobi) + https://bugs.freedesktop.org/show_bug.cgi?id=58875 +* Fix GPU hung with h.264 video and a resolution of 1920x816 on IVB + https://bugs.freedesktop.org/show_bug.cgi?id=59050 + +Version 1.0.19 - 09.Nov.2012 +* Add support for Haswell +* Add raw DRM support (Dmitry Ermilov) +* Add Wayland support +* Add support for display rotation attribute +* Support 4K encoding on IVB and HSW +* Drop explicit dependency on X11 and libva-x11 +* Fix VC-1 decoding when VSTRANSFORM is 0 +* Fix SIGSEGV caused by use-after-free of the bufmgr (Stéphane Marchesin) +* Fix thread safety issue (Gautam) +* Fix vaUnlockSurface() for libva trace + +Version 1.0.18 - 02.Aug.2012 +* Add JPEG decoding on Ivy Bridge +* Add support for a new Ivy Bridge chip +* Add support for vaSyncSurface() and vaQuerySurfaceStatus() (Dmitry Ermilov) +* Fix decoding of MPEG-2 videos with implicit IQ matrices +* Fix concurrent creation of VA objects (MT safety) +* Fix decoding of large resolution videos (up to 4K on IVB) + +Version 1.0.17 - 02.Apr.2012 +* Add support for IMC1/IMC3 surface formats +* Fix rendering of interlaced surfaces +* Fix MPEG-2 decoding of interlaced streams (SNB, IVB) +* Fix H.264 weighted prediction indicator (SNB) +* Fix and simplify calculation of H.264 macroblock bit offset (ILK, SNB, IVB) + +Version 1.0.16 - 14.Feb.2012 +* Fix VC-1 bitplane buffer size (SNB, IVB) +* Fix VC-1 motion vector modes for Ivy Bridge +* Fix MFX_QM_STATE for H.264 flat scaling lists (IVB) +* Fix and simplify AVC_REF_IDX_STATE setup (ILK, SNB, IVB) +* Fix memory leak of encoder buffers +* Fix check for internal VA surface format prior to rendering +* Add support for B43 chipset (Alexander Inyukhin) + +Version 1.0.15 - 28.Oct.2011 +* Add auto-generated Debian packaging +* Fix VC-1 decoding (TTFRM packing) +* Fix MPEG-2 decoding on Ivy Bridge +* Fix MPEG-2 decoding with sparse QM matrices updates +* Fix slice-param & slice-data buffer memory leaks + +Version 1.0.14 - 28.Jul.2011 +* Add H.264 encoding support to Ivy Bridge +* Add support for VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD +* Fix next slice vertical position for MPEG-2 (#38628) +* Fix subpicture scale factor for Y axis +* Fix GPU hang when decoding field coded MPEG-2 picture +* Fix memory leaks (Edgar Hucek) + +Version 1.0.13 - 25.May.2011 +* Add H.264 encoding support to Sandy Bridge +* Add MPEG-2, VC-1 and H.264 decoding support to Ivy Bridge +* Fix thread safety issues + +Version 1.0.11 - 14.Mar.2011 +* Add deinterlacing & scaling support to Sandy Bridge +* Add vaDeriveImage() implementation +* Fix VC-1 decoding for Main/Simple profiles + +Version 1.0.9 - 27.Jan.2011 +* Add VC-1 decoding support to Sandy Bridge + +Version 1.0.8 - 21.Jan.2011 +* Add support for IA44/AI44 subpicture formats (#32868) + +Version 1.0.7 - 17.Dec.2011 +* Add MPEG-2 and H.264 decoding support to Sandy Bridge + +Version 1.0.5 - 02.Sep.2010 +* Add deinterlacing & scaling support to Ironlake + +Version 1.0.4 - 13.Jul.2010 +* Add vaGetImage() implementation +* Add support for RGBA subpictures +* Fix H.264 decoding on Ironlake + +Version 1.0.3 - 10.Jun.2010 +* Add H.264 decoding support to Ironlake diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/README b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/README new file mode 100644 index 000000000..7990223f9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/README @@ -0,0 +1,52 @@ + + libva-intel-driver + VA driver for Intel G45 & HD Graphics family + + Copyright (C) 2009-2015 Intel Corporation + + +License +------- + +Please read the COPYING file available in this package. + + +Overview +-------- + +libva-intel-driver is the VA-API implementation for Intel G45 chipsets +and Intel HD Graphics for Intel Core processor family. + +Platform definitions: +CTG: Cantiga, Intel GMA 4500MHD (GM45) +ILK: Ironlake, Intel HD Graphics for 2010 Intel Core processor family +SNB: Sandybridge, Intel HD Graphics for 2011 Intel Core processor family +IVB: Ivybridge +HSW: Haswell +BDW: Broadwell +CHV/BSW: Cherryview/Braswell +SKL: Skylake +BXT: Broxton + + +Codecs +------ + +H.264 D ILK+ +H.264 E SNB+ +MPEG-2 D CTG+ +VC-1 D SNB+ +JPEG D IVB+ +JPEG E CHV+/BSW+ +VP8 D BDW+ +VP8 E CHV+/BSW+ +HEVC D CHV+/BSW+ +HEVC E SKL+ +VP9 D BXT+ +HEVC 10bit D BXT+ + + +Requirements +------------ + +libva >= 1.6.0 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/aclocal.m4 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/aclocal.m4 new file mode 100644 index 000000000..d3e18a7de --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/aclocal.m4 @@ -0,0 +1,9925 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +AC_DEFUN([WAYLAND_SCANNER_RULES], [ + PKG_PROG_PKG_CONFIG + + PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner]) + + wayland_scanner=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner` + AC_SUBST([wayland_scanner]) + + wayland_scanner_rules=`$PKG_CONFIG --variable=pkgdatadir wayland-scanner`/wayland-scanner.mk + AC_SUBST_FILE([wayland_scanner_rules]) + + AC_SUBST([wayland_protocoldir], [$1]) +]) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/compile b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/compile new file mode 100644 index 000000000..531136b06 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.guess b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.guess new file mode 100644 index 000000000..b79252d6b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.guess @@ -0,0 +1,1558 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.sub b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.sub new file mode 100644 index 000000000..9633db704 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/config.sub @@ -0,0 +1,1791 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-08-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 \ + | or1k | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or1k-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure new file mode 100644 index 000000000..6eddced95 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure @@ -0,0 +1,16856 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for intel_driver 1.6.2. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: haihao.xiang@intel.com about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='intel_driver' +PACKAGE_TARNAME='libva-intel-driver' +PACKAGE_VERSION='1.6.2' +PACKAGE_STRING='intel_driver 1.6.2' +PACKAGE_BUGREPORT='haihao.xiang@intel.com' +PACKAGE_URL='' + +ac_unique_file="Makefile.am" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +wayland_protocoldir +wayland_scanner +WAYLAND_SCANNER_LIBS +WAYLAND_SCANNER_CFLAGS +USE_WAYLAND_FALSE +USE_WAYLAND_TRUE +LIBVA_WAYLAND_DEPS_LIBS +LIBVA_WAYLAND_DEPS_CFLAGS +WAYLAND_LIBS +WAYLAND_CFLAGS +USE_EGL_FALSE +USE_EGL_TRUE +EGL_LIBS +EGL_CFLAGS +LIBVA_DRIVERS_PATH +USE_X11_FALSE +USE_X11_TRUE +LIBVA_X11_DEPS_LIBS +LIBVA_X11_DEPS_CFLAGS +USE_DRM_FALSE +USE_DRM_TRUE +LIBVA_DRM_DEPS_LIBS +LIBVA_DRM_DEPS_CFLAGS +LIBVA_DEPS_LIBS +LIBVA_DEPS_CFLAGS +HAVE_GIT_FALSE +HAVE_GIT_TRUE +GIT +HAVE_GEN4ASM_FALSE +HAVE_GEN4ASM_TRUE +GEN4ASM +GEN4ASM_LIBS +GEN4ASM_CFLAGS +LIBDRM_VERSION +DRM_LIBS +DRM_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +LIBVA_PACKAGE_VERSION +PYTHON2 +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +INTEL_DRIVER_LT_LDFLAGS +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='wayland_scanner_rules' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_drm +enable_x11 +enable_wayland +enable_hybrid_codec +enable_static +enable_shared +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_largefile +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +DRM_CFLAGS +DRM_LIBS +GEN4ASM_CFLAGS +GEN4ASM_LIBS +GIT +LIBVA_DEPS_CFLAGS +LIBVA_DEPS_LIBS +LIBVA_DRM_DEPS_CFLAGS +LIBVA_DRM_DEPS_LIBS +LIBVA_X11_DEPS_CFLAGS +LIBVA_X11_DEPS_LIBS +LIBVA_DRIVERS_PATH +EGL_CFLAGS +EGL_LIBS +WAYLAND_CFLAGS +WAYLAND_LIBS +LIBVA_WAYLAND_DEPS_CFLAGS +LIBVA_WAYLAND_DEPS_LIBS +WAYLAND_SCANNER_CFLAGS +WAYLAND_SCANNER_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures intel_driver 1.6.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root + [DATAROOTDIR/doc/libva-intel-driver] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of intel_driver 1.6.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-drm build with VA/DRM API support [default=yes] + --enable-x11 build with VA/X11 API support [default=yes] + --enable-wayland build with VA/Wayland API support [default=yes] + --enable-hybrid-codec build with hybrid codec support [default=no] + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + DRM_CFLAGS C compiler flags for DRM, overriding pkg-config + DRM_LIBS linker flags for DRM, overriding pkg-config + GEN4ASM_CFLAGS + C compiler flags for GEN4ASM, overriding pkg-config + GEN4ASM_LIBS + linker flags for GEN4ASM, overriding pkg-config + GIT Path to git program, if any + LIBVA_DEPS_CFLAGS + C compiler flags for LIBVA_DEPS, overriding pkg-config + LIBVA_DEPS_LIBS + linker flags for LIBVA_DEPS, overriding pkg-config + LIBVA_DRM_DEPS_CFLAGS + C compiler flags for LIBVA_DRM_DEPS, overriding pkg-config + LIBVA_DRM_DEPS_LIBS + linker flags for LIBVA_DRM_DEPS, overriding pkg-config + LIBVA_X11_DEPS_CFLAGS + C compiler flags for LIBVA_X11_DEPS, overriding pkg-config + LIBVA_X11_DEPS_LIBS + linker flags for LIBVA_X11_DEPS, overriding pkg-config + LIBVA_DRIVERS_PATH + drivers install path + EGL_CFLAGS C compiler flags for EGL, overriding pkg-config + EGL_LIBS linker flags for EGL, overriding pkg-config + WAYLAND_CFLAGS + C compiler flags for WAYLAND, overriding pkg-config + WAYLAND_LIBS + linker flags for WAYLAND, overriding pkg-config + LIBVA_WAYLAND_DEPS_CFLAGS + C compiler flags for LIBVA_WAYLAND_DEPS, overriding pkg-config + LIBVA_WAYLAND_DEPS_LIBS + linker flags for LIBVA_WAYLAND_DEPS, overriding pkg-config + WAYLAND_SCANNER_CFLAGS + C compiler flags for WAYLAND_SCANNER, overriding pkg-config + WAYLAND_SCANNER_LIBS + linker flags for WAYLAND_SCANNER, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +intel_driver configure 1.6.2 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------- ## +## Report this to haihao.xiang@intel.com ## +## ------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by intel_driver $as_me 1.6.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.14' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libva-intel-driver' + VERSION='1.6.2' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar plaintar pax cpio none' + +# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 +$as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } + if test $am_uid -le $am_max_uid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 +$as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } + if test $am_gid -le $am_max_gid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +$as_echo_n "checking how to create a ustar tar archive... " >&6; } + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_ustar-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 + ($am__untar &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 + (cat conftest.dir/file) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + if ${am_cv_prog_tar_ustar+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_prog_tar_ustar=$_am_tool +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +$as_echo "$am_cv_prog_tar_ustar" >&6; } + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +ac_config_headers="$ac_config_headers src/config.h" + + +INTEL_DRIVER_MAJOR_VERSION=1 +INTEL_DRIVER_MINOR_VERSION=6 +INTEL_DRIVER_MICRO_VERSION=2 + +$as_echo "#define INTEL_DRIVER_MAJOR_VERSION 1" >>confdefs.h + + +$as_echo "#define INTEL_DRIVER_MINOR_VERSION 6" >>confdefs.h + + +$as_echo "#define INTEL_DRIVER_MICRO_VERSION 2" >>confdefs.h + + +$as_echo "#define INTEL_DRIVER_PRE_VERSION 0" >>confdefs.h + + +INTEL_DRIVER_LT_LDFLAGS="-avoid-version" + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +# Check whether --enable-drm was given. +if test "${enable_drm+set}" = set; then : + enableval=$enable_drm; +else + enable_drm="yes" +fi + + +# Check whether --enable-x11 was given. +if test "${enable_x11+set}" = set; then : + enableval=$enable_x11; +else + enable_x11="yes" +fi + + +# Check whether --enable-wayland was given. +if test "${enable_wayland+set}" = set; then : + enableval=$enable_wayland; +else + enable_wayland="yes" +fi + + +# Check whether --enable-hybrid-codec was given. +if test "${enable_hybrid_codec+set}" = set; then : + enableval=$enable_hybrid_codec; +else + enable_hybrid_codec="no" +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5 +$as_echo_n "checking for sin in -lm... " >&6; } +if ${ac_cv_lib_m_sin+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sin (); +int +main () +{ +return sin (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sin=yes +else + ac_cv_lib_m_sin=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5 +$as_echo "$ac_cv_lib_m_sin" >&6; } +if test "x$ac_cv_lib_m_sin" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +fi + +for ac_func in log2f +do : + ac_fn_c_check_func "$LINENO" "log2f" "ac_cv_func_log2f" +if test "x$ac_cv_func_log2f" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LOG2F 1 +_ACEOF + +fi +done + +for ac_prog in python2 python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON2+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON2"; then + ac_cv_prog_PYTHON2="$PYTHON2" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON2="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON2=$ac_cv_prog_PYTHON2 +if test -n "$PYTHON2"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON2" >&5 +$as_echo "$PYTHON2" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON2" && break +done + + +LIBVA_PACKAGE_VERSION=1.6.0 + + +LIBDRM_VERSION=2.4.45 + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DRM" >&5 +$as_echo_n "checking for DRM... " >&6; } + +if test -n "$DRM_CFLAGS"; then + pkg_cv_DRM_CFLAGS="$DRM_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdrm >= \$LIBDRM_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdrm >= $LIBDRM_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DRM_CFLAGS=`$PKG_CONFIG --cflags "libdrm >= $LIBDRM_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DRM_LIBS"; then + pkg_cv_DRM_LIBS="$DRM_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdrm >= \$LIBDRM_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdrm >= $LIBDRM_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DRM_LIBS=`$PKG_CONFIG --libs "libdrm >= $LIBDRM_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DRM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdrm >= $LIBDRM_VERSION" 2>&1` + else + DRM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdrm >= $LIBDRM_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DRM_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libdrm >= $LIBDRM_VERSION) were not met: + +$DRM_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables DRM_CFLAGS +and DRM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables DRM_CFLAGS +and DRM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + DRM_CFLAGS=$pkg_cv_DRM_CFLAGS + DRM_LIBS=$pkg_cv_DRM_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GEN4ASM" >&5 +$as_echo_n "checking for GEN4ASM... " >&6; } + +if test -n "$GEN4ASM_CFLAGS"; then + pkg_cv_GEN4ASM_CFLAGS="$GEN4ASM_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"intel-gen4asm >= 1.9\""; } >&5 + ($PKG_CONFIG --exists --print-errors "intel-gen4asm >= 1.9") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GEN4ASM_CFLAGS=`$PKG_CONFIG --cflags "intel-gen4asm >= 1.9" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GEN4ASM_LIBS"; then + pkg_cv_GEN4ASM_LIBS="$GEN4ASM_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"intel-gen4asm >= 1.9\""; } >&5 + ($PKG_CONFIG --exists --print-errors "intel-gen4asm >= 1.9") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GEN4ASM_LIBS=`$PKG_CONFIG --libs "intel-gen4asm >= 1.9" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GEN4ASM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "intel-gen4asm >= 1.9" 2>&1` + else + GEN4ASM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "intel-gen4asm >= 1.9" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GEN4ASM_PKG_ERRORS" >&5 + + gen4asm=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + gen4asm=no +else + GEN4ASM_CFLAGS=$pkg_cv_GEN4ASM_CFLAGS + GEN4ASM_LIBS=$pkg_cv_GEN4ASM_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + gen4asm=yes +fi +# Extract the first word of "intel-gen4asm", so it can be a program name with args. +set dummy intel-gen4asm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GEN4ASM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GEN4ASM in + [\\/]* | ?:[\\/]*) + ac_cv_path_GEN4ASM="$GEN4ASM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GEN4ASM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GEN4ASM=$ac_cv_path_GEN4ASM +if test -n "$GEN4ASM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GEN4ASM" >&5 +$as_echo "$GEN4ASM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$GEN4ASM" = "x" ; then : + if false; then + HAVE_GEN4ASM_TRUE= + HAVE_GEN4ASM_FALSE='#' +else + HAVE_GEN4ASM_TRUE='#' + HAVE_GEN4ASM_FALSE= +fi + +else + if test x$gen4asm = xyes; then + HAVE_GEN4ASM_TRUE= + HAVE_GEN4ASM_FALSE='#' +else + HAVE_GEN4ASM_TRUE='#' + HAVE_GEN4ASM_FALSE= +fi + +fi + + +# Extract the first word of "git", so it can be a program name with args. +set dummy git; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GIT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GIT="$GIT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GIT=$ac_cv_path_GIT +if test -n "$GIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GIT" >&5 +$as_echo "$GIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -n "$GIT"; then + HAVE_GIT_TRUE= + HAVE_GIT_FALSE='#' +else + HAVE_GIT_TRUE='#' + HAVE_GIT_FALSE= +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVA_DEPS" >&5 +$as_echo_n "checking for LIBVA_DEPS... " >&6; } + +if test -n "$LIBVA_DEPS_CFLAGS"; then + pkg_cv_LIBVA_DEPS_CFLAGS="$LIBVA_DEPS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva >= 0.38\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva >= 0.38") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_DEPS_CFLAGS=`$PKG_CONFIG --cflags "libva >= 0.38" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBVA_DEPS_LIBS"; then + pkg_cv_LIBVA_DEPS_LIBS="$LIBVA_DEPS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva >= 0.38\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva >= 0.38") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_DEPS_LIBS=`$PKG_CONFIG --libs "libva >= 0.38" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBVA_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libva >= 0.38" 2>&1` + else + LIBVA_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libva >= 0.38" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBVA_DEPS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libva >= 0.38) were not met: + +$LIBVA_DEPS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBVA_DEPS_CFLAGS +and LIBVA_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBVA_DEPS_CFLAGS +and LIBVA_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + LIBVA_DEPS_CFLAGS=$pkg_cv_LIBVA_DEPS_CFLAGS + LIBVA_DEPS_LIBS=$pkg_cv_LIBVA_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +USE_DRM="$enable_drm" +if test "$USE_DRM" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVA_DRM_DEPS" >&5 +$as_echo_n "checking for LIBVA_DRM_DEPS... " >&6; } + +if test -n "$LIBVA_DRM_DEPS_CFLAGS"; then + pkg_cv_LIBVA_DRM_DEPS_CFLAGS="$LIBVA_DRM_DEPS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-drm\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-drm") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_DRM_DEPS_CFLAGS=`$PKG_CONFIG --cflags "libva-drm" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBVA_DRM_DEPS_LIBS"; then + pkg_cv_LIBVA_DRM_DEPS_LIBS="$LIBVA_DRM_DEPS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-drm\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-drm") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_DRM_DEPS_LIBS=`$PKG_CONFIG --libs "libva-drm" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBVA_DRM_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libva-drm" 2>&1` + else + LIBVA_DRM_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libva-drm" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBVA_DRM_DEPS_PKG_ERRORS" >&5 + + USE_DRM="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_DRM="no" +else + LIBVA_DRM_DEPS_CFLAGS=$pkg_cv_LIBVA_DRM_DEPS_CFLAGS + LIBVA_DRM_DEPS_LIBS=$pkg_cv_LIBVA_DRM_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VA_DRM 1" >>confdefs.h + +fi + + # Check for + if test "$USE_DRM" = "yes"; then + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $DRM_CFLAGS" + for ac_header in drm_fourcc.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "drm_fourcc.h" "ac_cv_header_drm_fourcc_h" "$ac_includes_default" +if test "x$ac_cv_header_drm_fourcc_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DRM_FOURCC_H 1 +_ACEOF + : +else + USE_DRM="no" +fi + +done + + CPPFLAGS="$saved_CPPFLAGS" + fi +fi + if test "$USE_DRM" = "yes"; then + USE_DRM_TRUE= + USE_DRM_FALSE='#' +else + USE_DRM_TRUE='#' + USE_DRM_FALSE= +fi + + +if test "$enable_hybrid_codec" = "yes"; then + +$as_echo "#define HAVE_HYBRID_CODEC 1" >>confdefs.h + +fi + +VA_VERSION=`$PKG_CONFIG --modversion libva` +VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1` +VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2` +VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3` +VA_VERSION_STR="$VA_VERSION" + +va_full_version_int=`expr ${VA_MAJOR_VERSION:-0} "*" 1000000 + \ + ${VA_MINOR_VERSION:-0} "*" 10000 + \ + ${VA_MICRO_VERSION:-0} "*" 100 + \ + 0` +VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_MAJOR_VERSION}_${VA_MINOR_VERSION}" + +cat >>confdefs.h <<_ACEOF +#define VA_DRIVER_INIT_FUNC $VA_DRIVER_INIT_FUNC +_ACEOF + + +USE_X11="$enable_x11" +if test "$USE_X11" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVA_X11_DEPS" >&5 +$as_echo_n "checking for LIBVA_X11_DEPS... " >&6; } + +if test -n "$LIBVA_X11_DEPS_CFLAGS"; then + pkg_cv_LIBVA_X11_DEPS_CFLAGS="$LIBVA_X11_DEPS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_X11_DEPS_CFLAGS=`$PKG_CONFIG --cflags "libva-x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBVA_X11_DEPS_LIBS"; then + pkg_cv_LIBVA_X11_DEPS_LIBS="$LIBVA_X11_DEPS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_X11_DEPS_LIBS=`$PKG_CONFIG --libs "libva-x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBVA_X11_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libva-x11" 2>&1` + else + LIBVA_X11_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libva-x11" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBVA_X11_DEPS_PKG_ERRORS" >&5 + + USE_X11="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_X11="no" +else + LIBVA_X11_DEPS_CFLAGS=$pkg_cv_LIBVA_X11_DEPS_CFLAGS + LIBVA_X11_DEPS_LIBS=$pkg_cv_LIBVA_X11_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VA_X11 1" >>confdefs.h + +fi +fi + if test "$USE_X11" = "yes"; then + USE_X11_TRUE= + USE_X11_FALSE='#' +else + USE_X11_TRUE='#' + USE_X11_FALSE= +fi + + + +if test -z "$LIBVA_DRIVERS_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for VA drivers path" >&5 +$as_echo_n "checking for VA drivers path... " >&6; } + LIBVA_DRIVERS_PATH=`$PKG_CONFIG libva --variable driverdir` +fi +if test -z "$LIBVA_DRIVERS_PATH"; then + LIBVA_DRIVERS_PATH="${libdir}/xorg/modules/drivers" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBVA_DRIVERS_PATH" >&5 +$as_echo "$LIBVA_DRIVERS_PATH" >&6; } + + +# Check for EGL +if test "$enable_wayland" = "yes"; then + enable_egl="yes" +fi + +USE_EGL="no" +if test "$enable_egl" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGL" >&5 +$as_echo_n "checking for EGL... " >&6; } + +if test -n "$EGL_CFLAGS"; then + pkg_cv_EGL_CFLAGS="$EGL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGL_CFLAGS=`$PKG_CONFIG --cflags "egl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$EGL_LIBS"; then + pkg_cv_EGL_LIBS="$EGL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGL_LIBS=`$PKG_CONFIG --libs "egl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + EGL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "egl" 2>&1` + else + EGL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "egl" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$EGL_PKG_ERRORS" >&5 + + USE_EGL="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_EGL="no" +else + EGL_CFLAGS=$pkg_cv_EGL_CFLAGS + EGL_LIBS=$pkg_cv_EGL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_EGL="yes" +fi + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $EGL_CFLAGS" + LIBS="$LIBS $EGL_LIBS" + for ac_header in EGL/egl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default" +if test "x$ac_cv_header_EGL_egl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_EGL_EGL_H 1 +_ACEOF + : +else + USE_EGL="no" +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetDisplay in -lEGL" >&5 +$as_echo_n "checking for eglGetDisplay in -lEGL... " >&6; } +if ${ac_cv_lib_EGL_eglGetDisplay+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lEGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char eglGetDisplay (); +int +main () +{ +return eglGetDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_EGL_eglGetDisplay=yes +else + ac_cv_lib_EGL_eglGetDisplay=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetDisplay" >&5 +$as_echo "$ac_cv_lib_EGL_eglGetDisplay" >&6; } +if test "x$ac_cv_lib_EGL_eglGetDisplay" = xyes; then : + : +else + USE_EGL="no" +fi + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" +fi + if test "$USE_EGL" = "yes"; then + USE_EGL_TRUE= + USE_EGL_FALSE='#' +else + USE_EGL_TRUE='#' + USE_EGL_FALSE= +fi + + +# Check for Wayland +USE_WAYLAND="no" +if test "$enable_wayland" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WAYLAND" >&5 +$as_echo_n "checking for WAYLAND... " >&6; } + +if test -n "$WAYLAND_CFLAGS"; then + pkg_cv_WAYLAND_CFLAGS="$WAYLAND_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$WAYLAND_LIBS"; then + pkg_cv_WAYLAND_LIBS="$WAYLAND_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "wayland-client" 2>&1` + else + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "wayland-client" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$WAYLAND_PKG_ERRORS" >&5 + + : +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + : +else + WAYLAND_CFLAGS=$pkg_cv_WAYLAND_CFLAGS + WAYLAND_LIBS=$pkg_cv_WAYLAND_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_WAYLAND="yes" +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVA_WAYLAND_DEPS" >&5 +$as_echo_n "checking for LIBVA_WAYLAND_DEPS... " >&6; } + +if test -n "$LIBVA_WAYLAND_DEPS_CFLAGS"; then + pkg_cv_LIBVA_WAYLAND_DEPS_CFLAGS="$LIBVA_WAYLAND_DEPS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-wayland\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-wayland") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_WAYLAND_DEPS_CFLAGS=`$PKG_CONFIG --cflags "libva-wayland" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBVA_WAYLAND_DEPS_LIBS"; then + pkg_cv_LIBVA_WAYLAND_DEPS_LIBS="$LIBVA_WAYLAND_DEPS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libva-wayland\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libva-wayland") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBVA_WAYLAND_DEPS_LIBS=`$PKG_CONFIG --libs "libva-wayland" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBVA_WAYLAND_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libva-wayland" 2>&1` + else + LIBVA_WAYLAND_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libva-wayland" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBVA_WAYLAND_DEPS_PKG_ERRORS" >&5 + + USE_WAYLAND="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_WAYLAND="no" +else + LIBVA_WAYLAND_DEPS_CFLAGS=$pkg_cv_LIBVA_WAYLAND_DEPS_CFLAGS + LIBVA_WAYLAND_DEPS_LIBS=$pkg_cv_LIBVA_WAYLAND_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VA_WAYLAND 1" >>confdefs.h + +fi +fi + if test "$USE_WAYLAND" = "yes"; then + USE_WAYLAND_TRUE= + USE_WAYLAND_FALSE='#' +else + USE_WAYLAND_TRUE='#' + USE_WAYLAND_FALSE= +fi + + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WAYLAND_SCANNER" >&5 +$as_echo_n "checking for WAYLAND_SCANNER... " >&6; } + +if test -n "$WAYLAND_SCANNER_CFLAGS"; then + pkg_cv_WAYLAND_SCANNER_CFLAGS="$WAYLAND_SCANNER_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-scanner\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-scanner") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_SCANNER_CFLAGS=`$PKG_CONFIG --cflags "wayland-scanner" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$WAYLAND_SCANNER_LIBS"; then + pkg_cv_WAYLAND_SCANNER_LIBS="$WAYLAND_SCANNER_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-scanner\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-scanner") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_SCANNER_LIBS=`$PKG_CONFIG --libs "wayland-scanner" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + WAYLAND_SCANNER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "wayland-scanner" 2>&1` + else + WAYLAND_SCANNER_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "wayland-scanner" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$WAYLAND_SCANNER_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (wayland-scanner) were not met: + +$WAYLAND_SCANNER_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables WAYLAND_SCANNER_CFLAGS +and WAYLAND_SCANNER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables WAYLAND_SCANNER_CFLAGS +and WAYLAND_SCANNER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + WAYLAND_SCANNER_CFLAGS=$pkg_cv_WAYLAND_SCANNER_CFLAGS + WAYLAND_SCANNER_LIBS=$pkg_cv_WAYLAND_SCANNER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + wayland_scanner=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner` + + + wayland_scanner_rules=`$PKG_CONFIG --variable=pkgdatadir wayland-scanner`/wayland-scanner.mk + + + wayland_protocoldir='$(top_builddir)/src/wayland' + + + +ac_config_files="$ac_config_files Makefile debian.upstream/Makefile src/Makefile src/shaders/Makefile src/shaders/h264/Makefile src/shaders/h264/ildb/Makefile src/shaders/h264/mc/Makefile src/shaders/mpeg2/Makefile src/shaders/mpeg2/vld/Makefile src/shaders/post_processing/Makefile src/shaders/post_processing/gen5_6/Makefile src/shaders/post_processing/gen7/Makefile src/shaders/post_processing/gen75/Makefile src/shaders/post_processing/gen8/Makefile src/shaders/post_processing/gen9/Makefile src/shaders/render/Makefile src/shaders/utils/Makefile src/shaders/vme/Makefile src/wayland/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${HAVE_GEN4ASM_TRUE}" && test -z "${HAVE_GEN4ASM_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GEN4ASM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GEN4ASM_TRUE}" && test -z "${HAVE_GEN4ASM_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GEN4ASM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GIT_TRUE}" && test -z "${HAVE_GIT_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GIT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_DRM_TRUE}" && test -z "${USE_DRM_FALSE}"; then + as_fn_error $? "conditional \"USE_DRM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_X11_TRUE}" && test -z "${USE_X11_FALSE}"; then + as_fn_error $? "conditional \"USE_X11\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_EGL_TRUE}" && test -z "${USE_EGL_FALSE}"; then + as_fn_error $? "conditional \"USE_EGL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_WAYLAND_TRUE}" && test -z "${USE_WAYLAND_FALSE}"; then + as_fn_error $? "conditional \"USE_WAYLAND\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by intel_driver $as_me 1.6.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +intel_driver config.status 1.6.2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "debian.upstream/Makefile") CONFIG_FILES="$CONFIG_FILES debian.upstream/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/shaders/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/Makefile" ;; + "src/shaders/h264/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/h264/Makefile" ;; + "src/shaders/h264/ildb/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/h264/ildb/Makefile" ;; + "src/shaders/h264/mc/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/h264/mc/Makefile" ;; + "src/shaders/mpeg2/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/mpeg2/Makefile" ;; + "src/shaders/mpeg2/vld/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/mpeg2/vld/Makefile" ;; + "src/shaders/post_processing/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/Makefile" ;; + "src/shaders/post_processing/gen5_6/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/gen5_6/Makefile" ;; + "src/shaders/post_processing/gen7/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/gen7/Makefile" ;; + "src/shaders/post_processing/gen75/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/gen75/Makefile" ;; + "src/shaders/post_processing/gen8/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/gen8/Makefile" ;; + "src/shaders/post_processing/gen9/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/post_processing/gen9/Makefile" ;; + "src/shaders/render/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/render/Makefile" ;; + "src/shaders/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/utils/Makefile" ;; + "src/shaders/vme/Makefile") CONFIG_FILES="$CONFIG_FILES src/shaders/vme/Makefile" ;; + "src/wayland/Makefile") CONFIG_FILES="$CONFIG_FILES src/wayland/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + +if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then + ac_cs_awk_getline=: + ac_cs_awk_pipe_init= + ac_cs_awk_read_file=' + while ((getline aline < (F[key])) > 0) + print(aline) + close(F[key])' + ac_cs_awk_pipe_fini= +else + ac_cs_awk_getline=false + ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" + ac_cs_awk_read_file=' + print "|#_!!_#|" + print "cat " F[key] " &&" + '$ac_cs_awk_pipe_init + # The final `:' finishes the AND list. + ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' +fi +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + +# Create commands to substitute file output variables. +{ + echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && + echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && + echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && + echo "_ACAWK" && + echo "_ACEOF" +} >conf$$files.sh && +. ./conf$$files.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +rm -f conf$$files.sh + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + \$ac_cs_awk_pipe_init +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + if (nfields == 3 && !substed) { + key = field[2] + if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { + \$ac_cs_awk_read_file + next + } + } + print line +} +\$ac_cs_awk_pipe_fini +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | +if $ac_cs_awk_getline; then + $AWK -f "$ac_tmp/subs.awk" +else + $AWK -f "$ac_tmp/subs.awk" | $SHELL +fi \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +BACKENDS="" +if test "$USE_DRM" = "yes"; then : + BACKENDS="$BACKENDS drm" +fi +if test "$USE_X11" = "yes"; then : + BACKENDS="$BACKENDS x11" +fi +if test "$USE_WAYLAND" = "yes"; then : + BACKENDS="$BACKENDS wayland" +fi + +echo +echo $PACKAGE configuration summary: +echo +echo VA-API version ................... : $VA_VERSION_STR +echo VA-API drivers path .............. : $LIBVA_DRIVERS_PATH +echo Windowing systems ................ : $BACKENDS +echo diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure.ac b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure.ac new file mode 100644 index 000000000..6ba8a5b3d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/configure.ac @@ -0,0 +1,221 @@ +# intel-driver package version number +m4_define([intel_driver_major_version], [1]) +m4_define([intel_driver_minor_version], [6]) +m4_define([intel_driver_micro_version], [2]) +m4_define([intel_driver_pre_version], [0]) +m4_define([intel_driver_version], + [intel_driver_major_version.intel_driver_minor_version.intel_driver_micro_version]) +m4_if(intel_driver_pre_version, [0], [], [ +m4_append([intel_driver_version], intel_driver_pre_version, [.pre]) +]) + +# libva minimum version requirement +m4_define([va_api_version], [0.38]) +m4_define([libva_package_version], [1.6.0]) + +# libdrm minimum version requirement +m4_define([libdrm_version], [2.4.45]) + +AC_PREREQ([2.57]) +AC_INIT([intel_driver], [intel_driver_version], [haihao.xiang@intel.com], + [libva-intel-driver]) +AC_CONFIG_SRCDIR([Makefile.am]) +AM_INIT_AUTOMAKE([1.9 tar-ustar]) + +AC_CONFIG_HEADERS([src/config.h]) + +INTEL_DRIVER_MAJOR_VERSION=intel_driver_major_version +INTEL_DRIVER_MINOR_VERSION=intel_driver_minor_version +INTEL_DRIVER_MICRO_VERSION=intel_driver_micro_version +AC_DEFINE([INTEL_DRIVER_MAJOR_VERSION], [intel_driver_major_version], [Major version of the driver]) +AC_DEFINE([INTEL_DRIVER_MINOR_VERSION], [intel_driver_minor_version], [Minor version of the driver]) +AC_DEFINE([INTEL_DRIVER_MICRO_VERSION], [intel_driver_micro_version], [Micro version of the driver]) +AC_DEFINE([INTEL_DRIVER_PRE_VERSION], [intel_driver_pre_version], [Preversion of the driver]) + +INTEL_DRIVER_LT_LDFLAGS="-avoid-version" +AC_SUBST(INTEL_DRIVER_LT_LDFLAGS) + +dnl Use pretty build output with automake >= 1.11 +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [ + AM_DEFAULT_VERBOSITY=1 + AC_SUBST(AM_DEFAULT_VERBOSITY) +]) + +AC_ARG_ENABLE(drm, + [AC_HELP_STRING([--enable-drm], + [build with VA/DRM API support @<:@default=yes@:>@])], + [], [enable_drm="yes"]) + +AC_ARG_ENABLE(x11, + [AC_HELP_STRING([--enable-x11], + [build with VA/X11 API support @<:@default=yes@:>@])], + [], [enable_x11="yes"]) + +AC_ARG_ENABLE([wayland], + [AC_HELP_STRING([--enable-wayland], + [build with VA/Wayland API support @<:@default=yes@:>@])], + [], [enable_wayland="yes"]) + +AC_ARG_ENABLE([hybrid-codec], + [AC_HELP_STRING([--enable-hybrid-codec], + [build with hybrid codec support @<:@default=no@:>@])], + [], [enable_hybrid_codec="no"]) + +AC_DISABLE_STATIC +AC_PROG_LIBTOOL +AC_PROG_CC +AM_PROG_CC_C_O + +AC_C_BIGENDIAN +AC_HEADER_STDC +AC_SYS_LARGEFILE +AC_CHECK_LIB([m], [sin]) +AC_CHECK_FUNCS([log2f]) +AC_CHECK_PROGS([PYTHON2], [python2 python]) + +LIBVA_PACKAGE_VERSION=libva_package_version +AC_SUBST(LIBVA_PACKAGE_VERSION) + +dnl Check for recent enough DRM +LIBDRM_VERSION=libdrm_version +PKG_CHECK_MODULES([DRM], [libdrm >= $LIBDRM_VERSION]) +AC_SUBST(LIBDRM_VERSION) + +dnl Check for gen4asm +PKG_CHECK_MODULES(GEN4ASM, [intel-gen4asm >= 1.9], [gen4asm=yes], [gen4asm=no]) +AC_PATH_PROG([GEN4ASM], [intel-gen4asm]) +AS_IF([test "x$GEN4ASM" = "x" ], [AM_CONDITIONAL(HAVE_GEN4ASM, false)], + [AM_CONDITIONAL(HAVE_GEN4ASM, [test x$gen4asm = xyes])]) + +dnl Check for git +AC_ARG_VAR([GIT], [Path to git program, if any]) +AC_PATH_PROG([GIT], [git]) +AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"]) + +dnl Check for VA-API +PKG_CHECK_MODULES(LIBVA_DEPS, [libva >= va_api_version]) + +dnl Check for VA/DRM API +USE_DRM="$enable_drm" +if test "$USE_DRM" = "yes"; then + PKG_CHECK_MODULES(LIBVA_DRM_DEPS, [libva-drm], + [AC_DEFINE([HAVE_VA_DRM], [1], [Defined to 1 if VA/DRM API is enabled])], + [USE_DRM="no"]) + + # Check for + if test "$USE_DRM" = "yes"; then + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $DRM_CFLAGS" + AC_CHECK_HEADERS([drm_fourcc.h], [:], [USE_DRM="no"]) + CPPFLAGS="$saved_CPPFLAGS" + fi +fi +AM_CONDITIONAL(USE_DRM, test "$USE_DRM" = "yes") + +if test "$enable_hybrid_codec" = "yes"; then + AC_DEFINE([HAVE_HYBRID_CODEC], [1], [Defined to 1 if hybrid codec is needed]) +fi + +VA_VERSION=`$PKG_CONFIG --modversion libva` +VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1` +VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2` +VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3` +VA_VERSION_STR="$VA_VERSION" + +va_full_version_int=`expr ${VA_MAJOR_VERSION:-0} "*" 1000000 + \ + ${VA_MINOR_VERSION:-0} "*" 10000 + \ + ${VA_MICRO_VERSION:-0} "*" 100 + \ + 0` +VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_MAJOR_VERSION}_${VA_MINOR_VERSION}" +AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC], [$VA_DRIVER_INIT_FUNC], + [Define driver entry-point]) + +dnl Check for VA/DRM API +USE_X11="$enable_x11" +if test "$USE_X11" = "yes"; then + PKG_CHECK_MODULES(LIBVA_X11_DEPS, [libva-x11], + [AC_DEFINE([HAVE_VA_X11], [1], [Defined to 1 if VA/X11 API is enabled])], + [USE_X11="no"]) +fi +AM_CONDITIONAL(USE_X11, test "$USE_X11" = "yes") + +dnl Check for VA-API drivers path +AC_ARG_VAR(LIBVA_DRIVERS_PATH, [drivers install path]) +if test -z "$LIBVA_DRIVERS_PATH"; then + AC_MSG_CHECKING([for VA drivers path]) + LIBVA_DRIVERS_PATH=`$PKG_CONFIG libva --variable driverdir` +fi +if test -z "$LIBVA_DRIVERS_PATH"; then + LIBVA_DRIVERS_PATH="${libdir}/xorg/modules/drivers" +fi +AC_MSG_RESULT([$LIBVA_DRIVERS_PATH]) +AC_SUBST(LIBVA_DRIVERS_PATH) + +# Check for EGL +if test "$enable_wayland" = "yes"; then + enable_egl="yes" +fi + +USE_EGL="no" +if test "$enable_egl" = "yes"; then + PKG_CHECK_MODULES([EGL], [egl], [USE_EGL="yes"], [USE_EGL="no"]) + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $EGL_CFLAGS" + LIBS="$LIBS $EGL_LIBS" + AC_CHECK_HEADERS([EGL/egl.h], [:], [USE_EGL="no"]) + AC_CHECK_LIB([EGL], [eglGetDisplay], [:], [USE_EGL="no"]) + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" +fi +AM_CONDITIONAL(USE_EGL, test "$USE_EGL" = "yes") + +# Check for Wayland +USE_WAYLAND="no" +if test "$enable_wayland" = "yes"; then + PKG_CHECK_MODULES([WAYLAND], [wayland-client], [USE_WAYLAND="yes"], [:]) + PKG_CHECK_MODULES([LIBVA_WAYLAND_DEPS], [libva-wayland], + [AC_DEFINE([HAVE_VA_WAYLAND], [1], [Defined to 1 if VA/Wayland API is enabled])], + [USE_WAYLAND="no"]) +fi +AM_CONDITIONAL(USE_WAYLAND, test "$USE_WAYLAND" = "yes") + +m4_ifdef([WAYLAND_SCANNER_RULES], + [WAYLAND_SCANNER_RULES(['$(top_builddir)/src/wayland'])], + [wayland_scanner_rules=""; AC_SUBST(wayland_scanner_rules)]) + +AC_OUTPUT([ + Makefile + debian.upstream/Makefile + src/Makefile + src/shaders/Makefile + src/shaders/h264/Makefile + src/shaders/h264/ildb/Makefile + src/shaders/h264/mc/Makefile + src/shaders/mpeg2/Makefile + src/shaders/mpeg2/vld/Makefile + src/shaders/post_processing/Makefile + src/shaders/post_processing/gen5_6/Makefile + src/shaders/post_processing/gen7/Makefile + src/shaders/post_processing/gen75/Makefile + src/shaders/post_processing/gen8/Makefile + src/shaders/post_processing/gen9/Makefile + src/shaders/render/Makefile + src/shaders/utils/Makefile + src/shaders/vme/Makefile + src/wayland/Makefile +]) + +dnl Print summary +BACKENDS="" +AS_IF([test "$USE_DRM" = "yes"], [BACKENDS="$BACKENDS drm"]) +AS_IF([test "$USE_X11" = "yes"], [BACKENDS="$BACKENDS x11"]) +AS_IF([test "$USE_WAYLAND" = "yes"], [BACKENDS="$BACKENDS wayland"]) + +echo +echo $PACKAGE configuration summary: +echo +echo VA-API version ................... : $VA_VERSION_STR +echo VA-API drivers path .............. : $LIBVA_DRIVERS_PATH +echo Windowing systems ................ : $BACKENDS +echo diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.am new file mode 100644 index 000000000..04a848f0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.am @@ -0,0 +1,30 @@ +DEBIANFILES = \ + changelog.in \ + compat \ + control.in \ + copyright \ + libva-intel-driver.install \ + rules \ + $(NULL) + +DEBIANGENFILES = \ + changelog \ + control \ + $(NULL) + +EXTRA_DIST = $(DEBIANFILES) + +dist_noinst_DATA = $(DEBIANGENFILES) + +DISTCLEANFILES = $(DEBIANGENFILES) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in + +$(DEBIANGENFILES): %: %.in Makefile + -$(AM_V_GEN)sed \ + -e 's|\@DATE\@|'"`LC_ALL=C date +'%a, %d %b %Y %X %z'`"'|' \ + -e 's|\@LIBDRM_VERSION\@|$(LIBDRM_VERSION)|' \ + -e 's|\@LIBVA_PACKAGE_VERSION\@|$(LIBVA_PACKAGE_VERSION)|' \ + -e 's|\@PACKAGE_VERSION\@|$(PACKAGE_VERSION)|' \ + $< > $@ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.in new file mode 100644 index 000000000..4c402280b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/Makefile.in @@ -0,0 +1,481 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = debian.upstream +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_noinst_DATA) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +DEBIANFILES = \ + changelog.in \ + compat \ + control.in \ + copyright \ + libva-intel-driver.install \ + rules \ + $(NULL) + +DEBIANGENFILES = \ + changelog \ + control \ + $(NULL) + +EXTRA_DIST = $(DEBIANFILES) +dist_noinst_DATA = $(DEBIANGENFILES) +DISTCLEANFILES = $(DEBIANGENFILES) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian.upstream/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu debian.upstream/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +$(DEBIANGENFILES): %: %.in Makefile + -$(AM_V_GEN)sed \ + -e 's|\@DATE\@|'"`LC_ALL=C date +'%a, %d %b %Y %X %z'`"'|' \ + -e 's|\@LIBDRM_VERSION\@|$(LIBDRM_VERSION)|' \ + -e 's|\@LIBVA_PACKAGE_VERSION\@|$(LIBVA_PACKAGE_VERSION)|' \ + -e 's|\@PACKAGE_VERSION\@|$(PACKAGE_VERSION)|' \ + $< > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog new file mode 100644 index 000000000..8d7b72d3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog @@ -0,0 +1,5 @@ +libva-intel-driver (1.6.2-1) unstable; urgency=low + + * Autogenerated package, see NEWS file for ChangeLog. + + -- Gwenole Beauchesne Tue, 15 Dec 2015 14:01:02 +0800 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog.in new file mode 100644 index 000000000..dff4a9612 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/changelog.in @@ -0,0 +1,5 @@ +libva-intel-driver (@PACKAGE_VERSION@-1) unstable; urgency=low + + * Autogenerated package, see NEWS file for ChangeLog. + + -- Gwenole Beauchesne @DATE@ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/compat b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/compat new file mode 100644 index 000000000..7ed6ff82d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/compat @@ -0,0 +1 @@ +5 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control new file mode 100644 index 000000000..f8ab5ffa8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control @@ -0,0 +1,28 @@ +Source: libva-intel-driver +Section: libs +Priority: optional +Maintainer: Gwenole Beauchesne +Build-Depends: debhelper (>= 5), + cdbs, + libdrm-dev (>= 2.4.45), + libva-dev (>= 1.6.0) +Standards-Version: 3.7.2 + +Package: libva-intel-driver +Section: libs +Architecture: any +Depends: libva1 (>= 1.6.0), + ${shlibs:Depends}, ${misc:Depends} +Description: VA driver for Intel G45 & HD Graphics family + Video decode & encode driver for Intel G45 chipsets and Intel HD + Graphics for Intel Core processor family. + +Package: libva-intel-driver-dbg +Section: libdevel +Architecture: any +Depends: libva-intel-driver (= ${Source-Version}) +Description: VA driver for Intel G45 & HD Graphics family (debug symbols) + Video decode & encode driver for Intel G45 chipsets and Intel HD + Graphics for Intel Core processor family. + . + This package contains the debug files. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control.in new file mode 100644 index 000000000..08b102915 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/control.in @@ -0,0 +1,28 @@ +Source: libva-intel-driver +Section: libs +Priority: optional +Maintainer: Gwenole Beauchesne +Build-Depends: debhelper (>= 5), + cdbs, + libdrm-dev (>= @LIBDRM_VERSION@), + libva-dev (>= @LIBVA_PACKAGE_VERSION@) +Standards-Version: 3.7.2 + +Package: libva-intel-driver +Section: libs +Architecture: any +Depends: libva1 (>= @LIBVA_PACKAGE_VERSION@), + ${shlibs:Depends}, ${misc:Depends} +Description: VA driver for Intel G45 & HD Graphics family + Video decode & encode driver for Intel G45 chipsets and Intel HD + Graphics for Intel Core processor family. + +Package: libva-intel-driver-dbg +Section: libdevel +Architecture: any +Depends: libva-intel-driver (= ${Source-Version}) +Description: VA driver for Intel G45 & HD Graphics family (debug symbols) + Video decode & encode driver for Intel G45 chipsets and Intel HD + Graphics for Intel Core processor family. + . + This package contains the debug files. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/copyright b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/copyright new file mode 100644 index 000000000..8f3c4c38c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/copyright @@ -0,0 +1,25 @@ +This package is maintained by: +Gwenole Beauchesne + + +License: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/libva-intel-driver.install b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/libva-intel-driver.install new file mode 100644 index 000000000..daa01dcd9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/libva-intel-driver.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/dri/*.so diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/rules b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/rules new file mode 100644 index 000000000..40b76bec7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/debian.upstream/rules @@ -0,0 +1,14 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/rules/utils.mk + +# Allow SMP build +ifeq ($(DEBIAN_BUILD_NCPUS),) + DEBIAN_BUILD_NCPUS = $(shell /usr/bin/getconf _NPROCESSORS_ONLN) +endif +ifneq ($(DEBIAN_BUILD_NCPUS),) + EXTRA_MAKE_FLAGS += -j$(DEBIAN_BUILD_NCPUS) +endif +MAKE += $(EXTRA_MAKE_FLAGS) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/depcomp b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/depcomp new file mode 100644 index 000000000..4ebd5b3a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/i965-video.ver b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/i965-video.ver new file mode 100644 index 000000000..d65d1e0f5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/i965-video.ver @@ -0,0 +1,6 @@ +I965_VIDEO { + global: DllStartup; + __vaDriverInit_0_38; + + local: *; +}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/install-sh b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/install-sh new file mode 100644 index 000000000..377bb8687 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/ltmain.sh b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/ltmain.sh new file mode 100644 index 000000000..a356acafa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/ltmain.sh @@ -0,0 +1,9661 @@ + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/missing b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/missing new file mode 100644 index 000000000..db98974ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/.VERSION.pkg b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/.VERSION.pkg new file mode 100644 index 000000000..fdd3be6df --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/.VERSION.pkg @@ -0,0 +1 @@ +1.6.2 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Android.mk b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Android.mk new file mode 100644 index 000000000..ab06bb317 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Android.mk @@ -0,0 +1,105 @@ +# Copyright (c) 2012 Intel Corporation. All Rights Reserved. +# +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + dso_utils.c \ + gen6_mfc.c \ + gen6_mfc_common.c \ + gen6_mfd.c \ + gen6_vme.c \ + gen7_vme.c \ + gen7_mfc.c \ + gen7_mfd.c \ + gen75_mfd.c \ + gen75_mfc.c \ + gen8_mfc.c \ + gen8_mfd.c \ + gen8_vme.c \ + gen9_vme.c \ + gen9_mfc.c \ + gen9_mfc_hevc.c \ + gen9_mfd.c \ + gen75_picture_process.c \ + gen75_vme.c \ + gen75_vpp_gpe.c \ + gen75_vpp_vebox.c \ + gen9_post_processing.c \ + i965_avc_bsd.c \ + i965_avc_hw_scoreboard.c\ + i965_avc_ildb.c \ + i965_decoder_utils.c \ + i965_device_info.c \ + i965_drv_video.c \ + i965_encoder.c \ + i965_encoder_utils.c \ + i965_media.c \ + i965_media_h264.c \ + i965_media_mpeg2.c \ + i965_gpe_utils.c \ + i965_post_processing.c \ + gen8_post_processing.c \ + i965_render.c \ + i965_vpp_avs.c \ + gen8_render.c \ + gen9_render.c \ + intel_batchbuffer.c \ + intel_batchbuffer_dump.c\ + intel_driver.c \ + intel_memman.c \ + object_heap.c \ + intel_media_common.c \ + $(NULL) + +GEN := $(LOCAL_PATH)/intel_version.h +$(GEN): SCRIPT := $(LOCAL_PATH)/../build/gen_version.sh +$(GEN): PRIVATE_PATH := $(LOCAL_PATH) +$(GEN): PRIVATE_CUSTOM_TOOL = sh $(SCRIPT) $(PRIVATE_PATH)/.. $(PRIVATE_PATH) > $@ +$(GEN): $(LOCAL_PATH)/%.h : $(LOCAL_PATH)/%.h.in $(SCRIPT) + $(transform-generated-source) +LOCAL_GENERATED_SOURCES += $(GEN) + +LOCAL_CFLAGS := -DLINUX -DANDROID -g -Wall -Wno-unused -fvisibility=hidden + +LOCAL_C_INCLUDES := \ + $(TARGET_OUT_HEADERS)/libva \ + $(TARGET_OUT_HEADERS)/libdrm + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := i965_drv_video + +LOCAL_SHARED_LIBRARIES := libdl libdrm libdrm_intel libcutils \ + libva libva-android libstdc++ + +ifeq ($(strip $(DRIVER_LOG_ENABLE)),true) +LOCAL_CFLAGS += -DDRIVER_LOG_ENABLE +LOCAL_SHARED_LIBRARIES += liblog +endif + +include $(BUILD_SHARED_LIBRARY) + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.am new file mode 100644 index 000000000..ad961028f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.am @@ -0,0 +1,207 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +SUBDIRS = shaders +DIST_SUBDIRS = $(SUBDIRS) +EXTRA_DIST = +BUILT_SOURCES = + +AM_CPPFLAGS = \ + -DPTHREADS \ + $(DRM_CFLAGS) \ + $(LIBVA_DEPS_CFLAGS) \ + -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" \ + $(NULL) + +driver_cflags = \ + -Wall \ + -fvisibility=hidden \ + $(NULL) + +driver_ldflags = \ + -module -avoid-version \ + -no-undefined \ + -Wl,--no-undefined \ + $(NULL) + +driver_libs = \ + -lpthread -lm -ldl \ + $(DRM_LIBS) -ldrm_intel \ + $(NULL) + +source_c = \ + dso_utils.c \ + gen6_mfc.c \ + gen6_mfc_common.c \ + gen6_mfd.c \ + gen6_vme.c \ + gen7_vme.c \ + gen7_mfc.c \ + gen7_mfd.c \ + gen75_mfd.c \ + gen75_mfc.c \ + gen8_mfc.c \ + gen8_mfd.c \ + gen8_vme.c \ + gen9_vme.c \ + gen9_mfc.c \ + gen9_mfc_hevc.c \ + gen9_mfd.c \ + gen75_picture_process.c \ + gen75_vme.c \ + gen75_vpp_gpe.c \ + gen75_vpp_vebox.c \ + gen9_post_processing.c \ + i965_avc_bsd.c \ + i965_avc_hw_scoreboard.c\ + i965_avc_ildb.c \ + i965_decoder_utils.c \ + i965_device_info.c \ + i965_drv_video.c \ + i965_encoder.c \ + i965_encoder_utils.c \ + i965_media.c \ + i965_media_h264.c \ + i965_media_mpeg2.c \ + i965_gpe_utils.c \ + i965_post_processing.c \ + i965_yuv_coefs.c \ + gen8_post_processing.c \ + i965_render.c \ + i965_vpp_avs.c \ + gen8_render.c \ + gen9_render.c \ + intel_batchbuffer.c \ + intel_batchbuffer_dump.c\ + intel_driver.c \ + intel_memman.c \ + object_heap.c \ + intel_media_common.c \ + $(NULL) + +source_h = \ + dso_utils.h \ + gen6_mfc.h \ + gen6_mfd.h \ + gen6_vme.h \ + gen7_mfd.h \ + gen75_picture_process.h \ + gen75_vpp_gpe.h \ + gen75_vpp_vebox.h \ + gen8_post_processing.h \ + gen9_mfd.h \ + gen9_mfc.h \ + i965_avc_bsd.h \ + i965_avc_hw_scoreboard.h\ + i965_avc_ildb.h \ + i965_decoder.h \ + i965_decoder_utils.h \ + i965_defines.h \ + i965_drv_video.h \ + i965_encoder.h \ + i965_encoder_utils.h \ + i965_media.h \ + i965_media_h264.h \ + i965_media_mpeg2.h \ + i965_mutext.h \ + i965_gpe_utils.h \ + i965_pciids.h \ + i965_post_processing.h \ + i965_render.h \ + i965_structs.h \ + i965_vpp_avs.h \ + i965_yuv_coefs.h \ + intel_batchbuffer.h \ + intel_batchbuffer_dump.h\ + intel_compiler.h \ + intel_driver.h \ + intel_media.h \ + intel_memman.h \ + intel_version.h \ + object_heap.h \ + vp8_probs.h \ + vp9_probs.h \ + sysdeps.h \ + va_backend_compat.h \ + i965_fourcc.h \ + $(NULL) + +i965_drv_video_la_LTLIBRARIES = i965_drv_video.la +i965_drv_video_ladir = $(LIBVA_DRIVERS_PATH) +i965_drv_video_la_CFLAGS = $(driver_cflags) +i965_drv_video_la_LDFLAGS = $(driver_ldflags) +i965_drv_video_la_LIBADD = $(driver_libs) +i965_drv_video_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h) + +if USE_X11 +source_c += i965_output_dri.c +source_h += i965_output_dri.h +endif + +if USE_WAYLAND +source_c += i965_output_wayland.c +source_h += i965_output_wayland.h +source_h += $(protocol_source_h) +driver_cflags += $(WAYLAND_CFLAGS) +endif + +# git version +VERSION_FILE = .VERSION +OLD_VERSION_FILE = $(VERSION_FILE).old +NEW_VERSION_FILE = $(VERSION_FILE).new +PKG_VERSION_FILE = $(VERSION_FILE).pkg + +intel_version.h: gen-version + $(AM_V_GEN) \ + OV=`[ -f $(OLD_VERSION_FILE) ] && cat $(OLD_VERSION_FILE) || :`; \ + NV=`cat $(NEW_VERSION_FILE)`; \ + if [ "$$OV" != "$$NV" -o ! -f intel_version.h ]; then \ + cp -f $(NEW_VERSION_FILE) $(OLD_VERSION_FILE); \ + $(SED) -e "s|\@INTEL_DRIVER_GIT_VERSION\@|$${NV}|" \ + $(srcdir)/intel_version.h.in > intel_version.h; \ + fi + +gen-version: + @echo $(VERSION) > $(NEW_VERSION_FILE) +if HAVE_GIT + @[ -d $(top_srcdir)/.git ] && \ + (cd $(top_srcdir) && $(GIT) describe --tags) > $(NEW_VERSION_FILE) || : +endif + @[ -f $(srcdir)/$(PKG_VERSION_FILE) ] && \ + cp -f $(srcdir)/$(PKG_VERSION_FILE) $(NEW_VERSION_FILE) || : + +$(PKG_VERSION_FILE): $(NEW_VERSION_FILE) + @cp -f $< $@ + +BUILT_SOURCES += intel_version.h +EXTRA_DIST += Android.mk intel_version.h.in $(PKG_VERSION_FILE) + +# Wayland protocol +protocol_source_h = wayland-drm-client-protocol.h +i965_output_wayland.c: $(protocol_source_h) +@wayland_scanner_rules@ + +DIST_SUBDIRS += wayland + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in config.h.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.in new file mode 100644 index 000000000..4c7e32891 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/Makefile.in @@ -0,0 +1,1385 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_X11_TRUE@am__append_1 = i965_output_dri.c +@USE_X11_TRUE@am__append_2 = i965_output_dri.h +@USE_WAYLAND_TRUE@am__append_3 = i965_output_wayland.c +@USE_WAYLAND_TRUE@am__append_4 = i965_output_wayland.h \ +@USE_WAYLAND_TRUE@ $(protocol_source_h) +@USE_WAYLAND_TRUE@am__append_5 = $(WAYLAND_CFLAGS) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/config.h.in $(top_srcdir)/depcomp \ + $(am__noinst_HEADERS_DIST) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(i965_drv_video_ladir)" +LTLIBRARIES = $(i965_drv_video_la_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +i965_drv_video_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am__i965_drv_video_la_SOURCES_DIST = dso_utils.c gen6_mfc.c \ + gen6_mfc_common.c gen6_mfd.c gen6_vme.c gen7_vme.c gen7_mfc.c \ + gen7_mfd.c gen75_mfd.c gen75_mfc.c gen8_mfc.c gen8_mfd.c \ + gen8_vme.c gen9_vme.c gen9_mfc.c gen9_mfc_hevc.c gen9_mfd.c \ + gen75_picture_process.c gen75_vme.c gen75_vpp_gpe.c \ + gen75_vpp_vebox.c gen9_post_processing.c i965_avc_bsd.c \ + i965_avc_hw_scoreboard.c i965_avc_ildb.c i965_decoder_utils.c \ + i965_device_info.c i965_drv_video.c i965_encoder.c \ + i965_encoder_utils.c i965_media.c i965_media_h264.c \ + i965_media_mpeg2.c i965_gpe_utils.c i965_post_processing.c \ + i965_yuv_coefs.c gen8_post_processing.c i965_render.c \ + i965_vpp_avs.c gen8_render.c gen9_render.c intel_batchbuffer.c \ + intel_batchbuffer_dump.c intel_driver.c intel_memman.c \ + object_heap.c intel_media_common.c i965_output_dri.c \ + i965_output_wayland.c +@USE_X11_TRUE@am__objects_1 = i965_drv_video_la-i965_output_dri.lo +@USE_WAYLAND_TRUE@am__objects_2 = \ +@USE_WAYLAND_TRUE@ i965_drv_video_la-i965_output_wayland.lo +am__objects_3 = i965_drv_video_la-dso_utils.lo \ + i965_drv_video_la-gen6_mfc.lo \ + i965_drv_video_la-gen6_mfc_common.lo \ + i965_drv_video_la-gen6_mfd.lo i965_drv_video_la-gen6_vme.lo \ + i965_drv_video_la-gen7_vme.lo i965_drv_video_la-gen7_mfc.lo \ + i965_drv_video_la-gen7_mfd.lo i965_drv_video_la-gen75_mfd.lo \ + i965_drv_video_la-gen75_mfc.lo i965_drv_video_la-gen8_mfc.lo \ + i965_drv_video_la-gen8_mfd.lo i965_drv_video_la-gen8_vme.lo \ + i965_drv_video_la-gen9_vme.lo i965_drv_video_la-gen9_mfc.lo \ + i965_drv_video_la-gen9_mfc_hevc.lo \ + i965_drv_video_la-gen9_mfd.lo \ + i965_drv_video_la-gen75_picture_process.lo \ + i965_drv_video_la-gen75_vme.lo \ + i965_drv_video_la-gen75_vpp_gpe.lo \ + i965_drv_video_la-gen75_vpp_vebox.lo \ + i965_drv_video_la-gen9_post_processing.lo \ + i965_drv_video_la-i965_avc_bsd.lo \ + i965_drv_video_la-i965_avc_hw_scoreboard.lo \ + i965_drv_video_la-i965_avc_ildb.lo \ + i965_drv_video_la-i965_decoder_utils.lo \ + i965_drv_video_la-i965_device_info.lo \ + i965_drv_video_la-i965_drv_video.lo \ + i965_drv_video_la-i965_encoder.lo \ + i965_drv_video_la-i965_encoder_utils.lo \ + i965_drv_video_la-i965_media.lo \ + i965_drv_video_la-i965_media_h264.lo \ + i965_drv_video_la-i965_media_mpeg2.lo \ + i965_drv_video_la-i965_gpe_utils.lo \ + i965_drv_video_la-i965_post_processing.lo \ + i965_drv_video_la-i965_yuv_coefs.lo \ + i965_drv_video_la-gen8_post_processing.lo \ + i965_drv_video_la-i965_render.lo \ + i965_drv_video_la-i965_vpp_avs.lo \ + i965_drv_video_la-gen8_render.lo \ + i965_drv_video_la-gen9_render.lo \ + i965_drv_video_la-intel_batchbuffer.lo \ + i965_drv_video_la-intel_batchbuffer_dump.lo \ + i965_drv_video_la-intel_driver.lo \ + i965_drv_video_la-intel_memman.lo \ + i965_drv_video_la-object_heap.lo \ + i965_drv_video_la-intel_media_common.lo $(am__objects_1) \ + $(am__objects_2) +am_i965_drv_video_la_OBJECTS = $(am__objects_3) +i965_drv_video_la_OBJECTS = $(am_i965_drv_video_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +i965_drv_video_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(i965_drv_video_la_CFLAGS) $(CFLAGS) \ + $(i965_drv_video_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(i965_drv_video_la_SOURCES) +DIST_SOURCES = $(am__i965_drv_video_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__noinst_HEADERS_DIST = dso_utils.h gen6_mfc.h gen6_mfd.h gen6_vme.h \ + gen7_mfd.h gen75_picture_process.h gen75_vpp_gpe.h \ + gen75_vpp_vebox.h gen8_post_processing.h gen9_mfd.h gen9_mfc.h \ + i965_avc_bsd.h i965_avc_hw_scoreboard.h i965_avc_ildb.h \ + i965_decoder.h i965_decoder_utils.h i965_defines.h \ + i965_drv_video.h i965_encoder.h i965_encoder_utils.h \ + i965_media.h i965_media_h264.h i965_media_mpeg2.h \ + i965_mutext.h i965_gpe_utils.h i965_pciids.h \ + i965_post_processing.h i965_render.h i965_structs.h \ + i965_vpp_avs.h i965_yuv_coefs.h intel_batchbuffer.h \ + intel_batchbuffer_dump.h intel_compiler.h intel_driver.h \ + intel_media.h intel_memman.h intel_version.h object_heap.h \ + vp8_probs.h vp9_probs.h sysdeps.h va_backend_compat.h \ + i965_fourcc.h i965_output_dri.h i965_output_wayland.h \ + wayland-drm-client-protocol.h +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SUBDIRS = shaders +DIST_SUBDIRS = $(SUBDIRS) wayland +EXTRA_DIST = Android.mk intel_version.h.in $(PKG_VERSION_FILE) +BUILT_SOURCES = intel_version.h +AM_CPPFLAGS = \ + -DPTHREADS \ + $(DRM_CFLAGS) \ + $(LIBVA_DEPS_CFLAGS) \ + -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" \ + $(NULL) + +driver_cflags = -Wall -fvisibility=hidden $(NULL) $(am__append_5) +driver_ldflags = \ + -module -avoid-version \ + -no-undefined \ + -Wl,--no-undefined \ + $(NULL) + +driver_libs = \ + -lpthread -lm -ldl \ + $(DRM_LIBS) -ldrm_intel \ + $(NULL) + +source_c = dso_utils.c gen6_mfc.c gen6_mfc_common.c gen6_mfd.c \ + gen6_vme.c gen7_vme.c gen7_mfc.c gen7_mfd.c gen75_mfd.c \ + gen75_mfc.c gen8_mfc.c gen8_mfd.c gen8_vme.c gen9_vme.c \ + gen9_mfc.c gen9_mfc_hevc.c gen9_mfd.c gen75_picture_process.c \ + gen75_vme.c gen75_vpp_gpe.c gen75_vpp_vebox.c \ + gen9_post_processing.c i965_avc_bsd.c i965_avc_hw_scoreboard.c \ + i965_avc_ildb.c i965_decoder_utils.c i965_device_info.c \ + i965_drv_video.c i965_encoder.c i965_encoder_utils.c \ + i965_media.c i965_media_h264.c i965_media_mpeg2.c \ + i965_gpe_utils.c i965_post_processing.c i965_yuv_coefs.c \ + gen8_post_processing.c i965_render.c i965_vpp_avs.c \ + gen8_render.c gen9_render.c intel_batchbuffer.c \ + intel_batchbuffer_dump.c intel_driver.c intel_memman.c \ + object_heap.c intel_media_common.c $(NULL) $(am__append_1) \ + $(am__append_3) +source_h = dso_utils.h gen6_mfc.h gen6_mfd.h gen6_vme.h gen7_mfd.h \ + gen75_picture_process.h gen75_vpp_gpe.h gen75_vpp_vebox.h \ + gen8_post_processing.h gen9_mfd.h gen9_mfc.h i965_avc_bsd.h \ + i965_avc_hw_scoreboard.h i965_avc_ildb.h i965_decoder.h \ + i965_decoder_utils.h i965_defines.h i965_drv_video.h \ + i965_encoder.h i965_encoder_utils.h i965_media.h \ + i965_media_h264.h i965_media_mpeg2.h i965_mutext.h \ + i965_gpe_utils.h i965_pciids.h i965_post_processing.h \ + i965_render.h i965_structs.h i965_vpp_avs.h i965_yuv_coefs.h \ + intel_batchbuffer.h intel_batchbuffer_dump.h intel_compiler.h \ + intel_driver.h intel_media.h intel_memman.h intel_version.h \ + object_heap.h vp8_probs.h vp9_probs.h sysdeps.h \ + va_backend_compat.h i965_fourcc.h $(NULL) $(am__append_2) \ + $(am__append_4) +i965_drv_video_la_LTLIBRARIES = i965_drv_video.la +i965_drv_video_ladir = $(LIBVA_DRIVERS_PATH) +i965_drv_video_la_CFLAGS = $(driver_cflags) +i965_drv_video_la_LDFLAGS = $(driver_ldflags) +i965_drv_video_la_LIBADD = $(driver_libs) +i965_drv_video_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h) + +# git version +VERSION_FILE = .VERSION +OLD_VERSION_FILE = $(VERSION_FILE).old +NEW_VERSION_FILE = $(VERSION_FILE).new +PKG_VERSION_FILE = $(VERSION_FILE).pkg + +# Wayland protocol +protocol_source_h = wayland-drm-client-protocol.h + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in config.h.in +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +install-i965_drv_video_laLTLIBRARIES: $(i965_drv_video_la_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(i965_drv_video_la_LTLIBRARIES)'; test -n "$(i965_drv_video_ladir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(i965_drv_video_ladir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(i965_drv_video_ladir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(i965_drv_video_ladir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(i965_drv_video_ladir)"; \ + } + +uninstall-i965_drv_video_laLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(i965_drv_video_la_LTLIBRARIES)'; test -n "$(i965_drv_video_ladir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(i965_drv_video_ladir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(i965_drv_video_ladir)/$$f"; \ + done + +clean-i965_drv_video_laLTLIBRARIES: + -test -z "$(i965_drv_video_la_LTLIBRARIES)" || rm -f $(i965_drv_video_la_LTLIBRARIES) + @list='$(i965_drv_video_la_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +i965_drv_video.la: $(i965_drv_video_la_OBJECTS) $(i965_drv_video_la_DEPENDENCIES) $(EXTRA_i965_drv_video_la_DEPENDENCIES) + $(AM_V_CCLD)$(i965_drv_video_la_LINK) -rpath $(i965_drv_video_ladir) $(i965_drv_video_la_OBJECTS) $(i965_drv_video_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-dso_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen6_mfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen6_mfc_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen6_mfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen6_vme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_mfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_mfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_picture_process.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_vme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_vpp_gpe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen75_vpp_vebox.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen7_mfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen7_mfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen7_vme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen8_mfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen8_mfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen8_post_processing.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen8_render.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen8_vme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_mfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_mfc_hevc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_mfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_post_processing.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_render.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-gen9_vme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_avc_bsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_avc_hw_scoreboard.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_avc_ildb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_decoder_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_device_info.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_drv_video.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_encoder_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_gpe_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_media.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_media_h264.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_media_mpeg2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_output_dri.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_output_wayland.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_post_processing.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_render.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_vpp_avs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-i965_yuv_coefs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-intel_batchbuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-intel_batchbuffer_dump.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-intel_driver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-intel_media_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-intel_memman.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i965_drv_video_la-object_heap.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +i965_drv_video_la-dso_utils.lo: dso_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-dso_utils.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-dso_utils.Tpo -c -o i965_drv_video_la-dso_utils.lo `test -f 'dso_utils.c' || echo '$(srcdir)/'`dso_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-dso_utils.Tpo $(DEPDIR)/i965_drv_video_la-dso_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dso_utils.c' object='i965_drv_video_la-dso_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-dso_utils.lo `test -f 'dso_utils.c' || echo '$(srcdir)/'`dso_utils.c + +i965_drv_video_la-gen6_mfc.lo: gen6_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen6_mfc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen6_mfc.Tpo -c -o i965_drv_video_la-gen6_mfc.lo `test -f 'gen6_mfc.c' || echo '$(srcdir)/'`gen6_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen6_mfc.Tpo $(DEPDIR)/i965_drv_video_la-gen6_mfc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen6_mfc.c' object='i965_drv_video_la-gen6_mfc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen6_mfc.lo `test -f 'gen6_mfc.c' || echo '$(srcdir)/'`gen6_mfc.c + +i965_drv_video_la-gen6_mfc_common.lo: gen6_mfc_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen6_mfc_common.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen6_mfc_common.Tpo -c -o i965_drv_video_la-gen6_mfc_common.lo `test -f 'gen6_mfc_common.c' || echo '$(srcdir)/'`gen6_mfc_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen6_mfc_common.Tpo $(DEPDIR)/i965_drv_video_la-gen6_mfc_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen6_mfc_common.c' object='i965_drv_video_la-gen6_mfc_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen6_mfc_common.lo `test -f 'gen6_mfc_common.c' || echo '$(srcdir)/'`gen6_mfc_common.c + +i965_drv_video_la-gen6_mfd.lo: gen6_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen6_mfd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen6_mfd.Tpo -c -o i965_drv_video_la-gen6_mfd.lo `test -f 'gen6_mfd.c' || echo '$(srcdir)/'`gen6_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen6_mfd.Tpo $(DEPDIR)/i965_drv_video_la-gen6_mfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen6_mfd.c' object='i965_drv_video_la-gen6_mfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen6_mfd.lo `test -f 'gen6_mfd.c' || echo '$(srcdir)/'`gen6_mfd.c + +i965_drv_video_la-gen6_vme.lo: gen6_vme.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen6_vme.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen6_vme.Tpo -c -o i965_drv_video_la-gen6_vme.lo `test -f 'gen6_vme.c' || echo '$(srcdir)/'`gen6_vme.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen6_vme.Tpo $(DEPDIR)/i965_drv_video_la-gen6_vme.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen6_vme.c' object='i965_drv_video_la-gen6_vme.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen6_vme.lo `test -f 'gen6_vme.c' || echo '$(srcdir)/'`gen6_vme.c + +i965_drv_video_la-gen7_vme.lo: gen7_vme.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen7_vme.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen7_vme.Tpo -c -o i965_drv_video_la-gen7_vme.lo `test -f 'gen7_vme.c' || echo '$(srcdir)/'`gen7_vme.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen7_vme.Tpo $(DEPDIR)/i965_drv_video_la-gen7_vme.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen7_vme.c' object='i965_drv_video_la-gen7_vme.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen7_vme.lo `test -f 'gen7_vme.c' || echo '$(srcdir)/'`gen7_vme.c + +i965_drv_video_la-gen7_mfc.lo: gen7_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen7_mfc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen7_mfc.Tpo -c -o i965_drv_video_la-gen7_mfc.lo `test -f 'gen7_mfc.c' || echo '$(srcdir)/'`gen7_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen7_mfc.Tpo $(DEPDIR)/i965_drv_video_la-gen7_mfc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen7_mfc.c' object='i965_drv_video_la-gen7_mfc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen7_mfc.lo `test -f 'gen7_mfc.c' || echo '$(srcdir)/'`gen7_mfc.c + +i965_drv_video_la-gen7_mfd.lo: gen7_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen7_mfd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen7_mfd.Tpo -c -o i965_drv_video_la-gen7_mfd.lo `test -f 'gen7_mfd.c' || echo '$(srcdir)/'`gen7_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen7_mfd.Tpo $(DEPDIR)/i965_drv_video_la-gen7_mfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen7_mfd.c' object='i965_drv_video_la-gen7_mfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen7_mfd.lo `test -f 'gen7_mfd.c' || echo '$(srcdir)/'`gen7_mfd.c + +i965_drv_video_la-gen75_mfd.lo: gen75_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_mfd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_mfd.Tpo -c -o i965_drv_video_la-gen75_mfd.lo `test -f 'gen75_mfd.c' || echo '$(srcdir)/'`gen75_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_mfd.Tpo $(DEPDIR)/i965_drv_video_la-gen75_mfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_mfd.c' object='i965_drv_video_la-gen75_mfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_mfd.lo `test -f 'gen75_mfd.c' || echo '$(srcdir)/'`gen75_mfd.c + +i965_drv_video_la-gen75_mfc.lo: gen75_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_mfc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_mfc.Tpo -c -o i965_drv_video_la-gen75_mfc.lo `test -f 'gen75_mfc.c' || echo '$(srcdir)/'`gen75_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_mfc.Tpo $(DEPDIR)/i965_drv_video_la-gen75_mfc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_mfc.c' object='i965_drv_video_la-gen75_mfc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_mfc.lo `test -f 'gen75_mfc.c' || echo '$(srcdir)/'`gen75_mfc.c + +i965_drv_video_la-gen8_mfc.lo: gen8_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen8_mfc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen8_mfc.Tpo -c -o i965_drv_video_la-gen8_mfc.lo `test -f 'gen8_mfc.c' || echo '$(srcdir)/'`gen8_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen8_mfc.Tpo $(DEPDIR)/i965_drv_video_la-gen8_mfc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen8_mfc.c' object='i965_drv_video_la-gen8_mfc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen8_mfc.lo `test -f 'gen8_mfc.c' || echo '$(srcdir)/'`gen8_mfc.c + +i965_drv_video_la-gen8_mfd.lo: gen8_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen8_mfd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen8_mfd.Tpo -c -o i965_drv_video_la-gen8_mfd.lo `test -f 'gen8_mfd.c' || echo '$(srcdir)/'`gen8_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen8_mfd.Tpo $(DEPDIR)/i965_drv_video_la-gen8_mfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen8_mfd.c' object='i965_drv_video_la-gen8_mfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen8_mfd.lo `test -f 'gen8_mfd.c' || echo '$(srcdir)/'`gen8_mfd.c + +i965_drv_video_la-gen8_vme.lo: gen8_vme.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen8_vme.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen8_vme.Tpo -c -o i965_drv_video_la-gen8_vme.lo `test -f 'gen8_vme.c' || echo '$(srcdir)/'`gen8_vme.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen8_vme.Tpo $(DEPDIR)/i965_drv_video_la-gen8_vme.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen8_vme.c' object='i965_drv_video_la-gen8_vme.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen8_vme.lo `test -f 'gen8_vme.c' || echo '$(srcdir)/'`gen8_vme.c + +i965_drv_video_la-gen9_vme.lo: gen9_vme.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_vme.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_vme.Tpo -c -o i965_drv_video_la-gen9_vme.lo `test -f 'gen9_vme.c' || echo '$(srcdir)/'`gen9_vme.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_vme.Tpo $(DEPDIR)/i965_drv_video_la-gen9_vme.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_vme.c' object='i965_drv_video_la-gen9_vme.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_vme.lo `test -f 'gen9_vme.c' || echo '$(srcdir)/'`gen9_vme.c + +i965_drv_video_la-gen9_mfc.lo: gen9_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_mfc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_mfc.Tpo -c -o i965_drv_video_la-gen9_mfc.lo `test -f 'gen9_mfc.c' || echo '$(srcdir)/'`gen9_mfc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_mfc.Tpo $(DEPDIR)/i965_drv_video_la-gen9_mfc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_mfc.c' object='i965_drv_video_la-gen9_mfc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_mfc.lo `test -f 'gen9_mfc.c' || echo '$(srcdir)/'`gen9_mfc.c + +i965_drv_video_la-gen9_mfc_hevc.lo: gen9_mfc_hevc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_mfc_hevc.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_mfc_hevc.Tpo -c -o i965_drv_video_la-gen9_mfc_hevc.lo `test -f 'gen9_mfc_hevc.c' || echo '$(srcdir)/'`gen9_mfc_hevc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_mfc_hevc.Tpo $(DEPDIR)/i965_drv_video_la-gen9_mfc_hevc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_mfc_hevc.c' object='i965_drv_video_la-gen9_mfc_hevc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_mfc_hevc.lo `test -f 'gen9_mfc_hevc.c' || echo '$(srcdir)/'`gen9_mfc_hevc.c + +i965_drv_video_la-gen9_mfd.lo: gen9_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_mfd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_mfd.Tpo -c -o i965_drv_video_la-gen9_mfd.lo `test -f 'gen9_mfd.c' || echo '$(srcdir)/'`gen9_mfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_mfd.Tpo $(DEPDIR)/i965_drv_video_la-gen9_mfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_mfd.c' object='i965_drv_video_la-gen9_mfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_mfd.lo `test -f 'gen9_mfd.c' || echo '$(srcdir)/'`gen9_mfd.c + +i965_drv_video_la-gen75_picture_process.lo: gen75_picture_process.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_picture_process.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_picture_process.Tpo -c -o i965_drv_video_la-gen75_picture_process.lo `test -f 'gen75_picture_process.c' || echo '$(srcdir)/'`gen75_picture_process.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_picture_process.Tpo $(DEPDIR)/i965_drv_video_la-gen75_picture_process.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_picture_process.c' object='i965_drv_video_la-gen75_picture_process.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_picture_process.lo `test -f 'gen75_picture_process.c' || echo '$(srcdir)/'`gen75_picture_process.c + +i965_drv_video_la-gen75_vme.lo: gen75_vme.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_vme.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_vme.Tpo -c -o i965_drv_video_la-gen75_vme.lo `test -f 'gen75_vme.c' || echo '$(srcdir)/'`gen75_vme.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_vme.Tpo $(DEPDIR)/i965_drv_video_la-gen75_vme.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_vme.c' object='i965_drv_video_la-gen75_vme.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_vme.lo `test -f 'gen75_vme.c' || echo '$(srcdir)/'`gen75_vme.c + +i965_drv_video_la-gen75_vpp_gpe.lo: gen75_vpp_gpe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_vpp_gpe.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_vpp_gpe.Tpo -c -o i965_drv_video_la-gen75_vpp_gpe.lo `test -f 'gen75_vpp_gpe.c' || echo '$(srcdir)/'`gen75_vpp_gpe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_vpp_gpe.Tpo $(DEPDIR)/i965_drv_video_la-gen75_vpp_gpe.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_vpp_gpe.c' object='i965_drv_video_la-gen75_vpp_gpe.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_vpp_gpe.lo `test -f 'gen75_vpp_gpe.c' || echo '$(srcdir)/'`gen75_vpp_gpe.c + +i965_drv_video_la-gen75_vpp_vebox.lo: gen75_vpp_vebox.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen75_vpp_vebox.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen75_vpp_vebox.Tpo -c -o i965_drv_video_la-gen75_vpp_vebox.lo `test -f 'gen75_vpp_vebox.c' || echo '$(srcdir)/'`gen75_vpp_vebox.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen75_vpp_vebox.Tpo $(DEPDIR)/i965_drv_video_la-gen75_vpp_vebox.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen75_vpp_vebox.c' object='i965_drv_video_la-gen75_vpp_vebox.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen75_vpp_vebox.lo `test -f 'gen75_vpp_vebox.c' || echo '$(srcdir)/'`gen75_vpp_vebox.c + +i965_drv_video_la-gen9_post_processing.lo: gen9_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_post_processing.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_post_processing.Tpo -c -o i965_drv_video_la-gen9_post_processing.lo `test -f 'gen9_post_processing.c' || echo '$(srcdir)/'`gen9_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_post_processing.Tpo $(DEPDIR)/i965_drv_video_la-gen9_post_processing.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_post_processing.c' object='i965_drv_video_la-gen9_post_processing.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_post_processing.lo `test -f 'gen9_post_processing.c' || echo '$(srcdir)/'`gen9_post_processing.c + +i965_drv_video_la-i965_avc_bsd.lo: i965_avc_bsd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_avc_bsd.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_avc_bsd.Tpo -c -o i965_drv_video_la-i965_avc_bsd.lo `test -f 'i965_avc_bsd.c' || echo '$(srcdir)/'`i965_avc_bsd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_avc_bsd.Tpo $(DEPDIR)/i965_drv_video_la-i965_avc_bsd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_avc_bsd.c' object='i965_drv_video_la-i965_avc_bsd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_avc_bsd.lo `test -f 'i965_avc_bsd.c' || echo '$(srcdir)/'`i965_avc_bsd.c + +i965_drv_video_la-i965_avc_hw_scoreboard.lo: i965_avc_hw_scoreboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_avc_hw_scoreboard.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_avc_hw_scoreboard.Tpo -c -o i965_drv_video_la-i965_avc_hw_scoreboard.lo `test -f 'i965_avc_hw_scoreboard.c' || echo '$(srcdir)/'`i965_avc_hw_scoreboard.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_avc_hw_scoreboard.Tpo $(DEPDIR)/i965_drv_video_la-i965_avc_hw_scoreboard.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_avc_hw_scoreboard.c' object='i965_drv_video_la-i965_avc_hw_scoreboard.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_avc_hw_scoreboard.lo `test -f 'i965_avc_hw_scoreboard.c' || echo '$(srcdir)/'`i965_avc_hw_scoreboard.c + +i965_drv_video_la-i965_avc_ildb.lo: i965_avc_ildb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_avc_ildb.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_avc_ildb.Tpo -c -o i965_drv_video_la-i965_avc_ildb.lo `test -f 'i965_avc_ildb.c' || echo '$(srcdir)/'`i965_avc_ildb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_avc_ildb.Tpo $(DEPDIR)/i965_drv_video_la-i965_avc_ildb.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_avc_ildb.c' object='i965_drv_video_la-i965_avc_ildb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_avc_ildb.lo `test -f 'i965_avc_ildb.c' || echo '$(srcdir)/'`i965_avc_ildb.c + +i965_drv_video_la-i965_decoder_utils.lo: i965_decoder_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_decoder_utils.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_decoder_utils.Tpo -c -o i965_drv_video_la-i965_decoder_utils.lo `test -f 'i965_decoder_utils.c' || echo '$(srcdir)/'`i965_decoder_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_decoder_utils.Tpo $(DEPDIR)/i965_drv_video_la-i965_decoder_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_decoder_utils.c' object='i965_drv_video_la-i965_decoder_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_decoder_utils.lo `test -f 'i965_decoder_utils.c' || echo '$(srcdir)/'`i965_decoder_utils.c + +i965_drv_video_la-i965_device_info.lo: i965_device_info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_device_info.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_device_info.Tpo -c -o i965_drv_video_la-i965_device_info.lo `test -f 'i965_device_info.c' || echo '$(srcdir)/'`i965_device_info.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_device_info.Tpo $(DEPDIR)/i965_drv_video_la-i965_device_info.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_device_info.c' object='i965_drv_video_la-i965_device_info.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_device_info.lo `test -f 'i965_device_info.c' || echo '$(srcdir)/'`i965_device_info.c + +i965_drv_video_la-i965_drv_video.lo: i965_drv_video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_drv_video.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_drv_video.Tpo -c -o i965_drv_video_la-i965_drv_video.lo `test -f 'i965_drv_video.c' || echo '$(srcdir)/'`i965_drv_video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_drv_video.Tpo $(DEPDIR)/i965_drv_video_la-i965_drv_video.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_drv_video.c' object='i965_drv_video_la-i965_drv_video.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_drv_video.lo `test -f 'i965_drv_video.c' || echo '$(srcdir)/'`i965_drv_video.c + +i965_drv_video_la-i965_encoder.lo: i965_encoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_encoder.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_encoder.Tpo -c -o i965_drv_video_la-i965_encoder.lo `test -f 'i965_encoder.c' || echo '$(srcdir)/'`i965_encoder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_encoder.Tpo $(DEPDIR)/i965_drv_video_la-i965_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_encoder.c' object='i965_drv_video_la-i965_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_encoder.lo `test -f 'i965_encoder.c' || echo '$(srcdir)/'`i965_encoder.c + +i965_drv_video_la-i965_encoder_utils.lo: i965_encoder_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_encoder_utils.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_encoder_utils.Tpo -c -o i965_drv_video_la-i965_encoder_utils.lo `test -f 'i965_encoder_utils.c' || echo '$(srcdir)/'`i965_encoder_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_encoder_utils.Tpo $(DEPDIR)/i965_drv_video_la-i965_encoder_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_encoder_utils.c' object='i965_drv_video_la-i965_encoder_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_encoder_utils.lo `test -f 'i965_encoder_utils.c' || echo '$(srcdir)/'`i965_encoder_utils.c + +i965_drv_video_la-i965_media.lo: i965_media.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_media.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_media.Tpo -c -o i965_drv_video_la-i965_media.lo `test -f 'i965_media.c' || echo '$(srcdir)/'`i965_media.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_media.Tpo $(DEPDIR)/i965_drv_video_la-i965_media.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_media.c' object='i965_drv_video_la-i965_media.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_media.lo `test -f 'i965_media.c' || echo '$(srcdir)/'`i965_media.c + +i965_drv_video_la-i965_media_h264.lo: i965_media_h264.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_media_h264.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_media_h264.Tpo -c -o i965_drv_video_la-i965_media_h264.lo `test -f 'i965_media_h264.c' || echo '$(srcdir)/'`i965_media_h264.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_media_h264.Tpo $(DEPDIR)/i965_drv_video_la-i965_media_h264.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_media_h264.c' object='i965_drv_video_la-i965_media_h264.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_media_h264.lo `test -f 'i965_media_h264.c' || echo '$(srcdir)/'`i965_media_h264.c + +i965_drv_video_la-i965_media_mpeg2.lo: i965_media_mpeg2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_media_mpeg2.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_media_mpeg2.Tpo -c -o i965_drv_video_la-i965_media_mpeg2.lo `test -f 'i965_media_mpeg2.c' || echo '$(srcdir)/'`i965_media_mpeg2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_media_mpeg2.Tpo $(DEPDIR)/i965_drv_video_la-i965_media_mpeg2.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_media_mpeg2.c' object='i965_drv_video_la-i965_media_mpeg2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_media_mpeg2.lo `test -f 'i965_media_mpeg2.c' || echo '$(srcdir)/'`i965_media_mpeg2.c + +i965_drv_video_la-i965_gpe_utils.lo: i965_gpe_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_gpe_utils.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_gpe_utils.Tpo -c -o i965_drv_video_la-i965_gpe_utils.lo `test -f 'i965_gpe_utils.c' || echo '$(srcdir)/'`i965_gpe_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_gpe_utils.Tpo $(DEPDIR)/i965_drv_video_la-i965_gpe_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_gpe_utils.c' object='i965_drv_video_la-i965_gpe_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_gpe_utils.lo `test -f 'i965_gpe_utils.c' || echo '$(srcdir)/'`i965_gpe_utils.c + +i965_drv_video_la-i965_post_processing.lo: i965_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_post_processing.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_post_processing.Tpo -c -o i965_drv_video_la-i965_post_processing.lo `test -f 'i965_post_processing.c' || echo '$(srcdir)/'`i965_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_post_processing.Tpo $(DEPDIR)/i965_drv_video_la-i965_post_processing.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_post_processing.c' object='i965_drv_video_la-i965_post_processing.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_post_processing.lo `test -f 'i965_post_processing.c' || echo '$(srcdir)/'`i965_post_processing.c + +i965_drv_video_la-i965_yuv_coefs.lo: i965_yuv_coefs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_yuv_coefs.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_yuv_coefs.Tpo -c -o i965_drv_video_la-i965_yuv_coefs.lo `test -f 'i965_yuv_coefs.c' || echo '$(srcdir)/'`i965_yuv_coefs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_yuv_coefs.Tpo $(DEPDIR)/i965_drv_video_la-i965_yuv_coefs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_yuv_coefs.c' object='i965_drv_video_la-i965_yuv_coefs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_yuv_coefs.lo `test -f 'i965_yuv_coefs.c' || echo '$(srcdir)/'`i965_yuv_coefs.c + +i965_drv_video_la-gen8_post_processing.lo: gen8_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen8_post_processing.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen8_post_processing.Tpo -c -o i965_drv_video_la-gen8_post_processing.lo `test -f 'gen8_post_processing.c' || echo '$(srcdir)/'`gen8_post_processing.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen8_post_processing.Tpo $(DEPDIR)/i965_drv_video_la-gen8_post_processing.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen8_post_processing.c' object='i965_drv_video_la-gen8_post_processing.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen8_post_processing.lo `test -f 'gen8_post_processing.c' || echo '$(srcdir)/'`gen8_post_processing.c + +i965_drv_video_la-i965_render.lo: i965_render.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_render.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_render.Tpo -c -o i965_drv_video_la-i965_render.lo `test -f 'i965_render.c' || echo '$(srcdir)/'`i965_render.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_render.Tpo $(DEPDIR)/i965_drv_video_la-i965_render.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_render.c' object='i965_drv_video_la-i965_render.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_render.lo `test -f 'i965_render.c' || echo '$(srcdir)/'`i965_render.c + +i965_drv_video_la-i965_vpp_avs.lo: i965_vpp_avs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_vpp_avs.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_vpp_avs.Tpo -c -o i965_drv_video_la-i965_vpp_avs.lo `test -f 'i965_vpp_avs.c' || echo '$(srcdir)/'`i965_vpp_avs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_vpp_avs.Tpo $(DEPDIR)/i965_drv_video_la-i965_vpp_avs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_vpp_avs.c' object='i965_drv_video_la-i965_vpp_avs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_vpp_avs.lo `test -f 'i965_vpp_avs.c' || echo '$(srcdir)/'`i965_vpp_avs.c + +i965_drv_video_la-gen8_render.lo: gen8_render.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen8_render.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen8_render.Tpo -c -o i965_drv_video_la-gen8_render.lo `test -f 'gen8_render.c' || echo '$(srcdir)/'`gen8_render.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen8_render.Tpo $(DEPDIR)/i965_drv_video_la-gen8_render.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen8_render.c' object='i965_drv_video_la-gen8_render.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen8_render.lo `test -f 'gen8_render.c' || echo '$(srcdir)/'`gen8_render.c + +i965_drv_video_la-gen9_render.lo: gen9_render.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-gen9_render.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-gen9_render.Tpo -c -o i965_drv_video_la-gen9_render.lo `test -f 'gen9_render.c' || echo '$(srcdir)/'`gen9_render.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-gen9_render.Tpo $(DEPDIR)/i965_drv_video_la-gen9_render.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gen9_render.c' object='i965_drv_video_la-gen9_render.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-gen9_render.lo `test -f 'gen9_render.c' || echo '$(srcdir)/'`gen9_render.c + +i965_drv_video_la-intel_batchbuffer.lo: intel_batchbuffer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-intel_batchbuffer.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-intel_batchbuffer.Tpo -c -o i965_drv_video_la-intel_batchbuffer.lo `test -f 'intel_batchbuffer.c' || echo '$(srcdir)/'`intel_batchbuffer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-intel_batchbuffer.Tpo $(DEPDIR)/i965_drv_video_la-intel_batchbuffer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intel_batchbuffer.c' object='i965_drv_video_la-intel_batchbuffer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-intel_batchbuffer.lo `test -f 'intel_batchbuffer.c' || echo '$(srcdir)/'`intel_batchbuffer.c + +i965_drv_video_la-intel_batchbuffer_dump.lo: intel_batchbuffer_dump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-intel_batchbuffer_dump.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-intel_batchbuffer_dump.Tpo -c -o i965_drv_video_la-intel_batchbuffer_dump.lo `test -f 'intel_batchbuffer_dump.c' || echo '$(srcdir)/'`intel_batchbuffer_dump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-intel_batchbuffer_dump.Tpo $(DEPDIR)/i965_drv_video_la-intel_batchbuffer_dump.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intel_batchbuffer_dump.c' object='i965_drv_video_la-intel_batchbuffer_dump.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-intel_batchbuffer_dump.lo `test -f 'intel_batchbuffer_dump.c' || echo '$(srcdir)/'`intel_batchbuffer_dump.c + +i965_drv_video_la-intel_driver.lo: intel_driver.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-intel_driver.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-intel_driver.Tpo -c -o i965_drv_video_la-intel_driver.lo `test -f 'intel_driver.c' || echo '$(srcdir)/'`intel_driver.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-intel_driver.Tpo $(DEPDIR)/i965_drv_video_la-intel_driver.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intel_driver.c' object='i965_drv_video_la-intel_driver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-intel_driver.lo `test -f 'intel_driver.c' || echo '$(srcdir)/'`intel_driver.c + +i965_drv_video_la-intel_memman.lo: intel_memman.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-intel_memman.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-intel_memman.Tpo -c -o i965_drv_video_la-intel_memman.lo `test -f 'intel_memman.c' || echo '$(srcdir)/'`intel_memman.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-intel_memman.Tpo $(DEPDIR)/i965_drv_video_la-intel_memman.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intel_memman.c' object='i965_drv_video_la-intel_memman.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-intel_memman.lo `test -f 'intel_memman.c' || echo '$(srcdir)/'`intel_memman.c + +i965_drv_video_la-object_heap.lo: object_heap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-object_heap.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-object_heap.Tpo -c -o i965_drv_video_la-object_heap.lo `test -f 'object_heap.c' || echo '$(srcdir)/'`object_heap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-object_heap.Tpo $(DEPDIR)/i965_drv_video_la-object_heap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='object_heap.c' object='i965_drv_video_la-object_heap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-object_heap.lo `test -f 'object_heap.c' || echo '$(srcdir)/'`object_heap.c + +i965_drv_video_la-intel_media_common.lo: intel_media_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-intel_media_common.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-intel_media_common.Tpo -c -o i965_drv_video_la-intel_media_common.lo `test -f 'intel_media_common.c' || echo '$(srcdir)/'`intel_media_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-intel_media_common.Tpo $(DEPDIR)/i965_drv_video_la-intel_media_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intel_media_common.c' object='i965_drv_video_la-intel_media_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-intel_media_common.lo `test -f 'intel_media_common.c' || echo '$(srcdir)/'`intel_media_common.c + +i965_drv_video_la-i965_output_dri.lo: i965_output_dri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_output_dri.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_output_dri.Tpo -c -o i965_drv_video_la-i965_output_dri.lo `test -f 'i965_output_dri.c' || echo '$(srcdir)/'`i965_output_dri.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_output_dri.Tpo $(DEPDIR)/i965_drv_video_la-i965_output_dri.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_output_dri.c' object='i965_drv_video_la-i965_output_dri.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_output_dri.lo `test -f 'i965_output_dri.c' || echo '$(srcdir)/'`i965_output_dri.c + +i965_drv_video_la-i965_output_wayland.lo: i965_output_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -MT i965_drv_video_la-i965_output_wayland.lo -MD -MP -MF $(DEPDIR)/i965_drv_video_la-i965_output_wayland.Tpo -c -o i965_drv_video_la-i965_output_wayland.lo `test -f 'i965_output_wayland.c' || echo '$(srcdir)/'`i965_output_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/i965_drv_video_la-i965_output_wayland.Tpo $(DEPDIR)/i965_drv_video_la-i965_output_wayland.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i965_output_wayland.c' object='i965_drv_video_la-i965_output_wayland.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(i965_drv_video_la_CFLAGS) $(CFLAGS) -c -o i965_drv_video_la-i965_output_wayland.lo `test -f 'i965_output_wayland.c' || echo '$(srcdir)/'`i965_output_wayland.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(i965_drv_video_ladir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-i965_drv_video_laLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-i965_drv_video_laLTLIBRARIES + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-i965_drv_video_laLTLIBRARIES + +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic \ + clean-i965_drv_video_laLTLIBRARIES clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-i965_drv_video_laLTLIBRARIES install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am \ + uninstall-i965_drv_video_laLTLIBRARIES + + +intel_version.h: gen-version + $(AM_V_GEN) \ + OV=`[ -f $(OLD_VERSION_FILE) ] && cat $(OLD_VERSION_FILE) || :`; \ + NV=`cat $(NEW_VERSION_FILE)`; \ + if [ "$$OV" != "$$NV" -o ! -f intel_version.h ]; then \ + cp -f $(NEW_VERSION_FILE) $(OLD_VERSION_FILE); \ + $(SED) -e "s|\@INTEL_DRIVER_GIT_VERSION\@|$${NV}|" \ + $(srcdir)/intel_version.h.in > intel_version.h; \ + fi + +gen-version: + @echo $(VERSION) > $(NEW_VERSION_FILE) +@HAVE_GIT_TRUE@ @[ -d $(top_srcdir)/.git ] && \ +@HAVE_GIT_TRUE@ (cd $(top_srcdir) && $(GIT) describe --tags) > $(NEW_VERSION_FILE) || : + @[ -f $(srcdir)/$(PKG_VERSION_FILE) ] && \ + cp -f $(srcdir)/$(PKG_VERSION_FILE) $(NEW_VERSION_FILE) || : + +$(PKG_VERSION_FILE): $(NEW_VERSION_FILE) + @cp -f $< $@ +i965_output_wayland.c: $(protocol_source_h) +@wayland_scanner_rules@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h new file mode 100644 index 000000000..884e2dac4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h @@ -0,0 +1,122 @@ +/* src/config.h. Generated from config.h.in by configure. */ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#define HAVE_DRM_FOURCC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_EGL_EGL_H 1 + +/* Defined to 1 if hybrid codec is needed */ +/* #undef HAVE_HYBRID_CODEC */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `log2f' function. */ +#define HAVE_LOG2F 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Defined to 1 if VA/DRM API is enabled */ +#define HAVE_VA_DRM 1 + +/* Major version of the driver */ +#define INTEL_DRIVER_MAJOR_VERSION 1 + +/* Micro version of the driver */ +#define INTEL_DRIVER_MICRO_VERSION 2 + +/* Minor version of the driver */ +#define INTEL_DRIVER_MINOR_VERSION 6 + +/* Preversion of the driver */ +#define INTEL_DRIVER_PRE_VERSION 0 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libva-intel-driver" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "haihao.xiang@intel.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "intel_driver" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "intel_driver 1.6.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libva-intel-driver" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.6.2" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define driver entry-point */ +#define VA_DRIVER_INIT_FUNC __vaDriverInit_0_38 + +/* Version number of package */ +#define VERSION "1.6.2" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h.in new file mode 100644 index 000000000..340522506 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/config.h.in @@ -0,0 +1,127 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DRM_FOURCC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_EGL_EGL_H + +/* Defined to 1 if hybrid codec is needed */ +#undef HAVE_HYBRID_CODEC + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the `log2f' function. */ +#undef HAVE_LOG2F + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Defined to 1 if VA/DRM API is enabled */ +#undef HAVE_VA_DRM + +/* Defined to 1 if VA/Wayland API is enabled */ +#undef HAVE_VA_WAYLAND + +/* Defined to 1 if VA/X11 API is enabled */ +#undef HAVE_VA_X11 + +/* Major version of the driver */ +#undef INTEL_DRIVER_MAJOR_VERSION + +/* Micro version of the driver */ +#undef INTEL_DRIVER_MICRO_VERSION + +/* Minor version of the driver */ +#undef INTEL_DRIVER_MINOR_VERSION + +/* Preversion of the driver */ +#undef INTEL_DRIVER_PRE_VERSION + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define driver entry-point */ +#undef VA_DRIVER_INIT_FUNC + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.c new file mode 100644 index 000000000..8fdea11f7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include +#include +#include +#include "dso_utils.h" + +struct dso_handle { + void *handle; +}; + +/* Opens the named shared library */ +struct dso_handle * +dso_open(const char *path) +{ + struct dso_handle *h; + + h = calloc(1, sizeof(*h)); + if (!h) + return NULL; + + if (path) { + h->handle = dlopen(path, RTLD_LAZY|RTLD_LOCAL); + if (!h->handle) + goto error; + } + else + h->handle = RTLD_DEFAULT; + return h; + +error: + dso_close(h); + return NULL; +} + +/* Closes and disposed any allocated data */ +void +dso_close(struct dso_handle *h) +{ + if (!h) + return; + + if (h->handle) { + if (h->handle != RTLD_DEFAULT) + dlclose(h->handle); + h->handle = NULL; + } + free(h); +} + +/* Load symbol into the supplied location */ +static bool +get_symbol(struct dso_handle *h, void *func_vptr, const char *name) +{ + dso_generic_func func, * const func_ptr = func_vptr; + const char *error; + + dlerror(); + func = (dso_generic_func)dlsym(h->handle, name); + error = dlerror(); + if (error) { + fprintf(stderr, "error: failed to resolve %s(): %s\n", name, error); + return false; + } + *func_ptr = func; + return true; +} + +/* Loads symbols into the supplied vtable */ +bool +dso_get_symbols( + struct dso_handle *h, + void *vtable, + unsigned int vtable_length, + const struct dso_symbol *symbols +) +{ + const struct dso_symbol *s; + + for (s = symbols; s->name != NULL; s++) { + if (s->offset + sizeof(dso_generic_func) > vtable_length) + return false; + if (!get_symbol(h, ((char *)vtable) + s->offset, s->name)) + return false; + } + return true; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.h new file mode 100644 index 000000000..9b8eba7da --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/dso_utils.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef DSO_UTILS_H +#define DSO_UTILS_H + +#include + +/** Generic pointer to function. */ +typedef void (*dso_generic_func)(void); + +/** Library handle (opaque). */ +struct dso_handle; + +/** Symbol lookup table. */ +struct dso_symbol { + /** Symbol name */ + const char *name; + /** Offset into the supplied vtable where symbol is to be loaded. */ + unsigned int offset; +}; + +/** + * Opens the named shared library. + * + * @param[in] path the library name, or NULL to lookup into loaded libraries + * @return the newly allocated library handle + */ +struct dso_handle * +dso_open(const char *path); + +/** Closes and disposed any allocated data. */ +void +dso_close(struct dso_handle *h); + +/** + * Loads symbols into the supplied vtable. + * + * @param[in] handle the DSO handle + * @param[in] vtable the function table to fill in + * @param[in] vtable_length the size (in bytes) of the function table + * @param[in] symbols the NULL terminated array of symbols to lookup + * @return true on success, false otherwise + **/ +bool +dso_get_symbols( + struct dso_handle *h, + void *vtable, + unsigned int vtable_length, + const struct dso_symbol *symbols +); + +#endif /* DSO_UTILS_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.c new file mode 100644 index 000000000..acefc9753 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.c @@ -0,0 +1,1505 @@ +/* + * Copyright © 2010-2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou Chang + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" +#include "intel_media.h" + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +static const uint32_t gen6_mfc_batchbuffer_avc_intra[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_intra.g6b" +}; + +static const uint32_t gen6_mfc_batchbuffer_avc_inter[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_inter.g6b" +}; + +static struct i965_kernel gen6_mfc_kernels[] = { + { + "MFC AVC INTRA BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTRA, + gen6_mfc_batchbuffer_avc_intra, + sizeof(gen6_mfc_batchbuffer_avc_intra), + NULL + }, + + { + "MFC AVC INTER BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTER, + gen6_mfc_batchbuffer_avc_inter, + sizeof(gen6_mfc_batchbuffer_avc_inter), + NULL + }, +}; + +static void +gen6_mfc_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(standard_select == MFX_FORMAT_AVC); + + BEGIN_BCS_BATCH(batch, 4); + + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (4 - 2)); + OUT_BCS_BATCH(batch, + (1 << 10) | /* disable Stream-Out , advanced QP/bitrate control need enable it*/ + ((!!mfc_context->post_deblocking_output.bo) << 9) | /* Post Deblocking Output */ + ((!!mfc_context->pre_deblocking_output.bo) << 8) | /* Pre Deblocking Output */ + (0 << 7) | /* disable TLB prefectch */ + (0 << 5) | /* not in stitch mode */ + (1 << 4) | /* encoding mode */ + (2 << 0)); /* Standard Select: AVC */ + OUT_BCS_BATCH(batch, + (0 << 20) | /* round flag in PB slice */ + (0 << 19) | /* round flag in Intra8x8 */ + (0 << 7) | /* expand NOA bus flag */ + (1 << 6) | /* must be 1 */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | /* AVC long field motion vector */ + (0 << 0)); /* always calculate AVC ILDB boundary strength */ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_surface_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((mfc_context->surface_state.height - 1) << 19) | + ((mfc_context->surface_state.width - 1) << 6)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((mfc_context->surface_state.w_pitch - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be y-tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (mfc_context->surface_state.h_pitch)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +void +gen6_mfc_pipe_buf_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int i; + + BEGIN_BCS_BATCH(batch, 24); + + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (24 - 2)); + + if (mfc_context->pre_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); /* pre output addr */ + + if (mfc_context->post_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* post output addr */ + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, mfc_context->uncompressed_picture_source.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* uncompressed data */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* StreamOut data*/ + OUT_BCS_RELOC(batch, mfc_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, mfc_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + /* 7..22 Reference pictures*/ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + if ( mfc_context->reference_surfaces[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->reference_surfaces[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* Macroblock status buffer*/ + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_ind_obj_base_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + BEGIN_BCS_BATCH(batch, 11); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /*MFC Indirect PAK-BSE Object Base Address for Encoder*/ + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + + ADVANCE_BCS_BATCH(batch); +} + +void +gen6_mfc_bsp_buf_base_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 4); + + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + OUT_BCS_RELOC(batch, mfc_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_avc_img_state(VADriverContextP ctx,struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs) & 0xFFFF)); + OUT_BCS_BATCH(batch, + (height_in_mbs << 16) | + (width_in_mbs << 0)); + OUT_BCS_BATCH(batch, + (0 << 24) | /*Second Chroma QP Offset*/ + (0 << 16) | /*Chroma QP Offset*/ + (0 << 14) | /*Max-bit conformance Intra flag*/ + (0 << 13) | /*Max Macroblock size conformance Inter flag*/ + (1 << 12) | /*Should always be written as "1" */ + (0 << 10) | /*QM Preset FLag */ + (0 << 8) | /*Image Structure*/ + (0 << 0) ); /*Current Decoed Image Frame Store ID, reserved in Encode mode*/ + OUT_BCS_BATCH(batch, + (400 << 16) | /*Mininum Frame size*/ + (0 << 15) | /*Disable reading of Macroblock Status Buffer*/ + (0 << 14) | /*Load BitStream Pointer only once, 1 slic 1 frame*/ + (0 << 13) | /*CABAC 0 word insertion test enable*/ + (1 << 12) | /*MVUnpackedEnable,compliant to DXVA*/ + (1 << 10) | /*Chroma Format IDC, 4:2:0*/ + (pPicParameter->pic_fields.bits.entropy_coding_mode_flag << 7) | /*0:CAVLC encoding mode,1:CABAC*/ + (0 << 6) | /*Only valid for VLD decoding mode*/ + (0 << 5) | /*Constrained Intra Predition Flag, from PPS*/ + (pSequenceParameter->seq_fields.bits.direct_8x8_inference_flag << 4) | /*Direct 8x8 inference flag*/ + (pPicParameter->pic_fields.bits.transform_8x8_mode_flag << 3) | /*8x8 or 4x4 IDCT Transform Mode Flag*/ + (1 << 2) | /*Frame MB only flag*/ + (0 << 1) | /*MBAFF mode is in active*/ + (0 << 0) ); /*Field picture flag*/ + OUT_BCS_BATCH(batch, + (1<<16) | /*Frame Size Rate Control Flag*/ + (1<<12) | + (1<<9) | /*MB level Rate Control Enabling Flag*/ + (1 << 3) | /*FrameBitRateMinReportMask*/ + (1 << 2) | /*FrameBitRateMaxReportMask*/ + (1 << 1) | /*InterMBMaxSizeReportMask*/ + (1 << 0) ); /*IntraMBMaxSizeReportMask*/ + OUT_BCS_BATCH(batch, /*Inter and Intra Conformance Max size limit*/ + (0x0600 << 16) | /*InterMbMaxSz 192 Byte*/ + (0x0800) ); /*IntraMbMaxSz 256 Byte*/ + OUT_BCS_BATCH(batch, 0x00000000); /*Reserved : MBZReserved*/ + OUT_BCS_BATCH(batch, 0x01020304); /*Slice QP Delta for bitrate control*/ + OUT_BCS_BATCH(batch, 0xFEFDFCFB); + OUT_BCS_BATCH(batch, 0x80601004); /*MAX = 128KB, MIN = 64KB*/ + OUT_BCS_BATCH(batch, 0x00800001); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_avc_directmode_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + int i; + + BEGIN_BCS_BATCH(batch, 69); + + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* Reference frames and Current frames */ + for(i = 0; i < NUM_MFC_DMV_BUFFERS; i++) { + if ( mfc_context->direct_mv_buffers[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + /* POL list */ + for(i = 0; i < 32; i++) { + OUT_BCS_BATCH(batch, i/2); + } + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_avc_slice_state(VADriverContextP ctx, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int rate_control_enable, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int beginmb = slice_param->macroblock_address; + int endmb = beginmb + slice_param->num_macroblocks; + int beginx = beginmb % width_in_mbs; + int beginy = beginmb / width_in_mbs; + int nextx = endmb % width_in_mbs; + int nexty = endmb / width_in_mbs; + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + int last_slice = (endmb == (width_in_mbs * height_in_mbs)); + int maxQpN, maxQpP; + unsigned char correct[6], grow, shrink; + int i; + int weighted_pred_idc = 0; + unsigned int luma_log2_weight_denom = slice_param->luma_log2_weight_denom; + unsigned int chroma_log2_weight_denom = slice_param->chroma_log2_weight_denom; + int num_ref_l0 = 0, num_ref_l1 = 0; + + if (batch == NULL) + batch = encoder_context->base.batch; + + if (slice_type == SLICE_TYPE_I) { + luma_log2_weight_denom = 0; + chroma_log2_weight_denom = 0; + } else if (slice_type == SLICE_TYPE_P) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + } else if (slice_type == SLICE_TYPE_B) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = pic_param->num_ref_idx_l1_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) { + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (weighted_pred_idc == 2) { + /* 8.4.3 - Derivation process for prediction weights (8-279) */ + luma_log2_weight_denom = 5; + chroma_log2_weight_denom = 5; + } + } + + maxQpN = mfc_context->bit_rate_control_context[slice_type].MaxQpNegModifier; + maxQpP = mfc_context->bit_rate_control_context[slice_type].MaxQpPosModifier; + + for (i = 0; i < 6; i++) + correct[i] = mfc_context->bit_rate_control_context[slice_type].Correct[i]; + + grow = mfc_context->bit_rate_control_context[slice_type].GrowInit + + (mfc_context->bit_rate_control_context[slice_type].GrowResistance << 4); + shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit + + (mfc_context->bit_rate_control_context[slice_type].ShrinkResistance << 4); + + BEGIN_BCS_BATCH(batch, 11);; + + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2) ); + OUT_BCS_BATCH(batch, slice_type); /*Slice Type: I:P:B Slice*/ + + OUT_BCS_BATCH(batch, + (num_ref_l0 << 16) | + (num_ref_l1 << 24) | + (chroma_log2_weight_denom << 8) | + (luma_log2_weight_denom << 0)); + + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag<<29) | /*Direct Prediction Type*/ + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + (qp<<16) | /*Slice Quantization Parameter*/ + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (beginy << 24) | /*First MB X&Y , the begin postion of current slice*/ + (beginx << 16) | + slice_param->macroblock_address ); + OUT_BCS_BATCH(batch, (nexty << 16) | nextx); /*Next slice first MB X&Y*/ + OUT_BCS_BATCH(batch, + (0/*rate_control_enable*/ << 31) | /*in CBR mode RateControlCounterEnable = enable*/ + (1 << 30) | /*ResetRateControlCounter*/ + (0 << 28) | /*RC Triggle Mode = Always Rate Control*/ + (4 << 24) | /*RC Stable Tolerance, middle level*/ + (0/*rate_control_enable*/ << 23) | /*RC Panic Enable*/ + (0 << 22) | /*QP mode, don't modfiy CBP*/ + (0 << 21) | /*MB Type Direct Conversion Enabled*/ + (0 << 20) | /*MB Type Skip Conversion Enabled*/ + (last_slice << 19) | /*IsLastSlice*/ + (0 << 18) | /*BitstreamOutputFlag Compressed BitStream Output Disable Flag 0:enable 1:disable*/ + (1 << 17) | /*HeaderPresentFlag*/ + (1 << 16) | /*SliceData PresentFlag*/ + (1 << 15) | /*TailPresentFlag*/ + (1 << 13) | /*RBSP NAL TYPE*/ + (0 << 12) ); /*CabacZeroWordInsertionEnable*/ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, + (maxQpN << 24) | /*Target QP - 24 is lowest QP*/ + (maxQpP << 16) | /*Target QP + 20 is highest QP*/ + (shrink << 8) | + (grow << 0)); + OUT_BCS_BATCH(batch, + (correct[5] << 20) | + (correct[4] << 16) | + (correct[3] << 12) | + (correct[2] << 8) | + (correct[1] << 4) | + (correct[0] << 0)); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void gen6_mfc_avc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 58); + + OUT_BCS_BATCH(batch, MFX_AVC_QM_STATE | 56); + OUT_BCS_BATCH(batch, 0xFF ) ; + for( i = 0; i < 56; i++) { + OUT_BCS_BATCH(batch, 0x10101010); + } + + ADVANCE_BCS_BATCH(batch); +} + +static void gen6_mfc_avc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 113); + OUT_BCS_BATCH(batch, MFC_AVC_FQM_STATE | (113 - 2)); + + for(i = 0; i < 112;i++) { + OUT_BCS_BATCH(batch, 0x10001000); + } + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfc_avc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, MFC_AVC_INSERT_OBJECT | (lenght_in_dws + 2 - 2)); + + OUT_BCS_BATCH(batch, + (0 << 16) | /* always start at offset 0 */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* FIXME: ??? */ + + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + ADVANCE_BCS_BATCH(batch); +} + +void +gen6_mfc_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + dri_bo *bo; + int i; + int width_in_mbs = 0; + int height_in_mbs = 0; + int slice_batchbuffer_size; + + if (encoder_context->codec == CODEC_H264) { + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + width_in_mbs = pSequenceParameter->picture_width_in_mbs; + height_in_mbs = pSequenceParameter->picture_height_in_mbs; + } else { + VAEncSequenceParameterBufferMPEG2 *pSequenceParameter = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + + assert(encoder_context->codec == CODEC_MPEG2); + + width_in_mbs = ALIGN(pSequenceParameter->picture_width, 16) / 16; + height_in_mbs = ALIGN(pSequenceParameter->picture_height, 16) / 16; + } + + slice_batchbuffer_size = 64 * width_in_mbs * height_in_mbs + 4096 + + (SLICE_HEADER + SLICE_TAIL) * encode_state->num_slice_params_ext; + + /*Encode common setup for MFC*/ + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + if (mfc_context->direct_mv_buffers[i].bo != NULL) + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 64, + 64); + assert(bo); + mfc_context->intra_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 64); + assert(bo); + mfc_context->macroblock_status_buffer.bo = bo; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 4 * width_in_mbs * 64, /* 4 * width_in_mbs * 64 */ + 64); + assert(bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 128 * width_in_mbs, /* 2 * widht_in_mbs * 64 */ + 0x1000); + assert(bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, + slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; + + i965_gpe_context_init(ctx, &mfc_context->gpe_context); +} + +static void gen6_mfc_avc_pipeline_picture_programing( VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_AVC, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen6_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen6_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + mfc_context->avc_img_state(ctx, encode_state, encoder_context); + mfc_context->avc_qm_state(ctx, encoder_context); + mfc_context->avc_fqm_state(ctx, encoder_context); + gen6_mfc_avc_directmode_state(ctx, encoder_context); + intel_mfc_avc_ref_idx_state(ctx, encode_state, encoder_context); +} + + +VAStatus +gen6_mfc_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); //run the pipeline + + return VA_STATUS_SUCCESS; +} + +VAStatus +gen6_mfc_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size) +{ + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VACodedBufferSegment *coded_buffer_segment; + + vaStatus = i965_MapBuffer(ctx, pPicParameter->coded_buf, (void **)&coded_buffer_segment); + assert(vaStatus == VA_STATUS_SUCCESS); + *encoded_bits_size = coded_buffer_segment->size * 8; + i965_UnmapBuffer(ctx, pPicParameter->coded_buf); + + return VA_STATUS_SUCCESS; +} + +#if __SOFTWARE__ + +static int +gen6_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y, int end_mb, int qp,unsigned int *msg, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size, unsigned char max_mb_size, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 11; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 24) | /* PackedMvNum, Debug*/ + (0 << 20) | /* No motion vector */ + (1 << 19) | /* CbpDcY */ + (1 << 18) | /* CbpDcU */ + (1 << 17) | /* CbpDcV */ + (msg[0] & 0xFFFF) ); + + OUT_BCS_BATCH(batch, (0xFFFF << 16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ + OUT_BCS_BATCH(batch, (0 << 27) | (end_mb << 26) | qp); /* Last MB */ + + /*Stuff for Intra MB*/ + OUT_BCS_BATCH(batch, msg[1]); /* We using Intra16x16 no 4x4 predmode*/ + OUT_BCS_BATCH(batch, msg[2]); + OUT_BCS_BATCH(batch, msg[3]&0xFC); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static int +gen6_mfc_avc_pak_object_inter(VADriverContextP ctx, int x, int y, int end_mb, int qp, + unsigned int *msg, unsigned int offset, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size,unsigned char max_mb_size, int slice_type, + struct intel_batchbuffer *batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int len_in_dwords = 11; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + + OUT_BCS_BATCH(batch, msg[2]); /* 32 MV*/ + OUT_BCS_BATCH(batch, offset); + + OUT_BCS_BATCH(batch, msg[0]); + + OUT_BCS_BATCH(batch, (0xFFFF<<16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ +#if 0 + if ( slice_type == SLICE_TYPE_B) { + OUT_BCS_BATCH(batch, (0xF<<28) | (end_mb << 26) | qp); /* Last MB */ + } else { + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ + } +#else + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ +#endif + + + /*Stuff for Inter MB*/ + OUT_BCS_BATCH(batch, msg[1]); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static void +gen6_mfc_avc_pipeline_slice_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + unsigned int *msg = NULL, offset = 0; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int i,x,y; + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int is_intra = slice_type == SLICE_TYPE_I; + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + gen6_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, encoder_context, + (rate_control_mode == VA_RC_CBR), qp_slice, slice_batch); + + if ( slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + dri_bo_map(vme_context->vme_output.bo , 1); + msg = (unsigned int *)vme_context->vme_output.bo->virtual; + + if (is_intra) { + msg += pSliceParameter->macroblock_address * INTRA_VME_OUTPUT_IN_DWS; + } else { + msg += pSliceParameter->macroblock_address * INTER_VME_OUTPUT_IN_DWS; + msg += 32; /* the first 32 DWs are MVs */ + offset = pSliceParameter->macroblock_address * INTER_VME_OUTPUT_IN_BYTES; + } + + for (i = pSliceParameter->macroblock_address; + i < pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks; i++) { + int last_mb = (i == (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks - 1) ); + x = i % width_in_mbs; + y = i / width_in_mbs; + + if (is_intra) { + assert(msg); + gen6_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + msg += INTRA_VME_OUTPUT_IN_DWS; + } else { + if (msg[0] & INTRA_MB_FLAG_MASK) { + gen6_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + gen6_mfc_avc_pak_object_inter(ctx, x, y, last_mb, qp, msg, offset, encoder_context, 0, 0, slice_type, slice_batch); + } + + msg += INTER_VME_OUTPUT_IN_DWS; + offset += INTER_VME_OUTPUT_IN_BYTES; + } + } + + dri_bo_unmap(vme_context->vme_output.bo); + + if ( last_slice ) { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 2, 8, + 2, 1, 1, 0, slice_batch); + } else { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 1, 8, + 1, 1, 1, 0, slice_batch); + } + + +} + +static dri_bo * +gen6_mfc_avc_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch;; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + gen6_mfc_avc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +#else + +static void +gen6_mfc_batchbuffer_surfaces_input(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(vme_context->vme_output.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(BIND_IDX_VME_OUTPUT), + SURFACE_STATE_OFFSET(BIND_IDX_VME_OUTPUT)); + assert(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->aux_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_SLICE_HEADER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_SLICE_HEADER)); +} + +static void +gen6_mfc_batchbuffer_surfaces_output(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + mfc_context->mfc_batchbuffer_surface.num_blocks = width_in_mbs * height_in_mbs + encode_state->num_slice_params_ext * 8 + 1; + mfc_context->mfc_batchbuffer_surface.size_block = 16 * CMD_LEN_IN_OWORD; /* 3 OWORDs */ + mfc_context->mfc_batchbuffer_surface.pitch = 16; + mfc_context->mfc_batchbuffer_surface.bo = dri_bo_alloc(i965->intel.bufmgr, + "MFC batchbuffer", + mfc_context->mfc_batchbuffer_surface.num_blocks * mfc_context->mfc_batchbuffer_surface.size_block, + 0x1000); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->mfc_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_BATCHBUFFER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_BATCHBUFFER)); +} + +static void +gen6_mfc_batchbuffer_surfaces_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen6_mfc_batchbuffer_surfaces_input(ctx, encode_state, encoder_context); + gen6_mfc_batchbuffer_surfaces_output(ctx, encode_state, encoder_context); +} + +static void +gen6_mfc_batchbuffer_idrt_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = mfc_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < mfc_context->gpe_context.num_kernels; i++) { + struct i965_kernel *kernel; + + kernel = &mfc_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 2; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = 4; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +gen6_mfc_batchbuffer_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + (void)mfc_context; +} + +static void +gen6_mfc_batchbuffer_emit_object_command(struct intel_batchbuffer *batch, + int index, + int head_offset, + int batchbuffer_offset, + int head_size, + int tail_size, + int number_mb_cmds, + int first_object, + int last_object, + int last_slice, + int mb_x, + int mb_y, + int width_in_mbs, + int qp, + unsigned int ref_index[2]) +{ + BEGIN_BATCH(batch, 14); + + OUT_BATCH(batch, CMD_MEDIA_OBJECT | (14 - 2)); + OUT_BATCH(batch, index); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*inline data */ + OUT_BATCH(batch, head_offset); + OUT_BATCH(batch, batchbuffer_offset); + OUT_BATCH(batch, + head_size << 16 | + tail_size); + OUT_BATCH(batch, + number_mb_cmds << 16 | + first_object << 2 | + last_object << 1 | + last_slice); + OUT_BATCH(batch, + mb_y << 8 | + mb_x); + OUT_BATCH(batch, + qp << 16 | + width_in_mbs); + OUT_BATCH(batch, ref_index[0]); + OUT_BATCH(batch, ref_index[1]); + + ADVANCE_BATCH(batch); +} + +static void +gen6_mfc_avc_batchbuffer_slice_command(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + VAEncSliceParameterBufferH264 *slice_param, + int head_offset, + unsigned short head_size, + unsigned short tail_size, + int batchbuffer_offset, + int qp, + int last_slice) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int total_mbs = slice_param->num_macroblocks; + int number_mb_cmds = 128; + int starting_mb = 0; + int last_object = 0; + int first_object = 1; + int i; + int mb_x, mb_y; + int index = (slice_param->slice_type == SLICE_TYPE_I) ? MFC_BATCHBUFFER_AVC_INTRA : MFC_BATCHBUFFER_AVC_INTER; + + for (i = 0; i < total_mbs / number_mb_cmds; i++) { + last_object = (total_mbs - starting_mb) == number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + + starting_mb += number_mb_cmds; + + gen6_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp, + vme_context->ref_index_in_mb); + + if (first_object) { + head_offset += head_size; + batchbuffer_offset += head_size; + } + + if (last_object) { + head_offset += tail_size; + batchbuffer_offset += tail_size; + } + + batchbuffer_offset += number_mb_cmds * CMD_LEN_IN_OWORD; + + first_object = 0; + } + + if (!last_object) { + last_object = 1; + number_mb_cmds = total_mbs % number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + starting_mb += number_mb_cmds; + + gen6_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp, + vme_context->ref_index_in_mb); + } +} + +/* + * return size in Owords (16bytes) + */ +static int +gen6_mfc_avc_batchbuffer_slice(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + int batchbuffer_offset) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *slice_batch = mfc_context->aux_batchbuffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + long head_offset; + int old_used = intel_batchbuffer_used_size(slice_batch), used; + unsigned short head_size, tail_size; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + /* Use the adjusted qp when slice_header is generated by driver */ + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + head_offset = old_used / 16; + gen6_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, + encoder_context, + (rate_control_mode == VA_RC_CBR), + qp_slice, + slice_batch); + + if (slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + head_size = (used - old_used) / 16; + old_used = used; + + /* tail */ + if (last_slice) { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 2, + 8, + 2, + 1, + 1, + 0, + slice_batch); + } else { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 1, + 8, + 1, + 1, + 1, + 0, + slice_batch); + } + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + tail_size = (used - old_used) / 16; + + + gen6_mfc_avc_batchbuffer_slice_command(ctx, + encoder_context, + pSliceParameter, + head_offset, + head_size, + tail_size, + batchbuffer_offset, + qp, + last_slice); + + return head_size + tail_size + pSliceParameter->num_macroblocks * CMD_LEN_IN_OWORD; +} + +static void +gen6_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i, size, offset = 0; + intel_batchbuffer_start_atomic(batch, 0x4000); + gen6_gpe_pipeline_setup(ctx, &mfc_context->gpe_context, batch); + + for ( i = 0; i < encode_state->num_slice_params_ext; i++) { + size = gen6_mfc_avc_batchbuffer_slice(ctx, encode_state, encoder_context, i, offset); + offset += size; + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen6_mfc_build_avc_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen6_mfc_batchbuffer_surfaces_setup(ctx, encode_state, encoder_context); + gen6_mfc_batchbuffer_idrt_setup(ctx, encode_state, encoder_context); + gen6_mfc_batchbuffer_constant_setup(ctx, encode_state, encoder_context); + gen6_mfc_avc_batchbuffer_pipeline(ctx, encode_state, encoder_context); +} + +static dri_bo * +gen6_mfc_avc_hardware_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + gen6_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context); + dri_bo_reference(mfc_context->mfc_batchbuffer_surface.bo); + + return mfc_context->mfc_batchbuffer_surface.bo; +} + +#endif + + +static void +gen6_mfc_avc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + if ( intel_mfc_interlace_check(ctx, encode_state, encoder_context) ) { + fprintf(stderr, "Current VA driver don't support interlace mode!\n"); + assert(0); + return; + } + +#if __SOFTWARE__ + slice_batch_bo = gen6_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context); +#else + slice_batch_bo = gen6_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context); +#endif + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen6_mfc_avc_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +VAStatus +gen6_mfc_avc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + for (;;) { + gen6_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_avc_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen6_mfc_avc_pipeline_programing(ctx, encode_state, encoder_context); //filling the pipeline + gen6_mfc_run(ctx, encode_state, encoder_context); + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + gen6_mfc_stop(ctx, encode_state, encoder_context, ¤t_frame_bits_size); + sts = intel_mfc_brc_postpack(encode_state, mfc_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + intel_mfc_hrd_context_update(encode_state, mfc_context); + break; + } + else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!mfc_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP)? "overflow": "underflow"); + mfc_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } else { + break; + } + } + + return VA_STATUS_SUCCESS; +} + +VAStatus +gen6_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + vaStatus = gen6_mfc_avc_encode_picture(ctx, encode_state, encoder_context); + break; + + /* FIXME: add for other profile */ + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +void +gen6_mfc_context_destroy(void *context) +{ + struct gen6_mfc_context *mfc_context = context; + int i; + + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + mfc_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + mfc_context->macroblock_status_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + i965_gpe_context_destroy(&mfc_context->gpe_context); + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = NULL; + + free(mfc_context); +} + +Bool gen6_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = calloc(1, sizeof(struct gen6_mfc_context)); + + if (!mfc_context) + return False; + + mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + mfc_context->gpe_context.idrt.max_entries = MAX_GPE_KERNELS; + mfc_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + mfc_context->gpe_context.curbe.length = 32 * 4; + + mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + mfc_context->gpe_context.vfe_state.num_urb_entries = 16; + mfc_context->gpe_context.vfe_state.gpgpu_mode = 0; + mfc_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + mfc_context->gpe_context.vfe_state.curbe_allocation_size = 37 - 1; + + i965_gpe_load_kernels(ctx, + &mfc_context->gpe_context, + gen6_mfc_kernels, + NUM_MFC_KERNEL); + + mfc_context->pipe_mode_select = gen6_mfc_pipe_mode_select; + mfc_context->set_surface_state = gen6_mfc_surface_state; + mfc_context->ind_obj_base_addr_state = gen6_mfc_ind_obj_base_addr_state; + mfc_context->avc_img_state = gen6_mfc_avc_img_state; + mfc_context->avc_qm_state = gen6_mfc_avc_qm_state; + mfc_context->avc_fqm_state = gen6_mfc_avc_fqm_state; + mfc_context->insert_object = gen6_mfc_avc_insert_object; + mfc_context->buffer_suface_setup = i965_gpe_buffer_suface_setup; + + encoder_context->mfc_context = mfc_context; + encoder_context->mfc_context_destroy = gen6_mfc_context_destroy; + encoder_context->mfc_pipeline = gen6_mfc_pipeline; + encoder_context->mfc_brc_prepare = intel_mfc_brc_prepare; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.h new file mode 100644 index 000000000..087c67624 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc.h @@ -0,0 +1,398 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou Chang + * + */ + +#ifndef _GEN6_MFC_H_ +#define _GEN6_MFC_H_ + +#include +#include +#include + +#include "i965_gpe_utils.h" +#include "i965_encoder.h" + +struct encode_state; + +#define MAX_MFC_REFERENCE_SURFACES 16 +#define NUM_MFC_DMV_BUFFERS 34 + +#define INTRA_MB_FLAG_MASK 0x00002000 + +/* The space required for slice header SLICE_STATE + header. + * Is it enough? */ +#define SLICE_HEADER 80 + +/* the space required for slice tail. */ +#define SLICE_TAIL 16 + +#define __SOFTWARE__ 0 + +#define MFC_BATCHBUFFER_AVC_INTRA 0 +#define MFC_BATCHBUFFER_AVC_INTER 1 +#define NUM_MFC_KERNEL 2 + +#define BIND_IDX_VME_OUTPUT 0 +#define BIND_IDX_MFC_SLICE_HEADER 1 +#define BIND_IDX_MFC_BATCHBUFFER 2 + +#define CMD_LEN_IN_OWORD 4 + +#define BRC_CLIP(x, min, max) \ + { \ + x = ((x > (max)) ? (max) : ((x < (min)) ? (min) : x)); \ + } + +#define BRC_P_B_QP_DIFF 4 +#define BRC_I_P_QP_DIFF 2 +#define BRC_I_B_QP_DIFF (BRC_I_P_QP_DIFF + BRC_P_B_QP_DIFF) + +#define BRC_PWEIGHT 0.6 /* weight if P slice with comparison to I slice */ +#define BRC_BWEIGHT 0.25 /* weight if B slice with comparison to I slice */ + +#define BRC_QP_MAX_CHANGE 5 /* maximum qp modification */ +#define BRC_CY 0.1 /* weight for */ +#define BRC_CX_UNDERFLOW 5. +#define BRC_CX_OVERFLOW -4. + +#define BRC_PI_0_5 1.5707963267948966192313216916398 + +typedef enum { + VME_V_PRED = 0, + VME_H_PRED = 1, + VME_DC_PRED = 2, + VME_PL_PRED = 3, + + VME_MB_INTRA_MODE_COUNT +} VME_MB_INTRA_PRED_MODE; + +typedef enum { + PAK_DC_PRED = 0, + PAK_V_PRED = 1, + PAK_H_PRED = 2, + PAK_TM_PRED = 3, + + PAK_MB_INTRA_MODE_COUNT +} VP8_PAK_MB_INTRA_PRED_MODE; + +typedef enum +{ + VME_B_V_PRED = 0, + VME_B_H_PRED = 1, + VME_B_DC_PRED = 2, + VME_B_DL_PRED = 3, + VME_B_DR_PRED = 4, + VME_B_VR_PRED = 5, + VME_B_HD_PRED = 6, + VME_B_VL_PRED = 7, + VME_B_HU_PRED = 8, + + VME_B_INTRA_MODE_COUNT +} VME_BLOCK_INTRA_PRED_MODE; + +typedef enum +{ + PAK_B_DC_PRED = 0, + PAK_B_TM_PRED = 1, + PAK_B_VE_PRED = 2, + PAK_B_HE_PRED = 3, + PAK_B_LD_PRED = 4, + PAK_B_RD_PRED = 5, + PAK_B_VR_PRED = 6, + PAK_B_VL_PRED = 7, + PAK_B_HD_PRED = 8, + PAK_B_HU_PRED = 9, + + PAK_B_INTRA_MODE_COUNT +} VP8_PAK_BLOCK_INTRA_PRED_MODE; + +typedef struct +{ + int vme_intra_mb_mode; + int vp8_pak_intra_mb_mode; +} vp8_intra_mb_mode_map_t; + +typedef struct +{ + int vme_intra_block_mode; + int vp8_pak_intra_block_mode; +} vp8_intra_block_mode_map_t; + +typedef enum _gen6_brc_status +{ + BRC_NO_HRD_VIOLATION = 0, + BRC_UNDERFLOW = 1, + BRC_OVERFLOW = 2, + BRC_UNDERFLOW_WITH_MAX_QP = 3, + BRC_OVERFLOW_WITH_MIN_QP = 4, +} gen6_brc_status; + +struct gen6_mfc_avc_surface_aux +{ + dri_bo *dmv_top; + dri_bo *dmv_bottom; +}; + +struct gen6_mfc_context +{ + struct { + unsigned int width; + unsigned int height; + unsigned int w_pitch; + unsigned int h_pitch; + } surface_state; + + //MFX_PIPE_BUF_ADDR_STATE + struct { + dri_bo *bo; + } post_deblocking_output; //OUTPUT: reconstructed picture + + struct { + dri_bo *bo; + } pre_deblocking_output; //OUTPUT: reconstructed picture with deblocked + + struct { + dri_bo *bo; + } uncompressed_picture_source; //INPUT: original compressed image + + struct { + dri_bo *bo; + } intra_row_store_scratch_buffer; //INTERNAL: + + struct { + dri_bo *bo; + } macroblock_status_buffer; //INTERNAL: + + struct { + dri_bo *bo; + } deblocking_filter_row_store_scratch_buffer; //INTERNAL: + + struct { + dri_bo *bo; + } reference_surfaces[MAX_MFC_REFERENCE_SURFACES]; //INTERNAL: refrence surfaces + + //MFX_IND_OBJ_BASE_ADDR_STATE + struct{ + dri_bo *bo; + } mfc_indirect_mv_object; //INPUT: the blocks' mv info + + struct { + dri_bo *bo; + int offset; + int end_offset; + } mfc_indirect_pak_bse_object; //OUTPUT: the compressed bitstream + + //MFX_BSP_BUF_BASE_ADDR_STATE + struct { + dri_bo *bo; + } bsd_mpc_row_store_scratch_buffer; //INTERNAL: + + //MFX_AVC_DIRECTMODE_STATE + struct { + dri_bo *bo; + } direct_mv_buffers[NUM_MFC_DMV_BUFFERS]; //INTERNAL: 0-31 as input,32 and 33 as output + + //Bit rate tracking context + struct { + unsigned int QpPrimeY; + unsigned int MaxQpNegModifier; + unsigned int MaxQpPosModifier; + unsigned char MaxSizeInWord; + unsigned char TargetSizeInWord; + unsigned char Correct[6]; + unsigned char GrowInit; + unsigned char GrowResistance; + unsigned char ShrinkInit; + unsigned char ShrinkResistance; + + unsigned int target_mb_size; + unsigned int target_frame_size; + } bit_rate_control_context[3]; //INTERNAL: for I, P, B frames + + struct { + int mode; + int gop_nums[3]; + int target_frame_size[3]; // I,P,B + double bits_per_frame; + double qpf_rounding_accumulator; + + double saved_bps; + double saved_fps; + int saved_intra_period; + int saved_ip_period; + int saved_idr_period; + } brc; + + struct { + double current_buffer_fullness; + double target_buffer_fullness; + double buffer_capacity; + unsigned int buffer_size; + unsigned int violation_noted; + } hrd; + + //HRD control context + struct { + int i_bit_rate_value; + int i_cpb_size_value; + + int i_initial_cpb_removal_delay; + int i_cpb_removal_delay; + + int i_frame_number; + + int i_initial_cpb_removal_delay_length; + int i_cpb_removal_delay_length; + int i_dpb_output_delay_length; + }vui_hrd; + + struct { + unsigned char *vp8_frame_header; + unsigned int frame_header_bit_count; + unsigned int frame_header_qindex_update_pos; + unsigned int frame_header_lf_update_pos; + unsigned int frame_header_token_update_pos; + unsigned int frame_header_bin_mv_upate_pos; + + unsigned int intermediate_partition_offset[8]; + unsigned int intermediate_buffer_max_size; + unsigned int final_frame_byte_offset; + + unsigned char mb_segment_tree_probs[3]; + unsigned char y_mode_probs[4]; + unsigned char uv_mode_probs[3]; + unsigned char mv_probs[2][19]; + + unsigned char prob_skip_false; + unsigned char prob_intra; + unsigned char prob_last; + unsigned char prob_gf; + + dri_bo *frame_header_bo; + dri_bo *intermediate_bo; + dri_bo *final_frame_bo; + dri_bo *stream_out_bo; + dri_bo *coeff_probs_stream_in_bo; + dri_bo *token_statistics_bo; + dri_bo *mpc_row_store_bo; + }vp8_state; + + //"buffered_QMatrix" will be used to buffer the QMatrix if the app sends one. + // Or else, we will load a default QMatrix from the driver for JPEG encode. + VAQMatrixBufferJPEG buffered_qmatrix; + struct i965_gpe_context gpe_context; + struct i965_buffer_surface mfc_batchbuffer_surface; + struct intel_batchbuffer *aux_batchbuffer; + struct i965_buffer_surface aux_batchbuffer_surface; + + void (*pipe_mode_select)(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context); + void (*set_surface_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*ind_obj_base_addr_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*avc_img_state)(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + void (*avc_qm_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*avc_fqm_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*insert_object)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + unsigned int *insert_data, + int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, + int is_last_header, int is_end_of_slice, + int emulation_flag, + struct intel_batchbuffer *batch); + void (*buffer_suface_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +}; + +VAStatus gen6_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); +void gen6_mfc_context_destroy(void *context); + +extern +Bool gen75_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + + +extern int intel_mfc_update_hrd(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int frame_bits); + +extern int intel_mfc_brc_postpack(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int frame_bits); + +extern void intel_mfc_hrd_context_update(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context); + +extern int intel_mfc_interlace_check(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void intel_mfc_brc_prepare(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void intel_mfc_avc_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch); + +extern VAStatus intel_mfc_avc_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern int intel_avc_enc_slice_type_fixup(int type); + +extern void +intel_mfc_avc_ref_idx_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern +Bool gen8_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +extern void +intel_avc_slice_insert_packed_data(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch); + +extern +Bool gen9_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +#endif /* _GEN6_MFC_BCS_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc_common.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc_common.c new file mode 100644 index 000000000..e0d83b687 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfc_common.c @@ -0,0 +1,1926 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zhao Yakui + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" +#include "gen9_mfc.h" +#include "intel_media.h" + +#ifndef HAVE_LOG2F +#define log2f(x) (logf(x)/(float)M_LN2) +#endif + +int intel_avc_enc_slice_type_fixup(int slice_type) +{ + if (slice_type == SLICE_TYPE_SP || + slice_type == SLICE_TYPE_P) + slice_type = SLICE_TYPE_P; + else if (slice_type == SLICE_TYPE_SI || + slice_type == SLICE_TYPE_I) + slice_type = SLICE_TYPE_I; + else { + if (slice_type != SLICE_TYPE_B) + WARN_ONCE("Invalid slice type for H.264 encoding!\n"); + + slice_type = SLICE_TYPE_B; + } + + return slice_type; +} + +static void +intel_mfc_bit_rate_control_context_init(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context) +{ + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + float fps = pSequenceParameter->time_scale * 0.5 / pSequenceParameter->num_units_in_tick ; + int inter_mb_size = pSequenceParameter->bits_per_second * 1.0 / (fps+4.0) / width_in_mbs / height_in_mbs; + int intra_mb_size = inter_mb_size * 5.0; + int i; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].target_mb_size = intra_mb_size; + mfc_context->bit_rate_control_context[SLICE_TYPE_I].target_frame_size = intra_mb_size * width_in_mbs * height_in_mbs; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].target_mb_size = inter_mb_size; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].target_frame_size = inter_mb_size * width_in_mbs * height_in_mbs; + mfc_context->bit_rate_control_context[SLICE_TYPE_B].target_mb_size = inter_mb_size; + mfc_context->bit_rate_control_context[SLICE_TYPE_B].target_frame_size = inter_mb_size * width_in_mbs * height_in_mbs; + + for(i = 0 ; i < 3; i++) { + mfc_context->bit_rate_control_context[i].QpPrimeY = 26; + mfc_context->bit_rate_control_context[i].MaxQpNegModifier = 6; + mfc_context->bit_rate_control_context[i].MaxQpPosModifier = 6; + mfc_context->bit_rate_control_context[i].GrowInit = 6; + mfc_context->bit_rate_control_context[i].GrowResistance = 4; + mfc_context->bit_rate_control_context[i].ShrinkInit = 6; + mfc_context->bit_rate_control_context[i].ShrinkResistance = 4; + + mfc_context->bit_rate_control_context[i].Correct[0] = 8; + mfc_context->bit_rate_control_context[i].Correct[1] = 4; + mfc_context->bit_rate_control_context[i].Correct[2] = 2; + mfc_context->bit_rate_control_context[i].Correct[3] = 2; + mfc_context->bit_rate_control_context[i].Correct[4] = 4; + mfc_context->bit_rate_control_context[i].Correct[5] = 8; + } + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].TargetSizeInWord = (intra_mb_size + 16)/ 16; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].TargetSizeInWord = (inter_mb_size + 16)/ 16; + mfc_context->bit_rate_control_context[SLICE_TYPE_B].TargetSizeInWord = (inter_mb_size + 16)/ 16; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].MaxSizeInWord = mfc_context->bit_rate_control_context[SLICE_TYPE_I].TargetSizeInWord * 1.5; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].MaxSizeInWord = mfc_context->bit_rate_control_context[SLICE_TYPE_P].TargetSizeInWord * 1.5; + mfc_context->bit_rate_control_context[SLICE_TYPE_B].MaxSizeInWord = mfc_context->bit_rate_control_context[SLICE_TYPE_B].TargetSizeInWord * 1.5; +} + +static void intel_mfc_brc_init(struct encode_state *encode_state, + struct intel_encoder_context* encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncMiscParameterBuffer* pMiscParamHRD = NULL; + VAEncMiscParameterHRD* pParameterHRD = NULL; + double bitrate = pSequenceParameter->bits_per_second; + double framerate = (double)pSequenceParameter->time_scale /(2 * (double)pSequenceParameter->num_units_in_tick); + int inum = 1, pnum = 0, bnum = 0; /* Gop structure: number of I, P, B frames in the Gop. */ + int intra_period = pSequenceParameter->intra_period; + int ip_period = pSequenceParameter->ip_period; + double qp1_size = 0.1 * 8 * 3 * (pSequenceParameter->picture_width_in_mbs<<4) * (pSequenceParameter->picture_height_in_mbs<<4)/2; + double qp51_size = 0.001 * 8 * 3 * (pSequenceParameter->picture_width_in_mbs<<4) * (pSequenceParameter->picture_height_in_mbs<<4)/2; + double bpf; + + if (!encode_state->misc_param[VAEncMiscParameterTypeHRD] || !encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer) + return; + + pMiscParamHRD = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + pParameterHRD = (VAEncMiscParameterHRD*)pMiscParamHRD->data; + + if (pSequenceParameter->ip_period) { + pnum = (intra_period + ip_period - 1)/ip_period - 1; + bnum = intra_period - inum - pnum; + } + + mfc_context->brc.mode = encoder_context->rate_control_mode; + + mfc_context->brc.target_frame_size[SLICE_TYPE_I] = (int)((double)((bitrate * intra_period)/framerate) / + (double)(inum + BRC_PWEIGHT * pnum + BRC_BWEIGHT * bnum)); + mfc_context->brc.target_frame_size[SLICE_TYPE_P] = BRC_PWEIGHT * mfc_context->brc.target_frame_size[SLICE_TYPE_I]; + mfc_context->brc.target_frame_size[SLICE_TYPE_B] = BRC_BWEIGHT * mfc_context->brc.target_frame_size[SLICE_TYPE_I]; + + mfc_context->brc.gop_nums[SLICE_TYPE_I] = inum; + mfc_context->brc.gop_nums[SLICE_TYPE_P] = pnum; + mfc_context->brc.gop_nums[SLICE_TYPE_B] = bnum; + + bpf = mfc_context->brc.bits_per_frame = bitrate/framerate; + + mfc_context->hrd.buffer_size = (double)pParameterHRD->buffer_size; + mfc_context->hrd.current_buffer_fullness = + (double)(pParameterHRD->initial_buffer_fullness < mfc_context->hrd.buffer_size)? + pParameterHRD->initial_buffer_fullness: mfc_context->hrd.buffer_size/2.; + mfc_context->hrd.target_buffer_fullness = (double)mfc_context->hrd.buffer_size/2.; + mfc_context->hrd.buffer_capacity = (double)mfc_context->hrd.buffer_size/qp1_size; + mfc_context->hrd.violation_noted = 0; + + if ((bpf > qp51_size) && (bpf < qp1_size)) { + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY = 51 - 50*(bpf - qp51_size)/(qp1_size - qp51_size); + } + else if (bpf >= qp1_size) + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY = 1; + else if (bpf <= qp51_size) + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY = 51; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY = mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY; + mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY = mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY; + + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY, 1, 51); +} + +int intel_mfc_update_hrd(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int frame_bits) +{ + double prev_bf = mfc_context->hrd.current_buffer_fullness; + + mfc_context->hrd.current_buffer_fullness -= frame_bits; + + if (mfc_context->hrd.buffer_size > 0 && mfc_context->hrd.current_buffer_fullness <= 0.) { + mfc_context->hrd.current_buffer_fullness = prev_bf; + return BRC_UNDERFLOW; + } + + mfc_context->hrd.current_buffer_fullness += mfc_context->brc.bits_per_frame; + if (mfc_context->hrd.buffer_size > 0 && mfc_context->hrd.current_buffer_fullness > mfc_context->hrd.buffer_size) { + if (mfc_context->brc.mode == VA_RC_VBR) + mfc_context->hrd.current_buffer_fullness = mfc_context->hrd.buffer_size; + else { + mfc_context->hrd.current_buffer_fullness = prev_bf; + return BRC_OVERFLOW; + } + } + return BRC_NO_HRD_VIOLATION; +} + +int intel_mfc_brc_postpack(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int frame_bits) +{ + gen6_brc_status sts = BRC_NO_HRD_VIOLATION; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slicetype = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int qpi = mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY; + int qpp = mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY; + int qpb = mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY; + int qp; // quantizer of previously encoded slice of current type + int qpn; // predicted quantizer for next frame of current type in integer format + double qpf; // predicted quantizer for next frame of current type in float format + double delta_qp; // QP correction + int target_frame_size, frame_size_next; + /* Notes: + * x - how far we are from HRD buffer borders + * y - how far we are from target HRD buffer fullness + */ + double x, y; + double frame_size_alpha; + + qp = mfc_context->bit_rate_control_context[slicetype].QpPrimeY; + + target_frame_size = mfc_context->brc.target_frame_size[slicetype]; + if (mfc_context->hrd.buffer_capacity < 5) + frame_size_alpha = 0; + else + frame_size_alpha = (double)mfc_context->brc.gop_nums[slicetype]; + if (frame_size_alpha > 30) frame_size_alpha = 30; + frame_size_next = target_frame_size + (double)(target_frame_size - frame_bits) / + (double)(frame_size_alpha + 1.); + + /* frame_size_next: avoiding negative number and too small value */ + if ((double)frame_size_next < (double)(target_frame_size * 0.25)) + frame_size_next = (int)((double)target_frame_size * 0.25); + + qpf = (double)qp * target_frame_size / frame_size_next; + qpn = (int)(qpf + 0.5); + + if (qpn == qp) { + /* setting qpn we round qpf making mistakes: now we are trying to compensate this */ + mfc_context->brc.qpf_rounding_accumulator += qpf - qpn; + if (mfc_context->brc.qpf_rounding_accumulator > 1.0) { + qpn++; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } else if (mfc_context->brc.qpf_rounding_accumulator < -1.0) { + qpn--; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } + } + /* making sure that QP is not changing too fast */ + if ((qpn - qp) > BRC_QP_MAX_CHANGE) qpn = qp + BRC_QP_MAX_CHANGE; + else if ((qpn - qp) < -BRC_QP_MAX_CHANGE) qpn = qp - BRC_QP_MAX_CHANGE; + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, 1, 51); + + /* checking wthether HRD compliance is still met */ + sts = intel_mfc_update_hrd(encode_state, mfc_context, frame_bits); + + /* calculating QP delta as some function*/ + x = mfc_context->hrd.target_buffer_fullness - mfc_context->hrd.current_buffer_fullness; + if (x > 0) { + x /= mfc_context->hrd.target_buffer_fullness; + y = mfc_context->hrd.current_buffer_fullness; + } + else { + x /= (mfc_context->hrd.buffer_size - mfc_context->hrd.target_buffer_fullness); + y = mfc_context->hrd.buffer_size - mfc_context->hrd.current_buffer_fullness; + } + if (y < 0.01) y = 0.01; + if (x > 1) x = 1; + else if (x < -1) x = -1; + + delta_qp = BRC_QP_MAX_CHANGE*exp(-1/y)*sin(BRC_PI_0_5 * x); + qpn = (int)(qpn + delta_qp + 0.5); + + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, 1, 51); + + if (sts == BRC_NO_HRD_VIOLATION) { // no HRD violation + /* correcting QPs of slices of other types */ + if (slicetype == SLICE_TYPE_P) { + if (abs(qpn + BRC_P_B_QP_DIFF - qpb) > 2) + mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY += (qpn + BRC_P_B_QP_DIFF - qpb) >> 1; + if (abs(qpn - BRC_I_P_QP_DIFF - qpi) > 2) + mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY += (qpn - BRC_I_P_QP_DIFF - qpi) >> 1; + } else if (slicetype == SLICE_TYPE_I) { + if (abs(qpn + BRC_I_B_QP_DIFF - qpb) > 4) + mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY += (qpn + BRC_I_B_QP_DIFF - qpb) >> 2; + if (abs(qpn + BRC_I_P_QP_DIFF - qpp) > 2) + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY += (qpn + BRC_I_P_QP_DIFF - qpp) >> 2; + } else { // SLICE_TYPE_B + if (abs(qpn - BRC_P_B_QP_DIFF - qpp) > 2) + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY += (qpn - BRC_P_B_QP_DIFF - qpp) >> 1; + if (abs(qpn - BRC_I_B_QP_DIFF - qpi) > 4) + mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY += (qpn - BRC_I_B_QP_DIFF - qpi) >> 2; + } + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_B].QpPrimeY, 1, 51); + } else if (sts == BRC_UNDERFLOW) { // underflow + if (qpn <= qp) qpn = qp + 1; + if (qpn > 51) { + qpn = 51; + sts = BRC_UNDERFLOW_WITH_MAX_QP; //underflow with maxQP + } + } else if (sts == BRC_OVERFLOW) { + if (qpn >= qp) qpn = qp - 1; + if (qpn < 1) { // < 0 (?) overflow with minQP + qpn = 1; + sts = BRC_OVERFLOW_WITH_MIN_QP; // bit stuffing to be done + } + } + + mfc_context->bit_rate_control_context[slicetype].QpPrimeY = qpn; + + return sts; +} + +static void intel_mfc_hrd_context_init(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int target_bit_rate = pSequenceParameter->bits_per_second; + + // current we only support CBR mode. + if (rate_control_mode == VA_RC_CBR) { + mfc_context->vui_hrd.i_bit_rate_value = target_bit_rate >> 10; + mfc_context->vui_hrd.i_cpb_size_value = (target_bit_rate * 8) >> 10; + mfc_context->vui_hrd.i_initial_cpb_removal_delay = mfc_context->vui_hrd.i_cpb_size_value * 0.5 * 1024 / target_bit_rate * 90000; + mfc_context->vui_hrd.i_cpb_removal_delay = 2; + mfc_context->vui_hrd.i_frame_number = 0; + + mfc_context->vui_hrd.i_initial_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_dpb_output_delay_length = 24; + } + +} + +void +intel_mfc_hrd_context_update(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context) +{ + mfc_context->vui_hrd.i_frame_number++; +} + +int intel_mfc_interlace_check(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSliceParameterBufferH264 *pSliceParameter; + int i; + int mbCount = 0; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[i]->buffer; + mbCount += pSliceParameter->num_macroblocks; + } + + if ( mbCount == ( width_in_mbs * height_in_mbs ) ) + return 0; + + return 1; +} + +/* + * Check whether the parameters related with CBR are updated and decide whether + * it needs to reinitialize the configuration related with CBR. + * Currently it will check the following parameters: + * bits_per_second + * frame_rate + * gop_configuration(intra_period, ip_period, intra_idr_period) + */ +static bool intel_mfc_brc_updated_check(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + double cur_fps, cur_bitrate; + VAEncSequenceParameterBufferH264 *pSequenceParameter; + + + if (rate_control_mode != VA_RC_CBR) { + return false; + } + + pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + + cur_bitrate = pSequenceParameter->bits_per_second; + cur_fps = (double)pSequenceParameter->time_scale / + (2 * (double)pSequenceParameter->num_units_in_tick); + + if ((cur_bitrate == mfc_context->brc.saved_bps) && + (cur_fps == mfc_context->brc.saved_fps) && + (pSequenceParameter->intra_period == mfc_context->brc.saved_intra_period) && + (pSequenceParameter->intra_idr_period == mfc_context->brc.saved_idr_period) && + (pSequenceParameter->intra_period == mfc_context->brc.saved_intra_period)) { + /* the parameters related with CBR are not updaetd */ + return false; + } + + mfc_context->brc.saved_ip_period = pSequenceParameter->ip_period; + mfc_context->brc.saved_intra_period = pSequenceParameter->intra_period; + mfc_context->brc.saved_idr_period = pSequenceParameter->intra_idr_period; + mfc_context->brc.saved_fps = cur_fps; + mfc_context->brc.saved_bps = cur_bitrate; + return true; +} + +void intel_mfc_brc_prepare(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + if (rate_control_mode == VA_RC_CBR) { + bool brc_updated; + assert(encoder_context->codec != CODEC_MPEG2); + + brc_updated = intel_mfc_brc_updated_check(encode_state, encoder_context); + + /*Programing bit rate control */ + if ((mfc_context->bit_rate_control_context[SLICE_TYPE_I].MaxSizeInWord == 0) || + brc_updated) { + intel_mfc_bit_rate_control_context_init(encode_state, mfc_context); + intel_mfc_brc_init(encode_state, encoder_context); + } + + /*Programing HRD control */ + if ((mfc_context->vui_hrd.i_cpb_size_value == 0) || brc_updated ) + intel_mfc_hrd_context_init(encode_state, encoder_context); + } +} + +static int intel_avc_find_skipemulcnt(unsigned char *buf, int bits_length) +{ + int i, found; + int leading_zero_cnt, byte_length, zero_byte; + int nal_unit_type; + int skip_cnt = 0; + +#define NAL_UNIT_TYPE_MASK 0x1f +#define HW_MAX_SKIP_LENGTH 15 + + byte_length = ALIGN(bits_length, 32) >> 3; + + + leading_zero_cnt = 0; + found = 0; + for(i = 0; i < byte_length - 4; i++) { + if (((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 1)) || + ((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 0) && (buf[i + 3] == 1))) { + found = 1; + break; + } + leading_zero_cnt++; + } + if (!found) { + /* warning message is complained. But anyway it will be inserted. */ + WARN_ONCE("Invalid packed header data. " + "Can't find the 000001 start_prefix code\n"); + return 0; + } + i = leading_zero_cnt; + + zero_byte = 0; + if (!((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 1))) + zero_byte = 1; + + skip_cnt = leading_zero_cnt + zero_byte + 3; + + /* the unit header byte is accounted */ + nal_unit_type = (buf[skip_cnt]) & NAL_UNIT_TYPE_MASK; + skip_cnt += 1; + + if (nal_unit_type == 14 || nal_unit_type == 20 || nal_unit_type == 21) { + /* more unit header bytes are accounted for MVC/SVC */ + skip_cnt += 3; + } + if (skip_cnt > HW_MAX_SKIP_LENGTH) { + WARN_ONCE("Too many leading zeros are padded for packed data. " + "It is beyond the HW range.!!!\n"); + } + return skip_cnt; +} + +void intel_mfc_avc_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SPS); + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int skip_emul_byte_cnt; + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_avc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_PPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_avc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderH264_SEI); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_avc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } else if (rate_control_mode == VA_RC_CBR) { + // this is frist AU + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + unsigned char *sei_data = NULL; + + int length_in_bits = build_avc_sei_buffer_timing( + mfc_context->vui_hrd.i_initial_cpb_removal_delay_length, + mfc_context->vui_hrd.i_initial_cpb_removal_delay, + 0, + mfc_context->vui_hrd.i_cpb_removal_delay_length, mfc_context->vui_hrd.i_cpb_removal_delay * mfc_context->vui_hrd.i_frame_number, + mfc_context->vui_hrd.i_dpb_output_delay_length, + 0, + &sei_data); + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)sei_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, + 0, + 0, + 1, + slice_batch); + free(sei_data); + } +} + +VAStatus intel_mfc_avc_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + GenAvcSurface *gen6_avc_surface; + dri_bo *bo; + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i, j, enable_avc_ildb = 0; + VAEncSliceParameterBufferH264 *slice_param; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + if (IS_GEN6(i965->intel.device_info)) { + /* On the SNB it should be fixed to 128 for the DMV buffer */ + width_in_mbs = 128; + } + + for (j = 0; j < encode_state->num_slice_params_ext && enable_avc_ildb == 0; j++) { + assert(encode_state->slice_params_ext && encode_state->slice_params_ext[j]->buffer); + slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[j]->buffer; + + for (i = 0; i < encode_state->slice_params_ext[j]->num_elements; i++) { + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + /*Setup all the input&output object*/ + + /* Setup current frame and current direct mv buffer*/ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + if ( obj_surface->private_data == NULL) { + gen6_avc_surface = calloc(sizeof(GenAvcSurface), 1); + assert(gen6_avc_surface); + gen6_avc_surface->dmv_top = + dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 68 * width_in_mbs * height_in_mbs, + 64); + gen6_avc_surface->dmv_bottom = + dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 68 * width_in_mbs * height_in_mbs, + 64); + assert(gen6_avc_surface->dmv_top); + assert(gen6_avc_surface->dmv_bottom); + obj_surface->private_data = (void *)gen6_avc_surface; + obj_surface->free_private_data = (void *)gen_free_avc_surface; + } + gen6_avc_surface = (GenAvcSurface *) obj_surface->private_data; + mfc_context->direct_mv_buffers[NUM_MFC_DMV_BUFFERS - 2].bo = gen6_avc_surface->dmv_top; + mfc_context->direct_mv_buffers[NUM_MFC_DMV_BUFFERS - 1].bo = gen6_avc_surface->dmv_bottom; + dri_bo_reference(gen6_avc_surface->dmv_top); + dri_bo_reference(gen6_avc_surface->dmv_bottom); + + if (enable_avc_ildb) { + mfc_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->post_deblocking_output.bo); + } else { + mfc_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->pre_deblocking_output.bo); + } + + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* Setup reference frames and direct mv buffers*/ + for(i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++) { + obj_surface = encode_state->reference_objects[i]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[i].bo = obj_surface->bo; + dri_bo_reference(obj_surface->bo); + + /* Check DMV buffer */ + if ( obj_surface->private_data == NULL) { + + gen6_avc_surface = calloc(sizeof(GenAvcSurface), 1); + assert(gen6_avc_surface); + gen6_avc_surface->dmv_top = + dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 68 * width_in_mbs * height_in_mbs, + 64); + gen6_avc_surface->dmv_bottom = + dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 68 * width_in_mbs * height_in_mbs, + 64); + assert(gen6_avc_surface->dmv_top); + assert(gen6_avc_surface->dmv_bottom); + obj_surface->private_data = gen6_avc_surface; + obj_surface->free_private_data = gen_free_avc_surface; + } + + gen6_avc_surface = (GenAvcSurface *) obj_surface->private_data; + /* Setup DMV buffer */ + mfc_context->direct_mv_buffers[i*2].bo = gen6_avc_surface->dmv_top; + mfc_context->direct_mv_buffers[i*2+1].bo = gen6_avc_surface->dmv_bottom; + dri_bo_reference(gen6_avc_surface->dmv_top); + dri_bo_reference(gen6_avc_surface->dmv_bottom); + } else { + break; + } + } + + mfc_context->uncompressed_picture_source.bo = encode_state->input_yuv_object->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} +/* + * The LUT uses the pair of 4-bit units: (shift, base) structure. + * 2^K * X = value . + * So it is necessary to convert one cost into the nearest LUT format. + * The derivation is: + * 2^K *x = 2^n * (1 + deltaX) + * k + log2(x) = n + log2(1 + deltaX) + * log2(x) = n - k + log2(1 + deltaX) + * As X is in the range of [1, 15] + * 4 > n - k + log2(1 + deltaX) >= 0 + * => n + log2(1 + deltaX) >= k > n - 4 + log2(1 + deltaX) + * Then we can derive the corresponding K and get the nearest LUT format. + */ +int intel_format_lutvalue(int value, int max) +{ + int ret; + int logvalue, temp1, temp2; + + if (value <= 0) + return 0; + + logvalue = (int)(log2f((float)value)); + if (logvalue < 4) { + ret = value; + } else { + int error, temp_value, base, j, temp_err; + error = value; + j = logvalue - 4 + 1; + ret = -1; + for(; j <= logvalue; j++) { + if (j == 0) { + base = value >> j; + } else { + base = (value + (1 << (j - 1)) - 1) >> j; + } + if (base >= 16) + continue; + + temp_value = base << j; + temp_err = abs(value - temp_value); + if (temp_err < error) { + error = temp_err; + ret = (j << 4) | base; + if (temp_err == 0) + break; + } + } + } + temp1 = (ret & 0xf) << ((ret & 0xf0) >> 4); + temp2 = (max & 0xf) << ((max & 0xf0) >> 4); + if (temp1 > temp2) + ret = max; + return ret; + +} + + +#define QP_MAX 52 +#define VP8_QP_MAX 128 + + +static float intel_lambda_qp(int qp) +{ + float value, lambdaf; + value = qp; + value = value / 6 - 2; + if (value < 0) + value = 0; + lambdaf = roundf(powf(2, value)); + return lambdaf; +} + + +void intel_vme_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int qp, m_cost, j, mv_count; + uint8_t *vme_state_message = (uint8_t *)(vme_context->vme_state_message); + float lambda, m_costf; + + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + + + if (encoder_context->rate_control_mode == VA_RC_CQP) + qp = pic_param->pic_init_qp + slice_param->slice_qp_delta; + else + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + + if (vme_state_message == NULL) + return; + + assert(qp <= QP_MAX); + lambda = intel_lambda_qp(qp); + if (slice_type == SLICE_TYPE_I) { + vme_state_message[MODE_INTRA_16X16] = 0; + m_cost = lambda * 4; + vme_state_message[MODE_INTRA_8X8] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 16; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 3; + vme_state_message[MODE_INTRA_NONPRED] = intel_format_lutvalue(m_cost, 0x6f); + } else { + m_cost = 0; + vme_state_message[MODE_INTER_MV0] = intel_format_lutvalue(m_cost, 0x6f); + for (j = 1; j < 3; j++) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + j] = intel_format_lutvalue(m_cost, 0x6f); + } + mv_count = 3; + for (j = 4; j <= 64; j *= 2) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + mv_count] = intel_format_lutvalue(m_cost, 0x6f); + mv_count++; + } + + if (qp <= 25) { + vme_state_message[MODE_INTRA_16X16] = 0x4a; + vme_state_message[MODE_INTRA_8X8] = 0x4a; + vme_state_message[MODE_INTRA_4X4] = 0x4a; + vme_state_message[MODE_INTRA_NONPRED] = 0x4a; + vme_state_message[MODE_INTER_16X16] = 0x4a; + vme_state_message[MODE_INTER_16X8] = 0x4a; + vme_state_message[MODE_INTER_8X8] = 0x4a; + vme_state_message[MODE_INTER_8X4] = 0x4a; + vme_state_message[MODE_INTER_4X4] = 0x4a; + vme_state_message[MODE_INTER_BWD] = 0x2a; + return; + } + m_costf = lambda * 10; + vme_state_message[MODE_INTRA_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 14; + vme_state_message[MODE_INTRA_8X8] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 24; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 3.5; + m_cost = m_costf; + vme_state_message[MODE_INTRA_NONPRED] = intel_format_lutvalue(m_cost, 0x6f); + if (slice_type == SLICE_TYPE_P) { + m_costf = lambda * 2.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 4; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X8] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 1.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X8] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 3; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 5; + m_cost = m_costf; + vme_state_message[MODE_INTER_4X4] = intel_format_lutvalue(m_cost, 0x6f); + /* BWD is not used in P-frame */ + vme_state_message[MODE_INTER_BWD] = 0; + } else { + m_costf = lambda * 2.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 5.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X8] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 3.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X8] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 5.0; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 6.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_4X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 1.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_BWD] = intel_format_lutvalue(m_cost, 0x6f); + } + } +} + +void intel_vme_vp8_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + VAQMatrixBufferVP8 *q_matrix = (VAQMatrixBufferVP8 *)encode_state->q_matrix->buffer; + int qp, m_cost, j, mv_count; + uint8_t *vme_state_message = (uint8_t *)(vme_context->vme_state_message); + float lambda, m_costf; + + int is_key_frame = !pic_param->pic_flags.bits.frame_type; + int slice_type = (is_key_frame ? SLICE_TYPE_I : SLICE_TYPE_P); + + if (vme_state_message == NULL) + return; + + if (encoder_context->rate_control_mode == VA_RC_CQP) + qp = q_matrix->quantization_index[0]; + else + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + + lambda = intel_lambda_qp(qp * QP_MAX / VP8_QP_MAX); + if (is_key_frame) { + vme_state_message[MODE_INTRA_16X16] = 0; + m_cost = lambda * 16; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + } else { + m_cost = 0; + vme_state_message[MODE_INTER_MV0] = intel_format_lutvalue(m_cost, 0x6f); + for (j = 1; j < 3; j++) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + j] = intel_format_lutvalue(m_cost, 0x6f); + } + mv_count = 3; + for (j = 4; j <= 64; j *= 2) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + mv_count] = intel_format_lutvalue(m_cost, 0x6f); + mv_count++; + } + + if (qp < 92 ) { + vme_state_message[MODE_INTRA_16X16] = 0x4a; + vme_state_message[MODE_INTRA_4X4] = 0x4a; + vme_state_message[MODE_INTRA_NONPRED] = 0x4a; + vme_state_message[MODE_INTER_16X16] = 0x4a; + vme_state_message[MODE_INTER_16X8] = 0x4a; + vme_state_message[MODE_INTER_8X8] = 0x4a; + vme_state_message[MODE_INTER_4X4] = 0x4a; + return; + } + m_costf = lambda * 10; + vme_state_message[MODE_INTRA_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 24; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + + m_costf = lambda * 2.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 4; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X8] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 1.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X8] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 5; + m_cost = m_costf; + vme_state_message[MODE_INTER_4X4] = intel_format_lutvalue(m_cost, 0x6f); + /* BWD is not used in P-frame */ + vme_state_message[MODE_INTER_BWD] = 0; + } +} + +#define MB_SCOREBOARD_A (1 << 0) +#define MB_SCOREBOARD_B (1 << 1) +#define MB_SCOREBOARD_C (1 << 2) +void +gen7_vme_scoreboard_init(VADriverContextP ctx, struct gen6_vme_context *vme_context) +{ + vme_context->gpe_context.vfe_desc5.scoreboard0.enable = 1; + vme_context->gpe_context.vfe_desc5.scoreboard0.type = SCOREBOARD_STALLING; + vme_context->gpe_context.vfe_desc5.scoreboard0.mask = (MB_SCOREBOARD_A | + MB_SCOREBOARD_B | + MB_SCOREBOARD_C); + + /* In VME prediction the current mb depends on the neighbour + * A/B/C macroblock. So the left/up/up-right dependency should + * be considered. + */ + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_x0 = -1; + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_y0 = 0; + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_x1 = 0; + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_y1 = -1; + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_x2 = 1; + vme_context->gpe_context.vfe_desc6.scoreboard1.delta_y2 = -1; + + vme_context->gpe_context.vfe_desc7.dword = 0; + return; +} + +/* check whether the mb of (x_index, y_index) is out of bound */ +static inline int loop_in_bounds(int x_index, int y_index, int first_mb, int num_mb, int mb_width, int mb_height) +{ + int mb_index; + if (x_index < 0 || x_index >= mb_width) + return -1; + if (y_index < 0 || y_index >= mb_height) + return -1; + + mb_index = y_index * mb_width + x_index; + if (mb_index < first_mb || mb_index > (first_mb + num_mb)) + return -1; + return 0; +} + +void +gen7_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_row; + int s; + unsigned int *command_ptr; + +#define USE_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int first_mb = pSliceParameter->macroblock_address; + int num_mb = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + + x_outer = first_mb % mb_width; + y_outer = first_mb / mb_width; + mb_row = y_outer; + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = first_mb / mb_width; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static uint8_t +intel_get_ref_idx_state_1(VAPictureH264 *va_pic, unsigned int frame_store_id) +{ + unsigned int is_long_term = + !!(va_pic->flags & VA_PICTURE_H264_LONG_TERM_REFERENCE); + unsigned int is_top_field = + !!(va_pic->flags & VA_PICTURE_H264_TOP_FIELD); + unsigned int is_bottom_field = + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + + return ((is_long_term << 6) | + ((is_top_field ^ is_bottom_field ^ 1) << 5) | + (frame_store_id << 1) | + ((is_top_field ^ 1) & is_bottom_field)); +} + +void +intel_mfc_avc_ref_idx_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + int slice_type; + struct object_surface *obj_surface; + unsigned int fref_entry, bref_entry; + int frame_index, i; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + + fref_entry = 0x80808080; + bref_entry = 0x80808080; + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + + if (slice_type == SLICE_TYPE_P || slice_type == SLICE_TYPE_B) { + int ref_idx_l0 = (vme_context->ref_index_in_mb[0] & 0xff); + + if (ref_idx_l0 > 3) { + WARN_ONCE("ref_idx_l0 is out of range\n"); + ref_idx_l0 = 0; + } + + obj_surface = vme_context->used_reference_objects[0]; + frame_index = -1; + for (i = 0; i < 16; i++) { + if (obj_surface && + obj_surface == encode_state->reference_objects[i]) { + frame_index = i; + break; + } + } + if (frame_index == -1) { + WARN_ONCE("RefPicList0 is not found in DPB!\n"); + } else { + int ref_idx_l0_shift = ref_idx_l0 * 8; + fref_entry &= ~(0xFF << ref_idx_l0_shift); + fref_entry += (intel_get_ref_idx_state_1(vme_context->used_references[0], frame_index) << ref_idx_l0_shift); + } + if(frame_index == 1){ + WARN_ONCE("Input ref list is Wrong !\n"); + } + } + + if (slice_type == SLICE_TYPE_B) { + int ref_idx_l1 = (vme_context->ref_index_in_mb[1] & 0xff); + + if (ref_idx_l1 > 3) { + WARN_ONCE("ref_idx_l1 is out of range\n"); + ref_idx_l1 = 0; + } + + obj_surface = vme_context->used_reference_objects[1]; + frame_index = -1; + for (i = 0; i < 16; i++) { + if (obj_surface && + obj_surface == encode_state->reference_objects[i]) { + frame_index = i; + break; + } + } + if (frame_index == -1) { + WARN_ONCE("RefPicList1 is not found in DPB!\n"); + } else { + int ref_idx_l1_shift = ref_idx_l1 * 8; + bref_entry &= ~(0xFF << ref_idx_l1_shift); + bref_entry += (intel_get_ref_idx_state_1(vme_context->used_references[1], frame_index) << ref_idx_l1_shift); + } + } + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_AVC_REF_IDX_STATE | 8); + OUT_BCS_BATCH(batch, 0); //Select L0 + OUT_BCS_BATCH(batch, fref_entry); //Only 1 reference + for(i = 0; i < 7; i++) { + OUT_BCS_BATCH(batch, 0x80808080); + } + ADVANCE_BCS_BATCH(batch); + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_AVC_REF_IDX_STATE | 8); + OUT_BCS_BATCH(batch, 1); //Select L1 + OUT_BCS_BATCH(batch, bref_entry); //Only 1 reference + for(i = 0; i < 7; i++) { + OUT_BCS_BATCH(batch, 0x80808080); + } + ADVANCE_BCS_BATCH(batch); +} + + +void intel_vme_mpeg2_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + uint32_t *vme_state_message = (uint32_t *)(vme_context->vme_state_message); + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + uint32_t mv_x, mv_y; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + VAEncPictureParameterBufferMPEG2 *pic_param = NULL; + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + + if (vme_context->mpeg2_level == MPEG2_LEVEL_LOW) { + mv_x = 512; + mv_y = 64; + } else if (vme_context->mpeg2_level == MPEG2_LEVEL_MAIN) { + mv_x = 1024; + mv_y = 128; + } else if (vme_context->mpeg2_level == MPEG2_LEVEL_HIGH) { + mv_x = 2048; + mv_y = 128; + } else { + WARN_ONCE("Incorrect Mpeg2 level setting!\n"); + mv_x = 512; + mv_y = 64; + } + + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + if (pic_param->picture_type != VAEncPictureTypeIntra) { + int qp, m_cost, j, mv_count; + float lambda, m_costf; + slice_param = (VAEncSliceParameterBufferMPEG2 *) + encode_state->slice_params_ext[0]->buffer; + qp = slice_param->quantiser_scale_code; + lambda = intel_lambda_qp(qp); + /* No Intra prediction. So it is zero */ + vme_state_message[MODE_INTRA_8X8] = 0; + vme_state_message[MODE_INTRA_4X4] = 0; + vme_state_message[MODE_INTER_MV0] = 0; + for (j = 1; j < 3; j++) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + j] = intel_format_lutvalue(m_cost, 0x6f); + } + mv_count = 3; + for (j = 4; j <= 64; j *= 2) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + mv_count] = + intel_format_lutvalue(m_cost, 0x6f); + mv_count++; + } + m_cost = lambda; + /* It can only perform the 16x16 search. So mode cost can be ignored for + * the other mode. for example: 16x8/8x8 + */ + vme_state_message[MODE_INTRA_16X16] = intel_format_lutvalue(m_cost, 0x8f); + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + + vme_state_message[MODE_INTER_16X8] = 0; + vme_state_message[MODE_INTER_8X8] = 0; + vme_state_message[MODE_INTER_8X4] = 0; + vme_state_message[MODE_INTER_4X4] = 0; + vme_state_message[MODE_INTER_BWD] = intel_format_lutvalue(m_cost, 0x6f); + + } + vme_state_message[MPEG2_MV_RANGE] = (mv_y << 16) | (mv_x); + + vme_state_message[MPEG2_PIC_WIDTH_HEIGHT] = (height_in_mbs << 16) | + width_in_mbs; +} + +void +gen7_vme_mpeg2_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *command_ptr; + +#define MPEG2_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + { + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + int first_mb = 0; + int num_mb = mb_width * mb_height; + + x_outer = 0; + y_outer = 0; + + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = 0; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); + return; +} + +static int +avc_temporal_find_surface(VAPictureH264 *curr_pic, + VAPictureH264 *ref_list, + int num_pictures, + int dir) +{ + int i, found = -1, min = 0x7FFFFFFF; + + for (i = 0; i < num_pictures; i++) { + int tmp; + + if ((ref_list[i].flags & VA_PICTURE_H264_INVALID) || + (ref_list[i].picture_id == VA_INVALID_SURFACE)) + break; + + tmp = curr_pic->TopFieldOrderCnt - ref_list[i].TopFieldOrderCnt; + + if (dir) + tmp = -tmp; + + if (tmp > 0 && tmp < min) { + min = tmp; + found = i; + } + } + + return found; +} + +void +intel_avc_vme_reference_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int list_index, + int surface_index, + void (* vme_source_surface_state)( + VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context)) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct object_surface *obj_surface = NULL; + struct i965_driver_data *i965 = i965_driver_data(ctx); + VASurfaceID ref_surface_id; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int max_num_references; + VAPictureH264 *curr_pic; + VAPictureH264 *ref_list; + int ref_idx; + + if (list_index == 0) { + max_num_references = pic_param->num_ref_idx_l0_active_minus1 + 1; + ref_list = slice_param->RefPicList0; + } else { + max_num_references = pic_param->num_ref_idx_l1_active_minus1 + 1; + ref_list = slice_param->RefPicList1; + } + + if (max_num_references == 1) { + if (list_index == 0) { + ref_surface_id = slice_param->RefPicList0[0].picture_id; + vme_context->used_references[0] = &slice_param->RefPicList0[0]; + } else { + ref_surface_id = slice_param->RefPicList1[0].picture_id; + vme_context->used_references[1] = &slice_param->RefPicList1[0]; + } + + if (ref_surface_id != VA_INVALID_SURFACE) + obj_surface = SURFACE(ref_surface_id); + + if (!obj_surface || + !obj_surface->bo) { + obj_surface = encode_state->reference_objects[list_index]; + vme_context->used_references[list_index] = &pic_param->ReferenceFrames[list_index]; + } + + ref_idx = 0; + } else { + curr_pic = &pic_param->CurrPic; + + /* select the reference frame in temporal space */ + ref_idx = avc_temporal_find_surface(curr_pic, ref_list, max_num_references, list_index == 1); + ref_surface_id = ref_list[ref_idx].picture_id; + + if (ref_surface_id != VA_INVALID_SURFACE) /* otherwise warning later */ + obj_surface = SURFACE(ref_surface_id); + + vme_context->used_reference_objects[list_index] = obj_surface; + vme_context->used_references[list_index] = &ref_list[ref_idx]; + } + + if (obj_surface && + obj_surface->bo) { + assert(ref_idx >= 0); + vme_context->used_reference_objects[list_index] = obj_surface; + vme_source_surface_state(ctx, surface_index, obj_surface, encoder_context); + vme_context->ref_index_in_mb[list_index] = (ref_idx << 24 | + ref_idx << 16 | + ref_idx << 8 | + ref_idx); + } else { + vme_context->used_reference_objects[list_index] = NULL; + vme_context->used_references[list_index] = NULL; + vme_context->ref_index_in_mb[list_index] = 0; + } +} + +void intel_avc_slice_insert_packed_data(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + int count, i, start_index; + unsigned int length_in_bits; + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = NULL; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int slice_header_index; + + if (encode_state->slice_header_index[slice_index] == 0) + slice_header_index = -1; + else + slice_header_index = (encode_state->slice_header_index[slice_index] & SLICE_PACKED_DATA_INDEX_MASK); + + count = encode_state->slice_rawdata_count[slice_index]; + start_index = (encode_state->slice_rawdata_index[slice_index] & SLICE_PACKED_DATA_INDEX_MASK); + + for (i = 0; i < count; i++) { + unsigned int skip_emul_byte_cnt; + + header_data = (unsigned int *)encode_state->packed_header_data_ext[start_index + i]->buffer; + + param = (VAEncPackedHeaderParameterBuffer *) + (encode_state->packed_header_params_ext[start_index + i]->buffer); + + /* skip the slice header packed data type as it is lastly inserted */ + if (param->type == VAEncPackedHeaderSlice) + continue; + + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_avc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + /* as the slice header is still required, the last header flag is set to + * zero. + */ + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + if (slice_header_index == -1) { + unsigned char *slice_header = NULL; + int slice_header_length_in_bits = 0; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + + /* No slice header data is passed. And the driver needs to generate it */ + /* For the Normal H264 */ + slice_header_length_in_bits = build_avc_slice_header(pSequenceParameter, + pPicParameter, + pSliceParameter, + &slice_header); + mfc_context->insert_object(ctx, encoder_context, + (unsigned int *)slice_header, + ALIGN(slice_header_length_in_bits, 32) >> 5, + slice_header_length_in_bits & 0x1f, + 5, /* first 5 bytes are start code + nal unit type */ + 1, 0, 1, slice_batch); + + free(slice_header); + } else { + unsigned int skip_emul_byte_cnt; + + header_data = (unsigned int *)encode_state->packed_header_data_ext[slice_header_index]->buffer; + + param = (VAEncPackedHeaderParameterBuffer *) + (encode_state->packed_header_params_ext[slice_header_index]->buffer); + length_in_bits = param->bit_length; + + /* as the slice header is the last header data for one slice, + * the last header flag is set to one. + */ + skip_emul_byte_cnt = intel_avc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 1, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + return; +} + +/* HEVC */ +static int +hevc_temporal_find_surface(VAPictureHEVC *curr_pic, + VAPictureHEVC *ref_list, + int num_pictures, + int dir) +{ + int i, found = -1, min = 0x7FFFFFFF; + + for (i = 0; i < num_pictures; i++) { + int tmp; + + if ((ref_list[i].flags & VA_PICTURE_HEVC_INVALID) || + (ref_list[i].picture_id == VA_INVALID_SURFACE)) + break; + + tmp = curr_pic->pic_order_cnt - ref_list[i].pic_order_cnt; + + if (dir) + tmp = -tmp; + + if (tmp > 0 && tmp < min) { + min = tmp; + found = i; + } + } + + return found; +} +void +intel_hevc_vme_reference_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int list_index, + int surface_index, + void (* vme_source_surface_state)( + VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context)) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct object_surface *obj_surface = NULL; + struct i965_driver_data *i965 = i965_driver_data(ctx); + VASurfaceID ref_surface_id; + VAEncPictureParameterBufferHEVC *pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + int max_num_references; + VAPictureHEVC *curr_pic; + VAPictureHEVC *ref_list; + int ref_idx; + + if (list_index == 0) { + max_num_references = pic_param->num_ref_idx_l0_default_active_minus1 + 1; + ref_list = slice_param->ref_pic_list0; + } else { + max_num_references = pic_param->num_ref_idx_l1_default_active_minus1 + 1; + ref_list = slice_param->ref_pic_list1; + } + + if (max_num_references == 1) { + if (list_index == 0) { + ref_surface_id = slice_param->ref_pic_list0[0].picture_id; + vme_context->used_references[0] = &slice_param->ref_pic_list0[0]; + } else { + ref_surface_id = slice_param->ref_pic_list1[0].picture_id; + vme_context->used_references[1] = &slice_param->ref_pic_list1[0]; + } + + if (ref_surface_id != VA_INVALID_SURFACE) + obj_surface = SURFACE(ref_surface_id); + + if (!obj_surface || + !obj_surface->bo) { + obj_surface = encode_state->reference_objects[list_index]; + vme_context->used_references[list_index] = &pic_param->reference_frames[list_index]; + } + + ref_idx = 0; + } else { + curr_pic = &pic_param->decoded_curr_pic; + + /* select the reference frame in temporal space */ + ref_idx = hevc_temporal_find_surface(curr_pic, ref_list, max_num_references, list_index == 1); + ref_surface_id = ref_list[ref_idx].picture_id; + + if (ref_surface_id != VA_INVALID_SURFACE) /* otherwise warning later */ + obj_surface = SURFACE(ref_surface_id); + + vme_context->used_reference_objects[list_index] = obj_surface; + vme_context->used_references[list_index] = &ref_list[ref_idx]; + } + + if (obj_surface && + obj_surface->bo) { + assert(ref_idx >= 0); + vme_context->used_reference_objects[list_index] = obj_surface; + vme_source_surface_state(ctx, surface_index, obj_surface, encoder_context); + vme_context->ref_index_in_mb[list_index] = (ref_idx << 24 | + ref_idx << 16 | + ref_idx << 8 | + ref_idx); + } else { + vme_context->used_reference_objects[list_index] = NULL; + vme_context->used_references[list_index] = NULL; + vme_context->ref_index_in_mb[list_index] = 0; + } +} + +void intel_vme_hevc_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncPictureParameterBufferHEVC *pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int qp, m_cost, j, mv_count; + uint8_t *vme_state_message = (uint8_t *)(vme_context->vme_state_message); + float lambda, m_costf; + + /* here no SI SP slice for HEVC, do not need slice fixup */ + int slice_type = slice_param->slice_type; + + + qp = pic_param->pic_init_qp + slice_param->slice_qp_delta; + + if(encoder_context->rate_control_mode == VA_RC_CBR) + { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if(slice_type == HEVC_SLICE_B) { + if(pSequenceParameter->ip_period == 1) + { + slice_type = HEVC_SLICE_P; + qp = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + + }else if(mfc_context->vui_hrd.i_frame_number % pSequenceParameter->ip_period == 1){ + slice_type = HEVC_SLICE_P; + qp = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + } + } + + } + + if (vme_state_message == NULL) + return; + + assert(qp <= QP_MAX); + lambda = intel_lambda_qp(qp); + if (slice_type == HEVC_SLICE_I) { + vme_state_message[MODE_INTRA_16X16] = 0; + m_cost = lambda * 4; + vme_state_message[MODE_INTRA_8X8] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 16; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 3; + vme_state_message[MODE_INTRA_NONPRED] = intel_format_lutvalue(m_cost, 0x6f); + } else { + m_cost = 0; + vme_state_message[MODE_INTER_MV0] = intel_format_lutvalue(m_cost, 0x6f); + for (j = 1; j < 3; j++) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + j] = intel_format_lutvalue(m_cost, 0x6f); + } + mv_count = 3; + for (j = 4; j <= 64; j *= 2) { + m_costf = (log2f((float)(j + 1)) + 1.718f) * lambda; + m_cost = (int)m_costf; + vme_state_message[MODE_INTER_MV0 + mv_count] = intel_format_lutvalue(m_cost, 0x6f); + mv_count++; + } + + if (qp <= 25) { + vme_state_message[MODE_INTRA_16X16] = 0x4a; + vme_state_message[MODE_INTRA_8X8] = 0x4a; + vme_state_message[MODE_INTRA_4X4] = 0x4a; + vme_state_message[MODE_INTRA_NONPRED] = 0x4a; + vme_state_message[MODE_INTER_16X16] = 0x4a; + vme_state_message[MODE_INTER_16X8] = 0x4a; + vme_state_message[MODE_INTER_8X8] = 0x4a; + vme_state_message[MODE_INTER_8X4] = 0x4a; + vme_state_message[MODE_INTER_4X4] = 0x4a; + vme_state_message[MODE_INTER_BWD] = 0x2a; + return; + } + m_costf = lambda * 10; + vme_state_message[MODE_INTRA_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 14; + vme_state_message[MODE_INTRA_8X8] = intel_format_lutvalue(m_cost, 0x8f); + m_cost = lambda * 24; + vme_state_message[MODE_INTRA_4X4] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 3.5; + m_cost = m_costf; + vme_state_message[MODE_INTRA_NONPRED] = intel_format_lutvalue(m_cost, 0x6f); + if (slice_type == HEVC_SLICE_P) { + m_costf = lambda * 2.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 4; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X8] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 1.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X8] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 3; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 5; + m_cost = m_costf; + vme_state_message[MODE_INTER_4X4] = intel_format_lutvalue(m_cost, 0x6f); + /* BWD is not used in P-frame */ + vme_state_message[MODE_INTER_BWD] = 0; + } else { + m_costf = lambda * 2.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X16] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 5.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_16X8] = intel_format_lutvalue(m_cost, 0x8f); + m_costf = lambda * 3.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X8] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 5.0; + m_cost = m_costf; + vme_state_message[MODE_INTER_8X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 6.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_4X4] = intel_format_lutvalue(m_cost, 0x6f); + m_costf = lambda * 1.5; + m_cost = m_costf; + vme_state_message[MODE_INTER_BWD] = intel_format_lutvalue(m_cost, 0x6f); + } + } +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.c new file mode 100644 index 000000000..ed4829c19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.c @@ -0,0 +1,1877 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include "sysdeps.h" +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" + +#include "gen6_mfd.h" +#include "intel_media.h" + +static const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void +gen6_mfd_init_avc_surface(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenAvcSurface *gen6_avc_surface = obj_surface->private_data; + int height_in_mbs; + + obj_surface->free_private_data = gen_free_avc_surface; + height_in_mbs = ((pic_param->picture_height_in_mbs_minus1 + 1) & 0xff); /* frame height */ + + if (!gen6_avc_surface) { + gen6_avc_surface = calloc(sizeof(GenAvcSurface), 1); + assert(gen6_avc_surface); + gen6_avc_surface->base.frame_store_id = -1; + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen6_avc_surface; + } + + gen6_avc_surface->dmv_bottom_flag = (pic_param->pic_fields.bits.field_pic_flag && + !pic_param->seq_fields.bits.direct_8x8_inference_flag); + + if (gen6_avc_surface->dmv_top == NULL) { + gen6_avc_surface->dmv_top = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + 128 * height_in_mbs * 64, /* scalable with frame height */ + 0x1000); + } + + if (gen6_avc_surface->dmv_bottom_flag && + gen6_avc_surface->dmv_bottom == NULL) { + gen6_avc_surface->dmv_bottom = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + 128 * height_in_mbs * 64, /* scalable with frame height */ + 0x1000); + } +} + +static void +gen6_mfd_pipe_mode_select(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_VC1); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (4 - 2)); + OUT_BCS_BATCH(batch, + (MFD_MODE_VLD << 16) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (gen6_mfd_context->post_deblocking_output.valid << 9) | /* Post Deblocking Output */ + (gen6_mfd_context->pre_deblocking_output.valid << 8) | /* Pre Deblocking Output */ + (0 << 7) | /* disable TLB prefectch */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (standard_select << 0)); + OUT_BCS_BATCH(batch, + (0 << 20) | /* round flag in PB slice */ + (0 << 19) | /* round flag in Intra8x8 */ + (0 << 7) | /* expand NOA bus flag */ + (1 << 6) | /* must be 1 */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | /* AVC long field motion vector */ + (1 << 0)); /* always calculate AVC ILDB boundary strength */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + unsigned int surface_format; + + surface_format = obj_surface->fourcc == VA_FOURCC_Y800 ? + MFX_SURFACE_MONOCHROME : MFX_SURFACE_PLANAR_420_8; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_height - 1) << 19) | + ((obj_surface->orig_width - 1) << 6)); + OUT_BCS_BATCH(batch, + (surface_format << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be y-tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, FIXME: must be 1 ??? */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (obj_surface->height)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 24); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (24 - 2)); + if (gen6_mfd_context->pre_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen6_mfd_context->post_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + + if (gen6_mfd_context->intra_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + /* DW 7..22 */ + for (i = 0; i < ARRAY_ELEMS(gen6_mfd_context->reference_surface); i++) { + struct object_surface *obj_surface; + + if (gen6_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen6_mfd_context->reference_surface[i].obj_surface && + gen6_mfd_context->reference_surface[i].obj_surface->bo) { + obj_surface = gen6_mfd_context->reference_surface[i].obj_surface; + + OUT_BCS_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); /* ignore DW23 for decoding */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_ind_obj_base_addr_state(VADriverContextP ctx, + dri_bo *slice_data_bo, + int standard_select, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, slice_data_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); /* MFX Indirect Bitstream Object Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_bsp_buf_base_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + + if (gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen6_mfd_context->mpr_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->mpr_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen6_mfd_context->bitplane_read_buffer.valid) + OUT_BCS_RELOC(batch, gen6_mfd_context->bitplane_read_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_img_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int qm_present_flag; + int img_struct; + int mbaff_frame_flag; + unsigned int width_in_mbs, height_in_mbs; + VAPictureParameterBufferH264 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + qm_present_flag = 1; + else + qm_present_flag = 0; /* built-in QM matrices */ + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD) + img_struct = 1; + else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD) + img_struct = 3; + else + img_struct = 0; + + if ((img_struct & 0x1) == 0x1) { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x1); + } else { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x0); + } + + if (pic_param->seq_fields.bits.frame_mbs_only_flag) { /* a frame containing only frame macroblocks */ + assert(pic_param->seq_fields.bits.mb_adaptive_frame_field_flag == 0); + assert(pic_param->pic_fields.bits.field_pic_flag == 0); + } else { + assert(pic_param->seq_fields.bits.direct_8x8_inference_flag == 1); /* see H.264 spec */ + } + + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff); + height_in_mbs = ((pic_param->picture_height_in_mbs_minus1 + 1) & 0xff); /* frame height */ + assert(!((width_in_mbs * height_in_mbs) & 0x8000)); /* hardware requirement */ + + /* MFX unit doesn't support 4:2:2 and 4:4:4 picture */ + assert(pic_param->seq_fields.bits.chroma_format_idc == 0 || /* monochrome picture */ + pic_param->seq_fields.bits.chroma_format_idc == 1); /* 4:2:0 */ + assert(pic_param->seq_fields.bits.residual_colour_transform_flag == 0); /* only available for 4:4:4 */ + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs) & 0x7fff)); + OUT_BCS_BATCH(batch, + (height_in_mbs << 16) | + (width_in_mbs << 0)); + OUT_BCS_BATCH(batch, + ((pic_param->second_chroma_qp_index_offset & 0x1f) << 24) | + ((pic_param->chroma_qp_index_offset & 0x1f) << 16) | + (0 << 14) | /* Max-bit conformance Intra flag ??? FIXME */ + (0 << 13) | /* Max Macroblock size conformance Inter flag ??? FIXME */ + (1 << 12) | /* always 1, hardware requirement */ + (qm_present_flag << 10) | + (img_struct << 8) | + (16 << 0)); + OUT_BCS_BATCH(batch, + (pic_param->seq_fields.bits.chroma_format_idc << 10) | + (pic_param->pic_fields.bits.entropy_coding_mode_flag << 7) | + ((!pic_param->pic_fields.bits.reference_pic_flag) << 6) | + (pic_param->pic_fields.bits.constrained_intra_pred_flag << 5) | + (pic_param->seq_fields.bits.direct_8x8_inference_flag << 4) | + (pic_param->pic_fields.bits.transform_8x8_mode_flag << 3) | + (pic_param->seq_fields.bits.frame_mbs_only_flag << 2) | + (mbaff_frame_flag << 1) | + (pic_param->pic_fields.bits.field_pic_flag << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int cmd_len; + VAIQMatrixBufferH264 *iq_matrix; + VAPictureParameterBufferH264 *pic_param; + + if (!decode_state->iq_matrix || !decode_state->iq_matrix->buffer) + return; + + iq_matrix = (VAIQMatrixBufferH264 *)decode_state->iq_matrix->buffer; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + cmd_len = 2 + 6 * 4; /* always load six 4x4 scaling matrices */ + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + cmd_len += 2 * 16; /* load two 8x8 scaling matrices */ + + BEGIN_BCS_BATCH(batch, cmd_len); + OUT_BCS_BATCH(batch, MFX_AVC_QM_STATE | (cmd_len - 2)); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + OUT_BCS_BATCH(batch, + (0x0 << 8) | /* don't use default built-in matrices */ + (0xff << 0)); /* six 4x4 and two 8x8 scaling matrices */ + else + OUT_BCS_BATCH(batch, + (0x0 << 8) | /* don't use default built-in matrices */ + (0x3f << 0)); /* six 4x4 scaling matrices */ + + intel_batchbuffer_data(batch, &iq_matrix->ScalingList4x4[0][0], 6 * 4 * 4); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + intel_batchbuffer_data(batch, &iq_matrix->ScalingList8x8[0][0], 2 * 16 * 4); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + struct object_surface *obj_surface; + GenAvcSurface *gen6_avc_surface; + VAPictureH264 *va_pic; + int i; + + BEGIN_BCS_BATCH(batch, 69); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < ARRAY_ELEMS(gen6_mfd_context->reference_surface); i++) { + if (gen6_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen6_mfd_context->reference_surface[i].obj_surface && + gen6_mfd_context->reference_surface[i].obj_surface->private_data) { + + obj_surface = gen6_mfd_context->reference_surface[i].obj_surface; + gen6_avc_surface = obj_surface->private_data; + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + if (gen6_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + /* the current decoding frame/field */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + assert(obj_surface->bo && obj_surface->private_data); + gen6_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + if (gen6_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(gen6_mfd_context->reference_surface); i++) { + obj_surface = gen6_mfd_context->reference_surface[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + int weighted_pred_idc = 0; + int first_mb_in_slice = 0, first_mb_in_next_slice = 0; + unsigned int chroma_log2_weight_denom, luma_log2_weight_denom; + int slice_type; + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) { + slice_type = SLICE_TYPE_I; + } else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) { + slice_type = SLICE_TYPE_P; + } else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + luma_log2_weight_denom = slice_param->luma_log2_weight_denom; + chroma_log2_weight_denom = slice_param->chroma_log2_weight_denom; + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + weighted_pred_idc = (pic_param->pic_fields.bits.weighted_pred_flag == 1); + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + + if (weighted_pred_idc == 2) { + /* 8.4.3 - Derivation process for prediction weights (8-279) */ + luma_log2_weight_denom = 5; + chroma_log2_weight_denom = 5; + } + } + + first_mb_in_slice = slice_param->first_mb_in_slice; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + if (mbaff_picture) + slice_ver_pos = slice_ver_pos << 1; + + if (next_slice_param) { + first_mb_in_next_slice = next_slice_param->first_mb_in_slice; + next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs; + next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs; + + if (mbaff_picture) + next_slice_ver_pos = next_slice_ver_pos << 1; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = height_in_mbs; + } + + BEGIN_BCS_BATCH(batch, 11); /* FIXME: is it 10??? */ + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (chroma_log2_weight_denom << 8) | + (luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, + (next_slice_param == NULL) << 19); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen6_mfd_avc_ref_idx_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + gen6_send_avc_ref_idx_state( + gen6_mfd_context->base.batch, + slice_param, + gen6_mfd_context->reference_surface + ); +} + +static void +gen6_mfd_avc_weightoffset_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int i, j, num_weight_offset_table = 0; + short weightoffsets[32 * 6]; + + if ((slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) && + (pic_param->pic_fields.bits.weighted_pred_flag == 1)) { + num_weight_offset_table = 1; + } + + if ((slice_param->slice_type == SLICE_TYPE_B) && + (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) { + num_weight_offset_table = 2; + } + + for (i = 0; i < num_weight_offset_table; i++) { + BEGIN_BCS_BATCH(batch, 98); + OUT_BCS_BATCH(batch, MFX_AVC_WEIGHTOFFSET_STATE | (98 - 2)); + OUT_BCS_BATCH(batch, i); + + if (i == 0) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l0[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l0[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l0[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l0[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l0[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l0[j][1]; + } + } else { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l1[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l1[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l1[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l1[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l1[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l1[j][1]; + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +gen6_mfd_avc_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + dri_bo *slice_data_bo, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + unsigned int slice_data_bit_offset; + + slice_data_bit_offset = avc_get_first_mb_bit_offset( + slice_data_bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag + ); + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_size - slice_param->slice_data_offset)); + OUT_BCS_BATCH(batch, slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((slice_data_bit_offset >> 3) << 16) | + (1 << 7) | + (1 << 6) | + ((0x7 - (slice_data_bit_offset & 0x7)) << 0)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_phantom_slice_first(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen6_mfd_context->base.batch); +} + +static void +gen6_mfd_avc_phantom_slice_last(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + gen6_mfd_avc_phantom_slice(ctx, pic_param, NULL, gen6_mfd_context->base.batch); +} + +static void +gen6_mfd_avc_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int i, j, enable_avc_ildb = 0; + int width_in_mbs; + + for (j = 0; j < decode_state->num_slice_params && enable_avc_ildb == 0; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + intel_update_avc_frame_store_index(ctx, decode_state, pic_param, + gen6_mfd_context->reference_surface, &gen6_mfd_context->fs_ctx); + width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; + + avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + gen6_mfd_init_avc_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen6_mfd_context->post_deblocking_output.bo); + gen6_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen6_mfd_context->post_deblocking_output.bo); + gen6_mfd_context->post_deblocking_output.valid = enable_avc_ildb; + + dri_bo_unreference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.valid = !enable_avc_ildb; + + dri_bo_unreference(gen6_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen6_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 64 * 4, + 0x1000); + assert(bo); + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen6_mfd_context->mpr_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen6_mfd_context->mpr_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->mpr_row_store_scratch_buffer.valid = 1; + + gen6_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen6_mfd_avc_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen6_mfd_avc_decode_init(ctx, decode_state, gen6_mfd_context); + + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_AVC, gen6_mfd_context); + gen6_mfd_surface_state(ctx, decode_state, MFX_FORMAT_AVC, gen6_mfd_context); + gen6_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen6_mfd_context); + gen6_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen6_mfd_context); + gen6_mfd_avc_img_state(ctx, decode_state, gen6_mfd_context); + gen6_mfd_avc_qm_state(ctx, decode_state, gen6_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen6_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_AVC, gen6_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j + 1]->buffer; + + if (j == 0 && + slice_param->first_mb_in_slice) + gen6_mfd_avc_phantom_slice_first(ctx, pic_param, slice_param, gen6_mfd_context); + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen6_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen6_mfd_context); + gen6_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen6_mfd_context); + gen6_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen6_mfd_context); + gen6_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen6_mfd_context); + gen6_mfd_avc_bsd_object(ctx, pic_param, slice_param, slice_data_bo, gen6_mfd_context); + slice_param++; + } + } + + gen6_mfd_avc_phantom_slice_last(ctx, pic_param, gen6_mfd_context); + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen6_mfd_mpeg2_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + VAPictureParameterBufferMPEG2 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + unsigned int width_in_mbs; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + + mpeg2_set_reference_surfaces( + ctx, + gen6_mfd_context->reference_surface, + decode_state, + pic_param + ); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dri_bo_unreference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.valid = 1; + + dri_bo_unreference(gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen6_mfd_context->post_deblocking_output.valid = 0; + gen6_mfd_context->intra_row_store_scratch_buffer.valid = 0; + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + gen6_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + gen6_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen6_mfd_mpeg2_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + unsigned int tff, pic_structure; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + pic_structure = pic_param->picture_coding_extension.bits.picture_structure; + if (pic_structure == MPEG_FRAME) + tff = pic_param->picture_coding_extension.bits.top_field_first; + else + tff = !(pic_param->picture_coding_extension.bits.is_first_field ^ + (pic_structure & MPEG_TOP_FIELD)); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (4 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code & 0xf) << 28 | /* f_code[1][1] */ + ((pic_param->f_code >> 4) & 0xf) << 24 | /* f_code[1][0] */ + ((pic_param->f_code >> 8) & 0xf) << 20 | /* f_code[0][1] */ + ((pic_param->f_code >> 12) & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + tff << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + pic_param->picture_coding_type << 9); + OUT_BCS_BATCH(batch, + (ALIGN(pic_param->vertical_size, 16) / 16) << 16 | + (ALIGN(pic_param->horizontal_size, 16) / 16)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_mpeg2_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAIQMatrixBufferMPEG2 * const gen_iq_matrix = &gen6_mfd_context->iq_matrix.mpeg2; + int i, j; + + /* Update internal QM state */ + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) { + VAIQMatrixBufferMPEG2 * const iq_matrix = + (VAIQMatrixBufferMPEG2 *)decode_state->iq_matrix->buffer; + + gen_iq_matrix->load_intra_quantiser_matrix = + iq_matrix->load_intra_quantiser_matrix; + if (iq_matrix->load_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->intra_quantiser_matrix[j]; + } + + gen_iq_matrix->load_non_intra_quantiser_matrix = + iq_matrix->load_non_intra_quantiser_matrix; + if (iq_matrix->load_non_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->non_intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->non_intra_quantiser_matrix[j]; + } + } + + /* Commit QM state to HW */ + for (i = 0; i < 2; i++) { + unsigned char *qm = NULL; + + if (i == 0) { + if (gen_iq_matrix->load_intra_quantiser_matrix) + qm = gen_iq_matrix->intra_quantiser_matrix; + } else { + if (gen_iq_matrix->load_non_intra_quantiser_matrix) + qm = gen_iq_matrix->non_intra_quantiser_matrix; + } + + if (!qm) + continue; + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_MPEG2_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, i); + intel_batchbuffer_data(batch, qm, 64); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +gen6_mfd_mpeg2_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + VASliceParameterBufferMPEG2 *next_slice_param, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + unsigned int width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + int mb_count, vpos0, hpos0, vpos1, hpos1, is_field_pic_wa, is_field_pic = 0; + + if (pic_param->picture_coding_extension.bits.picture_structure == MPEG_TOP_FIELD || + pic_param->picture_coding_extension.bits.picture_structure == MPEG_BOTTOM_FIELD) + is_field_pic = 1; + is_field_pic_wa = is_field_pic && + gen6_mfd_context->wa_mpeg2_slice_vertical_position > 0; + + vpos0 = slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos0 = slice_param->slice_horizontal_position; + + if (next_slice_param == NULL) { + vpos1 = ALIGN(pic_param->vertical_size, 16) / 16 / (1 + is_field_pic); + hpos1 = 0; + } else { + vpos1 = next_slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos1 = next_slice_param->slice_horizontal_position; + } + + mb_count = (vpos1 * width_in_mbs + hpos1) - (vpos0 * width_in_mbs + hpos0); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_MPEG2_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + hpos0 << 24 | + vpos0 << 16 | + mb_count << 8 | + (next_slice_param == NULL) << 5 | + (next_slice_param == NULL) << 3 | + (slice_param->macroblock_offset & 0x7)); + OUT_BCS_BATCH(batch, + slice_param->quantiser_scale_code << 24); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_mpeg2_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + VASliceParameterBufferMPEG2 *slice_param, *next_slice_param; + dri_bo *slice_data_bo; + int group_idx = 0, pre_group_idx = -1, element_idx = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + gen6_mfd_mpeg2_decode_init(ctx, decode_state, gen6_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_MPEG2, gen6_mfd_context); + gen6_mfd_surface_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen6_mfd_context); + gen6_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen6_mfd_context); + gen6_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen6_mfd_context); + gen6_mfd_mpeg2_pic_state(ctx, decode_state, gen6_mfd_context); + gen6_mfd_mpeg2_qm_state(ctx, decode_state, gen6_mfd_context); + + if (gen6_mfd_context->wa_mpeg2_slice_vertical_position < 0) + gen6_mfd_context->wa_mpeg2_slice_vertical_position = + mpeg2_wa_slice_vertical_position(decode_state, pic_param); + + slice_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[group_idx]->buffer; + + for (; slice_param;) { + if (pre_group_idx != group_idx) { + slice_data_bo = decode_state->slice_datas[group_idx]->bo; + gen6_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_MPEG2, gen6_mfd_context); + pre_group_idx = group_idx; + } + + next_slice_param = intel_mpeg2_find_next_slice(decode_state, pic_param, slice_param, &group_idx, &element_idx); + gen6_mfd_mpeg2_bsd_object(ctx, pic_param, slice_param, next_slice_param, gen6_mfd_context); + slice_param = next_slice_param; + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static const int va_to_gen6_vc1_pic_type[5] = { + GEN6_VC1_I_PICTURE, + GEN6_VC1_P_PICTURE, + GEN6_VC1_B_PICTURE, + GEN6_VC1_BI_PICTURE, + GEN6_VC1_P_PICTURE, +}; + +static const int va_to_gen6_vc1_mv[4] = { + 1, /* 1-MV */ + 2, /* 1-MV half-pel */ + 3, /* 1-MV half-pef bilinear */ + 0, /* Mixed MV */ +}; + +static const int b_picture_scale_factor[21] = { + 128, 85, 170, 64, 192, + 51, 102, 153, 204, 43, + 215, 37, 74, 111, 148, + 185, 222, 32, 96, 160, + 224, +}; + +static const int va_to_gen6_vc1_condover[3] = { + 0, + 2, + 3 +}; + +static const int va_to_gen6_vc1_profile[4] = { + GEN6_VC1_SIMPLE_PROFILE, + GEN6_VC1_MAIN_PROFILE, + GEN6_VC1_RESERVED_PROFILE, + GEN6_VC1_ADVANCED_PROFILE +}; + +static void +gen6_mfd_free_vc1_surface(void **data) +{ + struct gen6_vc1_surface *gen6_vc1_surface = *data; + + if (!gen6_vc1_surface) + return; + + dri_bo_unreference(gen6_vc1_surface->dmv); + free(gen6_vc1_surface); + *data = NULL; +} + +static void +gen6_mfd_init_vc1_surface(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vc1_surface *gen6_vc1_surface = obj_surface->private_data; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + + obj_surface->free_private_data = gen6_mfd_free_vc1_surface; + + if (!gen6_vc1_surface) { + gen6_vc1_surface = calloc(sizeof(struct gen6_vc1_surface), 1); + + if (!gen6_vc1_surface) + return; + + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen6_vc1_surface; + } + + gen6_vc1_surface->picture_type = pic_param->picture_fields.bits.picture_type; + + if (gen6_vc1_surface->dmv == NULL) { + gen6_vc1_surface->dmv = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + 128 * height_in_mbs * 64, /* scalable with frame height */ + 0x1000); + } +} + +static void +gen6_mfd_vc1_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + VAPictureParameterBufferVC1 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int width_in_mbs; + int picture_type; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + picture_type = pic_param->picture_fields.bits.picture_type; + + intel_update_vc1_frame_store_index(ctx, + decode_state, + pic_param, + gen6_mfd_context->reference_surface); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen6_mfd_init_vc1_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen6_mfd_context->post_deblocking_output.bo); + gen6_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen6_mfd_context->post_deblocking_output.bo); + gen6_mfd_context->post_deblocking_output.valid = pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.valid = !pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen6_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen6_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 7 * 64, + 0x1000); + assert(bo); + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen6_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen6_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value; + dri_bo_unreference(gen6_mfd_context->bitplane_read_buffer.bo); + + if (gen6_mfd_context->bitplane_read_buffer.valid) { + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + int bitplane_width = ALIGN(width_in_mbs, 2) / 2; + int src_w, src_h; + uint8_t *src = NULL, *dst = NULL; + + assert(decode_state->bit_plane->buffer); + src = decode_state->bit_plane->buffer; + + bo = dri_bo_alloc(i965->intel.bufmgr, + "VC-1 Bitplane", + bitplane_width * height_in_mbs, + 0x1000); + assert(bo); + gen6_mfd_context->bitplane_read_buffer.bo = bo; + + dri_bo_map(bo, True); + assert(bo->virtual); + dst = bo->virtual; + + for (src_h = 0; src_h < height_in_mbs; src_h++) { + for(src_w = 0; src_w < width_in_mbs; src_w++) { + int src_index, dst_index; + int src_shift; + uint8_t src_value; + + src_index = (src_h * width_in_mbs + src_w) / 2; + src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4; + src_value = ((src[src_index] >> src_shift) & 0xf); + + if (picture_type == GEN6_VC1_SKIPPED_PICTURE){ + src_value |= 0x2; + } + + dst_index = src_w / 2; + dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4)); + } + + if (src_w & 1) + dst[src_w / 2] >>= 4; + + dst += bitplane_width; + } + + dri_bo_unmap(bo); + } else + gen6_mfd_context->bitplane_read_buffer.bo = NULL; +} + +static void +gen6_mfd_vc1_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + struct object_surface *obj_surface; + int alt_pquant_config = 0, alt_pquant_edge_mask = 0, alt_pq; + int dquant, dquantfrm, dqprofile, dqdbedge, dqsbedge, dqbilevel; + int unified_mv_mode; + int ref_field_pic_polarity = 0; + int scale_factor = 0; + int trans_ac_y = 0; + int dmv_surface_valid = 0; + int brfd = 0; + int fcm = 0; + int picture_type; + int profile; + int overlap; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + profile = va_to_gen6_vc1_profile[pic_param->sequence_fields.bits.profile]; + dquant = pic_param->pic_quantizer_fields.bits.dquant; + dquantfrm = pic_param->pic_quantizer_fields.bits.dq_frame; + dqprofile = pic_param->pic_quantizer_fields.bits.dq_profile; + dqdbedge = pic_param->pic_quantizer_fields.bits.dq_db_edge; + dqsbedge = pic_param->pic_quantizer_fields.bits.dq_sb_edge; + dqbilevel = pic_param->pic_quantizer_fields.bits.dq_binary_level; + alt_pq = pic_param->pic_quantizer_fields.bits.alt_pic_quantizer; + + if (dquant == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + } else if (dquant == 2) { + alt_pquant_config = 1; + alt_pquant_edge_mask = 0xf; + } else { + assert(dquant == 1); + if (dquantfrm == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + alt_pq = 0; + } else { + assert(dquantfrm == 1); + alt_pquant_config = 1; + + switch (dqprofile) { + case 3: + if (dqbilevel == 0) { + alt_pquant_config = 2; + alt_pquant_edge_mask = 0; + } else { + assert(dqbilevel == 1); + alt_pquant_config = 3; + alt_pquant_edge_mask = 0; + } + break; + + case 0: + alt_pquant_edge_mask = 0xf; + break; + + case 1: + if (dqdbedge == 3) + alt_pquant_edge_mask = 0x9; + else + alt_pquant_edge_mask = (0x3 << dqdbedge); + + break; + + case 2: + alt_pquant_edge_mask = (0x1 << dqsbedge); + break; + + default: + assert(0); + } + } + } + + if (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation) { + assert(pic_param->mv_fields.bits.mv_mode2 < 4); + unified_mv_mode = va_to_gen6_vc1_mv[pic_param->mv_fields.bits.mv_mode2]; + } else { + assert(pic_param->mv_fields.bits.mv_mode < 4); + unified_mv_mode = va_to_gen6_vc1_mv[pic_param->mv_fields.bits.mv_mode]; + } + + if (pic_param->sequence_fields.bits.interlace == 1 && + pic_param->picture_fields.bits.frame_coding_mode != 0) { /* frame-interlace or field-interlace */ + /* FIXME: calculate reference field picture polarity */ + assert(0); + ref_field_pic_polarity = 0; + } + + if (pic_param->b_picture_fraction < 21) + scale_factor = b_picture_scale_factor[pic_param->b_picture_fraction]; + + picture_type = va_to_gen6_vc1_pic_type[pic_param->picture_fields.bits.picture_type]; + + if (profile == GEN6_VC1_ADVANCED_PROFILE && + picture_type == GEN6_VC1_I_PICTURE) + picture_type = GEN6_VC1_BI_PICTURE; + + if (picture_type == GEN6_VC1_I_PICTURE || picture_type == GEN6_VC1_BI_PICTURE) /* I picture */ + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2; + else { + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1; + /* + * 8.3.6.2.1 Transform Type Selection + * If variable-sized transform coding is not enabled, + * then the 8x8 transform shall be used for all blocks. + * it is also MFX_VC1_PIC_STATE requirement. + */ + if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) { + pic_param->transform_fields.bits.mb_level_transform_type_flag = 1; + pic_param->transform_fields.bits.frame_level_transform_type = 0; + } + } + + if (picture_type == GEN6_VC1_B_PICTURE) { + struct gen6_vc1_surface *gen6_vc1_surface = NULL; + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface) + gen6_vc1_surface = obj_surface->private_data; + + if (!gen6_vc1_surface || + (va_to_gen6_vc1_pic_type[gen6_vc1_surface->picture_type] == GEN6_VC1_I_PICTURE || + va_to_gen6_vc1_pic_type[gen6_vc1_surface->picture_type] == GEN6_VC1_BI_PICTURE)) + dmv_surface_valid = 0; + else + dmv_surface_valid = 1; + } + + assert(pic_param->picture_fields.bits.frame_coding_mode < 3); + + if (pic_param->picture_fields.bits.frame_coding_mode < 2) + fcm = pic_param->picture_fields.bits.frame_coding_mode; + else { + if (pic_param->picture_fields.bits.top_field_first) + fcm = 2; + else + fcm = 3; + } + + if (pic_param->picture_fields.bits.picture_type == GEN6_VC1_B_PICTURE) { /* B picture */ + brfd = pic_param->reference_fields.bits.reference_distance; + brfd = (scale_factor * brfd) >> 8; + brfd = pic_param->reference_fields.bits.reference_distance - brfd - 1; + + if (brfd < 0) + brfd = 0; + } + + overlap = pic_param->sequence_fields.bits.overlap; + + if (overlap) { + overlap = 0; + if (profile != GEN6_VC1_ADVANCED_PROFILE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9 && + pic_param->picture_fields.bits.picture_type != GEN6_VC1_B_PICTURE) { + overlap = 1; + } + }else { + if (pic_param->picture_fields.bits.picture_type == GEN6_VC1_P_PICTURE && + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } + if (pic_param->picture_fields.bits.picture_type == GEN6_VC1_I_PICTURE || + pic_param->picture_fields.bits.picture_type == GEN6_VC1_BI_PICTURE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } else if (va_to_gen6_vc1_condover[pic_param->conditional_overlap_flag] == 2 || + va_to_gen6_vc1_condover[pic_param->conditional_overlap_flag] == 3) { + overlap = 1; + } + } + } + } + + assert(pic_param->conditional_overlap_flag < 3); + assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */ + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_VC1_PIC_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + (ALIGN(pic_param->coded_height, 16) / 16) << 16 | + (ALIGN(pic_param->coded_width, 16) / 16)); + OUT_BCS_BATCH(batch, + pic_param->sequence_fields.bits.syncmarker << 31 | + 1 << 29 | /* concealment */ + alt_pq << 24 | + pic_param->entrypoint_fields.bits.loopfilter << 23 | + overlap << 22 | + (pic_param->pic_quantizer_fields.bits.quantizer == 0) << 21 | /* implicit quantizer */ + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale << 16 | + alt_pquant_edge_mask << 12 | + alt_pquant_config << 10 | + pic_param->pic_quantizer_fields.bits.half_qp << 9 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 8 | + va_to_gen6_vc1_condover[pic_param->conditional_overlap_flag] << 6 | + !pic_param->picture_fields.bits.is_first_field << 5 | + picture_type << 2 | + fcm << 0); + OUT_BCS_BATCH(batch, + !!pic_param->bitplane_present.value << 23 | + !pic_param->bitplane_present.flags.bp_forward_mb << 22 | + !pic_param->bitplane_present.flags.bp_mv_type_mb << 21 | + !pic_param->bitplane_present.flags.bp_skip_mb << 20 | + !pic_param->bitplane_present.flags.bp_direct_mb << 19 | + !pic_param->bitplane_present.flags.bp_overflags << 18 | + !pic_param->bitplane_present.flags.bp_ac_pred << 17 | + !pic_param->bitplane_present.flags.bp_field_tx << 16 | + pic_param->mv_fields.bits.extended_dmv_range << 14 | + pic_param->mv_fields.bits.extended_mv_range << 12 | + pic_param->mv_fields.bits.four_mv_switch << 11 | + pic_param->fast_uvmc_flag << 10 | + unified_mv_mode << 8 | + ref_field_pic_polarity << 6 | + pic_param->reference_fields.bits.num_reference_pictures << 5 | + pic_param->reference_fields.bits.reference_distance << 0); + OUT_BCS_BATCH(batch, + scale_factor << 24 | + pic_param->mv_fields.bits.mv_table << 20 | + pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 | + pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 | + pic_param->transform_fields.bits.frame_level_transform_type << 12 | + pic_param->transform_fields.bits.mb_level_transform_type_flag << 11 | + pic_param->mb_mode_table << 8 | + trans_ac_y << 6 | + pic_param->transform_fields.bits.transform_ac_codingset_idx1 << 4 | + pic_param->transform_fields.bits.intra_transform_dc_table << 3 | + pic_param->cbp_table << 0); + OUT_BCS_BATCH(batch, + dmv_surface_valid << 13 | + brfd << 8 | + ((ALIGN(pic_param->coded_width, 16) / 16 + 1) / 2 - 1)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_vc1_pred_pipe_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + int interpolation_mode = 0; + int intensitycomp_single; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear)) + interpolation_mode = 2; /* Half-pel bilinear */ + else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel)) + interpolation_mode = 0; /* Half-pel bicubic */ + else + interpolation_mode = 1; /* Quarter-pel bicubic */ + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + intensitycomp_single = (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation); + + BEGIN_BCS_BATCH(batch, 7); + OUT_BCS_BATCH(batch, MFX_VC1_PRED_PIPE_STATE | (7 - 2)); + OUT_BCS_BATCH(batch, + 0 << 8 | /* FIXME: interlace mode */ + pic_param->rounding_control << 4 | + va_to_gen6_vc1_profile[pic_param->sequence_fields.bits.profile] << 2); + OUT_BCS_BATCH(batch, + pic_param->luma_shift << 16 | + pic_param->luma_scale << 0); /* FIXME: Luma Scaling */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + interpolation_mode << 19 | + pic_param->fast_uvmc_flag << 18 | + 0 << 17 | /* FIXME: scale up or down ??? */ + pic_param->range_reduction_frame << 16 | + 0 << 6 | /* FIXME: double ??? */ + 0 << 4 | + intensitycomp_single << 2 | + intensitycomp_single << 0); + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen6_mfd_vc1_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + struct object_surface *obj_surface; + dri_bo *dmv_read_buffer = NULL, *dmv_write_buffer = NULL; + + obj_surface = decode_state->render_object; + + if (obj_surface && obj_surface->private_data) { + dmv_write_buffer = ((struct gen6_vc1_surface *)(obj_surface->private_data))->dmv; + } + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface && obj_surface->private_data) { + dmv_read_buffer = ((struct gen6_vc1_surface *)(obj_surface->private_data))->dmv; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_VC1_DIRECTMODE_STATE | (3 - 2)); + + if (dmv_write_buffer) + OUT_BCS_RELOC(batch, dmv_write_buffer, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (dmv_read_buffer) + OUT_BCS_RELOC(batch, dmv_read_buffer, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen6_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offset, int profile) +{ + int out_slice_data_bit_offset; + int slice_header_size = in_slice_data_bit_offset / 8; + int i, j; + + if (profile != 3) + out_slice_data_bit_offset = in_slice_data_bit_offset; + else { + for (i = 0, j = 0; i < slice_header_size; i++, j++) { + if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) { + i++, j += 2; + } + } + + out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8; + } + + return out_slice_data_bit_offset; +} + +static void +gen6_mfd_vc1_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + VASliceParameterBufferVC1 *slice_param, + VASliceParameterBufferVC1 *next_slice_param, + dri_bo *slice_data_bo, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + int next_slice_start_vert_pos; + int macroblock_offset; + uint8_t *slice_data = NULL; + + dri_bo_map(slice_data_bo, 0); + slice_data = (uint8_t *)(slice_data_bo->virtual + slice_param->slice_data_offset); + macroblock_offset = gen6_mfd_vc1_get_macroblock_bit_offset(slice_data, + slice_param->macroblock_offset, + pic_param->sequence_fields.bits.profile); + dri_bo_unmap(slice_data_bo); + + if (next_slice_param) + next_slice_start_vert_pos = next_slice_param->slice_vertical_position; + else + next_slice_start_vert_pos = ALIGN(pic_param->coded_height, 16) / 16; + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFD_VC1_BSD_OBJECT | (4 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_vertical_position << 24 | + next_slice_start_vert_pos << 16 | + (macroblock_offset & 0x7)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_vc1_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen6_mfd_context *gen6_mfd_context) +{ + struct intel_batchbuffer *batch = gen6_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + VASliceParameterBufferVC1 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + gen6_mfd_vc1_decode_init(ctx, decode_state, gen6_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_VC1, gen6_mfd_context); + gen6_mfd_surface_state(ctx, decode_state, MFX_FORMAT_VC1, gen6_mfd_context); + gen6_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen6_mfd_context); + gen6_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen6_mfd_context); + gen6_mfd_vc1_pic_state(ctx, decode_state, gen6_mfd_context); + gen6_mfd_vc1_pred_pipe_state(ctx, decode_state, gen6_mfd_context); + gen6_mfd_vc1_directmode_state(ctx, decode_state, gen6_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen6_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_VC1, gen6_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen6_mfd_vc1_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen6_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static VAStatus +gen6_mfd_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) + +{ + struct gen6_mfd_context *gen6_mfd_context = (struct gen6_mfd_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + assert(gen6_mfd_context); + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen6_mfd_mpeg2_decode_picture(ctx, decode_state, gen6_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + gen6_mfd_avc_decode_picture(ctx, decode_state, gen6_mfd_context); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + gen6_mfd_vc1_decode_picture(ctx, decode_state, gen6_mfd_context); + break; + + default: + assert(0); + break; + } + + vaStatus = VA_STATUS_SUCCESS; + +out: + return vaStatus; +} + +static void +gen6_mfd_context_destroy(void *hw_context) +{ + struct gen6_mfd_context *gen6_mfd_context = (struct gen6_mfd_context *)hw_context; + + dri_bo_unreference(gen6_mfd_context->post_deblocking_output.bo); + gen6_mfd_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->pre_deblocking_output.bo); + gen6_mfd_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->intra_row_store_scratch_buffer.bo); + gen6_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + gen6_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + gen6_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->mpr_row_store_scratch_buffer.bo); + gen6_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen6_mfd_context->bitplane_read_buffer.bo); + gen6_mfd_context->bitplane_read_buffer.bo = NULL; + + intel_batchbuffer_free(gen6_mfd_context->base.batch); + free(gen6_mfd_context); +} + +struct hw_context * +gen6_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct gen6_mfd_context *gen6_mfd_context = calloc(1, sizeof(struct gen6_mfd_context)); + int i; + + if (!gen6_mfd_context) + return NULL; + + gen6_mfd_context->base.destroy = gen6_mfd_context_destroy; + gen6_mfd_context->base.run = gen6_mfd_decode_picture; + gen6_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + for (i = 0; i < ARRAY_ELEMS(gen6_mfd_context->reference_surface); i++) { + gen6_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; + gen6_mfd_context->reference_surface[i].frame_store_id = -1; + gen6_mfd_context->reference_surface[i].obj_surface = NULL; + } + + gen6_mfd_context->wa_mpeg2_slice_vertical_position = -1; + + return (struct hw_context *)gen6_mfd_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.h new file mode 100644 index 000000000..f499803e5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_mfd.h @@ -0,0 +1,78 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef _GEN6_MFD_H_ +#define _GEN6_MFD_H_ + +#include +#include +#include +#include +#include "i965_decoder.h" + +#define GEN6_VC1_I_PICTURE 0 +#define GEN6_VC1_P_PICTURE 1 +#define GEN6_VC1_B_PICTURE 2 +#define GEN6_VC1_BI_PICTURE 3 +#define GEN6_VC1_SKIPPED_PICTURE 4 + +#define GEN6_VC1_SIMPLE_PROFILE 0 +#define GEN6_VC1_MAIN_PROFILE 1 +#define GEN6_VC1_ADVANCED_PROFILE 2 +#define GEN6_VC1_RESERVED_PROFILE 3 + +struct gen6_vc1_surface +{ + dri_bo *dmv; + int picture_type; +}; + +struct hw_context; + +struct gen6_mfd_context +{ + struct hw_context base; + + union { + VAIQMatrixBufferMPEG2 mpeg2; + } iq_matrix; + + GenFrameStoreContext fs_ctx; + GenFrameStore reference_surface[MAX_GEN_REFERENCE_FRAMES]; + GenBuffer post_deblocking_output; + GenBuffer pre_deblocking_output; + GenBuffer intra_row_store_scratch_buffer; + GenBuffer deblocking_filter_row_store_scratch_buffer; + GenBuffer bsd_mpc_row_store_scratch_buffer; + GenBuffer mpr_row_store_scratch_buffer; + GenBuffer bitplane_read_buffer; + + int wa_mpeg2_slice_vertical_position; +}; + +#endif /* _GEN6_MFD_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.c new file mode 100644 index 000000000..07e353ea6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.c @@ -0,0 +1,672 @@ +/* + * Copyright © 2010-2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou Chang + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define CURBE_ALLOCATION_SIZE 37 /* in 256-bit */ +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) /* in byte, it should be less than or equal to CURBE_ALLOCATION_SIZE * 32 */ +#define CURBE_URB_ENTRY_LENGTH 4 /* in 256-bit, it should be less than or equal to CURBE_TOTAL_DATA_LENGTH / 32 */ + +enum VIDEO_CODING_TYPE{ + VIDEO_CODING_AVC = 0, + VIDEO_CODING_SUM +}; + +enum AVC_VME_KERNEL_TYPE{ + AVC_VME_INTRA_SHADER = 0, + AVC_VME_INTER_SHADER, + AVC_VME_BATCHBUFFER, + AVC_VME_KERNEL_SUM +}; + +static const uint32_t gen6_vme_intra_frame[][4] = { +#include "shaders/vme/intra_frame.g6b" +}; + +static const uint32_t gen6_vme_inter_frame[][4] = { +#include "shaders/vme/inter_frame.g6b" +}; + +static const uint32_t gen6_vme_batchbuffer[][4] = { +#include "shaders/vme/batchbuffer.g6b" +}; + +static struct i965_kernel gen6_vme_kernels[] = { + { + "AVC VME Intra Frame", + AVC_VME_INTRA_SHADER, /*index*/ + gen6_vme_intra_frame, + sizeof(gen6_vme_intra_frame), + NULL + }, + { + "AVC VME inter Frame", + AVC_VME_INTER_SHADER, + gen6_vme_inter_frame, + sizeof(gen6_vme_inter_frame), + NULL + }, + { + "AVC VME BATCHBUFFER", + AVC_VME_BATCHBUFFER, + gen6_vme_batchbuffer, + sizeof(gen6_vme_batchbuffer), + NULL + }, +}; + +/* only used for VME source surface state */ +static void +gen6_vme_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_surface2_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen6_vme_media_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_rw_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen6_vme_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES; + else + vme_context->vme_output.size_block = INTER_VME_OUTPUT_IN_BYTES; + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen6_vme_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 32; /* 2 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static VAStatus +gen6_vme_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen6_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen6_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); + + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen6_vme_source_surface_state); + + if (slice_type == SLICE_TYPE_B) + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen6_vme_source_surface_state); + } + + /* VME output */ + gen6_vme_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen6_vme_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen6_vme_interface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = vme_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < vme_context->vme_kernel_sum; i++) { + struct i965_kernel *kernel; + kernel = &vme_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 1; /* FIXME: */ + desc->desc2.sampler_state_pointer = (vme_context->vme_state.bo->offset >> 5); + desc->desc3.binding_table_entry_count = 1; /* FIXME: */ + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = CURBE_URB_ENTRY_LENGTH; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + /*Sampler State(VME state pointer)*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + (1 << 2), // + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc2), + vme_context->vme_state.bo); + desc++; + } + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen6_vme_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + // unsigned char *constant_buffer; + unsigned int *vme_state_message; + int mv_num = 32; + if (vme_context->h264_level >= 30) { + mv_num = 16; + if (vme_context->h264_level >= 31) + mv_num = 8; + } + + dri_bo_map(vme_context->gpe_context.curbe.bo, 1); + assert(vme_context->gpe_context.curbe.bo->virtual); + // constant_buffer = vme_context->curbe.bo->virtual; + vme_state_message = (unsigned int *)vme_context->gpe_context.curbe.bo->virtual; + vme_state_message[31] = mv_num; + + /*TODO copy buffer into CURB*/ + + dri_bo_unmap( vme_context->gpe_context.curbe.bo); + + return VA_STATUS_SUCCESS; +} + +static const unsigned int intra_mb_mode_cost_table[] = { + 0x31110001, // for qp0 + 0x09110001, // for qp1 + 0x15030001, // for qp2 + 0x0b030001, // for qp3 + 0x0d030011, // for qp4 + 0x17210011, // for qp5 + 0x41210011, // for qp6 + 0x19210011, // for qp7 + 0x25050003, // for qp8 + 0x1b130003, // for qp9 + 0x1d130003, // for qp10 + 0x27070021, // for qp11 + 0x51310021, // for qp12 + 0x29090021, // for qp13 + 0x35150005, // for qp14 + 0x2b0b0013, // for qp15 + 0x2d0d0013, // for qp16 + 0x37170007, // for qp17 + 0x61410031, // for qp18 + 0x39190009, // for qp19 + 0x45250015, // for qp20 + 0x3b1b000b, // for qp21 + 0x3d1d000d, // for qp22 + 0x47270017, // for qp23 + 0x71510041, // for qp24 ! center for qp=0..30 + 0x49290019, // for qp25 + 0x55350025, // for qp26 + 0x4b2b001b, // for qp27 + 0x4d2d001d, // for qp28 + 0x57370027, // for qp29 + 0x81610051, // for qp30 + 0x57270017, // for qp31 + 0x81510041, // for qp32 ! center for qp=31..51 + 0x59290019, // for qp33 + 0x65350025, // for qp34 + 0x5b2b001b, // for qp35 + 0x5d2d001d, // for qp36 + 0x67370027, // for qp37 + 0x91610051, // for qp38 + 0x69390029, // for qp39 + 0x75450035, // for qp40 + 0x6b3b002b, // for qp41 + 0x6d3d002d, // for qp42 + 0x77470037, // for qp43 + 0xa1710061, // for qp44 + 0x79490039, // for qp45 + 0x85550045, // for qp46 + 0x7b4b003b, // for qp47 + 0x7d4d003d, // for qp48 + 0x87570047, // for qp49 + 0xb1810071, // for qp50 + 0x89590049 // for qp51 +}; + +static void gen6_vme_state_setup_fixup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + unsigned int *vme_state_message) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + + if (slice_param->slice_type != SLICE_TYPE_I && + slice_param->slice_type != SLICE_TYPE_SI) + return; + + if (encoder_context->rate_control_mode == VA_RC_CQP) + vme_state_message[16] = intra_mb_mode_cost_table[pic_param->pic_init_qp + slice_param->slice_qp_delta]; + else + vme_state_message[16] = intra_mb_mode_cost_table[mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY]; +} + +static VAStatus gen6_vme_vme_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *vme_state_message; + int i; + + //building VME state message + dri_bo_map(vme_context->vme_state.bo, 1); + assert(vme_context->vme_state.bo->virtual); + vme_state_message = (unsigned int *)vme_context->vme_state.bo->virtual; + + if (encoder_context->quality_level != ENCODER_LOW_QUALITY) { + vme_state_message[0] = 0x01010101; + vme_state_message[1] = 0x10010101; + vme_state_message[2] = 0x0F0F0F0F; + vme_state_message[3] = 0x100F0F0F; + vme_state_message[4] = 0x01010101; + vme_state_message[5] = 0x10010101; + vme_state_message[6] = 0x0F0F0F0F; + vme_state_message[7] = 0x100F0F0F; + vme_state_message[8] = 0x01010101; + vme_state_message[9] = 0x10010101; + vme_state_message[10] = 0x0F0F0F0F; + vme_state_message[11] = 0x000F0F0F; + vme_state_message[12] = 0x00; + vme_state_message[13] = 0x00; + } else { + vme_state_message[0] = 0x10010101; + vme_state_message[1] = 0x100F0F0F; + vme_state_message[2] = 0x10010101; + vme_state_message[3] = 0x000F0F0F; + vme_state_message[4] = 0; + vme_state_message[5] = 0; + vme_state_message[6] = 0; + vme_state_message[7] = 0; + vme_state_message[8] = 0; + vme_state_message[9] = 0; + vme_state_message[10] = 0; + vme_state_message[11] = 0; + vme_state_message[12] = 0; + vme_state_message[13] = 0; + } + + vme_state_message[14] = 0x4a4a; + vme_state_message[15] = 0x0; + vme_state_message[16] = 0x4a4a4a4a; + vme_state_message[17] = 0x4a4a4a4a; + vme_state_message[18] = 0x21110100; + vme_state_message[19] = 0x61514131; + + for(i = 20; i < 32; i++) { + vme_state_message[i] = 0; + } + //vme_state_message[16] = 0x42424242; //cost function LUT set 0 for Intra + + gen6_vme_state_setup_fixup(ctx, encode_state, encoder_context, vme_state_message); + + dri_bo_unmap( vme_context->vme_state.bo); + return VA_STATUS_SUCCESS; +} + +static void +gen6_vme_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int number_mb_cmds; + int mb_x = 0, mb_y = 0; + int i, s; + unsigned int *command_ptr; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->macroblock_address; + int slice_mb_number = pSliceParameter->num_macroblocks; + + for (i = 0; i < slice_mb_number; ) { + int mb_count = i + slice_mb_begin; + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + if( i == 0 ) { + number_mb_cmds = mb_width; // we must mark the slice edge. + } else if ( (i + 128 ) <= slice_mb_number) { + number_mb_cmds = 128; + } else { + number_mb_cmds = slice_mb_number - i; + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (9 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = (number_mb_cmds << 16 | transform_8x8_mode_flag | ((i==0) << 1)); + *command_ptr++ = encoder_context->quality_level; + + i += number_mb_cmds; + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void gen6_vme_media_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + dri_bo *bo; + + i965_gpe_context_init(ctx, &vme_context->gpe_context); + + /* VME output buffer */ + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + /* VME state */ + dri_bo_unreference(vme_context->vme_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 1024*16, 64); + assert(bo); + vme_context->vme_state.bo = bo; +} + +static void gen6_vme_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + gen6_vme_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + is_intra ? AVC_VME_INTRA_SHADER : AVC_VME_INTER_SHADER, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen6_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen6_vme_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if (!vme_context->h264_level || + (vme_context->h264_level != pSequenceParameter->level_idc)) { + vme_context->h264_level = pSequenceParameter->level_idc; + } + /*Setup all the memory object*/ + gen6_vme_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen6_vme_interface_setup(ctx, encode_state, encoder_context); + gen6_vme_constant_setup(ctx, encode_state, encoder_context); + gen6_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context); + + /*Programing media pipeline*/ + gen6_vme_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + +static VAStatus gen6_vme_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen6_vme_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen6_vme_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen6_vme_media_init(ctx, encoder_context); + gen6_vme_prepare(ctx, encode_state, encoder_context); + gen6_vme_run(ctx, encode_state, encoder_context); + gen6_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen6_vme_context_destroy(void *context) +{ + struct gen6_vme_context *vme_context = context; + + i965_gpe_context_destroy(&vme_context->gpe_context); + + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + free(vme_context); +} + +Bool gen6_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = NULL; + + if (encoder_context->codec != CODEC_H264) { + /* Never get here */ + assert(0); + return False; + } + + vme_context = calloc(1, sizeof(struct gen6_vme_context)); + + if (!vme_context) + return False; + + vme_context->gpe_context.surface_state_binding_table.length = + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6; + vme_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH; + + vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + vme_context->gpe_context.vfe_state.num_urb_entries = 16; + vme_context->gpe_context.vfe_state.gpgpu_mode = 0; + vme_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + vme_context->video_coding_type = VIDEO_CODING_AVC; + vme_context->vme_kernel_sum = AVC_VME_KERNEL_SUM; + i965_gpe_load_kernels(ctx, + &vme_context->gpe_context, + gen6_vme_kernels, + vme_context->vme_kernel_sum); + + encoder_context->vme_pipeline = gen6_vme_pipeline; + vme_context->vme_surface2_setup = i965_gpe_surface2_setup; + vme_context->vme_media_rw_surface_setup = i965_gpe_media_rw_surface_setup; + vme_context->vme_buffer_suface_setup = i965_gpe_buffer_suface_setup; + + encoder_context->vme_context = vme_context; + encoder_context->vme_context_destroy = gen6_vme_context_destroy; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.h new file mode 100644 index 000000000..dc568acfe --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen6_vme.h @@ -0,0 +1,203 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWAR + * + * Authors: + * Zhou Chang + * + */ + +#ifndef _GEN6_VME_H_ +#define _GEN6_VME_H_ + +#include +#include +#include +#include + +#include "i965_gpe_utils.h" + +#define INTRA_VME_OUTPUT_IN_BYTES 16 /* in bytes */ +#define INTRA_VME_OUTPUT_IN_DWS (INTRA_VME_OUTPUT_IN_BYTES / 4) +#define INTER_VME_OUTPUT_IN_BYTES 160 /* the first 128 bytes for MVs and the last 32 bytes for other info */ +#define INTER_VME_OUTPUT_IN_DWS (INTER_VME_OUTPUT_IN_BYTES / 4) + +#define MAX_INTERFACE_DESC_GEN6 MAX_GPE_KERNELS +#define MAX_MEDIA_SURFACES_GEN6 34 + +#define GEN6_VME_KERNEL_NUMBER 3 + +struct encode_state; +struct intel_encoder_context; + +struct gen6_vme_context +{ + struct i965_gpe_context gpe_context; + + struct { + dri_bo *bo; + } vme_state; + + struct i965_buffer_surface vme_output; + struct i965_buffer_surface vme_batchbuffer; + + + void (*vme_surface2_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + void (*vme_media_rw_surface_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + void (*vme_buffer_suface_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + void (*vme_media_chroma_surface_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + void *vme_state_message; + unsigned int h264_level; + unsigned int hevc_level; + unsigned int video_coding_type; + unsigned int vme_kernel_sum; + unsigned int mpeg2_level; + + struct object_surface *used_reference_objects[2]; + void *used_references[2]; + unsigned int ref_index_in_mb[2]; +}; + +#define MPEG2_PIC_WIDTH_HEIGHT 30 +#define MPEG2_MV_RANGE 29 +#define MPEG2_LEVEL_MASK 0x0f +#define MPEG2_LEVEL_LOW 0x0a +#define MPEG2_LEVEL_MAIN 0x08 +#define MPEG2_LEVEL_HIGH 0x04 + + +Bool gen75_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +extern void intel_vme_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +void intel_vme_vp8_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +Bool gen7_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +#define MODE_INTRA_NONPRED 0 +#define MODE_INTRA_16X16 1 +#define MODE_INTRA_8X8 2 +#define MODE_INTRA_4X4 3 +#define MODE_INTER_16X8 4 +#define MODE_INTER_8X16 4 +#define MODE_INTER_8X8 5 +#define MODE_INTER_8X4 6 +#define MODE_INTER_4X8 6 +#define MODE_INTER_4X4 7 +#define MODE_INTER_16X16 8 +#define MODE_INTER_BWD 9 +#define MODE_REFID_COST 10 +#define MODE_CHROMA_INTRA 11 + +#define MODE_INTER_MV0 12 +#define MODE_INTER_MV1 13 +#define MODE_INTER_MV2 14 + +#define MODE_INTER_MV3 15 +#define MODE_INTER_MV4 16 +#define MODE_INTER_MV5 17 +#define MODE_INTER_MV6 18 +#define MODE_INTER_MV7 19 + +#define INTRA_PRED_AVAIL_FLAG_AE 0x60 +#define INTRA_PRED_AVAIL_FLAG_B 0x10 +#define INTRA_PRED_AVAIL_FLAG_C 0x8 +#define INTRA_PRED_AVAIL_FLAG_D 0x4 +#define INTRA_PRED_AVAIL_FLAG_BCD_MASK 0x1C + +extern void +gen7_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context); + +extern void +gen7_vme_scoreboard_init(VADriverContextP ctx, struct gen6_vme_context *vme_context); + +extern void +intel_vme_mpeg2_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void +gen7_vme_mpeg2_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + struct intel_encoder_context *encoder_context); + +void +intel_avc_vme_reference_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int list_index, + int surface_index, + void (* vme_source_surface_state)( + VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context)); + +/* HEVC */ +void +intel_hevc_vme_reference_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int list_index, + int surface_index, + void (* vme_source_surface_state)( + VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context)); + +void intel_vme_hevc_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + + +extern Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +extern Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); +#endif /* _GEN6_VME_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfc.c new file mode 100644 index 000000000..b6b18ea9b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfc.c @@ -0,0 +1,2580 @@ +/* + * Copyright © 2010-2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" +#include "intel_media.h" + +#define AVC_INTRA_RDO_OFFSET 4 +#define AVC_INTER_RDO_OFFSET 10 +#define AVC_INTER_MSG_OFFSET 8 +#define AVC_INTER_MV_OFFSET 48 +#define AVC_RDO_MASK 0xFFFF + +#define MFC_SOFTWARE_HASWELL 0 + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define B0_STEP_REV 2 +#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV) + +static const uint32_t gen75_mfc_batchbuffer_avc[][4] = { +#include "shaders/utils/mfc_batchbuffer_hsw.g75b" +}; + +static struct i965_kernel gen75_mfc_kernels[] = { + { + "MFC AVC INTRA BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTRA, + gen75_mfc_batchbuffer_avc, + sizeof(gen75_mfc_batchbuffer_avc), + NULL + }, +}; + +#define INTER_MODE_MASK 0x03 +#define INTER_8X8 0x03 +#define INTER_16X8 0x01 +#define INTER_8X16 0x02 +#define SUBMB_SHAPE_MASK 0x00FF00 + +#define INTER_MV8 (4 << 20) +#define INTER_MV32 (6 << 20) + + +static void +gen75_mfc_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC); + + BEGIN_BCS_BATCH(batch, 5); + + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Must be long format for encoder */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* Stream-Out Enable */ + ((!!mfc_context->post_deblocking_output.bo) << 9) | /* Post Deblocking Output */ + ((!!mfc_context->pre_deblocking_output.bo) << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (1 << 4) | /* encoding mode */ + (standard_select << 0)); /* standard select: avc or mpeg2 */ + OUT_BCS_BATCH(batch, + (0 << 7) | /* expand NOA bus flag */ + (0 << 6) | /* disable slice-level clock gating */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_surface_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((mfc_context->surface_state.height - 1) << 18) | + ((mfc_context->surface_state.width - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((mfc_context->surface_state.w_pitch - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (mfc_context->surface_state.h_pitch)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_ind_obj_base_addr_state_bplus(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + BEGIN_BCS_BATCH(batch, 26); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (26 - 2)); + /* the DW1-3 is for the MFX indirect bistream offset */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW4-5 is the MFX upper bound */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW6-10 is for MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); + + /* the DW11-15 is for MFX IT-COFF. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-20 is for MFX indirect DBLK. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW21-25 is for MFC Indirect PAK-BSE Object Base Address for Encoder*/ + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_ind_obj_base_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfc_ind_obj_base_addr_state_bplus(ctx, encoder_context); + return; + } + + BEGIN_BCS_BATCH(batch, 11); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /*MFC Indirect PAK-BSE Object Base Address for Encoder*/ + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_avc_img_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + BEGIN_BCS_BATCH(batch, 16); + + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + /*DW1. MB setting of frame */ + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs - 1) & 0xFFFF)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + /* DW3 QP setting */ + OUT_BCS_BATCH(batch, + (0 << 24) | /* Second Chroma QP Offset */ + (0 << 16) | /* Chroma QP Offset */ + (0 << 14) | /* Max-bit conformance Intra flag */ + (0 << 13) | /* Max Macroblock size conformance Inter flag */ + (pPicParameter->pic_fields.bits.weighted_pred_flag << 12) | /*Weighted_Pred_Flag */ + (pPicParameter->pic_fields.bits.weighted_bipred_idc << 10) | /* Weighted_BiPred_Idc */ + (0 << 8) | /* FIXME: Image Structure */ + (0 << 0) ); /* Current Decoed Image Frame Store ID, reserved in Encode mode */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* Mininum Frame size */ + (0 << 15) | /* Disable reading of Macroblock Status Buffer */ + (0 << 14) | /* Load BitStream Pointer only once, 1 slic 1 frame */ + (0 << 13) | /* CABAC 0 word insertion test enable */ + (1 << 12) | /* MVUnpackedEnable,compliant to DXVA */ + (1 << 10) | /* Chroma Format IDC, 4:2:0 */ + (0 << 8) | /* FIXME: MbMvFormatFlag */ + (pPicParameter->pic_fields.bits.entropy_coding_mode_flag << 7) | /*0:CAVLC encoding mode,1:CABAC*/ + (0 << 6) | /* Only valid for VLD decoding mode */ + (0 << 5) | /* Constrained Intra Predition Flag, from PPS */ + (0 << 4) | /* Direct 8x8 inference flag */ + (pPicParameter->pic_fields.bits.transform_8x8_mode_flag << 3) | /*8x8 or 4x4 IDCT Transform Mode Flag*/ + (1 << 2) | /* Frame MB only flag */ + (0 << 1) | /* MBAFF mode is in active */ + (0 << 0)); /* Field picture flag */ + /* DW5 Trellis quantization */ + OUT_BCS_BATCH(batch, 0); /* Mainly about MB rate control and debug, just ignoring */ + OUT_BCS_BATCH(batch, /* Inter and Intra Conformance Max size limit */ + (0xBB8 << 16) | /* InterMbMaxSz */ + (0xEE8) ); /* IntraMbMaxSz */ + OUT_BCS_BATCH(batch, 0); /* Reserved */ + /* DW8. QP delta */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + /* DW10. Bit setting for MB */ + OUT_BCS_BATCH(batch, 0x8C000000); + OUT_BCS_BATCH(batch, 0x00010000); + /* DW12. */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0x02010100); + /* DW14. For short format */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_qm_state(VADriverContextP ctx, + int qm_type, + unsigned int *qm, + int qm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16); + assert(sizeof(*qm) == 4); + memcpy(qm_buffer, qm, qm_length * 4); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_avc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[16] = { + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010 + }; + + gen75_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 12, encoder_context); + gen75_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 12, encoder_context); + gen75_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 16, encoder_context); + gen75_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 16, encoder_context); +} + +static void +gen75_mfc_fqm_state(VADriverContextP ctx, + int fqm_type, + unsigned int *fqm, + int fqm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int fqm_buffer[32]; + + assert(fqm_length <= 32); + assert(sizeof(*fqm) == 4); + memcpy(fqm_buffer, fqm, fqm_length * 4); + + BEGIN_BCS_BATCH(batch, 34); + OUT_BCS_BATCH(batch, MFX_FQM_STATE | (34 - 2)); + OUT_BCS_BATCH(batch, fqm_type << 0); + intel_batchbuffer_data(batch, fqm_buffer, 32 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_avc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[32] = { + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000 + }; + + gen75_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 24, encoder_context); + gen75_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 24, encoder_context); + gen75_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 32, encoder_context); + gen75_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 32, encoder_context); +} + +static void +gen75_mfc_avc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, MFX_INSERT_OBJECT | (lenght_in_dws + 2 - 2)); + OUT_BCS_BATCH(batch, + (0 << 16) | /* always start at offset 0 */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* FIXME: ??? */ + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen75_mfc_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + dri_bo *bo; + int i; + int width_in_mbs = 0; + int height_in_mbs = 0; + int slice_batchbuffer_size; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + width_in_mbs = pSequenceParameter->picture_width_in_mbs; + height_in_mbs = pSequenceParameter->picture_height_in_mbs; + } else { + VAEncSequenceParameterBufferMPEG2 *pSequenceParameter = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + + assert(encoder_context->codec == CODEC_MPEG2); + + width_in_mbs = ALIGN(pSequenceParameter->picture_width, 16) / 16; + height_in_mbs = ALIGN(pSequenceParameter->picture_height, 16) / 16; + } + + slice_batchbuffer_size = 64 * width_in_mbs * height_in_mbs + 4096 + + (SLICE_HEADER + SLICE_TAIL) * encode_state->num_slice_params_ext; + + /*Encode common setup for MFC*/ + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + if (mfc_context->direct_mv_buffers[i].bo != NULL) + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 64, + 64); + assert(bo); + mfc_context->intra_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 64); + assert(bo); + mfc_context->macroblock_status_buffer.bo = bo; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 4 * width_in_mbs * 64, /* 4 * width_in_mbs * 64 */ + 64); + assert(bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 2 * width_in_mbs * 64, /* 2 * width_in_mbs * 64 */ + 0x1000); + assert(bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, + slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; + + i965_gpe_context_init(ctx, &mfc_context->gpe_context); +} + +static void +gen75_mfc_pipe_buf_addr_state_bplus(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int i; + + BEGIN_BCS_BATCH(batch, 61); + + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + + /* the DW1-3 is for pre_deblocking */ + if (mfc_context->pre_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); /* pre output addr */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW4-6 is for the post_deblocking */ + + if (mfc_context->post_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* post output addr */ + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for the uncompressed_picture */ + OUT_BCS_RELOC(batch, mfc_context->uncompressed_picture_source.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* uncompressed data */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW10-12 is for the mb status */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* StreamOut data*/ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW13-15 is for the intra_row_store_scratch */ + OUT_BCS_RELOC(batch, mfc_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-18 is for the deblocking filter */ + OUT_BCS_RELOC(batch, mfc_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 19-50 is for Reference pictures*/ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + if ( mfc_context->reference_surfaces[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->reference_surfaces[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + OUT_BCS_BATCH(batch, 0); + } + OUT_BCS_BATCH(batch, 0); + + /* The DW 52-54 is for the MB status buffer */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* Macroblock status buffer*/ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 55-57 is the ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 58-60 is the second ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_pipe_buf_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfc_pipe_buf_addr_state_bplus(ctx, encoder_context); + return; + } + + BEGIN_BCS_BATCH(batch, 25); + + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (25 - 2)); + + if (mfc_context->pre_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); /* pre output addr */ + + if (mfc_context->post_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* post output addr */ + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, mfc_context->uncompressed_picture_source.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* uncompressed data */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* StreamOut data*/ + OUT_BCS_RELOC(batch, mfc_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, mfc_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + /* 7..22 Reference pictures*/ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + if ( mfc_context->reference_surfaces[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->reference_surfaces[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* Macroblock status buffer*/ + + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_avc_directmode_state_bplus(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + int i; + + BEGIN_BCS_BATCH(batch, 71); + + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* Reference frames and Current frames */ + /* the DW1-32 is for the direct MV for reference */ + for(i = 0; i < NUM_MFC_DMV_BUFFERS - 2; i += 2) { + if ( mfc_context->direct_mv_buffers[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + OUT_BCS_BATCH(batch, 0); + + /* the DW34-36 is the MV for the current reference */ + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[NUM_MFC_DMV_BUFFERS - 2].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POL list */ + for(i = 0; i < 32; i++) { + OUT_BCS_BATCH(batch, i/2); + } + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_avc_directmode_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfc_avc_directmode_state_bplus(ctx, encoder_context); + return; + } + + BEGIN_BCS_BATCH(batch, 69); + + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* Reference frames and Current frames */ + for(i = 0; i < NUM_MFC_DMV_BUFFERS; i++) { + if ( mfc_context->direct_mv_buffers[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + /* POL list */ + for(i = 0; i < 32; i++) { + OUT_BCS_BATCH(batch, i/2); + } + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen75_mfc_bsp_buf_base_addr_state_bplus(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 10); + + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + OUT_BCS_RELOC(batch, mfc_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW4-6 is for MPR Row Store Scratch Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for Bitplane Read Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_bsp_buf_base_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfc_bsp_buf_base_addr_state_bplus(ctx, encoder_context); + return; + } + + BEGIN_BCS_BATCH(batch, 4); + + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + OUT_BCS_RELOC(batch, mfc_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen75_mfc_avc_pipeline_picture_programing( VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_AVC, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen75_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen75_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + mfc_context->avc_img_state(ctx, encode_state, encoder_context); + mfc_context->avc_qm_state(ctx, encoder_context); + mfc_context->avc_fqm_state(ctx, encoder_context); + gen75_mfc_avc_directmode_state(ctx, encoder_context); + intel_mfc_avc_ref_idx_state(ctx, encode_state, encoder_context); +} + + +static VAStatus gen75_mfc_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); //run the pipeline + + return VA_STATUS_SUCCESS; +} + + +static VAStatus +gen75_mfc_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size) +{ + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VACodedBufferSegment *coded_buffer_segment; + + vaStatus = i965_MapBuffer(ctx, pPicParameter->coded_buf, (void **)&coded_buffer_segment); + assert(vaStatus == VA_STATUS_SUCCESS); + *encoded_bits_size = coded_buffer_segment->size * 8; + i965_UnmapBuffer(ctx, pPicParameter->coded_buf); + + return VA_STATUS_SUCCESS; +} + + +static void +gen75_mfc_avc_slice_state(VADriverContextP ctx, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int rate_control_enable, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int beginmb = slice_param->macroblock_address; + int endmb = beginmb + slice_param->num_macroblocks; + int beginx = beginmb % width_in_mbs; + int beginy = beginmb / width_in_mbs; + int nextx = endmb % width_in_mbs; + int nexty = endmb / width_in_mbs; + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + int last_slice = (endmb == (width_in_mbs * height_in_mbs)); + int maxQpN, maxQpP; + unsigned char correct[6], grow, shrink; + int i; + int weighted_pred_idc = 0; + unsigned int luma_log2_weight_denom = slice_param->luma_log2_weight_denom; + unsigned int chroma_log2_weight_denom = slice_param->chroma_log2_weight_denom; + int num_ref_l0 = 0, num_ref_l1 = 0; + + if (batch == NULL) + batch = encoder_context->base.batch; + + if (slice_type == SLICE_TYPE_I) { + luma_log2_weight_denom = 0; + chroma_log2_weight_denom = 0; + } else if (slice_type == SLICE_TYPE_P) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + } else if (slice_type == SLICE_TYPE_B) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = pic_param->num_ref_idx_l1_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) { + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (weighted_pred_idc == 2) { + /* 8.4.3 - Derivation process for prediction weights (8-279) */ + luma_log2_weight_denom = 5; + chroma_log2_weight_denom = 5; + } + } + + maxQpN = mfc_context->bit_rate_control_context[slice_type].MaxQpNegModifier; + maxQpP = mfc_context->bit_rate_control_context[slice_type].MaxQpPosModifier; + + for (i = 0; i < 6; i++) + correct[i] = mfc_context->bit_rate_control_context[slice_type].Correct[i]; + + grow = mfc_context->bit_rate_control_context[slice_type].GrowInit + + (mfc_context->bit_rate_control_context[slice_type].GrowResistance << 4); + shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit + + (mfc_context->bit_rate_control_context[slice_type].ShrinkResistance << 4); + + BEGIN_BCS_BATCH(batch, 11);; + + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2) ); + OUT_BCS_BATCH(batch, slice_type); /*Slice Type: I:P:B Slice*/ + + OUT_BCS_BATCH(batch, + (num_ref_l0 << 16) | + (num_ref_l1 << 24) | + (chroma_log2_weight_denom << 8) | + (luma_log2_weight_denom << 0)); + + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag<<29) | /*Direct Prediction Type*/ + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + (qp<<16) | /*Slice Quantization Parameter*/ + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (beginy << 24) | /*First MB X&Y , the begin postion of current slice*/ + (beginx << 16) | + slice_param->macroblock_address ); + OUT_BCS_BATCH(batch, (nexty << 16) | nextx); /*Next slice first MB X&Y*/ + OUT_BCS_BATCH(batch, + (0/*rate_control_enable*/ << 31) | /*in CBR mode RateControlCounterEnable = enable*/ + (1 << 30) | /*ResetRateControlCounter*/ + (0 << 28) | /*RC Triggle Mode = Always Rate Control*/ + (4 << 24) | /*RC Stable Tolerance, middle level*/ + (0/*rate_control_enable*/ << 23) | /*RC Panic Enable*/ + (0 << 22) | /*QP mode, don't modfiy CBP*/ + (0 << 21) | /*MB Type Direct Conversion Enabled*/ + (0 << 20) | /*MB Type Skip Conversion Enabled*/ + (last_slice << 19) | /*IsLastSlice*/ + (0 << 18) | /*BitstreamOutputFlag Compressed BitStream Output Disable Flag 0:enable 1:disable*/ + (1 << 17) | /*HeaderPresentFlag*/ + (1 << 16) | /*SliceData PresentFlag*/ + (1 << 15) | /*TailPresentFlag*/ + (1 << 13) | /*RBSP NAL TYPE*/ + (0 << 12) ); /*CabacZeroWordInsertionEnable*/ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, + (maxQpN << 24) | /*Target QP - 24 is lowest QP*/ + (maxQpP << 16) | /*Target QP + 20 is highest QP*/ + (shrink << 8) | + (grow << 0)); + OUT_BCS_BATCH(batch, + (correct[5] << 20) | + (correct[4] << 16) | + (correct[3] << 12) | + (correct[2] << 8) | + (correct[1] << 4) | + (correct[0] << 0)); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +#if MFC_SOFTWARE_HASWELL + +static int +gen75_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y, int end_mb, + int qp,unsigned int *msg, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size, unsigned char max_mb_size, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 12; + unsigned int intra_msg; +#define INTRA_MSG_FLAG (1 << 13) +#define INTRA_MBTYPE_MASK (0x1F0000) + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + intra_msg = msg[0] & 0xC0FF; + intra_msg |= INTRA_MSG_FLAG; + intra_msg |= ((msg[0] & INTRA_MBTYPE_MASK) >> 8); + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 24) | /* PackedMvNum, Debug*/ + (0 << 20) | /* No motion vector */ + (1 << 19) | /* CbpDcY */ + (1 << 18) | /* CbpDcU */ + (1 << 17) | /* CbpDcV */ + intra_msg); + + OUT_BCS_BATCH(batch, (0xFFFF << 16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ + OUT_BCS_BATCH(batch, (0 << 27) | (end_mb << 26) | qp); /* Last MB */ + + /*Stuff for Intra MB*/ + OUT_BCS_BATCH(batch, msg[1]); /* We using Intra16x16 no 4x4 predmode*/ + OUT_BCS_BATCH(batch, msg[2]); + OUT_BCS_BATCH(batch, msg[3]&0xFF); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static int +gen75_mfc_avc_pak_object_inter(VADriverContextP ctx, int x, int y, int end_mb, int qp, + unsigned int *msg, unsigned int offset, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size,unsigned char max_mb_size, int slice_type, + struct intel_batchbuffer *batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int len_in_dwords = 12; + unsigned int inter_msg = 0; + if (batch == NULL) + batch = encoder_context->base.batch; + { +#define MSG_MV_OFFSET 4 + unsigned int *mv_ptr; + mv_ptr = msg + MSG_MV_OFFSET; + /* MV of VME output is based on 16 sub-blocks. So it is necessary + * to convert them to be compatible with the format of AVC_PAK + * command. + */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X16) { + /* MV[0] and MV[2] are replicated */ + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[6] = mv_ptr[8]; + mv_ptr[7] = mv_ptr[9]; + } else if ((msg[0] & INTER_MODE_MASK) == INTER_16X8) { + /* MV[0] and MV[1] are replicated */ + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } else if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + !(msg[1] & SUBMB_SHAPE_MASK)) { + /* Don't touch MV[0] or MV[1] */ + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } + } + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + + inter_msg = 32; + /* MV quantity */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X8) { + if (msg[1] & SUBMB_SHAPE_MASK) + inter_msg = 128; + } + OUT_BCS_BATCH(batch, inter_msg); /* 32 MV*/ + OUT_BCS_BATCH(batch, offset); + inter_msg = msg[0] & (0x1F00FFFF); + inter_msg |= INTER_MV8; + inter_msg |= ((1 << 19) | (1 << 18) | (1 << 17)); + if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + (msg[1] & SUBMB_SHAPE_MASK)) { + inter_msg |= INTER_MV32; + } + + OUT_BCS_BATCH(batch, inter_msg); + + OUT_BCS_BATCH(batch, (0xFFFF<<16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ +#if 0 + if ( slice_type == SLICE_TYPE_B) { + OUT_BCS_BATCH(batch, (0xF<<28) | (end_mb << 26) | qp); /* Last MB */ + } else { + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ + } +#else + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ +#endif + + inter_msg = msg[1] >> 8; + /*Stuff for Inter MB*/ + OUT_BCS_BATCH(batch, inter_msg); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0x0); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static void +gen75_mfc_avc_pipeline_slice_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + unsigned int *msg = NULL, offset = 0; + unsigned char *msg_ptr = NULL; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int i,x,y; + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int is_intra = slice_type == SLICE_TYPE_I; + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + gen75_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, encoder_context, + (rate_control_mode == VA_RC_CBR), qp_slice, slice_batch); + + if ( slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + dri_bo_map(vme_context->vme_output.bo , 1); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (is_intra) { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } else { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } + + for (i = pSliceParameter->macroblock_address; + i < pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks; i++) { + int last_mb = (i == (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks - 1) ); + x = i % width_in_mbs; + y = i / width_in_mbs; + msg = (unsigned int *) (msg_ptr + i * vme_context->vme_output.size_block); + + if (is_intra) { + assert(msg); + gen75_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + offset = i * vme_context->vme_output.size_block + AVC_INTER_MV_OFFSET; + if (intra_rdo < inter_rdo) { + gen75_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + msg += AVC_INTER_MSG_OFFSET; + gen75_mfc_avc_pak_object_inter(ctx, x, y, last_mb, qp, msg, offset, encoder_context, 0, 0, slice_type, slice_batch); + } + } + } + + dri_bo_unmap(vme_context->vme_output.bo); + + if ( last_slice ) { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 2, 8, + 2, 1, 1, 0, slice_batch); + } else { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 1, 8, + 1, 1, 1, 0, slice_batch); + } +} + +static dri_bo * +gen75_mfc_avc_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; + int i; + int buffer_size; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + gen75_mfc_avc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +#else + +static void +gen75_mfc_batchbuffer_surfaces_input(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(vme_context->vme_output.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(BIND_IDX_VME_OUTPUT), + SURFACE_STATE_OFFSET(BIND_IDX_VME_OUTPUT)); +} + +static void +gen75_mfc_batchbuffer_surfaces_output(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + assert(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->aux_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_BATCHBUFFER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_BATCHBUFFER)); +} + +static void +gen75_mfc_batchbuffer_surfaces_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen75_mfc_batchbuffer_surfaces_input(ctx, encode_state, encoder_context); + gen75_mfc_batchbuffer_surfaces_output(ctx, encode_state, encoder_context); +} + +static void +gen75_mfc_batchbuffer_idrt_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = mfc_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < mfc_context->gpe_context.num_kernels; i++) { + struct i965_kernel *kernel; + + kernel = &mfc_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 2; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = 4; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +gen75_mfc_batchbuffer_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + (void)mfc_context; +} + +#define AVC_PAK_LEN_IN_BYTE 48 +#define AVC_PAK_LEN_IN_OWORD 3 + +static void +gen75_mfc_batchbuffer_emit_object_command(struct intel_batchbuffer *batch, + uint32_t intra_flag, + int head_offset, + int number_mb_cmds, + int slice_end_x, + int slice_end_y, + int mb_x, + int mb_y, + int width_in_mbs, + int qp, + uint32_t fwd_ref, + uint32_t bwd_ref) +{ + uint32_t temp_value; + BEGIN_BATCH(batch, 14); + + OUT_BATCH(batch, CMD_MEDIA_OBJECT | (14 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*inline data */ + OUT_BATCH(batch, head_offset / 16); + OUT_BATCH(batch, (intra_flag) | (qp << 16)); + temp_value = (mb_x | (mb_y << 8) | (width_in_mbs << 16)); + OUT_BATCH(batch, temp_value); + + OUT_BATCH(batch, number_mb_cmds); + + OUT_BATCH(batch, + ((slice_end_y << 8) | (slice_end_x))); + OUT_BATCH(batch, fwd_ref); + OUT_BATCH(batch, bwd_ref); + + OUT_BATCH(batch, MI_NOOP); + + ADVANCE_BATCH(batch); +} + +static void +gen75_mfc_avc_batchbuffer_slice_command(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + VAEncSliceParameterBufferH264 *slice_param, + int head_offset, + int qp, + int last_slice) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int total_mbs = slice_param->num_macroblocks; + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + int number_mb_cmds = 128; + int starting_offset = 0; + int mb_x, mb_y; + int last_mb, slice_end_x, slice_end_y; + int remaining_mb = total_mbs; + uint32_t fwd_ref , bwd_ref, mb_flag; + + last_mb = slice_param->macroblock_address + total_mbs - 1; + slice_end_x = last_mb % width_in_mbs; + slice_end_y = last_mb / width_in_mbs; + + if (slice_type == SLICE_TYPE_I) { + fwd_ref = 0; + bwd_ref = 0; + mb_flag = 1; + } else { + fwd_ref = vme_context->ref_index_in_mb[0]; + bwd_ref = vme_context->ref_index_in_mb[1]; + mb_flag = 0; + } + + if (width_in_mbs >= 100) { + number_mb_cmds = width_in_mbs / 5; + } else if (width_in_mbs >= 80) { + number_mb_cmds = width_in_mbs / 4; + } else if (width_in_mbs >= 60) { + number_mb_cmds = width_in_mbs / 3; + } else if (width_in_mbs >= 40) { + number_mb_cmds = width_in_mbs / 2; + } else { + number_mb_cmds = width_in_mbs; + } + + do { + if (number_mb_cmds >= remaining_mb) { + number_mb_cmds = remaining_mb; + } + mb_x = (slice_param->macroblock_address + starting_offset) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_offset) / width_in_mbs; + + gen75_mfc_batchbuffer_emit_object_command(batch, + mb_flag, + head_offset, + number_mb_cmds, + slice_end_x, + slice_end_y, + mb_x, + mb_y, + width_in_mbs, + qp, + fwd_ref, + bwd_ref); + + head_offset += (number_mb_cmds * AVC_PAK_LEN_IN_BYTE); + remaining_mb -= number_mb_cmds; + starting_offset += number_mb_cmds; + } while (remaining_mb > 0); +} + +/* + * return size in Owords (16bytes) + */ +static void +gen75_mfc_avc_batchbuffer_slice(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *slice_batch = mfc_context->aux_batchbuffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + long head_offset; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + gen75_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, + encoder_context, + (rate_control_mode == VA_RC_CBR), + qp_slice, + slice_batch); + + if (slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + head_offset = intel_batchbuffer_used_size(slice_batch); + + slice_batch->ptr += pSliceParameter->num_macroblocks * AVC_PAK_LEN_IN_BYTE; + + gen75_mfc_avc_batchbuffer_slice_command(ctx, + encoder_context, + pSliceParameter, + head_offset, + qp, + last_slice); + + + /* Aligned for tail */ + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + if (last_slice) { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 2, + 8, + 2, + 1, + 1, + 0, + slice_batch); + } else { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 1, + 8, + 1, + 1, + 1, + 0, + slice_batch); + } + + return; +} + +static void +gen75_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i; + intel_batchbuffer_start_atomic(batch, 0x4000); + gen6_gpe_pipeline_setup(ctx, &mfc_context->gpe_context, batch); + + for ( i = 0; i < encode_state->num_slice_params_ext; i++) { + gen75_mfc_avc_batchbuffer_slice(ctx, encode_state, encoder_context, i); + } + { + struct intel_batchbuffer *slice_batch = mfc_context->aux_batchbuffer; + intel_batchbuffer_align(slice_batch, 8); + BEGIN_BCS_BATCH(slice_batch, 2); + OUT_BCS_BATCH(slice_batch, 0); + OUT_BCS_BATCH(slice_batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(slice_batch); + mfc_context->aux_batchbuffer = NULL; + intel_batchbuffer_free(slice_batch); + } + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen75_mfc_build_avc_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen75_mfc_batchbuffer_surfaces_setup(ctx, encode_state, encoder_context); + gen75_mfc_batchbuffer_idrt_setup(ctx, encode_state, encoder_context); + gen75_mfc_batchbuffer_constant_setup(ctx, encode_state, encoder_context); + gen75_mfc_avc_batchbuffer_pipeline(ctx, encode_state, encoder_context); +} + +static dri_bo * +gen75_mfc_avc_hardware_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + gen75_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context); + + return mfc_context->aux_batchbuffer_surface.bo; +} + +#endif + +static void +gen75_mfc_avc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + if ( intel_mfc_interlace_check(ctx, encode_state, encoder_context) ) { + fprintf(stderr, "Current VA driver don't support interlace mode!\n"); + assert(0); + return; + } + +#if MFC_SOFTWARE_HASWELL + slice_batch_bo = gen75_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context); +#else + slice_batch_bo = gen75_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context); +#endif + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen75_mfc_avc_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + + +static VAStatus +gen75_mfc_avc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + for (;;) { + gen75_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_avc_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen75_mfc_avc_pipeline_programing(ctx, encode_state, encoder_context); //filling the pipeline + gen75_mfc_run(ctx, encode_state, encoder_context); + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + gen75_mfc_stop(ctx, encode_state, encoder_context, ¤t_frame_bits_size); + sts = intel_mfc_brc_postpack(encode_state, mfc_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + intel_mfc_hrd_context_update(encode_state, mfc_context); + break; + } + else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!mfc_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP)? "overflow": "underflow"); + mfc_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } else { + break; + } + } + + return VA_STATUS_SUCCESS; +} + +/* + * MPEG-2 + */ + +static const int +va_to_gen75_mpeg2_picture_type[3] = { + 1, /* I */ + 2, /* P */ + 3 /* B */ +}; + +static void +gen75_mfc_mpeg2_pic_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferMPEG2 *pic_param; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code[1][1] & 0xf) << 28 | /* f_code[1][1] */ + (pic_param->f_code[1][0] & 0xf) << 24 | /* f_code[1][0] */ + (pic_param->f_code[0][1] & 0xf) << 20 | /* f_code[0][1] */ + (pic_param->f_code[0][0] & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + 0 << 14 | /* LoadSlicePointerFlag, 0 means only loading bitstream pointer once */ + va_to_gen75_mpeg2_picture_type[pic_param->picture_type] << 9 | + 0); + OUT_BCS_BATCH(batch, + 1 << 31 | /* slice concealment */ + (height_in_mbs - 1) << 16 | + (width_in_mbs - 1)); + if (slice_param && slice_param->quantiser_scale_code >= 14) + OUT_BCS_BATCH(batch, (3 << 1) | (1 << 4) | (5 << 8) | (1 << 12)); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + 0xFFF << 16 | /* InterMBMaxSize */ + 0xFFF << 0 | /* IntraMBMaxSize */ + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfc_mpeg2_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned char intra_qm[64] = { + 8, 16, 19, 22, 26, 27, 29, 34, + 16, 16, 22, 24, 27, 29, 34, 37, + 19, 22, 26, 27, 29, 34, 34, 38, + 22, 22, 26, 27, 29, 34, 37, 40, + 22, 26, 27, 29, 32, 35, 40, 48, + 26, 27, 29, 32, 35, 40, 48, 58, + 26, 27, 29, 34, 38, 46, 56, 69, + 27, 29, 35, 38, 46, 56, 69, 83 + }; + + unsigned char non_intra_qm[64] = { + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16 + }; + + gen75_mfc_qm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_qm, 16, encoder_context); + gen75_mfc_qm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_qm, 16,encoder_context); +} + +static void +gen75_mfc_mpeg2_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned short intra_fqm[64] = { + 65536/0x8, 65536/0x10, 65536/0x13, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, + 65536/0x10, 65536/0x10, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1b, 65536/0x1b, 65536/0x1d, + 65536/0x13, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, 65536/0x1d, 65536/0x1d, 65536/0x23, + 65536/0x16, 65536/0x18, 65536/0x1b, 65536/0x1b, 65536/0x13, 65536/0x20, 65536/0x22, 65536/0x26, + 65536/0x1a, 65536/0x1b, 65536/0x13, 65536/0x13, 65536/0x20, 65536/0x23, 65536/0x26, 65536/0x2e, + 65536/0x1b, 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x23, 65536/0x28, 65536/0x2e, 65536/0x38, + 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x25, 65536/0x28, 65536/0x30, 65536/0x38, 65536/0x45, + 65536/0x22, 65536/0x25, 65536/0x26, 65536/0x28, 65536/0x30, 65536/0x3a, 65536/0x45, 65536/0x53, + }; + + unsigned short non_intra_fqm[64] = { + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + }; + + gen75_mfc_fqm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_fqm, 32, encoder_context); + gen75_mfc_fqm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_fqm, 32, encoder_context); +} + +static void +gen75_mfc_mpeg2_slicegroup_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int next_x, int next_y, + int is_fisrt_slice_group, + int is_last_slice_group, + int intra_slice, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, 8); + + OUT_BCS_BATCH(batch, MFC_MPEG2_SLICEGROUP_STATE | (8 - 2)); + OUT_BCS_BATCH(batch, + 0 << 31 | /* MbRateCtrlFlag */ + !!is_last_slice_group << 19 | /* IsLastSliceGrp */ + 1 << 17 | /* Insert Header before the first slice group data */ + 1 << 16 | /* SliceData PresentFlag: always 1 */ + 1 << 15 | /* TailPresentFlag: always 1 */ + 0 << 14 | /* FirstSliceHdrDisabled: slice header for each slice */ + !!intra_slice << 13 | /* IntraSlice */ + !!intra_slice << 12 | /* IntraSliceFlag */ + 0); + OUT_BCS_BATCH(batch, + next_y << 24 | + next_x << 16 | + y << 8 | + x << 0 | + 0); + OUT_BCS_BATCH(batch, qp); /* FIXME: SliceGroupQp */ + /* bitstream pointer is only loaded once for the first slice of a frame when + * LoadSlicePointerFlag is 0 + */ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, 0); /* FIXME: */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CorrectPoints */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CVxxx */ + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen75_mfc_mpeg2_pak_object_intra(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int mb_type, + int qp_scale_code, + int coded_block_pattern, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 9; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 0 << 24 | /* PackedMvNum */ + 0 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 1 << 13 | /* IntraMbFlag */ + mb_type << 8 | /* MbType: Intra */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + coded_block_pattern << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + OUT_BCS_BATCH(batch, 0); /* MV[0][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +#define MPEG2_INTER_MV_OFFSET 12 + +static struct _mv_ranges +{ + int low; /* in the unit of 1/2 pixel */ + int high; /* in the unit of 1/2 pixel */ +} mv_ranges[] = { + {0, 0}, + {-16, 15}, + {-32, 31}, + {-64, 63}, + {-128, 127}, + {-256, 255}, + {-512, 511}, + {-1024, 1023}, + {-2048, 2047}, + {-4096, 4095} +}; + +static int +mpeg2_motion_vector(int mv, int pos, int display_max, int f_code) +{ + if (mv + pos * 16 * 2 < 0 || + mv + (pos + 1) * 16 * 2 > display_max * 2) + mv = 0; + + if (f_code > 0 && f_code < 10) { + if (mv < mv_ranges[f_code].low) + mv = mv_ranges[f_code].low; + + if (mv > mv_ranges[f_code].high) + mv = mv_ranges[f_code].high; + } + + return mv; +} + +static int +gen75_mfc_mpeg2_pak_object_inter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + unsigned int *msg, + int width_in_mbs, int height_in_mbs, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int qp_scale_code, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + VAEncPictureParameterBufferMPEG2 *pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + int len_in_dwords = 9; + short *mvptr, mvx0, mvy0, mvx1, mvy1; + + if (batch == NULL) + batch = encoder_context->base.batch; + + mvptr = (short *)(msg + MPEG2_INTER_MV_OFFSET); + mvx0 = mpeg2_motion_vector(mvptr[0] / 2, x, width_in_mbs * 16, pic_param->f_code[0][0]); + mvy0 = mpeg2_motion_vector(mvptr[1] / 2, y, height_in_mbs * 16, pic_param->f_code[0][0]); + mvx1 = mpeg2_motion_vector(mvptr[2] / 2, x, width_in_mbs * 16, pic_param->f_code[1][0]); + mvy1 = mpeg2_motion_vector(mvptr[3] / 2, y, height_in_mbs * 16, pic_param->f_code[1][0]); + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 2 << 24 | /* PackedMvNum */ + 7 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 0 << 13 | /* IntraMbFlag */ + 1 << 8 | /* MbType: Frame-based */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + 0x3f << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + + OUT_BCS_BATCH(batch, (mvx0 & 0xFFFF) | mvy0 << 16); /* MV[0][0] */ + OUT_BCS_BATCH(batch, (mvx1 & 0xFFFF) | mvy1 << 16); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static void +intel_mfc_mpeg2_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_SPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_PPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } +} + +static void +gen75_mfc_mpeg2_pipeline_slice_group(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + VAEncSliceParameterBufferMPEG2 *next_slice_group_param, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + unsigned char tail_delimiter[] = {MPEG2_DELIMITER0, MPEG2_DELIMITER1, MPEG2_DELIMITER2, MPEG2_DELIMITER3, MPEG2_DELIMITER4, 0, 0, 0}; + unsigned char section_delimiter[] = {0x0, 0x0, 0x0, 0x0}; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + int i, j; + int h_start_pos, v_start_pos, h_next_start_pos, v_next_start_pos; + unsigned int *msg = NULL; + unsigned char *msg_ptr = NULL; + + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[slice_index]->buffer; + h_start_pos = slice_param->macroblock_address % width_in_mbs; + v_start_pos = slice_param->macroblock_address / width_in_mbs; + assert(h_start_pos + slice_param->num_macroblocks <= width_in_mbs); + + dri_bo_map(vme_context->vme_output.bo , 0); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (next_slice_group_param) { + h_next_start_pos = next_slice_group_param->macroblock_address % width_in_mbs; + v_next_start_pos = next_slice_group_param->macroblock_address / width_in_mbs; + } else { + h_next_start_pos = 0; + v_next_start_pos = height_in_mbs; + } + + gen75_mfc_mpeg2_slicegroup_state(ctx, + encoder_context, + h_start_pos, + v_start_pos, + h_next_start_pos, + v_next_start_pos, + slice_index == 0, + next_slice_group_param == NULL, + slice_param->is_intra_slice, + slice_param->quantiser_scale_code, + slice_batch); + + if (slice_index == 0) + intel_mfc_mpeg2_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + /* Insert '00' to make sure the header is valid */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int*)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 0, + 0, + slice_batch); + + for (i = 0; i < encode_state->slice_params_ext[slice_index]->num_elements; i++) { + /* PAK for each macroblocks */ + for (j = 0; j < slice_param->num_macroblocks; j++) { + int h_pos = (slice_param->macroblock_address + j) % width_in_mbs; + int v_pos = (slice_param->macroblock_address + j) / width_in_mbs; + int first_mb_in_slice = (j == 0); + int last_mb_in_slice = (j == slice_param->num_macroblocks - 1); + int first_mb_in_slice_group = (i == 0 && j == 0); + int last_mb_in_slice_group = (i == encode_state->slice_params_ext[slice_index]->num_elements - 1 && + j == slice_param->num_macroblocks - 1); + + msg = (unsigned int *)(msg_ptr + (slice_param->macroblock_address + j) * vme_context->vme_output.size_block); + + if (slice_param->is_intra_slice) { + gen75_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + + if (intra_rdo < inter_rdo) + gen75_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + else + gen75_mfc_mpeg2_pak_object_inter(ctx, + encode_state, + encoder_context, + msg, + width_in_mbs, height_in_mbs, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + slice_param->quantiser_scale_code, + 0, + 0xff, + slice_batch); + } + } + + slice_param++; + } + + dri_bo_unmap(vme_context->vme_output.bo); + + /* tail data */ + if (next_slice_group_param == NULL) { /* end of a picture */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)tail_delimiter, + 2, + 8, /* 8bits in the last DWORD */ + 5, /* 5 bytes */ + 1, + 1, + 0, + slice_batch); + } else { /* end of a lsice group */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 1, + 0, + slice_batch); + } +} + +/* + * A batch buffer for all slices, including slice state, + * slice insert object and slice pak object commands + * + */ +static dri_bo * +gen75_mfc_mpeg2_software_slice_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + VAEncSliceParameterBufferMPEG2 *next_slice_group_param = NULL; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + if (i == encode_state->num_slice_params_ext - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[i + 1]->buffer; + + gen75_mfc_mpeg2_pipeline_slice_group(ctx, encode_state, encoder_context, i, next_slice_group_param, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +static void +gen75_mfc_mpeg2_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_MPEG2, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen75_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen75_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + gen75_mfc_mpeg2_pic_state(ctx, encoder_context, encode_state); + gen75_mfc_mpeg2_qm_state(ctx, encoder_context); + gen75_mfc_mpeg2_fqm_state(ctx, encoder_context); +} + +static void +gen75_mfc_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + slice_batch_bo = gen75_mfc_mpeg2_software_slice_batchbuffer(ctx, encode_state, encoder_context); + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen75_mfc_mpeg2_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +static VAStatus +intel_mfc_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAStatus vaStatus = VA_STATUS_SUCCESS; + dri_bo *bo; + int i; + + /* reconstructed surface */ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + mfc_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->pre_deblocking_output.bo); + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* forward reference */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[0].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[0].bo); + } else + mfc_context->reference_surfaces[0].bo = NULL; + + /* backward reference */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[1].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } else { + mfc_context->reference_surfaces[1].bo = mfc_context->reference_surfaces[0].bo; + + if (mfc_context->reference_surfaces[1].bo) + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } + + for (i = 2; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + mfc_context->reference_surfaces[i].bo = mfc_context->reference_surfaces[i & 1].bo; + + if (mfc_context->reference_surfaces[i].bo) + dri_bo_reference(mfc_context->reference_surfaces[i].bo); + } + + /* input YUV surface */ + obj_surface = encode_state->input_yuv_object; + mfc_context->uncompressed_picture_source.bo = obj_surface->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + /* coded buffer */ + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + /* set the internal flag to 0 to indicate the coded size is unknown */ + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + +static VAStatus +gen75_mfc_mpeg2_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen75_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_mpeg2_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen75_mfc_mpeg2_pipeline_programing(ctx, encode_state, encoder_context); + gen75_mfc_run(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen75_mfc_context_destroy(void *context) +{ + struct gen6_mfc_context *mfc_context = context; + int i; + + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + mfc_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + mfc_context->macroblock_status_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + i965_gpe_context_destroy(&mfc_context->gpe_context); + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = NULL; + + free(mfc_context); +} + +static VAStatus gen75_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + vaStatus = gen75_mfc_avc_encode_picture(ctx, encode_state, encoder_context); + break; + + /* FIXME: add for other profile */ + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + vaStatus = gen75_mfc_mpeg2_encode_picture(ctx, encode_state, encoder_context); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +Bool gen75_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = calloc(1, sizeof(struct gen6_mfc_context)); + + if (!mfc_context) + return False; + + mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + mfc_context->gpe_context.idrt.max_entries = MAX_GPE_KERNELS; + mfc_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + mfc_context->gpe_context.curbe.length = 32 * 4; + + mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + mfc_context->gpe_context.vfe_state.num_urb_entries = 16; + mfc_context->gpe_context.vfe_state.gpgpu_mode = 0; + mfc_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + mfc_context->gpe_context.vfe_state.curbe_allocation_size = 37 - 1; + + i965_gpe_load_kernels(ctx, + &mfc_context->gpe_context, + gen75_mfc_kernels, + 1); + + mfc_context->pipe_mode_select = gen75_mfc_pipe_mode_select; + mfc_context->set_surface_state = gen75_mfc_surface_state; + mfc_context->ind_obj_base_addr_state = gen75_mfc_ind_obj_base_addr_state; + mfc_context->avc_img_state = gen75_mfc_avc_img_state; + mfc_context->avc_qm_state = gen75_mfc_avc_qm_state; + mfc_context->avc_fqm_state = gen75_mfc_avc_fqm_state; + mfc_context->insert_object = gen75_mfc_avc_insert_object; + mfc_context->buffer_suface_setup = gen7_gpe_buffer_suface_setup; + + encoder_context->mfc_context = mfc_context; + encoder_context->mfc_context_destroy = gen75_mfc_context_destroy; + encoder_context->mfc_pipeline = gen75_mfc_pipeline; + encoder_context->mfc_brc_prepare = intel_mfc_brc_prepare; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfd.c new file mode 100644 index 000000000..6d8ff827d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_mfd.c @@ -0,0 +1,3285 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zhao Yakui + * + */ +#include "sysdeps.h" + +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" +#include "gen7_mfd.h" +#include "intel_media.h" + +#define B0_STEP_REV 2 +#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV) + +static const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void +gen75_mfd_init_avc_surface(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenAvcSurface *gen7_avc_surface = obj_surface->private_data; + int width_in_mbs, height_in_mbs; + + obj_surface->free_private_data = gen_free_avc_surface; + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + if (!gen7_avc_surface) { + gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1); + assert(gen7_avc_surface); + gen7_avc_surface->base.frame_store_id = -1; + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_avc_surface; + } + + gen7_avc_surface->dmv_bottom_flag = (pic_param->pic_fields.bits.field_pic_flag && + !pic_param->seq_fields.bits.direct_8x8_inference_flag); + + if (gen7_avc_surface->dmv_top == NULL) { + gen7_avc_surface->dmv_top = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 128, + 0x1000); + assert(gen7_avc_surface->dmv_top); + } + + if (gen7_avc_surface->dmv_bottom_flag && + gen7_avc_surface->dmv_bottom == NULL) { + gen7_avc_surface->dmv_bottom = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 128, + 0x1000); + assert(gen7_avc_surface->dmv_bottom); + } +} + +static void +gen75_mfd_pipe_mode_select(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_VC1 || + standard_select == MFX_FORMAT_JPEG); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (gen7_mfd_context->post_deblocking_output.valid << 9) | /* Post Deblocking Output */ + (gen7_mfd_context->pre_deblocking_output.valid << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (standard_select << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + unsigned int y_cb_offset; + unsigned int y_cr_offset; + unsigned int surface_format; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + y_cr_offset = obj_surface->y_cr_offset; + + surface_format = obj_surface->fourcc == VA_FOURCC_Y800 ? + MFX_SURFACE_MONOCHROME : MFX_SURFACE_PLANAR_420_8; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_height - 1) << 18) | + ((obj_surface->orig_width - 1) << 4)); + OUT_BCS_BATCH(batch, + (surface_format << 28) | /* 420 planar YUV surface */ + ((standard_select != MFX_FORMAT_JPEG) << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (y_cr_offset << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_pipe_buf_addr_state_bplus(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 61); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + /* Pre-deblock 1-3 */ + if (gen7_mfd_context->pre_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* Post-debloing 4-6 */ + if (gen7_mfd_context->post_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* uncompressed-video & stream out 7-12 */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* intra row-store scratch 13-15 */ + if (gen7_mfd_context->intra_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* deblocking-filter-row-store 16-18 */ + if (gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* DW 19..50 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + struct object_surface *obj_surface; + + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->bo) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + OUT_BCS_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + OUT_BCS_BATCH(batch, 0); + } + /* reference property 51 */ + OUT_BCS_BATCH(batch, 0); + + /* Macroblock status & ILDB 52-57 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the second Macroblock status 58-60 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfd_pipe_buf_addr_state_bplus(ctx, decode_state, + standard_select, gen7_mfd_context); + return; + } + + BEGIN_BCS_BATCH(batch, 25); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (25 - 2)); + if (gen7_mfd_context->pre_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->post_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + + if (gen7_mfd_context->intra_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + /* DW 7..22 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + struct object_surface *obj_surface; + + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->bo) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + OUT_BCS_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); /* ignore DW23 for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore DW24 for decoding */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_ind_obj_base_addr_state_bplus(VADriverContextP ctx, + dri_bo *slice_data_bo, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 26); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (26 - 2)); + /* MFX In BS 1-5 */ + OUT_BCS_RELOC(batch, slice_data_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); /* MFX Indirect Bitstream Object Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* Upper bound 4-5 */ + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); + + /* MFX indirect MV 6-10 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX IT_COFF 11-15 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX IT_DBLK 16-20 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX PAK_BSE object for encoder 21-25 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_ind_obj_base_addr_state(VADriverContextP ctx, + dri_bo *slice_data_bo, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfd_ind_obj_base_addr_state_bplus(ctx, slice_data_bo, + standard_select, gen7_mfd_context); + return; + } + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, slice_data_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); /* MFX Indirect Bitstream Object Base Address */ + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_bsp_buf_base_addr_state_bplus(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + + if (gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* MPR Row Store Scratch buffer 4-6 */ + if (gen7_mfd_context->mpr_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->mpr_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* Bitplane 7-9 */ + if (gen7_mfd_context->bitplane_read_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bitplane_read_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_bsp_buf_base_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfd_bsp_buf_base_addr_state_bplus(ctx, decode_state, + standard_select, gen7_mfd_context); + return; + } + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + + if (gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->mpr_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->mpr_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->bitplane_read_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bitplane_read_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_qm_state(VADriverContextP ctx, + int qm_type, + unsigned char *qm, + int qm_length, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16 * 4); + memcpy(qm_buffer, qm, qm_length); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_avc_img_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct; + int mbaff_frame_flag; + unsigned int width_in_mbs, height_in_mbs; + VAPictureParameterBufferH264 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID)); + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD) + img_struct = 1; + else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD) + img_struct = 3; + else + img_struct = 0; + + if ((img_struct & 0x1) == 0x1) { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x1); + } else { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x0); + } + + if (pic_param->seq_fields.bits.frame_mbs_only_flag) { /* a frame containing only frame macroblocks */ + assert(pic_param->seq_fields.bits.mb_adaptive_frame_field_flag == 0); + assert(pic_param->pic_fields.bits.field_pic_flag == 0); + } else { + assert(pic_param->seq_fields.bits.direct_8x8_inference_flag == 1); /* see H.264 spec */ + } + + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + /* MFX unit doesn't support 4:2:2 and 4:4:4 picture */ + assert(pic_param->seq_fields.bits.chroma_format_idc == 0 || /* monochrome picture */ + pic_param->seq_fields.bits.chroma_format_idc == 1); /* 4:2:0 */ + assert(pic_param->seq_fields.bits.residual_colour_transform_flag == 0); /* only available for 4:4:4 */ + + BEGIN_BCS_BATCH(batch, 17); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (17 - 2)); + OUT_BCS_BATCH(batch, + (width_in_mbs * height_in_mbs - 1)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + ((pic_param->second_chroma_qp_index_offset & 0x1f) << 24) | + ((pic_param->chroma_qp_index_offset & 0x1f) << 16) | + (0 << 14) | /* Max-bit conformance Intra flag ??? FIXME */ + (0 << 13) | /* Max Macroblock size conformance Inter flag ??? FIXME */ + (pic_param->pic_fields.bits.weighted_pred_flag << 12) | /* differ from GEN6 */ + (pic_param->pic_fields.bits.weighted_bipred_idc << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (pic_param->seq_fields.bits.chroma_format_idc << 10) | + (pic_param->pic_fields.bits.entropy_coding_mode_flag << 7) | + ((!pic_param->pic_fields.bits.reference_pic_flag) << 6) | + (pic_param->pic_fields.bits.constrained_intra_pred_flag << 5) | + (pic_param->seq_fields.bits.direct_8x8_inference_flag << 4) | + (pic_param->pic_fields.bits.transform_8x8_mode_flag << 3) | + (pic_param->seq_fields.bits.frame_mbs_only_flag << 2) | + (mbaff_frame_flag << 1) | + (pic_param->pic_fields.bits.field_pic_flag << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_avc_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferH264 *iq_matrix; + VAPictureParameterBufferH264 *pic_param; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + iq_matrix = (VAIQMatrixBufferH264 *)decode_state->iq_matrix->buffer; + else + iq_matrix = &gen7_mfd_context->iq_matrix.h264; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + gen75_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, &iq_matrix->ScalingList4x4[0][0], 3 * 16, gen7_mfd_context); + gen75_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, &iq_matrix->ScalingList4x4[3][0], 3 * 16, gen7_mfd_context); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) { + gen75_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, &iq_matrix->ScalingList8x8[0][0], 64, gen7_mfd_context); + gen75_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, &iq_matrix->ScalingList8x8[1][0], 64, gen7_mfd_context); + } +} + +static inline void +gen75_mfd_avc_picid_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen75_send_avc_picid_state(gen7_mfd_context->base.batch, + gen7_mfd_context->reference_surface); +} + +static void +gen75_mfd_avc_directmode_state_bplus(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + GenAvcSurface *gen7_avc_surface; + VAPictureH264 *va_pic; + int i; + + BEGIN_BCS_BATCH(batch, 71); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->private_data) { + + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + gen7_avc_surface = obj_surface->private_data; + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); + + /* the current decoding frame/field */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + assert(obj_surface->bo && obj_surface->private_data); + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_avc_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + GenAvcSurface *gen7_avc_surface; + VAPictureH264 *va_pic; + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfd_avc_directmode_state_bplus(ctx, decode_state, pic_param, slice_param, + gen7_mfd_context); + + return; + } + + BEGIN_BCS_BATCH(batch, 69); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->private_data) { + + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + if (gen7_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + /* the current decoding frame/field */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + assert(obj_surface->bo && obj_surface->private_data); + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + if (gen7_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_avc_phantom_slice_first(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen7_mfd_context->base.batch); +} + +static void +gen75_mfd_avc_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + int first_mb_in_slice = 0, first_mb_in_next_slice = 0; + int slice_type; + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) { + slice_type = SLICE_TYPE_I; + } else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) { + slice_type = SLICE_TYPE_P; + } else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + first_mb_in_slice = slice_param->first_mb_in_slice; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + if (mbaff_picture) + slice_ver_pos = slice_ver_pos << 1; + + if (next_slice_param) { + first_mb_in_next_slice = next_slice_param->first_mb_in_slice; + next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs; + next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs; + + if (mbaff_picture) + next_slice_ver_pos = next_slice_ver_pos << 1; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag); + } + + BEGIN_BCS_BATCH(batch, 11); /* FIXME: is it 10??? */ + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (slice_param->chroma_log2_weight_denom << 8) | + (slice_param->luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, + (next_slice_param == NULL) << 19); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen75_mfd_avc_ref_idx_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_send_avc_ref_idx_state( + gen7_mfd_context->base.batch, + slice_param, + gen7_mfd_context->reference_surface + ); +} + +static void +gen75_mfd_avc_weightoffset_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i, j, num_weight_offset_table = 0; + short weightoffsets[32 * 6]; + + if ((slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) && + (pic_param->pic_fields.bits.weighted_pred_flag == 1)) { + num_weight_offset_table = 1; + } + + if ((slice_param->slice_type == SLICE_TYPE_B) && + (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) { + num_weight_offset_table = 2; + } + + for (i = 0; i < num_weight_offset_table; i++) { + BEGIN_BCS_BATCH(batch, 98); + OUT_BCS_BATCH(batch, MFX_AVC_WEIGHTOFFSET_STATE | (98 - 2)); + OUT_BCS_BATCH(batch, i); + + if (i == 0) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l0[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l0[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l0[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l0[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l0[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l0[j][1]; + } + } else { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l1[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l1[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l1[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l1[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l1[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l1[j][1]; + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +gen75_mfd_avc_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int slice_data_bit_offset = avc_get_first_mb_bit_offset(slice_data_bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag); + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_size - slice_param->slice_data_offset)); + OUT_BCS_BATCH(batch, slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((slice_data_bit_offset >> 3) << 16) | + (1 << 7) | + (0 << 5) | + (0 << 4) | + ((next_slice_param == NULL) << 3) | /* LastSlice Flag */ + (slice_data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen75_mfd_avc_context_init( + VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context +) +{ + /* Initialize flat scaling lists */ + avc_gen_default_iq_matrix(&gen7_mfd_context->iq_matrix.h264); +} + +static void +gen75_mfd_avc_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int i, j, enable_avc_ildb = 0; + unsigned int width_in_mbs, height_in_mbs; + + for (j = 0; j < decode_state->num_slice_params && enable_avc_ildb == 0; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen75_update_avc_frame_store_index(ctx, decode_state, pic_param, + gen7_mfd_context->reference_surface); + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */ + assert(height_in_mbs > 0 && height_in_mbs <= 256); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; + + avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + gen75_mfd_init_avc_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 64 * 4, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen75_mfd_avc_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen75_mfd_avc_decode_init(ctx, decode_state, gen7_mfd_context); + + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen75_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen75_mfd_surface_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen75_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen75_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen75_mfd_avc_qm_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_avc_picid_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_avc_img_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen75_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_AVC, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j + 1]->buffer; + + if (j == 0 && slice_param->first_mb_in_slice) + gen75_mfd_avc_phantom_slice_first(ctx, pic_param, slice_param, gen7_mfd_context); + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen75_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen7_mfd_context); + gen75_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen75_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen75_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context); + gen75_mfd_avc_bsd_object(ctx, pic_param, slice_param, slice_data_bo, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen75_mfd_mpeg2_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferMPEG2 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + unsigned int width_in_mbs; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + + mpeg2_set_reference_surfaces( + ctx, + gen7_mfd_context->reference_surface, + decode_state, + pic_param + ); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->post_deblocking_output.valid = 0; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen75_mfd_mpeg2_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + unsigned int slice_concealment_disable_bit = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + slice_concealment_disable_bit = 1; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code & 0xf) << 28 | /* f_code[1][1] */ + ((pic_param->f_code >> 4) & 0xf) << 24 | /* f_code[1][0] */ + ((pic_param->f_code >> 8) & 0xf) << 20 | /* f_code[0][1] */ + ((pic_param->f_code >> 12) & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + pic_param->picture_coding_type << 9); + OUT_BCS_BATCH(batch, + (slice_concealment_disable_bit << 31) | + ((ALIGN(pic_param->vertical_size, 16) / 16) - 1) << 16 | + ((ALIGN(pic_param->horizontal_size, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_mpeg2_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferMPEG2 * const gen_iq_matrix = &gen7_mfd_context->iq_matrix.mpeg2; + int i, j; + + /* Update internal QM state */ + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) { + VAIQMatrixBufferMPEG2 * const iq_matrix = + (VAIQMatrixBufferMPEG2 *)decode_state->iq_matrix->buffer; + + if (gen_iq_matrix->load_intra_quantiser_matrix == -1 || + iq_matrix->load_intra_quantiser_matrix) { + gen_iq_matrix->load_intra_quantiser_matrix = + iq_matrix->load_intra_quantiser_matrix; + if (iq_matrix->load_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->intra_quantiser_matrix[j]; + } + } + + if (gen_iq_matrix->load_non_intra_quantiser_matrix == -1 || + iq_matrix->load_non_intra_quantiser_matrix) { + gen_iq_matrix->load_non_intra_quantiser_matrix = + iq_matrix->load_non_intra_quantiser_matrix; + if (iq_matrix->load_non_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->non_intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->non_intra_quantiser_matrix[j]; + } + } + } + + /* Commit QM state to HW */ + for (i = 0; i < 2; i++) { + unsigned char *qm = NULL; + int qm_type; + + if (i == 0) { + if (gen_iq_matrix->load_intra_quantiser_matrix) { + qm = gen_iq_matrix->intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX; + } + } else { + if (gen_iq_matrix->load_non_intra_quantiser_matrix) { + qm = gen_iq_matrix->non_intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX; + } + } + + if (!qm) + continue; + + gen75_mfd_qm_state(ctx, qm_type, qm, 64, gen7_mfd_context); + } +} + +static void +gen75_mfd_mpeg2_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + VASliceParameterBufferMPEG2 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + int mb_count, vpos0, hpos0, vpos1, hpos1, is_field_pic_wa, is_field_pic = 0; + + if (pic_param->picture_coding_extension.bits.picture_structure == MPEG_TOP_FIELD || + pic_param->picture_coding_extension.bits.picture_structure == MPEG_BOTTOM_FIELD) + is_field_pic = 1; + is_field_pic_wa = is_field_pic && + gen7_mfd_context->wa_mpeg2_slice_vertical_position > 0; + + vpos0 = slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos0 = slice_param->slice_horizontal_position; + + if (next_slice_param == NULL) { + vpos1 = ALIGN(pic_param->vertical_size, 16) / 16 / (1 + is_field_pic); + hpos1 = 0; + } else { + vpos1 = next_slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos1 = next_slice_param->slice_horizontal_position; + } + + mb_count = (vpos1 * width_in_mbs + hpos1) - (vpos0 * width_in_mbs + hpos0); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_MPEG2_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + hpos0 << 24 | + vpos0 << 16 | + mb_count << 8 | + (next_slice_param == NULL) << 5 | + (next_slice_param == NULL) << 3 | + (slice_param->macroblock_offset & 0x7)); + OUT_BCS_BATCH(batch, + (slice_param->quantiser_scale_code << 24) | + (vpos1 << 8 | hpos1)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_mpeg2_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + VASliceParameterBufferMPEG2 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + gen75_mfd_mpeg2_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen75_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen75_mfd_surface_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen75_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen75_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen75_mfd_mpeg2_pic_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_mpeg2_qm_state(ctx, decode_state, gen7_mfd_context); + + if (gen7_mfd_context->wa_mpeg2_slice_vertical_position < 0) + gen7_mfd_context->wa_mpeg2_slice_vertical_position = + mpeg2_wa_slice_vertical_position(decode_state, pic_param); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen75_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_MPEG2, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen75_mfd_mpeg2_bsd_object(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static const int va_to_gen7_vc1_pic_type[5] = { + GEN7_VC1_I_PICTURE, + GEN7_VC1_P_PICTURE, + GEN7_VC1_B_PICTURE, + GEN7_VC1_BI_PICTURE, + GEN7_VC1_P_PICTURE, +}; + +static const int va_to_gen7_vc1_mv[4] = { + 1, /* 1-MV */ + 2, /* 1-MV half-pel */ + 3, /* 1-MV half-pef bilinear */ + 0, /* Mixed MV */ +}; + +static const int b_picture_scale_factor[21] = { + 128, 85, 170, 64, 192, + 51, 102, 153, 204, 43, + 215, 37, 74, 111, 148, + 185, 222, 32, 96, 160, + 224, +}; + +static const int va_to_gen7_vc1_condover[3] = { + 0, + 2, + 3 +}; + +static const int va_to_gen7_vc1_profile[4] = { + GEN7_VC1_SIMPLE_PROFILE, + GEN7_VC1_MAIN_PROFILE, + GEN7_VC1_RESERVED_PROFILE, + GEN7_VC1_ADVANCED_PROFILE +}; + +static void +gen75_mfd_free_vc1_surface(void **data) +{ + struct gen7_vc1_surface *gen7_vc1_surface = *data; + + if (!gen7_vc1_surface) + return; + + dri_bo_unreference(gen7_vc1_surface->dmv); + free(gen7_vc1_surface); + *data = NULL; +} + +static void +gen75_mfd_init_vc1_surface(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen7_vc1_surface *gen7_vc1_surface = obj_surface->private_data; + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + + obj_surface->free_private_data = gen75_mfd_free_vc1_surface; + + if (!gen7_vc1_surface) { + gen7_vc1_surface = calloc(sizeof(struct gen7_vc1_surface), 1); + assert(gen7_vc1_surface); + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_vc1_surface; + } + + gen7_vc1_surface->picture_type = pic_param->picture_fields.bits.picture_type; + + if (gen7_vc1_surface->dmv == NULL) { + gen7_vc1_surface->dmv = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 64, + 0x1000); + } +} + +static void +gen75_mfd_vc1_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferVC1 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int width_in_mbs; + int picture_type; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + picture_type = pic_param->picture_fields.bits.picture_type; + + intel_update_vc1_frame_store_index(ctx, + decode_state, + pic_param, + gen7_mfd_context->reference_surface); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen75_mfd_init_vc1_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 7 * 64, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value; + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + + if (gen7_mfd_context->bitplane_read_buffer.valid) { + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + int bitplane_width = ALIGN(width_in_mbs, 2) / 2; + int src_w, src_h; + uint8_t *src = NULL, *dst = NULL; + + assert(decode_state->bit_plane->buffer); + src = decode_state->bit_plane->buffer; + + bo = dri_bo_alloc(i965->intel.bufmgr, + "VC-1 Bitplane", + bitplane_width * height_in_mbs, + 0x1000); + assert(bo); + gen7_mfd_context->bitplane_read_buffer.bo = bo; + + dri_bo_map(bo, True); + assert(bo->virtual); + dst = bo->virtual; + + for (src_h = 0; src_h < height_in_mbs; src_h++) { + for(src_w = 0; src_w < width_in_mbs; src_w++) { + int src_index, dst_index; + int src_shift; + uint8_t src_value; + + src_index = (src_h * width_in_mbs + src_w) / 2; + src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4; + src_value = ((src[src_index] >> src_shift) & 0xf); + + if (picture_type == GEN7_VC1_SKIPPED_PICTURE){ + src_value |= 0x2; + } + + dst_index = src_w / 2; + dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4)); + } + + if (src_w & 1) + dst[src_w / 2] >>= 4; + + dst += bitplane_width; + } + + dri_bo_unmap(bo); + } else + gen7_mfd_context->bitplane_read_buffer.bo = NULL; +} + +static void +gen75_mfd_vc1_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + struct object_surface *obj_surface; + int alt_pquant_config = 0, alt_pquant_edge_mask = 0, alt_pq; + int dquant, dquantfrm, dqprofile, dqdbedge, dqsbedge, dqbilevel; + int unified_mv_mode; + int ref_field_pic_polarity = 0; + int scale_factor = 0; + int trans_ac_y = 0; + int dmv_surface_valid = 0; + int brfd = 0; + int fcm = 0; + int picture_type; + int profile; + int overlap; + int interpolation_mode = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + profile = va_to_gen7_vc1_profile[pic_param->sequence_fields.bits.profile]; + dquant = pic_param->pic_quantizer_fields.bits.dquant; + dquantfrm = pic_param->pic_quantizer_fields.bits.dq_frame; + dqprofile = pic_param->pic_quantizer_fields.bits.dq_profile; + dqdbedge = pic_param->pic_quantizer_fields.bits.dq_db_edge; + dqsbedge = pic_param->pic_quantizer_fields.bits.dq_sb_edge; + dqbilevel = pic_param->pic_quantizer_fields.bits.dq_binary_level; + alt_pq = pic_param->pic_quantizer_fields.bits.alt_pic_quantizer; + + if (dquant == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + } else if (dquant == 2) { + alt_pquant_config = 1; + alt_pquant_edge_mask = 0xf; + } else { + assert(dquant == 1); + if (dquantfrm == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + alt_pq = 0; + } else { + assert(dquantfrm == 1); + alt_pquant_config = 1; + + switch (dqprofile) { + case 3: + if (dqbilevel == 0) { + alt_pquant_config = 2; + alt_pquant_edge_mask = 0; + } else { + assert(dqbilevel == 1); + alt_pquant_config = 3; + alt_pquant_edge_mask = 0; + } + break; + + case 0: + alt_pquant_edge_mask = 0xf; + break; + + case 1: + if (dqdbedge == 3) + alt_pquant_edge_mask = 0x9; + else + alt_pquant_edge_mask = (0x3 << dqdbedge); + + break; + + case 2: + alt_pquant_edge_mask = (0x1 << dqsbedge); + break; + + default: + assert(0); + } + } + } + + if (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation) { + assert(pic_param->mv_fields.bits.mv_mode2 < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode2]; + } else { + assert(pic_param->mv_fields.bits.mv_mode < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode]; + } + + if (pic_param->sequence_fields.bits.interlace == 1 && + pic_param->picture_fields.bits.frame_coding_mode != 0) { /* frame-interlace or field-interlace */ + /* FIXME: calculate reference field picture polarity */ + assert(0); + ref_field_pic_polarity = 0; + } + + if (pic_param->b_picture_fraction < 21) + scale_factor = b_picture_scale_factor[pic_param->b_picture_fraction]; + + picture_type = va_to_gen7_vc1_pic_type[pic_param->picture_fields.bits.picture_type]; + + if (profile == GEN7_VC1_ADVANCED_PROFILE && + picture_type == GEN7_VC1_I_PICTURE) + picture_type = GEN7_VC1_BI_PICTURE; + + if (picture_type == GEN7_VC1_I_PICTURE || picture_type == GEN7_VC1_BI_PICTURE) /* I picture */ + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2; + else { + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1; + + /* + * 8.3.6.2.1 Transform Type Selection + * If variable-sized transform coding is not enabled, + * then the 8x8 transform shall be used for all blocks. + * it is also MFX_VC1_PIC_STATE requirement. + */ + if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) { + pic_param->transform_fields.bits.mb_level_transform_type_flag = 1; + pic_param->transform_fields.bits.frame_level_transform_type = 0; + } + } + + if (picture_type == GEN7_VC1_B_PICTURE) { + struct gen7_vc1_surface *gen7_vc1_surface = NULL; + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface) + gen7_vc1_surface = obj_surface->private_data; + + if (!gen7_vc1_surface || + (va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_I_PICTURE || + va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_BI_PICTURE)) + dmv_surface_valid = 0; + else + dmv_surface_valid = 1; + } + + assert(pic_param->picture_fields.bits.frame_coding_mode < 3); + + if (pic_param->picture_fields.bits.frame_coding_mode < 2) + fcm = pic_param->picture_fields.bits.frame_coding_mode; + else { + if (pic_param->picture_fields.bits.top_field_first) + fcm = 2; + else + fcm = 3; + } + + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_B_PICTURE) { /* B picture */ + brfd = pic_param->reference_fields.bits.reference_distance; + brfd = (scale_factor * brfd) >> 8; + brfd = pic_param->reference_fields.bits.reference_distance - brfd - 1; + + if (brfd < 0) + brfd = 0; + } + + overlap = pic_param->sequence_fields.bits.overlap; + + if (overlap) { + overlap = 0; + if (profile != GEN7_VC1_ADVANCED_PROFILE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9 && + pic_param->picture_fields.bits.picture_type != GEN7_VC1_B_PICTURE) { + overlap = 1; + } + }else { + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_P_PICTURE && + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_I_PICTURE || + pic_param->picture_fields.bits.picture_type == GEN7_VC1_BI_PICTURE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } else if (va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 2 || + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 3) { + overlap = 1; + } + } + } + } + + assert(pic_param->conditional_overlap_flag < 3); + assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */ + + if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear)) + interpolation_mode = 9; /* Half-pel bilinear */ + else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel)) + interpolation_mode = 1; /* Half-pel bicubic */ + else + interpolation_mode = 0; /* Quarter-pel bicubic */ + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + (((ALIGN(pic_param->coded_height, 16) / 16) - 1) << 16) | + ((ALIGN(pic_param->coded_width, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, + ((ALIGN(pic_param->coded_width, 16) / 16 + 1) / 2 - 1) << 24 | + dmv_surface_valid << 15 | + (pic_param->pic_quantizer_fields.bits.quantizer == 0) << 14 | /* implicit quantizer */ + pic_param->rounding_control << 13 | + pic_param->sequence_fields.bits.syncmarker << 12 | + interpolation_mode << 8 | + 0 << 7 | /* FIXME: scale up or down ??? */ + pic_param->range_reduction_frame << 6 | + pic_param->entrypoint_fields.bits.loopfilter << 5 | + overlap << 4 | + !pic_param->picture_fields.bits.is_first_field << 3 | + (pic_param->sequence_fields.bits.profile == 3) << 0); + OUT_BCS_BATCH(batch, + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] << 29 | + picture_type << 26 | + fcm << 24 | + alt_pq << 16 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale << 8 | + scale_factor << 0); + OUT_BCS_BATCH(batch, + unified_mv_mode << 28 | + pic_param->mv_fields.bits.four_mv_switch << 27 | + pic_param->fast_uvmc_flag << 26 | + ref_field_pic_polarity << 25 | + pic_param->reference_fields.bits.num_reference_pictures << 24 | + pic_param->reference_fields.bits.reference_distance << 20 | + pic_param->reference_fields.bits.reference_distance << 16 | /* FIXME: ??? */ + pic_param->mv_fields.bits.extended_dmv_range << 10 | + pic_param->mv_fields.bits.extended_mv_range << 8 | + alt_pquant_edge_mask << 4 | + alt_pquant_config << 2 | + pic_param->pic_quantizer_fields.bits.half_qp << 1 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0); + OUT_BCS_BATCH(batch, + !!pic_param->bitplane_present.value << 31 | + !pic_param->bitplane_present.flags.bp_forward_mb << 30 | + !pic_param->bitplane_present.flags.bp_mv_type_mb << 29 | + !pic_param->bitplane_present.flags.bp_skip_mb << 28 | + !pic_param->bitplane_present.flags.bp_direct_mb << 27 | + !pic_param->bitplane_present.flags.bp_overflags << 26 | + !pic_param->bitplane_present.flags.bp_ac_pred << 25 | + !pic_param->bitplane_present.flags.bp_field_tx << 24 | + pic_param->mv_fields.bits.mv_table << 20 | + pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 | + pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 | + pic_param->transform_fields.bits.frame_level_transform_type << 12 | + pic_param->transform_fields.bits.mb_level_transform_type_flag << 11 | + pic_param->mb_mode_table << 8 | + trans_ac_y << 6 | + pic_param->transform_fields.bits.transform_ac_codingset_idx1 << 4 | + pic_param->transform_fields.bits.intra_transform_dc_table << 3 | + pic_param->cbp_table << 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_vc1_pred_pipe_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + int intensitycomp_single; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + intensitycomp_single = (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation); + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_VC1_PRED_PIPE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + 0 << 14 | /* FIXME: double ??? */ + 0 << 12 | + intensitycomp_single << 10 | + intensitycomp_single << 8 | + 0 << 4 | /* FIXME: interlace mode */ + 0); + OUT_BCS_BATCH(batch, + pic_param->luma_shift << 16 | + pic_param->luma_scale << 0); /* FIXME: Luma Scaling */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_vc1_directmode_state_bplus(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + dri_bo *dmv_read_buffer = NULL, *dmv_write_buffer = NULL; + + obj_surface = decode_state->render_object; + + if (obj_surface && obj_surface->private_data) { + dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface && obj_surface->private_data) { + dmv_read_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + BEGIN_BCS_BATCH(batch, 7); + OUT_BCS_BATCH(batch, MFX_VC1_DIRECTMODE_STATE | (7 - 2)); + + if (dmv_write_buffer) + OUT_BCS_RELOC(batch, dmv_write_buffer, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + if (dmv_read_buffer) + OUT_BCS_RELOC(batch, dmv_read_buffer, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_vc1_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *dmv_read_buffer = NULL, *dmv_write_buffer = NULL; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_mfd_vc1_directmode_state_bplus(ctx, decode_state, gen7_mfd_context); + return; + } + + obj_surface = decode_state->render_object; + + if (obj_surface && obj_surface->private_data) { + dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface && obj_surface->private_data) { + dmv_read_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_VC1_DIRECTMODE_STATE | (3 - 2)); + + if (dmv_write_buffer) + OUT_BCS_RELOC(batch, dmv_write_buffer, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (dmv_read_buffer) + OUT_BCS_RELOC(batch, dmv_read_buffer, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen75_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offset, int profile) +{ + int out_slice_data_bit_offset; + int slice_header_size = in_slice_data_bit_offset / 8; + int i, j; + + if (profile != 3) + out_slice_data_bit_offset = in_slice_data_bit_offset; + else { + for (i = 0, j = 0; i < slice_header_size; i++, j++) { + if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) { + i++, j += 2; + } + } + + out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8; + } + + return out_slice_data_bit_offset; +} + +static void +gen75_mfd_vc1_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + VASliceParameterBufferVC1 *slice_param, + VASliceParameterBufferVC1 *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int next_slice_start_vert_pos; + int macroblock_offset; + uint8_t *slice_data = NULL; + + dri_bo_map(slice_data_bo, 0); + slice_data = (uint8_t *)(slice_data_bo->virtual + slice_param->slice_data_offset); + macroblock_offset = gen75_mfd_vc1_get_macroblock_bit_offset(slice_data, + slice_param->macroblock_offset, + pic_param->sequence_fields.bits.profile); + dri_bo_unmap(slice_data_bo); + + if (next_slice_param) + next_slice_start_vert_pos = next_slice_param->slice_vertical_position; + else + next_slice_start_vert_pos = ALIGN(pic_param->coded_height, 16) / 16; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_VC1_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_vertical_position << 16 | + next_slice_start_vert_pos << 0); + OUT_BCS_BATCH(batch, + (macroblock_offset & 0x7)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_vc1_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + VASliceParameterBufferVC1 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + gen75_mfd_vc1_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen75_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen75_mfd_surface_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen75_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen75_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen75_mfd_vc1_pic_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_vc1_pred_pipe_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_vc1_directmode_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen75_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_VC1, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen75_mfd_vc1_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen75_mfd_jpeg_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface; + VAPictureParameterBufferJPEGBaseline *pic_param; + int subsampling = SUBSAMPLE_YUV420; + int fourcc = VA_FOURCC_IMC3; + + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) { + subsampling = SUBSAMPLE_YUV400; + fourcc = VA_FOURCC_Y800; + } else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV420; + fourcc = VA_FOURCC_IMC3; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV444; + fourcc = VA_FOURCC_444P; + } else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV411; + fourcc = VA_FOURCC_411P; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else + assert(0); + } else { + assert(0); + } + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, fourcc, subsampling); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + gen7_mfd_context->post_deblocking_output.bo = NULL; + gen7_mfd_context->post_deblocking_output.valid = 0; + + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static const int va_to_gen7_jpeg_rotation[4] = { + GEN7_JPEG_ROTATION_0, + GEN7_JPEG_ROTATION_90, + GEN7_JPEG_ROTATION_180, + GEN7_JPEG_ROTATION_270 +}; + +static void +gen75_mfd_jpeg_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + int chroma_type = GEN7_YUV420; + int frame_width_in_blks; + int frame_height_in_blks; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) + chroma_type = GEN7_YUV400; + else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV420; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422H_2Y; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV444; + else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV411; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_2Y; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) + chroma_type = GEN7_YUV422H_4Y; + else if (h2 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_4Y; + else + assert(0); + } + + if (chroma_type == GEN7_YUV400 || + chroma_type == GEN7_YUV444 || + chroma_type == GEN7_YUV422V_2Y) { + frame_width_in_blks = ((pic_param->picture_width + 7) / 8); + frame_height_in_blks = ((pic_param->picture_height + 7) / 8); + } else if (chroma_type == GEN7_YUV411) { + frame_width_in_blks = ((pic_param->picture_width + 31) / 32) * 4; + frame_height_in_blks = ((pic_param->picture_height + 31) / 32) * 4; + } else { + frame_width_in_blks = ((pic_param->picture_width + 15) / 16) * 2; + frame_height_in_blks = ((pic_param->picture_height + 15) / 16) * 2; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_JPEG_PIC_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (va_to_gen7_jpeg_rotation[0] << 4) | /* without rotation */ + (chroma_type << 0)); + OUT_BCS_BATCH(batch, + ((frame_height_in_blks - 1) << 16) | /* FrameHeightInBlks */ + ((frame_width_in_blks - 1) << 0)); /* FrameWidthInBlks */ + ADVANCE_BCS_BATCH(batch); +} + +static const int va_to_gen7_jpeg_hufftable[2] = { + MFX_HUFFTABLE_ID_Y, + MFX_HUFFTABLE_ID_UV +}; + +static void +gen75_mfd_jpeg_huff_table_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context, + int num_tables) +{ + VAHuffmanTableBufferJPEGBaseline *huffman_table; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int index; + + if (!decode_state->huffman_table || !decode_state->huffman_table->buffer) + return; + + huffman_table = (VAHuffmanTableBufferJPEGBaseline *)decode_state->huffman_table->buffer; + + for (index = 0; index < num_tables; index++) { + int id = va_to_gen7_jpeg_hufftable[index]; + + if (!huffman_table->load_huffman_table[index]) + continue; + + BEGIN_BCS_BATCH(batch, 53); + OUT_BCS_BATCH(batch, MFX_JPEG_HUFF_TABLE_STATE | (53 - 2)); + OUT_BCS_BATCH(batch, id); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_dc_codes, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].dc_values, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_ac_codes, 16); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].ac_values, 164); + ADVANCE_BCS_BATCH(batch); + } +} + +static const int va_to_gen7_jpeg_qm[5] = { + -1, + MFX_QM_JPEG_LUMA_Y_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CB_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CR_QUANTIZER_MATRIX, + MFX_QM_JPEG_ALPHA_QUANTIZER_MATRIX +}; + +static void +gen75_mfd_jpeg_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferJPEGBaseline *pic_param; + VAIQMatrixBufferJPEGBaseline *iq_matrix; + int index; + + if (!decode_state->iq_matrix || !decode_state->iq_matrix->buffer) + return; + + iq_matrix = (VAIQMatrixBufferJPEGBaseline *)decode_state->iq_matrix->buffer; + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + assert(pic_param->num_components <= 3); + + for (index = 0; index < pic_param->num_components; index++) { + int id = pic_param->components[index].component_id - pic_param->components[0].component_id + 1; + int qm_type; + unsigned char *qm = iq_matrix->quantiser_table[pic_param->components[index].quantiser_table_selector]; + unsigned char raster_qm[64]; + int j; + + if (id > 4 || id < 1) + continue; + + if (!iq_matrix->load_quantiser_table[pic_param->components[index].quantiser_table_selector]) + continue; + + qm_type = va_to_gen7_jpeg_qm[id]; + + for (j = 0; j < 64; j++) + raster_qm[zigzag_direct[j]] = qm[j]; + + gen75_mfd_qm_state(ctx, qm_type, raster_qm, 64, gen7_mfd_context); + } +} + +static void +gen75_mfd_jpeg_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferJPEGBaseline *pic_param, + VASliceParameterBufferJPEGBaseline *slice_param, + VASliceParameterBufferJPEGBaseline *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int scan_component_mask = 0; + int i; + + assert(slice_param->num_components > 0); + assert(slice_param->num_components < 4); + assert(slice_param->num_components <= pic_param->num_components); + + for (i = 0; i < slice_param->num_components; i++) { + switch (slice_param->components[i].component_selector - pic_param->components[0].component_id + 1) { + case 1: + scan_component_mask |= (1 << 0); + break; + case 2: + scan_component_mask |= (1 << 1); + break; + case 3: + scan_component_mask |= (1 << 2); + break; + default: + assert(0); + break; + } + } + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_JPEG_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + slice_param->slice_horizontal_position << 16 | + slice_param->slice_vertical_position << 0); + OUT_BCS_BATCH(batch, + ((slice_param->num_components != 1) << 30) | /* interleaved */ + (scan_component_mask << 27) | /* scan components */ + (0 << 26) | /* disable interrupt allowed */ + (slice_param->num_mcus << 0)); /* MCU count */ + OUT_BCS_BATCH(batch, + (slice_param->restart_interval << 0)); /* RestartInterval */ + ADVANCE_BCS_BATCH(batch); +} + +/* Workaround for JPEG decoding on Ivybridge */ + +static struct { + int width; + int height; + unsigned char data[32]; + int data_size; + int data_bit_offset; + int qp; +} gen7_jpeg_wa_clip = { + 16, + 16, + { + 0x65, 0xb8, 0x40, 0x32, 0x13, 0xfd, 0x06, 0x6c, + 0xfc, 0x0a, 0x50, 0x71, 0x5c, 0x00 + }, + 14, + 40, + 28, +}; + +static void +gen75_jpeg_wa_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus status; + struct object_surface *obj_surface; + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + + status = i965_CreateSurfaces(ctx, + gen7_jpeg_wa_clip.width, + gen7_jpeg_wa_clip.height, + VA_RT_FORMAT_YUV420, + 1, + &gen7_mfd_context->jpeg_wa_surface_id); + assert(status == VA_STATUS_SUCCESS); + + obj_surface = SURFACE(gen7_mfd_context->jpeg_wa_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen7_mfd_context->jpeg_wa_surface_object = obj_surface; + + if (!gen7_mfd_context->jpeg_wa_slice_data_bo) { + gen7_mfd_context->jpeg_wa_slice_data_bo = dri_bo_alloc(i965->intel.bufmgr, + "JPEG WA data", + 0x1000, + 0x1000); + dri_bo_subdata(gen7_mfd_context->jpeg_wa_slice_data_bo, + 0, + gen7_jpeg_wa_clip.data_size, + gen7_jpeg_wa_clip.data); + } +} + +static void +gen75_jpeg_wa_pipe_mode_select(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (0 << 9) | /* Post Deblocking Output */ + (1 << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (MFX_FORMAT_AVC << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_surface_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_width - 1) << 18) | + ((obj_surface->orig_height - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (obj_surface->y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (0 << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_pipe_buf_addr_state_bplus(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *intra_bo; + int i; + + intra_bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + 128 * 64, + 0x1000); + + BEGIN_BCS_BATCH(batch, 61); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + OUT_BCS_RELOC(batch, + obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + + OUT_BCS_BATCH(batch, 0); /* post deblocking */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* uncompressed-video & stream out 7-12 */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 13-15 is for intra row store scratch */ + OUT_BCS_RELOC(batch, + intra_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 16-18 is for deblocking filter */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* DW 19..50 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + OUT_BCS_BATCH(batch, 0); + + /* the DW52-54 is for mb status address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW56-60 is for ILDB & second ILDB address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(intra_bo); +} + +static void +gen75_jpeg_wa_pipe_buf_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *intra_bo; + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_jpeg_wa_pipe_buf_addr_state_bplus(ctx, gen7_mfd_context); + return; + } + + intra_bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + 128 * 64, + 0x1000); + + BEGIN_BCS_BATCH(batch, 25); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (25 - 2)); + OUT_BCS_RELOC(batch, + obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); /* post deblocking */ + + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + + OUT_BCS_RELOC(batch, + intra_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + + /* DW 7..22 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); /* ignore DW23 for decoding */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(intra_bo); +} + +static void +gen75_jpeg_wa_bsp_buf_base_addr_state_bplus(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *bsd_mpc_bo, *mpr_bo; + + bsd_mpc_bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + 11520, /* 1.5 * 120 * 64 */ + 0x1000); + + mpr_bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + 7680, /* 1. 0 * 120 * 64 */ + 0x1000); + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + + OUT_BCS_RELOC(batch, + bsd_mpc_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, + mpr_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(bsd_mpc_bo); + dri_bo_unreference(mpr_bo); +} + +static void +gen75_jpeg_wa_bsp_buf_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *bsd_mpc_bo, *mpr_bo; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_jpeg_wa_bsp_buf_base_addr_state_bplus(ctx, gen7_mfd_context); + return; + } + + bsd_mpc_bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + 11520, /* 1.5 * 120 * 64 */ + 0x1000); + + mpr_bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + 7680, /* 1. 0 * 120 * 64 */ + 0x1000); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + + OUT_BCS_RELOC(batch, + bsd_mpc_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_RELOC(batch, + mpr_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(bsd_mpc_bo); + dri_bo_unreference(mpr_bo); +} + +static void +gen75_jpeg_wa_avc_qm_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + +} + +static void +gen75_jpeg_wa_avc_img_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct = 0; + int mbaff_frame_flag = 0; + unsigned int width_in_mbs = 1, height_in_mbs = 1; + + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + OUT_BCS_BATCH(batch, + (width_in_mbs * height_in_mbs - 1)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + (0 << 24) | + (0 << 16) | + (0 << 14) | + (0 << 13) | + (0 << 12) | /* differ from GEN6 */ + (0 << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (1 << 10) | /* 4:2:0 */ + (1 << 7) | /* CABAC */ + (0 << 6) | + (0 << 5) | + (0 << 4) | + (0 << 3) | + (1 << 2) | + (mbaff_frame_flag << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_avc_directmode_state_bplus(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 71); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + } + + OUT_BCS_BATCH(batch, 0); + + /* the current decoding frame/field */ + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POC List */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_avc_directmode_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_jpeg_wa_avc_directmode_state_bplus(ctx, gen7_mfd_context); + return; + } + + BEGIN_BCS_BATCH(batch, 69); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + } + + /* the current decoding frame/field */ + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + + /* POC List */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_ind_obj_base_addr_state_bplus(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, + gen7_mfd_context->jpeg_wa_slice_data_bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_ind_obj_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + if (IS_STEPPING_BPLUS(i965)) { + gen75_jpeg_wa_ind_obj_base_addr_state_bplus(ctx, gen7_mfd_context); + return; + } + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, + gen7_mfd_context->jpeg_wa_slice_data_bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_avc_bsd_object(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, gen7_jpeg_wa_clip.data_size); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((gen7_jpeg_wa_clip.data_bit_offset >> 3) << 16) | + (0 << 5) | + (0 << 4) | + (1 << 3) | /* LastSlice Flag */ + (gen7_jpeg_wa_clip.data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_jpeg_wa_avc_slice_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int slice_hor_pos = 0, slice_ver_pos = 0, next_slice_hor_pos = 0, next_slice_ver_pos = 1; + int num_ref_idx_l0 = 0, num_ref_idx_l1 = 0; + int first_mb_in_slice = 0; + int slice_type = SLICE_TYPE_I; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (0 << 29) | + (1 << 27) | /* disable Deblocking */ + (0 << 24) | + (gen7_jpeg_wa_clip.qp << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, (1 << 19)); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen75_mfd_jpeg_wa(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + gen75_jpeg_wa_init(ctx, gen7_mfd_context); + intel_batchbuffer_emit_mi_flush(batch); + gen75_jpeg_wa_pipe_mode_select(ctx, gen7_mfd_context); + gen75_jpeg_wa_surface_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_pipe_buf_addr_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_bsp_buf_base_addr_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_avc_qm_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_avc_img_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_ind_obj_base_addr_state(ctx, gen7_mfd_context); + + gen75_jpeg_wa_avc_directmode_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_avc_slice_state(ctx, gen7_mfd_context); + gen75_jpeg_wa_avc_bsd_object(ctx, gen7_mfd_context); +} + +void +gen75_mfd_jpeg_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + VASliceParameterBufferJPEGBaseline *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j, max_selector = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + /* Currently only support Baseline DCT */ + gen75_mfd_jpeg_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + gen75_mfd_jpeg_wa(ctx, gen7_mfd_context); + intel_batchbuffer_emit_mi_flush(batch); + gen75_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen75_mfd_surface_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen75_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen75_mfd_jpeg_pic_state(ctx, decode_state, gen7_mfd_context); + gen75_mfd_jpeg_qm_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen75_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + int component; + + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + for (component = 0; component < slice_param->num_components; component++) { + if (max_selector < slice_param->components[component].dc_table_selector) + max_selector = slice_param->components[component].dc_table_selector; + + if (max_selector < slice_param->components[component].ac_table_selector) + max_selector = slice_param->components[component].ac_table_selector; + } + + slice_param++; + } + } + + assert(max_selector < 2); + gen75_mfd_jpeg_huff_table_state(ctx, decode_state, gen7_mfd_context, max_selector + 1); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen75_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen75_mfd_jpeg_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static VAStatus +gen75_mfd_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) + +{ + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + assert(gen7_mfd_context); + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + gen7_mfd_context->wa_mpeg2_slice_vertical_position = -1; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen75_mfd_mpeg2_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + gen75_mfd_avc_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + gen75_mfd_vc1_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileJPEGBaseline: + gen75_mfd_jpeg_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + default: + assert(0); + break; + } + + vaStatus = VA_STATUS_SUCCESS; + +out: + return vaStatus; +} + +static void +gen75_mfd_context_destroy(void *hw_context) +{ + VADriverContextP ctx; + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + + ctx = (VADriverContextP)(gen7_mfd_context->driver_context); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->jpeg_wa_slice_data_bo); + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) { + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + gen7_mfd_context->jpeg_wa_surface_object = NULL; + } + + intel_batchbuffer_free(gen7_mfd_context->base.batch); + free(gen7_mfd_context); +} + +static void gen75_mfd_mpeg2_context_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen7_mfd_context->iq_matrix.mpeg2.load_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_non_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_non_intra_quantiser_matrix = -1; +} + +struct hw_context * +gen75_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct gen7_mfd_context *gen7_mfd_context = calloc(1, sizeof(struct gen7_mfd_context)); + int i; + + assert(gen7_mfd_context); + gen7_mfd_context->base.destroy = gen75_mfd_context_destroy; + gen7_mfd_context->base.run = gen75_mfd_decode_picture; + gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; + gen7_mfd_context->reference_surface[i].frame_store_id = -1; + gen7_mfd_context->reference_surface[i].obj_surface = NULL; + } + + gen7_mfd_context->jpeg_wa_surface_id = VA_INVALID_SURFACE; + gen7_mfd_context->jpeg_wa_surface_object = NULL; + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen75_mfd_mpeg2_context_init(ctx, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + gen75_mfd_avc_context_init(ctx, gen7_mfd_context); + break; + default: + break; + } + + gen7_mfd_context->driver_context = ctx; + return (struct hw_context *)gen7_mfd_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.c new file mode 100644 index 000000000..ed5053292 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.c @@ -0,0 +1,281 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + */ + +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_structs.h" + +#include "i965_drv_video.h" +#include "i965_post_processing.h" +#include "gen75_picture_process.h" + +extern struct hw_context * +i965_proc_context_init(VADriverContextP ctx, + struct object_config *obj_config); + +static VAStatus +gen75_vpp_fmt_cvt(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + struct intel_video_process_context *proc_ctx = + (struct intel_video_process_context *)hw_context; + + /* implicity surface format coversion and scaling */ + if(proc_ctx->vpp_fmt_cvt_ctx == NULL){ + proc_ctx->vpp_fmt_cvt_ctx = i965_proc_context_init(ctx, NULL); + } + + va_status = i965_proc_picture(ctx, profile, codec_state, + proc_ctx->vpp_fmt_cvt_ctx); + + return va_status; +} + +static VAStatus +gen75_vpp_vebox(VADriverContextP ctx, + struct intel_video_process_context* proc_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + VAProcPipelineParameterBuffer* pipeline_param = proc_ctx->pipeline_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + /* vpp features based on VEBox fixed function */ + if(proc_ctx->vpp_vebox_ctx == NULL) { + proc_ctx->vpp_vebox_ctx = gen75_vebox_context_init(ctx); + } + + proc_ctx->vpp_vebox_ctx->pipeline_param = pipeline_param; + proc_ctx->vpp_vebox_ctx->surface_input_object = proc_ctx->surface_pipeline_input_object; + proc_ctx->vpp_vebox_ctx->surface_output_object = proc_ctx->surface_render_output_object; + + if (IS_HASWELL(i965->intel.device_info)) + va_status = gen75_vebox_process_picture(ctx, proc_ctx->vpp_vebox_ctx); + else if (IS_GEN8(i965->intel.device_info)) + va_status = gen8_vebox_process_picture(ctx, proc_ctx->vpp_vebox_ctx); + else if (IS_GEN9(i965->intel.device_info)) + va_status = gen9_vebox_process_picture(ctx, proc_ctx->vpp_vebox_ctx); + + return va_status; +} + +static VAStatus +gen75_vpp_gpe(VADriverContextP ctx, + struct intel_video_process_context* proc_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + if(proc_ctx->vpp_gpe_ctx == NULL){ + proc_ctx->vpp_gpe_ctx = vpp_gpe_context_init(ctx); + } + + proc_ctx->vpp_gpe_ctx->pipeline_param = proc_ctx->pipeline_param; + proc_ctx->vpp_gpe_ctx->surface_pipeline_input_object = proc_ctx->surface_pipeline_input_object; + proc_ctx->vpp_gpe_ctx->surface_output_object = proc_ctx->surface_render_output_object; + + va_status = vpp_gpe_process_picture(ctx, proc_ctx->vpp_gpe_ctx); + + return va_status; +} + +VAStatus +gen75_proc_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct proc_state* proc_st = &(codec_state->proc); + struct intel_video_process_context *proc_ctx = + (struct intel_video_process_context *)hw_context; + VAProcPipelineParameterBuffer *pipeline_param = + (VAProcPipelineParameterBuffer *)proc_st->pipeline_param->buffer; + struct object_surface *obj_dst_surf = NULL; + struct object_surface *obj_src_surf = NULL; + VAStatus status; + + proc_ctx->pipeline_param = pipeline_param; + + if (proc_st->current_render_target == VA_INVALID_SURFACE || + pipeline_param->surface == VA_INVALID_SURFACE) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + obj_dst_surf = SURFACE(proc_st->current_render_target); + + if (!obj_dst_surf) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + obj_src_surf = SURFACE(proc_ctx->pipeline_param->surface); + + if (!obj_src_surf) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + if (!obj_src_surf->bo) { + status = VA_STATUS_ERROR_INVALID_VALUE; /* The input surface is created without valid content */ + goto error; + } + + if (pipeline_param->num_filters && !pipeline_param->filters) { + status = VA_STATUS_ERROR_INVALID_PARAMETER; + goto error; + } + + if (!obj_dst_surf->bo) { + unsigned int is_tiled = 1; + unsigned int fourcc = VA_FOURCC_NV12; + int sampling = SUBSAMPLE_YUV420; + i965_check_alloc_surface_bo(ctx, obj_dst_surf, is_tiled, fourcc, sampling); + } + + proc_ctx->surface_render_output_object = obj_dst_surf; + proc_ctx->surface_pipeline_input_object = obj_src_surf; + assert(pipeline_param->num_filters <= 4); + + VABufferID *filter_id = (VABufferID*) pipeline_param->filters; + + if(pipeline_param->num_filters == 0 || pipeline_param->filters == NULL ){ + /* implicity surface format coversion and scaling */ + gen75_vpp_fmt_cvt(ctx, profile, codec_state, hw_context); + }else if(pipeline_param->num_filters == 1) { + struct object_buffer * obj_buf = BUFFER((*filter_id) + 0); + + assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer); + + if (!obj_buf || + !obj_buf->buffer_store || + !obj_buf->buffer_store->buffer) { + status = VA_STATUS_ERROR_INVALID_FILTER_CHAIN; + goto error; + } + + VAProcFilterParameterBuffer* filter = + (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer; + + if (filter->type == VAProcFilterNoiseReduction || + filter->type == VAProcFilterDeinterlacing || + filter->type == VAProcFilterSkinToneEnhancement || + filter->type == VAProcFilterColorBalance){ + gen75_vpp_vebox(ctx, proc_ctx); + }else if(filter->type == VAProcFilterSharpening){ + if (obj_src_surf->fourcc != VA_FOURCC_NV12 || + obj_dst_surf->fourcc != VA_FOURCC_NV12) { + status = VA_STATUS_ERROR_UNIMPLEMENTED; + goto error; + } + + gen75_vpp_gpe(ctx, proc_ctx); + } + }else if (pipeline_param->num_filters >= 2) { + unsigned int i = 0; + for (i = 0; i < pipeline_param->num_filters; i++){ + struct object_buffer * obj_buf = BUFFER(pipeline_param->filters[i]); + + if (!obj_buf || + !obj_buf->buffer_store || + !obj_buf->buffer_store->buffer) { + status = VA_STATUS_ERROR_INVALID_FILTER_CHAIN; + goto error; + } + + VAProcFilterParameterBuffer* filter = + (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer; + + if (filter->type != VAProcFilterNoiseReduction && + filter->type != VAProcFilterDeinterlacing && + filter->type != VAProcFilterSkinToneEnhancement && + filter->type != VAProcFilterColorBalance) { + fprintf(stderr, "Do not support multiply filters outside vebox pipeline \n"); + assert(0); + } + } + gen75_vpp_vebox(ctx, proc_ctx); + } + + return VA_STATUS_SUCCESS; + +error: + return status; +} + +static void +gen75_proc_context_destroy(void *hw_context) +{ + struct intel_video_process_context *proc_ctx = + (struct intel_video_process_context *)hw_context; + VADriverContextP ctx = (VADriverContextP)(proc_ctx->driver_context); + + if(proc_ctx->vpp_fmt_cvt_ctx){ + proc_ctx->vpp_fmt_cvt_ctx->destroy(proc_ctx->vpp_fmt_cvt_ctx); + proc_ctx->vpp_fmt_cvt_ctx = NULL; + } + + if(proc_ctx->vpp_vebox_ctx){ + gen75_vebox_context_destroy(ctx,proc_ctx->vpp_vebox_ctx); + proc_ctx->vpp_vebox_ctx = NULL; + } + + if(proc_ctx->vpp_gpe_ctx){ + vpp_gpe_context_destroy(ctx,proc_ctx->vpp_gpe_ctx); + proc_ctx->vpp_gpe_ctx = NULL; + } + + free(proc_ctx); +} + +struct hw_context * +gen75_proc_context_init(VADriverContextP ctx, + struct object_config *obj_config) +{ + struct intel_video_process_context *proc_context + = calloc(1, sizeof(struct intel_video_process_context)); + + assert(proc_context); + proc_context->base.destroy = gen75_proc_context_destroy; + proc_context->base.run = gen75_proc_picture; + + proc_context->vpp_vebox_ctx = NULL; + proc_context->vpp_gpe_ctx = NULL; + proc_context->vpp_fmt_cvt_ctx = NULL; + + proc_context->driver_context = ctx; + + return (struct hw_context *)proc_context; +} + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.h new file mode 100644 index 000000000..b0f975071 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_picture_process.h @@ -0,0 +1,55 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + * + */ +#ifndef _GEN75_PICTURE_PROCESS_H +#define _GEN75_PICTURE_PROCESS_H + +#include +#include "i965_drv_video.h" +#include "gen75_vpp_vebox.h" +#include "gen75_vpp_gpe.h" + +struct intel_video_process_context +{ + struct hw_context base; + void* driver_context; + + struct intel_vebox_context *vpp_vebox_ctx; + struct hw_context *vpp_fmt_cvt_ctx; + struct vpp_gpe_context *vpp_gpe_ctx; + + VAProcPipelineParameterBuffer* pipeline_param; + + struct object_surface *surface_render_output_object; + struct object_surface *surface_pipeline_input_object; +}; + +struct hw_context * +gen75_proc_context_init(VADriverContextP ctx, struct object_config *obj_config); + +#endif + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vme.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vme.c new file mode 100644 index 000000000..a85d6b3ee --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vme.c @@ -0,0 +1,1073 @@ +/* + * Copyright © 2010-2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * + */ + +#include "sysdeps.h" + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define VME_INTRA_SHADER 0 +#define VME_INTER_SHADER 1 +#define VME_BINTER_SHADER 3 +#define VME_BATCHBUFFER 2 + +#define CURBE_ALLOCATION_SIZE 37 /* in 256-bit */ +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) /* in byte, it should be less than or equal to CURBE_ALLOCATION_SIZE * 32 */ +#define CURBE_URB_ENTRY_LENGTH 4 /* in 256-bit, it should be less than or equal to CURBE_TOTAL_DATA_LENGTH / 32 */ + +#define VME_MSG_LENGTH 32 + +static const uint32_t gen75_vme_intra_frame[][4] = { +#include "shaders/vme/intra_frame_haswell.g75b" +}; + +static const uint32_t gen75_vme_inter_frame[][4] = { +#include "shaders/vme/inter_frame_haswell.g75b" +}; + +static const uint32_t gen75_vme_inter_bframe[][4] = { +#include "shaders/vme/inter_bframe_haswell.g75b" +}; + +static const uint32_t gen75_vme_batchbuffer[][4] = { +#include "shaders/vme/batchbuffer.g75b" +}; + +static struct i965_kernel gen75_vme_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen75_vme_intra_frame, + sizeof(gen75_vme_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen75_vme_inter_frame, + sizeof(gen75_vme_inter_frame), + NULL + }, + { + "VME BATCHBUFFER", + VME_BATCHBUFFER, + gen75_vme_batchbuffer, + sizeof(gen75_vme_batchbuffer), + NULL + }, + { + "VME inter BFrame", + VME_BINTER_SHADER, + gen75_vme_inter_bframe, + sizeof(gen75_vme_inter_bframe), + NULL + } +}; + +static const uint32_t gen75_vme_mpeg2_intra_frame[][4] = { +#include "shaders/vme/intra_frame_haswell.g75b" +}; + +static const uint32_t gen75_vme_mpeg2_inter_frame[][4] = { +#include "shaders/vme/mpeg2_inter_haswell.g75b" +}; + +static const uint32_t gen75_vme_mpeg2_batchbuffer[][4] = { +#include "shaders/vme/batchbuffer.g75b" +}; + +static struct i965_kernel gen75_vme_mpeg2_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen75_vme_mpeg2_intra_frame, + sizeof(gen75_vme_mpeg2_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen75_vme_mpeg2_inter_frame, + sizeof(gen75_vme_mpeg2_inter_frame), + NULL + }, + { + "VME BATCHBUFFER", + VME_BATCHBUFFER, + gen75_vme_mpeg2_batchbuffer, + sizeof(gen75_vme_mpeg2_batchbuffer), + NULL + }, +}; + +/* only used for VME source surface state */ +static void +gen75_vme_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_surface2_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen75_vme_media_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_rw_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen75_vme_media_chroma_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_chroma_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen75_vme_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 2; + else + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 24; + /* + * Inter MV . 32-byte Intra search + 16 IME info + 128 IME MV + 32 IME Ref + * + 16 FBR Info + 128 FBR MV + 32 FBR Ref. + * 16 * (2 + 2 * (1 + 8 + 2))= 16 * 24. + */ + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen75_vme_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 64; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static VAStatus +gen75_vme_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen75_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen75_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen75_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); + + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen75_vme_source_surface_state); + + if (slice_type == SLICE_TYPE_B) + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen75_vme_source_surface_state); + } + + /* VME output */ + gen75_vme_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen75_vme_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen75_vme_interface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = vme_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < vme_context->vme_kernel_sum; i++) { + struct i965_kernel *kernel; + kernel = &vme_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; /* FIXME: */ + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 1; /* FIXME: */ + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = CURBE_URB_ENTRY_LENGTH; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen75_vme_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned char *constant_buffer; + unsigned int *vme_state_message; + int mv_num = 32; + + vme_state_message = (unsigned int *)vme_context->vme_state_message; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + if (vme_context->h264_level >= 30) { + mv_num = 16; + + if (vme_context->h264_level >= 31) + mv_num = 8; + } + } else if (encoder_context->codec == CODEC_MPEG2) { + mv_num = 2; + } + + vme_state_message[31] = mv_num; + + dri_bo_map(vme_context->gpe_context.curbe.bo, 1); + assert(vme_context->gpe_context.curbe.bo->virtual); + constant_buffer = vme_context->gpe_context.curbe.bo->virtual; + + /* VME MV/Mb cost table is passed by using const buffer */ + /* Now it uses the fixed search path. So it is constructed directly + * in the GPU shader. + */ + memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); + + dri_bo_unmap(vme_context->gpe_context.curbe.bo); + + return VA_STATUS_SUCCESS; +} + +static const unsigned int intra_mb_mode_cost_table[] = { + 0x31110001, // for qp0 + 0x09110001, // for qp1 + 0x15030001, // for qp2 + 0x0b030001, // for qp3 + 0x0d030011, // for qp4 + 0x17210011, // for qp5 + 0x41210011, // for qp6 + 0x19210011, // for qp7 + 0x25050003, // for qp8 + 0x1b130003, // for qp9 + 0x1d130003, // for qp10 + 0x27070021, // for qp11 + 0x51310021, // for qp12 + 0x29090021, // for qp13 + 0x35150005, // for qp14 + 0x2b0b0013, // for qp15 + 0x2d0d0013, // for qp16 + 0x37170007, // for qp17 + 0x61410031, // for qp18 + 0x39190009, // for qp19 + 0x45250015, // for qp20 + 0x3b1b000b, // for qp21 + 0x3d1d000d, // for qp22 + 0x47270017, // for qp23 + 0x71510041, // for qp24 ! center for qp=0..30 + 0x49290019, // for qp25 + 0x55350025, // for qp26 + 0x4b2b001b, // for qp27 + 0x4d2d001d, // for qp28 + 0x57370027, // for qp29 + 0x81610051, // for qp30 + 0x57270017, // for qp31 + 0x81510041, // for qp32 ! center for qp=31..51 + 0x59290019, // for qp33 + 0x65350025, // for qp34 + 0x5b2b001b, // for qp35 + 0x5d2d001d, // for qp36 + 0x67370027, // for qp37 + 0x91610051, // for qp38 + 0x69390029, // for qp39 + 0x75450035, // for qp40 + 0x6b3b002b, // for qp41 + 0x6d3d002d, // for qp42 + 0x77470037, // for qp43 + 0xa1710061, // for qp44 + 0x79490039, // for qp45 + 0x85550045, // for qp46 + 0x7b4b003b, // for qp47 + 0x7d4d003d, // for qp48 + 0x87570047, // for qp49 + 0xb1810071, // for qp50 + 0x89590049 // for qp51 +}; + +static void gen75_vme_state_setup_fixup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + unsigned int *vme_state_message) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + + if (slice_param->slice_type != SLICE_TYPE_I && + slice_param->slice_type != SLICE_TYPE_SI) + return; + if (encoder_context->rate_control_mode == VA_RC_CQP) + vme_state_message[0] = intra_mb_mode_cost_table[pic_param->pic_init_qp + slice_param->slice_qp_delta]; + else + vme_state_message[0] = intra_mb_mode_cost_table[mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY]; +} + +static VAStatus gen75_vme_vme_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *vme_state_message; + int i; + + //pass the MV/Mb cost into VME message on HASWell + assert(vme_context->vme_state_message); + vme_state_message = (unsigned int *)vme_context->vme_state_message; + + vme_state_message[0] = 0x4a4a4a4a; + vme_state_message[1] = 0x4a4a4a4a; + vme_state_message[2] = 0x4a4a4a4a; + vme_state_message[3] = 0x22120200; + vme_state_message[4] = 0x62524232; + + for (i=5; i < 8; i++) { + vme_state_message[i] = 0; + } + + switch (encoder_context->codec) { + case CODEC_H264: + case CODEC_H264_MVC: + gen75_vme_state_setup_fixup(ctx, encode_state, encoder_context, vme_state_message); + + break; + + default: + /* no fixup */ + break; + } + + return VA_STATUS_SUCCESS; +} + +static void +gen75_vme_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s; + unsigned int *command_ptr; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->macroblock_address; + int slice_mb_number = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub; + int slice_mb_x = pSliceParameter->macroblock_address % mb_width; + for (i = 0; i < slice_mb_number; ) { + int mb_count = i + slice_mb_begin; + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ((encoder_context->quality_level << 24) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + i += 1; + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void gen75_vme_media_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + i965_gpe_context_init(ctx, &vme_context->gpe_context); + + /* VME output buffer */ + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + /* VME state */ + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; +} + +static void gen75_vme_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + int kernel_shader; + bool allow_hwscore = true; + int s; + unsigned int is_low_quality = (encoder_context->quality_level == ENCODER_LOW_QUALITY); + + if (is_low_quality) + allow_hwscore = false; + else { + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + if ((pSliceParameter->macroblock_address % width_in_mbs)) { + allow_hwscore = false; + break; + } + } + } + + if ((pSliceParameter->slice_type == SLICE_TYPE_I) || + (pSliceParameter->slice_type == SLICE_TYPE_SI)) { + kernel_shader = VME_INTRA_SHADER; + } else if ((pSliceParameter->slice_type == SLICE_TYPE_P) || + (pSliceParameter->slice_type == SLICE_TYPE_SP)) { + kernel_shader = VME_INTER_SHADER; + } else { + kernel_shader = VME_BINTER_SHADER; + if (!allow_hwscore) + kernel_shader = VME_INTER_SHADER; + } + if (allow_hwscore) + gen7_vme_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + else + gen75_vme_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen6_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen75_vme_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if (!vme_context->h264_level || + (vme_context->h264_level != pSequenceParameter->level_idc)) { + vme_context->h264_level = pSequenceParameter->level_idc; + } + + intel_vme_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen75_vme_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen75_vme_interface_setup(ctx, encode_state, encoder_context); + //gen75_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context); + gen75_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen75_vme_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + +static VAStatus gen75_vme_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen75_vme_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_vme_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen75_vme_media_init(ctx, encoder_context); + gen75_vme_prepare(ctx, encode_state, encoder_context); + gen75_vme_run(ctx, encode_state, encoder_context); + gen75_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen75_vme_mpeg2_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 2; + else + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 24; + /* + * Inter MV . 32-byte Intra search + 16 IME info + 128 IME MV + 32 IME Ref + * + 16 FBR Info + 128 FBR MV + 32 FBR Ref. + * 16 * (2 + 2 * (1 + 8 + 2))= 16 * 24. + */ + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen75_vme_mpeg2_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 64; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static VAStatus +gen75_vme_mpeg2_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen75_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen75_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen75_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + if (obj_surface->bo != NULL) + gen75_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + if (obj_surface && obj_surface->bo != NULL) + gen75_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen75_vme_mpeg2_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen75_vme_mpeg2_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen75_vme_mpeg2_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s, j; + unsigned int *command_ptr; + + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + int slice_mb_begin = slice_param->macroblock_address; + int slice_mb_number = slice_param->num_macroblocks; + unsigned int mb_intra_ub; + int slice_mb_x = slice_param->macroblock_address % mb_width; + + for (i = 0; i < slice_mb_number;) { + int mb_count = i + slice_mb_begin; + + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ( (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + i += 1; + } + + slice_param++; + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen75_vme_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferMPEG2 *pic_param = NULL; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + bool allow_hwscore = true; + int s; + int kernel_shader; + + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + int j; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + if (slice_param->macroblock_address % width_in_mbs) { + allow_hwscore = false; + break; + } + } + } + + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + if (pic_param->picture_type == VAEncPictureTypeIntra) { + allow_hwscore = false; + kernel_shader = VME_INTRA_SHADER; + } else { + kernel_shader = VME_INTER_SHADER; + } + + if (allow_hwscore) + gen7_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + encoder_context); + else + gen75_vme_mpeg2_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + 0, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen6_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen75_vme_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if ((!vme_context->mpeg2_level) || + (vme_context->mpeg2_level != (seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK))) { + vme_context->mpeg2_level = seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK; + } + + /*Setup all the memory object*/ + gen75_vme_mpeg2_surface_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + gen75_vme_interface_setup(ctx, encode_state, encoder_context); + gen75_vme_vme_state_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + intel_vme_mpeg2_state_setup(ctx, encode_state, encoder_context); + gen75_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen75_vme_mpeg2_pipeline_programing(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + + return vaStatus; +} + +static VAStatus +gen75_vme_mpeg2_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen75_vme_media_init(ctx, encoder_context); + gen75_vme_mpeg2_prepare(ctx, encode_state, encoder_context); + gen75_vme_run(ctx, encode_state, encoder_context); + gen75_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen75_vme_context_destroy(void *context) +{ + struct gen6_vme_context *vme_context = context; + + i965_gpe_context_destroy(&vme_context->gpe_context); + + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + if (vme_context->vme_state_message) { + free(vme_context->vme_state_message); + vme_context->vme_state_message = NULL; + } + + free(vme_context); +} + +Bool gen75_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = calloc(1, sizeof(struct gen6_vme_context)); + struct i965_kernel *vme_kernel_list = NULL; + int i965_kernel_num; + + switch (encoder_context->codec) { + case CODEC_H264: + case CODEC_H264_MVC: + vme_kernel_list = gen75_vme_kernels; + encoder_context->vme_pipeline = gen75_vme_pipeline; + i965_kernel_num = sizeof(gen75_vme_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_MPEG2: + vme_kernel_list = gen75_vme_mpeg2_kernels; + encoder_context->vme_pipeline = gen75_vme_mpeg2_pipeline; + i965_kernel_num = sizeof(gen75_vme_mpeg2_kernels) / sizeof(struct i965_kernel); + + break; + + default: + /* never get here */ + assert(0); + + break; + } + + assert(vme_context); + vme_context->vme_kernel_sum = i965_kernel_num; + vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6; + vme_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH; + + vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + vme_context->gpe_context.vfe_state.num_urb_entries = 64; + vme_context->gpe_context.vfe_state.gpgpu_mode = 0; + vme_context->gpe_context.vfe_state.urb_entry_size = 16; + vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + gen7_vme_scoreboard_init(ctx, vme_context); + + i965_gpe_load_kernels(ctx, + &vme_context->gpe_context, + vme_kernel_list, + i965_kernel_num); + vme_context->vme_surface2_setup = gen7_gpe_surface2_setup; + vme_context->vme_media_rw_surface_setup = gen7_gpe_media_rw_surface_setup; + vme_context->vme_buffer_suface_setup = gen7_gpe_buffer_suface_setup; + vme_context->vme_media_chroma_surface_setup = gen75_gpe_media_chroma_surface_setup; + + encoder_context->vme_context = vme_context; + encoder_context->vme_context_destroy = gen75_vme_context_destroy; + + vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int)); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.c new file mode 100644 index 000000000..548612874 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.c @@ -0,0 +1,892 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_structs.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "gen75_vpp_gpe.h" + +#define MAX_INTERFACE_DESC_GEN6 MAX_GPE_KERNELS +#define MAX_MEDIA_SURFACES_GEN6 34 + +#define SURFACE_STATE_OFFSET_GEN7(index) (SURFACE_STATE_PADDED_SIZE_GEN7 * (index)) +#define BINDING_TABLE_OFFSET_GEN7(index) (SURFACE_STATE_OFFSET_GEN7(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * (index)) + +#define SURFACE_STATE_OFFSET_GEN8(index) (SURFACE_STATE_PADDED_SIZE_GEN8 * (index)) +#define BINDING_TABLE_OFFSET_GEN8(index) (SURFACE_STATE_OFFSET_GEN8(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * (index)) + +#define CURBE_ALLOCATION_SIZE 37 +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) +#define CURBE_URB_ENTRY_LENGTH 4 + +/* Shaders information for sharpening */ +static const unsigned int gen75_gpe_sharpening_h_blur[][4] = { + #include "shaders/post_processing/gen75/sharpening_h_blur.g75b" +}; +static const unsigned int gen75_gpe_sharpening_v_blur[][4] = { + #include "shaders/post_processing/gen75/sharpening_v_blur.g75b" +}; +static const unsigned int gen75_gpe_sharpening_unmask[][4] = { + #include "shaders/post_processing/gen75/sharpening_unmask.g75b" +}; +static struct i965_kernel gen75_vpp_sharpening_kernels[] = { + { + "vpp: sharpening(horizontal blur)", + VPP_GPE_SHARPENING, + gen75_gpe_sharpening_h_blur, + sizeof(gen75_gpe_sharpening_h_blur), + NULL + }, + { + "vpp: sharpening(vertical blur)", + VPP_GPE_SHARPENING, + gen75_gpe_sharpening_v_blur, + sizeof(gen75_gpe_sharpening_v_blur), + NULL + }, + { + "vpp: sharpening(unmask)", + VPP_GPE_SHARPENING, + gen75_gpe_sharpening_unmask, + sizeof(gen75_gpe_sharpening_unmask), + NULL + }, +}; + +/* sharpening kernels for Broadwell */ +static const unsigned int gen8_gpe_sharpening_h_blur[][4] = { + #include "shaders/post_processing/gen8/sharpening_h_blur.g8b" +}; +static const unsigned int gen8_gpe_sharpening_v_blur[][4] = { + #include "shaders/post_processing/gen8/sharpening_v_blur.g8b" +}; +static const unsigned int gen8_gpe_sharpening_unmask[][4] = { + #include "shaders/post_processing/gen8/sharpening_unmask.g8b" +}; + +static struct i965_kernel gen8_vpp_sharpening_kernels[] = { + { + "vpp: sharpening(horizontal blur)", + VPP_GPE_SHARPENING, + gen8_gpe_sharpening_h_blur, + sizeof(gen8_gpe_sharpening_h_blur), + NULL + }, + { + "vpp: sharpening(vertical blur)", + VPP_GPE_SHARPENING, + gen8_gpe_sharpening_v_blur, + sizeof(gen8_gpe_sharpening_v_blur), + NULL + }, + { + "vpp: sharpening(unmask)", + VPP_GPE_SHARPENING, + gen8_gpe_sharpening_unmask, + sizeof(gen8_gpe_sharpening_unmask), + NULL + }, +}; + +static VAStatus +gen75_gpe_process_surfaces_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct object_surface *obj_surface; + unsigned int i = 0; + unsigned char input_surface_sum = (1 + vpp_gpe_ctx->forward_surf_sum + + vpp_gpe_ctx->backward_surf_sum) * 2; + + /* Binding input NV12 surfaces (Luma + Chroma)*/ + for( i = 0; i < input_surface_sum; i += 2){ + obj_surface = vpp_gpe_ctx->surface_input_object[i/2]; + assert(obj_surface); + gen7_gpe_media_rw_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN7(i), + SURFACE_STATE_OFFSET_GEN7(i)); + + gen75_gpe_media_chroma_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN7(i + 1), + SURFACE_STATE_OFFSET_GEN7(i + 1)); + } + + /* Binding output NV12 surface(Luma + Chroma) */ + obj_surface = vpp_gpe_ctx->surface_output_object; + assert(obj_surface); + gen7_gpe_media_rw_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN7(input_surface_sum), + SURFACE_STATE_OFFSET_GEN7(input_surface_sum)); + gen75_gpe_media_chroma_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN7(input_surface_sum + 1), + SURFACE_STATE_OFFSET_GEN7(input_surface_sum + 1)); + /* Bind kernel return buffer surface */ + gen7_gpe_buffer_suface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + &vpp_gpe_ctx->vpp_kernel_return, + BINDING_TABLE_OFFSET_GEN7((input_surface_sum + 2)), + SURFACE_STATE_OFFSET_GEN7(input_surface_sum + 2)); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_interface_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct gen6_interface_descriptor_data *desc; + dri_bo *bo = vpp_gpe_ctx->gpe_ctx.idrt.bo; + int i; + + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + /*Setup the descritor table*/ + for(i = 0; i < vpp_gpe_ctx->sub_shader_sum; i++){ + struct i965_kernel *kernel = &vpp_gpe_ctx->gpe_ctx.kernels[i]; + assert(sizeof(*desc) == 32); + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; /* FIXME: */ + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 6; /* FIXME: */ + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET_GEN7(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = 0; + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i* sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_parameters_fill(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + unsigned int *command_ptr; + unsigned int i, size = vpp_gpe_ctx->thread_param_size; + unsigned char* position = NULL; + + /* Thread inline data setting*/ + dri_bo_map(vpp_gpe_ctx->vpp_batchbuffer.bo, 1); + command_ptr = vpp_gpe_ctx->vpp_batchbuffer.bo->virtual; + + for(i = 0; i < vpp_gpe_ctx->thread_num; i ++) + { + *command_ptr++ = (CMD_MEDIA_OBJECT | (size/sizeof(int) + 6 - 2)); + *command_ptr++ = vpp_gpe_ctx->sub_shader_index; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /* copy thread inline data */ + position =(unsigned char*)(vpp_gpe_ctx->thread_param + size * i); + memcpy(command_ptr, position, size); + command_ptr += size/sizeof(int); + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vpp_gpe_ctx->vpp_batchbuffer.bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_pipeline_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + intel_batchbuffer_start_atomic(vpp_gpe_ctx->batch, 0x1000); + intel_batchbuffer_emit_mi_flush(vpp_gpe_ctx->batch); + + gen6_gpe_pipeline_setup(ctx, &vpp_gpe_ctx->gpe_ctx, vpp_gpe_ctx->batch); + + gen75_gpe_process_parameters_fill(ctx, vpp_gpe_ctx); + + BEGIN_BATCH(vpp_gpe_ctx->batch, 2); + OUT_BATCH(vpp_gpe_ctx->batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(vpp_gpe_ctx->batch, + vpp_gpe_ctx->vpp_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(vpp_gpe_ctx->batch); + + intel_batchbuffer_end_atomic(vpp_gpe_ctx->batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_init(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + + unsigned int batch_buf_size = vpp_gpe_ctx->thread_num * + (vpp_gpe_ctx->thread_param_size + 6 * sizeof(int)) + 16; + + vpp_gpe_ctx->vpp_kernel_return.num_blocks = vpp_gpe_ctx->thread_num; + vpp_gpe_ctx->vpp_kernel_return.size_block = 16; + vpp_gpe_ctx->vpp_kernel_return.pitch = 1; + unsigned int kernel_return_size = vpp_gpe_ctx->vpp_kernel_return.num_blocks + * vpp_gpe_ctx->vpp_kernel_return.size_block; + + dri_bo_unreference(vpp_gpe_ctx->vpp_batchbuffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vpp batch buffer", + batch_buf_size, 0x1000); + vpp_gpe_ctx->vpp_batchbuffer.bo = bo; + + dri_bo_unreference(vpp_gpe_ctx->vpp_kernel_return.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vpp kernel return buffer", + kernel_return_size, 0x1000); + vpp_gpe_ctx->vpp_kernel_return.bo = bo; + + vpp_gpe_ctx->gpe_context_init(ctx, &vpp_gpe_ctx->gpe_ctx); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_prepare(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + /*Setup all the memory object*/ + gen75_gpe_process_surfaces_setup(ctx, vpp_gpe_ctx); + gen75_gpe_process_interface_setup(ctx, vpp_gpe_ctx); + //gen75_gpe_process_constant_setup(ctx, vpp_gpe_ctx); + + /*Programing media pipeline*/ + gen75_gpe_process_pipeline_setup(ctx, vpp_gpe_ctx); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process_run(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + intel_batchbuffer_flush(vpp_gpe_ctx->batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_gpe_process(VADriverContextP ctx, + struct vpp_gpe_context * vpp_gpe_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + va_status = gen75_gpe_process_init(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = gen75_gpe_process_prepare(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = gen75_gpe_process_run(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_surfaces_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct object_surface *obj_surface; + unsigned int i = 0; + unsigned char input_surface_sum = (1 + vpp_gpe_ctx->forward_surf_sum + + vpp_gpe_ctx->backward_surf_sum) * 2; + + /* Binding input NV12 surfaces (Luma + Chroma)*/ + for( i = 0; i < input_surface_sum; i += 2){ + obj_surface = vpp_gpe_ctx->surface_input_object[i/2]; + assert(obj_surface); + gen8_gpe_media_rw_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN8(i), + SURFACE_STATE_OFFSET_GEN8(i)); + + gen8_gpe_media_chroma_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN8(i + 1), + SURFACE_STATE_OFFSET_GEN8(i + 1)); + } + + /* Binding output NV12 surface(Luma + Chroma) */ + obj_surface = vpp_gpe_ctx->surface_output_object; + assert(obj_surface); + gen8_gpe_media_rw_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN8(input_surface_sum), + SURFACE_STATE_OFFSET_GEN8(input_surface_sum)); + gen8_gpe_media_chroma_surface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + obj_surface, + BINDING_TABLE_OFFSET_GEN8(input_surface_sum + 1), + SURFACE_STATE_OFFSET_GEN8(input_surface_sum + 1)); + /* Bind kernel return buffer surface */ + gen7_gpe_buffer_suface_setup(ctx, + &vpp_gpe_ctx->gpe_ctx, + &vpp_gpe_ctx->vpp_kernel_return, + BINDING_TABLE_OFFSET_GEN8((input_surface_sum + 2)), + SURFACE_STATE_OFFSET_GEN8(input_surface_sum + 2)); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_interface_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct gen8_interface_descriptor_data *desc; + dri_bo *bo = vpp_gpe_ctx->gpe_ctx.dynamic_state.bo; + int i; + + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = (struct gen8_interface_descriptor_data *)(bo->virtual + + vpp_gpe_ctx->gpe_ctx.idrt_offset); + + /*Setup the descritor table*/ + for (i = 0; i < vpp_gpe_ctx->sub_shader_sum; i++){ + struct i965_kernel *kernel; + kernel = &vpp_gpe_ctx->gpe_ctx.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = kernel->kernel_offset >> 6; + desc->desc3.sampler_count = 0; /* FIXME: */ + desc->desc3.sampler_state_pointer = 0; + desc->desc4.binding_table_entry_count = 6; /* FIXME: */ + desc->desc4.binding_table_pointer = (BINDING_TABLE_OFFSET_GEN8(0) >> 5); + desc->desc5.constant_urb_entry_read_offset = 0; + desc->desc5.constant_urb_entry_read_length = 0; + + desc++; + } + + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_parameters_fill(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + unsigned int *command_ptr; + unsigned int i, size = vpp_gpe_ctx->thread_param_size; + unsigned char* position = NULL; + + /* Thread inline data setting*/ + dri_bo_map(vpp_gpe_ctx->vpp_batchbuffer.bo, 1); + command_ptr = vpp_gpe_ctx->vpp_batchbuffer.bo->virtual; + + for(i = 0; i < vpp_gpe_ctx->thread_num; i ++) + { + *command_ptr++ = (CMD_MEDIA_OBJECT | (size/sizeof(int) + 6 - 2)); + *command_ptr++ = vpp_gpe_ctx->sub_shader_index; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /* copy thread inline data */ + position =(unsigned char*)(vpp_gpe_ctx->thread_param + size * i); + memcpy(command_ptr, position, size); + command_ptr += size/sizeof(int); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vpp_gpe_ctx->vpp_batchbuffer.bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_pipeline_setup(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + intel_batchbuffer_start_atomic(vpp_gpe_ctx->batch, 0x1000); + intel_batchbuffer_emit_mi_flush(vpp_gpe_ctx->batch); + + gen8_gpe_pipeline_setup(ctx, &vpp_gpe_ctx->gpe_ctx, vpp_gpe_ctx->batch); + + gen8_gpe_process_parameters_fill(ctx, vpp_gpe_ctx); + + BEGIN_BATCH(vpp_gpe_ctx->batch, 3); + OUT_BATCH(vpp_gpe_ctx->batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(vpp_gpe_ctx->batch, + vpp_gpe_ctx->vpp_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(vpp_gpe_ctx->batch, 0); + + ADVANCE_BATCH(vpp_gpe_ctx->batch); + + intel_batchbuffer_end_atomic(vpp_gpe_ctx->batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_init(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + + unsigned int batch_buf_size = vpp_gpe_ctx->thread_num * + (vpp_gpe_ctx->thread_param_size + 6 * sizeof(int)) + 16; + + vpp_gpe_ctx->vpp_kernel_return.num_blocks = vpp_gpe_ctx->thread_num; + vpp_gpe_ctx->vpp_kernel_return.size_block = 16; + vpp_gpe_ctx->vpp_kernel_return.pitch = 1; + + unsigned int kernel_return_size = vpp_gpe_ctx->vpp_kernel_return.num_blocks + * vpp_gpe_ctx->vpp_kernel_return.size_block; + + dri_bo_unreference(vpp_gpe_ctx->vpp_batchbuffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vpp batch buffer", + batch_buf_size, 0x1000); + vpp_gpe_ctx->vpp_batchbuffer.bo = bo; + + dri_bo_unreference(vpp_gpe_ctx->vpp_kernel_return.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vpp kernel return buffer", + kernel_return_size, 0x1000); + vpp_gpe_ctx->vpp_kernel_return.bo = bo; + + vpp_gpe_ctx->gpe_context_init(ctx, &vpp_gpe_ctx->gpe_ctx); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_prepare(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + /*Setup all the memory object*/ + gen8_gpe_process_surfaces_setup(ctx, vpp_gpe_ctx); + gen8_gpe_process_interface_setup(ctx, vpp_gpe_ctx); + //gen8_gpe_process_constant_setup(ctx, vpp_gpe_ctx); + + /*Programing media pipeline*/ + gen8_gpe_process_pipeline_setup(ctx, vpp_gpe_ctx); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process_run(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + intel_batchbuffer_flush(vpp_gpe_ctx->batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_gpe_process(VADriverContextP ctx, + struct vpp_gpe_context * vpp_gpe_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + va_status = gen8_gpe_process_init(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = gen8_gpe_process_prepare(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = gen8_gpe_process_run(ctx, vpp_gpe_ctx); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +vpp_gpe_process(VADriverContextP ctx, + struct vpp_gpe_context * vpp_gpe_ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + if (IS_HASWELL(i965->intel.device_info)) + return gen75_gpe_process(ctx, vpp_gpe_ctx); + else if (IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) + return gen8_gpe_process(ctx, vpp_gpe_ctx); + + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +static VAStatus +vpp_gpe_process_sharpening(VADriverContextP ctx, + struct vpp_gpe_context * vpp_gpe_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *origin_in_obj_surface = vpp_gpe_ctx->surface_input_object[0]; + struct object_surface *origin_out_obj_surface = vpp_gpe_ctx->surface_output_object; + + VAProcPipelineParameterBuffer* pipe = vpp_gpe_ctx->pipeline_param; + VABufferID *filter_ids = (VABufferID*)pipe->filters ; + struct object_buffer *obj_buf = BUFFER((*(filter_ids + 0))); + + assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer); + + if (!obj_buf || + !obj_buf->buffer_store || + !obj_buf->buffer_store->buffer) + goto error; + + VAProcFilterParameterBuffer* filter = + (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer; + float sharpening_intensity = filter->value; + + ThreadParameterSharpening thr_param; + unsigned int thr_param_size = sizeof(ThreadParameterSharpening); + unsigned int i; + unsigned char * pos; + + if(vpp_gpe_ctx->is_first_frame){ + vpp_gpe_ctx->sub_shader_sum = 3; + struct i965_kernel * vpp_kernels; + if (IS_HASWELL(i965->intel.device_info)) + vpp_kernels = gen75_vpp_sharpening_kernels; + else if (IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) // TODO: build the sharpening kernel for GEN9 + vpp_kernels = gen8_vpp_sharpening_kernels; + else + return VA_STATUS_ERROR_UNIMPLEMENTED; + + vpp_gpe_ctx->gpe_load_kernels(ctx, + &vpp_gpe_ctx->gpe_ctx, + vpp_kernels, + vpp_gpe_ctx->sub_shader_sum); + } + + if(vpp_gpe_ctx->surface_tmp == VA_INVALID_ID){ + va_status = i965_CreateSurfaces(ctx, + vpp_gpe_ctx->in_frame_w, + vpp_gpe_ctx->in_frame_h, + VA_RT_FORMAT_YUV420, + 1, + &vpp_gpe_ctx->surface_tmp); + assert(va_status == VA_STATUS_SUCCESS); + + struct object_surface * obj_surf = SURFACE(vpp_gpe_ctx->surface_tmp); + assert(obj_surf); + + if (obj_surf) { + i965_check_alloc_surface_bo(ctx, obj_surf, 1, VA_FOURCC_NV12, + SUBSAMPLE_YUV420); + vpp_gpe_ctx->surface_tmp_object = obj_surf; + } + } + + assert(sharpening_intensity >= 0.0 && sharpening_intensity <= 1.0); + thr_param.l_amount = (unsigned int)(sharpening_intensity * 128); + thr_param.d_amount = (unsigned int)(sharpening_intensity * 128); + + thr_param.base.pic_width = vpp_gpe_ctx->in_frame_w; + thr_param.base.pic_height = vpp_gpe_ctx->in_frame_h; + + /* Step 1: horizontal blur process */ + vpp_gpe_ctx->forward_surf_sum = 0; + vpp_gpe_ctx->backward_surf_sum = 0; + + vpp_gpe_ctx->thread_num = vpp_gpe_ctx->in_frame_h/16; + vpp_gpe_ctx->thread_param_size = thr_param_size; + vpp_gpe_ctx->thread_param = (unsigned char*) malloc(vpp_gpe_ctx->thread_param_size + *vpp_gpe_ctx->thread_num); + pos = vpp_gpe_ctx->thread_param; + + if (!pos) { + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + for( i = 0 ; i < vpp_gpe_ctx->thread_num; i++){ + thr_param.base.v_pos = 16 * i; + thr_param.base.h_pos = 0; + memcpy(pos, &thr_param, thr_param_size); + pos += thr_param_size; + } + + vpp_gpe_ctx->sub_shader_index = 0; + va_status = vpp_gpe_process(ctx, vpp_gpe_ctx); + free(vpp_gpe_ctx->thread_param); + + /* Step 2: vertical blur process */ + vpp_gpe_ctx->surface_input_object[0] = vpp_gpe_ctx->surface_output_object; + vpp_gpe_ctx->surface_output_object = vpp_gpe_ctx->surface_tmp_object; + vpp_gpe_ctx->forward_surf_sum = 0; + vpp_gpe_ctx->backward_surf_sum = 0; + + vpp_gpe_ctx->thread_num = vpp_gpe_ctx->in_frame_w/16; + vpp_gpe_ctx->thread_param_size = thr_param_size; + vpp_gpe_ctx->thread_param = (unsigned char*) malloc(vpp_gpe_ctx->thread_param_size + *vpp_gpe_ctx->thread_num); + pos = vpp_gpe_ctx->thread_param; + + if (!pos) { + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + for( i = 0 ; i < vpp_gpe_ctx->thread_num; i++){ + thr_param.base.v_pos = 0; + thr_param.base.h_pos = 16 * i; + memcpy(pos, &thr_param, thr_param_size); + pos += thr_param_size; + } + + vpp_gpe_ctx->sub_shader_index = 1; + vpp_gpe_process(ctx, vpp_gpe_ctx); + free(vpp_gpe_ctx->thread_param); + + /* Step 3: apply the blur to original surface */ + vpp_gpe_ctx->surface_input_object[0] = origin_in_obj_surface; + vpp_gpe_ctx->surface_input_object[1] = vpp_gpe_ctx->surface_tmp_object; + vpp_gpe_ctx->surface_output_object = origin_out_obj_surface; + vpp_gpe_ctx->forward_surf_sum = 1; + vpp_gpe_ctx->backward_surf_sum = 0; + + vpp_gpe_ctx->thread_num = vpp_gpe_ctx->in_frame_h/4; + vpp_gpe_ctx->thread_param_size = thr_param_size; + vpp_gpe_ctx->thread_param = (unsigned char*) malloc(vpp_gpe_ctx->thread_param_size + *vpp_gpe_ctx->thread_num); + pos = vpp_gpe_ctx->thread_param; + + if (!pos) { + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + for( i = 0 ; i < vpp_gpe_ctx->thread_num; i++){ + thr_param.base.v_pos = 4 * i; + thr_param.base.h_pos = 0; + memcpy(pos, &thr_param, thr_param_size); + pos += thr_param_size; + } + + vpp_gpe_ctx->sub_shader_index = 2; + va_status = vpp_gpe_process(ctx, vpp_gpe_ctx); + free(vpp_gpe_ctx->thread_param); + + return va_status; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +VAStatus vpp_gpe_process_picture(VADriverContextP ctx, + struct vpp_gpe_context * vpp_gpe_ctx) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAProcPipelineParameterBuffer* pipe = vpp_gpe_ctx->pipeline_param; + VAProcFilterParameterBuffer* filter = NULL; + unsigned int i; + struct object_surface *obj_surface = NULL; + + if (pipe->num_filters && !pipe->filters) + goto error; + + for(i = 0; i < pipe->num_filters; i++){ + struct object_buffer *obj_buf = BUFFER(pipe->filters[i]); + + assert(obj_buf && obj_buf->buffer_store && obj_buf->buffer_store->buffer); + + if (!obj_buf || + !obj_buf->buffer_store || + !obj_buf->buffer_store->buffer) + goto error; + + filter = (VAProcFilterParameterBuffer*)obj_buf-> buffer_store->buffer; + if(filter->type == VAProcFilterSharpening){ + break; + } + } + + assert(pipe->num_forward_references + pipe->num_backward_references <= 4); + vpp_gpe_ctx->surface_input_object[0] = vpp_gpe_ctx->surface_pipeline_input_object; + + vpp_gpe_ctx->forward_surf_sum = 0; + vpp_gpe_ctx->backward_surf_sum = 0; + + for(i = 0; i < pipe->num_forward_references; i ++) + { + obj_surface = SURFACE(pipe->forward_references[i]); + + assert(obj_surface); + vpp_gpe_ctx->surface_input_object[i + 1] = obj_surface; + vpp_gpe_ctx->forward_surf_sum++; + } + + for(i = 0; i < pipe->num_backward_references; i ++) + { + obj_surface = SURFACE(pipe->backward_references[i]); + + assert(obj_surface); + vpp_gpe_ctx->surface_input_object[vpp_gpe_ctx->forward_surf_sum + 1 + i ] = obj_surface; + vpp_gpe_ctx->backward_surf_sum++; + } + + obj_surface = vpp_gpe_ctx->surface_input_object[0]; + vpp_gpe_ctx->in_frame_w = obj_surface->orig_width; + vpp_gpe_ctx->in_frame_h = obj_surface->orig_height; + + if(filter && filter->type == VAProcFilterSharpening) { + va_status = vpp_gpe_process_sharpening(ctx, vpp_gpe_ctx); + } else { + va_status = VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; + } + + vpp_gpe_ctx->is_first_frame = 0; + + return va_status; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +void +vpp_gpe_context_destroy(VADriverContextP ctx, + struct vpp_gpe_context *vpp_gpe_ctx) +{ + dri_bo_unreference(vpp_gpe_ctx->vpp_batchbuffer.bo); + vpp_gpe_ctx->vpp_batchbuffer.bo = NULL; + + dri_bo_unreference(vpp_gpe_ctx->vpp_kernel_return.bo); + vpp_gpe_ctx->vpp_kernel_return.bo = NULL; + + vpp_gpe_ctx->gpe_context_destroy(&vpp_gpe_ctx->gpe_ctx); + + if(vpp_gpe_ctx->surface_tmp != VA_INVALID_ID){ + assert(vpp_gpe_ctx->surface_tmp_object != NULL); + i965_DestroySurfaces(ctx, &vpp_gpe_ctx->surface_tmp, 1); + vpp_gpe_ctx->surface_tmp = VA_INVALID_ID; + vpp_gpe_ctx->surface_tmp_object = NULL; + } + + if (vpp_gpe_ctx->batch) + intel_batchbuffer_free(vpp_gpe_ctx->batch); + + free(vpp_gpe_ctx); +} + +struct vpp_gpe_context * +vpp_gpe_context_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct vpp_gpe_context *vpp_gpe_ctx = calloc(1, sizeof(struct vpp_gpe_context)); + assert(vpp_gpe_ctx); + struct i965_gpe_context *gpe_ctx = &(vpp_gpe_ctx->gpe_ctx); + + assert(IS_HASWELL(i965->intel.device_info) || + IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)); + + vpp_gpe_ctx->surface_tmp = VA_INVALID_ID; + vpp_gpe_ctx->surface_tmp_object = NULL; + vpp_gpe_ctx->batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_RENDER, 0); + vpp_gpe_ctx->is_first_frame = 1; + + gpe_ctx->vfe_state.max_num_threads = 60 - 1; + gpe_ctx->vfe_state.num_urb_entries = 16; + gpe_ctx->vfe_state.gpgpu_mode = 0; + gpe_ctx->vfe_state.urb_entry_size = 59 - 1; + gpe_ctx->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + if (IS_HASWELL(i965->intel.device_info)) { + vpp_gpe_ctx->gpe_context_init = i965_gpe_context_init; + vpp_gpe_ctx->gpe_context_destroy = i965_gpe_context_destroy; + vpp_gpe_ctx->gpe_load_kernels = i965_gpe_load_kernels; + gpe_ctx->surface_state_binding_table.length = + (SURFACE_STATE_PADDED_SIZE_GEN7 + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH; + gpe_ctx->idrt.max_entries = MAX_INTERFACE_DESC_GEN6; + gpe_ctx->idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + } else if (IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + vpp_gpe_ctx->gpe_context_init = gen8_gpe_context_init; + vpp_gpe_ctx->gpe_context_destroy = gen8_gpe_context_destroy; + vpp_gpe_ctx->gpe_load_kernels = gen8_gpe_load_kernels; + gpe_ctx->surface_state_binding_table.length = + (SURFACE_STATE_PADDED_SIZE_GEN8 + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + gpe_ctx->curbe_size = CURBE_TOTAL_DATA_LENGTH; + gpe_ctx->idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6; + + } + + return vpp_gpe_ctx; +} + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.h new file mode 100644 index 000000000..5ffee2cf8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_gpe.h @@ -0,0 +1,121 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + * + */ + +#ifndef GEN75_VPP_GPE +#define GEN75_VPP_GPE + +#include +#include +#include +#include +#include "i965_gpe_utils.h" + +#define MAX_SURF_IN_SUM 5 + +enum VPP_GPE_TYPE{ + VPP_GPE_SHARPENING, + VPP_GPE_BLENDING, + VPP_GPE_SCENE_CHANGE_DETECTION, + VPP_GPE_FILTER_SUM, +}; + +typedef struct _KernelParameterBase{ + unsigned short pic_width; + unsigned short pic_height; +}KernelParameterBase; + +typedef struct _KernelParameterSharpening{ + KernelParameterBase base; +}KernelParameterSharpening; + +typedef struct _ThreadParameterBase{ + unsigned int pic_width; + unsigned int pic_height; + unsigned int v_pos; + unsigned int h_pos; +}ThreadParameterBase; + +typedef struct _ThreadParameterSharpenig{ + ThreadParameterBase base; + unsigned int l_amount; + unsigned int d_amount; +}ThreadParameterSharpening; + +struct vpp_gpe_context{ + struct intel_batchbuffer *batch; + struct i965_gpe_context gpe_ctx; + struct i965_buffer_surface vpp_batchbuffer; + struct i965_buffer_surface vpp_kernel_return; + + VAProcPipelineParameterBuffer *pipeline_param; + enum VPP_GPE_TYPE filter_type; + unsigned int sub_shader_index; + unsigned int sub_shader_sum; + + unsigned char * kernel_param; + unsigned int kernel_param_size; + + unsigned char * thread_param; + unsigned int thread_param_size; + unsigned int thread_num; + + struct object_surface *surface_pipeline_input_object; + struct object_surface *surface_output_object; + VASurfaceID surface_tmp; + struct object_surface *surface_tmp_object; + struct object_surface *surface_input_object[MAX_SURF_IN_SUM]; + unsigned int forward_surf_sum; + unsigned int backward_surf_sum; + + unsigned int in_frame_w; + unsigned int in_frame_h; + unsigned int is_first_frame; + + void (*gpe_context_init)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context); + + void (*gpe_context_destroy)(struct i965_gpe_context *gpe_context); + + void (*gpe_load_kernels)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_kernel *kernel_list, + unsigned int num_kernels); + +}; + +struct vpp_gpe_context * +vpp_gpe_context_init(VADriverContextP ctx); + +void +vpp_gpe_context_destroy(VADriverContextP ctx, + struct vpp_gpe_context* vpp_context); + +VAStatus +vpp_gpe_process_picture(VADriverContextP ctx, + struct vpp_gpe_context * vpp_context); +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.c new file mode 100644 index 000000000..06c27f877 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.c @@ -0,0 +1,2403 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + * Li Zhong + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "gen75_vpp_vebox.h" +#include "intel_media.h" + +#define PI 3.1415926 + +extern VAStatus +i965_MapBuffer(VADriverContextP ctx, VABufferID buf_id, void **); + +extern VAStatus +i965_UnmapBuffer(VADriverContextP ctx, VABufferID buf_id); + +extern VAStatus +i965_DeriveImage(VADriverContextP ctx, VABufferID surface, VAImage *out_image); + +extern VAStatus +i965_DestroyImage(VADriverContextP ctx, VAImageID image); + +VAStatus +vpp_surface_convert(VADriverContextP ctx, struct object_surface *src_obj_surf, + struct object_surface *dst_obj_surf) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + assert(src_obj_surf->orig_width == dst_obj_surf->orig_width); + assert(src_obj_surf->orig_height == dst_obj_surf->orig_height); + + VARectangle src_rect, dst_rect; + src_rect.x = dst_rect.x = 0; + src_rect.y = dst_rect.y = 0; + src_rect.width = dst_rect.width = src_obj_surf->orig_width; + src_rect.height = dst_rect.height = dst_obj_surf->orig_height; + + struct i965_surface src_surface, dst_surface; + src_surface.base = (struct object_base *)src_obj_surf; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + dst_surface.base = (struct object_base *)dst_obj_surf; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + va_status = i965_image_processing(ctx, + &src_surface, + &src_rect, + &dst_surface, + &dst_rect); + return va_status; +} + +static VAStatus +vpp_surface_scaling(VADriverContextP ctx, struct object_surface *src_obj_surf, + struct object_surface *dst_obj_surf, uint32_t flags) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + assert(src_obj_surf->fourcc == VA_FOURCC_NV12); + assert(dst_obj_surf->fourcc == VA_FOURCC_NV12); + + VARectangle src_rect, dst_rect; + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = src_obj_surf->orig_width; + src_rect.height = src_obj_surf->orig_height; + + dst_rect.x = 0; + dst_rect.y = 0; + dst_rect.width = dst_obj_surf->orig_width; + dst_rect.height = dst_obj_surf->orig_height; + + va_status = i965_scaling_processing(ctx, + src_obj_surf, + &src_rect, + dst_obj_surf, + &dst_rect, + flags); + + return va_status; +} + +void hsw_veb_dndi_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + unsigned int* p_table ; + unsigned int progressive_dn = 1; + unsigned int dndi_top_first = 0; + unsigned int is_mcdi_enabled = 0; + + if (proc_ctx->is_di_enabled) { + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + proc_ctx->filter_di; + + progressive_dn = 0; + + /* If we are in "First Frame" mode, i.e. past frames are not + available for motion measure, then don't use the TFF flag */ + dndi_top_first = !(deint_params->flags & (proc_ctx->is_first_frame ? + VA_DEINTERLACING_BOTTOM_FIELD : + VA_DEINTERLACING_BOTTOM_FIELD_FIRST)); + + is_mcdi_enabled = + (deint_params->algorithm == VAProcDeinterlacingMotionCompensated); + } + + /* + VAProcFilterParameterBufferDeinterlacing *di_param = + (VAProcFilterParameterBufferDeinterlacing *) proc_ctx->filter_di; + + VAProcFilterParameterBuffer * dn_param = + (VAProcFilterParameterBuffer *) proc_ctx->filter_dn; + */ + p_table = (unsigned int *)proc_ctx->dndi_state_table.ptr; + + if (IS_HASWELL(i965->intel.device_info)) + *p_table ++ = 0; // reserved . w0 + + *p_table ++ = ( 140 << 24 | // denoise STAD threshold . w1 + 192 << 16 | // dnmh_history_max + 0 << 12 | // reserved + 7 << 8 | // dnmh_delta[3:0] + 38 ); // denoise ASD threshold + + *p_table ++ = ( 0 << 30 | // reserved . w2 + 0 << 24 | // temporal diff th + 0 << 22 | // reserved. + 0 << 16 | // low temporal diff th + 2 << 13 | // STMM C2 + 1 << 8 | // denoise moving pixel th + 38 ); // denoise th for sum of complexity measure + + *p_table ++ = ( 0 << 30 | // reserved . w3 + 12<< 24 | // good neighbor th[5:0] + 9 << 20 | // CAT slope minus 1 + 5 << 16 | // SAD Tight in + 0 << 14 | // smooth mv th + 0 << 12 | // reserved + 1 << 8 | // bne_edge_th[3:0] + 20 ); // block noise estimate noise th + + *p_table ++ = ( 0 << 31 | // STMM blending constant select. w4 + 64 << 24 | // STMM trc1 + 125<< 16 | // STMM trc2 + 0 << 14 | // reserved + 30 << 8 | // VECM_mul + 150 ); // maximum STMM + + *p_table ++ = ( 118<< 24 | // minumum STMM . W5 + 0 << 22 | // STMM shift down + 1 << 20 | // STMM shift up + 5 << 16 | // STMM output shift + 100 << 8 | // SDI threshold + 5 ); // SDI delta + + *p_table ++ = ( 50 << 24 | // SDI fallback mode 1 T1 constant . W6 + 100 << 16 | // SDI fallback mode 1 T2 constant + 37 << 8 | // SDI fallback mode 2 constant(angle2x1) + 175 ); // FMD temporal difference threshold + + *p_table ++ = ( 16 << 24 | // FMD #1 vertical difference th . w7 + 100<< 16 | // FMD #2 vertical difference th + 0 << 14 | // CAT th1 + 2 << 8 | // FMD tear threshold + is_mcdi_enabled << 7 | // MCDI Enable, use motion compensated deinterlace algorithm + progressive_dn << 6 | // progressive DN + 0 << 4 | // reserved + dndi_top_first << 3 | // DN/DI Top First + 0 ); // reserved + + *p_table ++ = ( 0 << 29 | // reserved . W8 + 32 << 23 | // dnmh_history_init[5:0] + 10 << 19 | // neighborPixel th + 0 << 18 | // reserved + 0 << 16 | // FMD for 2nd field of previous frame + 25 << 10 | // MC pixel consistency th + 0 << 8 | // FMD for 1st field for current frame + 10 << 4 | // SAD THB + 5 ); // SAD THA + + *p_table ++ = ( 0 << 24 | // reserved + 140<< 16 | // chr_dnmh_stad_th + 0 << 13 | // reserved + 1 << 12 | // chrome denoise enable + 13 << 6 | // chr temp diff th + 7 ); // chr temp diff low + + if (IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) + *p_table ++ = 0; // parameters for hot pixel, +} + +//Set default values for STDE +void set_std_table_default(struct intel_vebox_context *proc_ctx, unsigned int *p_table) { + + //DWord 15 + *p_table ++ = ( 0 << 31 | // Reserved + 0x3F8 << 21 | // SATB1 (10 bits, default 8, optimized value -8) + 31 << 14 | // SATP3 + 6 << 7 | // SATP2 + 0x7A ); // SATP1 (7 bits, default 6, optimized value -6) + + //DWord 16 + *p_table ++ = ( 0 << 31 | // Reserved + 297 << 20 | // SATS0 + 124 << 10 | // SATB3 + 8 ); // SATB2 + + //DWord 17 + *p_table ++ = ( 0 << 22 | // Reserved + 297 << 11 | // SATS2 + 85 ); // SATS1 + + //DWord 18 + *p_table ++ = ( 14 << 25 | // HUEP3 + 6 << 18 | // HUEP2 + 0x7A << 11 | // HUEP1 (7 bits, default value -6 = 7Ah) + 256 ); // SATS3 + + //DWord 19 + *p_table ++ = ( 0 << 30 | // Reserved + 256 << 20 | // HUEB3 + 8 << 10 | // HUEB2 + 0x3F8 ); // HUEB1 (10 bits, default value 8, optimized value -8) + + //DWord 20 + *p_table ++ = ( 0 << 22 | // Reserved + 85 << 11 | // HUES1 + 384 ); // HUES0 + + //DWord 21 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3 + 384 ); // HUES2 + + //DWord 22 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1_DARK + 31 << 14 | // SATP3_DARK + 31 << 7 | // SATP2_DARK + 0x7B ); // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value -5) + + //DWord 23 + *p_table ++ = ( 0 << 31 | // Reserved + 305 << 20 | // SATS0_DARK + 124 << 10 | // SATB3_DARK + 124 ); // SATB2_DARK + + //DWord 24 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2_DARK + 220 ); // SATS1_DARK + + //DWord 25 + *p_table ++ = ( 14 << 25 | // HUEP3_DARK + 14 << 18 | // HUEP2_DARK + 14 << 11 | // HUEP1_DARK + 256 ); // SATS3_DARK + + //DWord 26 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3_DARK + 56 << 10 | // HUEB2_DARK + 56 ); // HUEB1_DARK + + //DWord 27 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1_DARK + 256 ); // HUES0_DARK + + //DWord 28 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3_DARK + 256 ); // HUES2_DARK +} + +//Set values for STDE factor 3 +void set_std_table_3(struct intel_vebox_context *proc_ctx, unsigned int *p_table) { + + //DWord 15 + *p_table ++ = ( 0 << 31 | // Reserved + 1016 << 21 | // SATB1 (10 bits, default 8, optimized value 1016) + 31 << 14 | // SATP3 + 6 << 7 | // SATP2 + 122 ); // SATP1 (7 bits, default 6, optimized value 122) + + //DWord 16 + *p_table ++ = ( 0 << 31 | // Reserved + 297 << 20 | // SATS0 + 124 << 10 | // SATB3 + 8 ); // SATB2 + + //DWord 17 + *p_table ++ = ( 0 << 22 | // Reserved + 297 << 11 | // SATS2 + 85 ); // SATS1 + + //DWord 18 + *p_table ++ = ( 14 << 25 | // HUEP3 + 6 << 18 | // HUEP2 + 122 << 11 | // HUEP1 (7 bits, default value -6 = 7Ah, optimized 122) + 256 ); // SATS3 + + //DWord 19 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3 (default 256, optimized 56) + 8 << 10 | // HUEB2 + 1016 ); // HUEB1 (10 bits, default value 8, optimized value 1016) + + //DWord 20 + *p_table ++ = ( 0 << 22 | // Reserved + 85 << 11 | // HUES1 + 384 ); // HUES0 + + //DWord 21 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3 + 384 ); // HUES2 + + //DWord 22 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1_DARK + 31 << 14 | // SATP3_DARK + 31 << 7 | // SATP2_DARK + 123 ); // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123) + + //DWord 23 + *p_table ++ = ( 0 << 31 | // Reserved + 305 << 20 | // SATS0_DARK + 124 << 10 | // SATB3_DARK + 124 ); // SATB2_DARK + + //DWord 24 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2_DARK + 220 ); // SATS1_DARK + + //DWord 25 + *p_table ++ = ( 14 << 25 | // HUEP3_DARK + 14 << 18 | // HUEP2_DARK + 14 << 11 | // HUEP1_DARK + 256 ); // SATS3_DARK + + //DWord 26 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3_DARK + 56 << 10 | // HUEB2_DARK + 56 ); // HUEB1_DARK + + //DWord 27 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1_DARK + 256 ); // HUES0_DARK + + //DWord 28 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3_DARK + 256 ); // HUES2_DARK +} + +//Set values for STDE factor 6 +void set_std_table_6(struct intel_vebox_context *proc_ctx, unsigned int *p_table) { + + //DWord 15 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1 (10 bits, default 8, optimized value 0) + 31 << 14 | // SATP3 + 31 << 7 | // SATP2 (default 6, optimized 31) + 114 ); // SATP1 (7 bits, default 6, optimized value 114) + + //DWord 16 + *p_table ++ = ( 0 << 31 | // Reserved + 467 << 20 | // SATS0 (default 297, optimized 467) + 124 << 10 | // SATB3 + 124 ); // SATB2 + + //DWord 17 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2 (default 297, optimized 256) + 176 ); // SATS1 + + //DWord 18 + *p_table ++ = ( 14 << 25 | // HUEP3 + 14 << 18 | // HUEP2 + 14 << 11 | // HUEP1 (7 bits, default value -6 = 7Ah, optimized value 14) + 256 ); // SATS3 + + //DWord 19 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3 + 56 << 10 | // HUEB2 + 56 ); // HUEB1 (10 bits, default value 8, optimized value 56) + + //DWord 20 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1 + 256 ); // HUES0 + + //DWord 21 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3 + 256 ); // HUES2 + + //DWord 22 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1_DARK + 31 << 14 | // SATP3_DARK + 31 << 7 | // SATP2_DARK + 123 ); // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123) + + //DWord 23 + *p_table ++ = ( 0 << 31 | // Reserved + 305 << 20 | // SATS0_DARK + 124 << 10 | // SATB3_DARK + 124 ); // SATB2_DARK + + //DWord 24 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2_DARK + 220 ); // SATS1_DARK + + //DWord 25 + *p_table ++ = ( 14 << 25 | // HUEP3_DARK + 14 << 18 | // HUEP2_DARK + 14 << 11 | // HUEP1_DARK + 256 ); // SATS3_DARK + + //DWord 26 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3_DARK + 56 << 10 | // HUEB2_DARK + 56 ); // HUEB1_DARK + + //DWord 27 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1_DARK + 256 ); // HUES0_DARK + + //DWord 28 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3_DARK + 256 ); // HUES2_DARK +} + +//Set values for STDE factor 9 +void set_std_table_9(struct intel_vebox_context *proc_ctx, unsigned int *p_table) { + + //DWord 15 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1 (10 bits, default 8, optimized value 0) + 31 << 14 | // SATP3 + 31 << 7 | // SATP2 (default 6, optimized 31) + 108 ); // SATP1 (7 bits, default 6, optimized value 108) + + //DWord 16 + *p_table ++ = ( 0 << 31 | // Reserved + 721 << 20 | // SATS0 (default 297, optimized 721) + 124 << 10 | // SATB3 + 124 ); // SATB2 + + //DWord 17 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2 (default 297, optimized 256) + 156 ); // SATS1 (default 176, optimized 156) + + //DWord 18 + *p_table ++ = ( 14 << 25 | // HUEP3 + 14 << 18 | // HUEP2 + 14 << 11 | // HUEP1 (7 bits, default value -6 = 7Ah, optimized value 14) + 256 ); // SATS3 + + //DWord 19 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3 + 56 << 10 | // HUEB2 + 56 ); // HUEB1 (10 bits, default value 8, optimized value 56) + + //DWord 20 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1 + 256 ); // HUES0 + + //DWord 21 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3 + 256 ); // HUES2 + + //DWord 22 + *p_table ++ = ( 0 << 31 | // Reserved + 0 << 21 | // SATB1_DARK + 31 << 14 | // SATP3_DARK + 31 << 7 | // SATP2_DARK + 123 ); // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123) + + //DWord 23 + *p_table ++ = ( 0 << 31 | // Reserved + 305 << 20 | // SATS0_DARK + 124 << 10 | // SATB3_DARK + 124 ); // SATB2_DARK + + //DWord 24 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // SATS2_DARK + 220 ); // SATS1_DARK + + //DWord 25 + *p_table ++ = ( 14 << 25 | // HUEP3_DARK + 14 << 18 | // HUEP2_DARK + 14 << 11 | // HUEP1_DARK + 256 ); // SATS3_DARK + + //DWord 26 + *p_table ++ = ( 0 << 30 | // Reserved + 56 << 20 | // HUEB3_DARK + 56 << 10 | // HUEB2_DARK + 56 ); // HUEB1_DARK + + //DWord 27 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES1_DARK + 256 ); // HUES0_DARK + + //DWord 28 + *p_table ++ = ( 0 << 22 | // Reserved + 256 << 11 | // HUES3_DARK + 256 ); // HUES2_DARK +} + + +void hsw_veb_iecp_std_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = proc_ctx->iecp_state_table.ptr + 0 ; + + if(!(proc_ctx->filters_mask & VPP_IECP_STD_STE)){ + memset(p_table, 0, 29 * 4); + }else{ + int stde_factor = 0; //default value + VAProcFilterParameterBuffer * std_param = (VAProcFilterParameterBuffer *) proc_ctx->filter_iecp_std; + stde_factor = std_param->value; + + //DWord 0 + *p_table ++ = ( 154 << 24 | // V_Mid + 110 << 16 | // U_Mid + 14 << 10 | // Hue_Max + 31 << 4 | // Sat_Max + 0 << 3 | // Reserved + 0 << 2 | // Output Control is set to output the 1=STD score /0=Output Pixels + 1 << 1 | // Set STE Enable + 1 ); // Set STD Enable + + //DWord 1 + *p_table ++ = ( 0 << 31 | // Reserved + 4 << 28 | // Diamond Margin + 0 << 21 | // Diamond_du + 3 << 18 | // HS_Margin + 79 << 10 | // Cos(alpha) + 0 << 8 | // Reserved + 101 ); // Sin(alpha) + + //DWord 2 + *p_table ++ = ( 0 << 21 | // Reserved + 100 << 13 | // Diamond_alpha + 35 << 7 | // Diamond_Th + 0 ); + + //DWord 3 + *p_table ++ = ( 254 << 24 | // Y_point_3 + 47 << 16 | // Y_point_2 + 46 << 8 | // Y_point_1 + 1 << 7 | // VY_STD_Enable + 0 ); // Reserved + + //DWord 4 + *p_table ++ = ( 0 << 18 | // Reserved + 31 << 13 | // Y_slope_2 + 31 << 8 | // Y_slope_1 + 255 ); // Y_point_4 + + //DWord 5 + *p_table ++ = ( 400 << 16 | // INV_Skin_types_margin = 20* Skin_Type_margin => 20*20 + 3300 ); // INV_Margin_VYL => 1/Margin_VYL + + //DWord 6 + *p_table ++ = ( 216 << 24 | // P1L + 46 << 16 | // P0L + 1600 ); // INV_Margin_VYU + + //DWord 7 + *p_table ++ = ( 130 << 24 | // B1L + 133 << 16 | // B0L + 236 << 8 | // P3L + 236 ); // P2L + + //DWord 8 + *p_table ++ = ( 0 << 27 | // Reserved + 0x7FB << 16 | // S0L (11 bits, Default value: -5 = FBh, pad it with 1s to make it 11bits) + 130 << 8 | // B3L + 130 ); + + //DWord 9 + *p_table ++ = ( 0 << 22 | // Reserved + 0 << 11 | // S2L + 0); // S1L + + //DWord 10 + *p_table ++ = ( 0 << 27 | // Reserved + 66 << 19 | // P1U + 46 << 11 | // P0U + 0 ); // S3 + + //DWord 11 + *p_table ++ = ( 163 << 24 | // B1U + 143 << 16 | // B0U + 236 << 8 | // P3U + 150 ); // P2U + + //DWord 12 + *p_table ++ = ( 0 << 27 | // Reserved + 256 << 16 | // S0U + 200 << 8 | // B3U + 200 ); // B2U + + //DWord 13 + *p_table ++ = ( 0 << 22 | // Reserved + 0x74D << 11 | // S2U (11 bits, Default value -179 = F4Dh) + 113 ); // S1U + + //DWoord 14 + *p_table ++ = ( 0 << 28 | // Reserved + 20 << 20 | // Skin_types_margin + 120 << 12 | // Skin_types_thresh + 1 << 11 | // Skin_Types_Enable + 0 ); // S3U + + //Set DWord 15 through DWord 28 in their respective methods. + switch(stde_factor) { + case 3: + set_std_table_3(proc_ctx, p_table); + break; + + case 6: + set_std_table_6(proc_ctx, p_table); + break; + + case 9: + set_std_table_9(proc_ctx, p_table); + break; + + default: + set_std_table_default(proc_ctx, p_table); + break; + } + }//end of else +} + +void hsw_veb_iecp_ace_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 116); + + if(!(proc_ctx->filters_mask & VPP_IECP_ACE)){ + memset(p_table, 0, 13 * 4); + }else{ + *p_table ++ = 0x00000068; + *p_table ++ = 0x4c382410; + *p_table ++ = 0x9c887460; + *p_table ++ = 0xebd8c4b0; + *p_table ++ = 0x604c3824; + + *p_table ++ = 0xb09c8874; + *p_table ++ = 0x0000d8c4; + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + } +} + +void hsw_veb_iecp_tcc_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 168); +// VAProcFilterParameterBuffer * tcc_param = +// (VAProcFilterParameterBuffer *) proc_ctx->filter_iecp_tcc; + + if(!(proc_ctx->filters_mask & VPP_IECP_TCC)){ + memset(p_table, 0, 11 * 4); + }else{ + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + *p_table ++ = 0x1e34cc91; + *p_table ++ = 0x3e3cce91; + *p_table ++ = 0x02e80195; + + *p_table ++ = 0x0197046b; + *p_table ++ = 0x01790174; + *p_table ++ = 0x00000000; + *p_table ++ = 0x00000000; + *p_table ++ = 0x03030000; + + *p_table ++ = 0x009201c0; + } +} + +void hsw_veb_iecp_pro_amp_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int contrast = 0x80; //default + int brightness = 0x00; //default + int cos_c_s = 256 ; //default + int sin_c_s = 0; //default + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 212); + + if(!(proc_ctx->filters_mask & VPP_IECP_PRO_AMP)){ + memset(p_table, 0, 2 * 4); + }else { + float src_saturation = 1.0; + float src_hue = 0.0; + float src_contrast = 1.0; + float src_brightness = 0.0; + float tmp_value = 0.0; + unsigned int i = 0; + + VAProcFilterParameterBufferColorBalance * amp_params = + (VAProcFilterParameterBufferColorBalance *) proc_ctx->filter_iecp_amp; + + for (i = 0; i < proc_ctx->filter_iecp_amp_num_elements; i++){ + VAProcColorBalanceType attrib = amp_params[i].attrib; + + if(attrib == VAProcColorBalanceHue) { + src_hue = amp_params[i].value; //(-180.0, 180.0) + }else if(attrib == VAProcColorBalanceSaturation) { + src_saturation = amp_params[i].value; //(0.0, 10.0) + }else if(attrib == VAProcColorBalanceBrightness) { + src_brightness = amp_params[i].value; // (-100.0, 100.0) + brightness = intel_format_convert(src_brightness, 7, 4, 1); + }else if(attrib == VAProcColorBalanceContrast) { + src_contrast = amp_params[i].value; // (0.0, 10.0) + contrast = intel_format_convert(src_contrast, 4, 7, 0); + } + } + + tmp_value = cos(src_hue/180*PI) * src_contrast * src_saturation; + cos_c_s = intel_format_convert(tmp_value, 7, 8, 1); + + tmp_value = sin(src_hue/180*PI) * src_contrast * src_saturation; + sin_c_s = intel_format_convert(tmp_value, 7, 8, 1); + + *p_table ++ = ( 0 << 28 | //reserved + contrast << 17 | //contrast value (U4.7 format) + 0 << 13 | //reserved + brightness << 1| // S7.4 format + 1); + + *p_table ++ = ( cos_c_s << 16 | // cos(h) * contrast * saturation + sin_c_s); // sin(h) * contrast * saturation + + } +} + + +void hsw_veb_iecp_csc_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 220); + float tran_coef[9] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0}; + float v_coef[3] = {0.0, 0.0, 0.0}; + float u_coef[3] = {0.0, 0.0, 0.0}; + int is_transform_enabled = 0; + + if(!(proc_ctx->filters_mask & VPP_IECP_CSC)){ + memset(p_table, 0, 8 * 4); + return; + } + + if(proc_ctx->fourcc_input == VA_FOURCC_RGBA && + (proc_ctx->fourcc_output == VA_FOURCC_NV12 || + proc_ctx->fourcc_output == VA_FOURCC_YV12 || + proc_ctx->fourcc_output == VA_FOURCC_YVY2 || + proc_ctx->fourcc_output == VA_FOURCC_AYUV)) { + + tran_coef[0] = 0.257; + tran_coef[1] = 0.504; + tran_coef[2] = 0.098; + tran_coef[3] = -0.148; + tran_coef[4] = -0.291; + tran_coef[5] = 0.439; + tran_coef[6] = 0.439; + tran_coef[7] = -0.368; + tran_coef[8] = -0.071; + + u_coef[0] = 16 * 4; + u_coef[1] = 128 * 4; + u_coef[2] = 128 * 4; + + is_transform_enabled = 1; + }else if((proc_ctx->fourcc_input == VA_FOURCC_NV12 || + proc_ctx->fourcc_input == VA_FOURCC_YV12 || + proc_ctx->fourcc_input == VA_FOURCC_YUY2 || + proc_ctx->fourcc_input == VA_FOURCC_AYUV) && + proc_ctx->fourcc_output == VA_FOURCC_RGBA) { + tran_coef[0] = 1.164; + tran_coef[1] = 0.000; + tran_coef[2] = 1.569; + tran_coef[3] = 1.164; + tran_coef[4] = -0.813; + tran_coef[5] = -0.392; + tran_coef[6] = 1.164; + tran_coef[7] = 2.017; + tran_coef[8] = 0.000; + + v_coef[0] = -16 * 4; + v_coef[1] = -128 * 4; + v_coef[2] = -128 * 4; + + is_transform_enabled = 1; + }else if(proc_ctx->fourcc_input != proc_ctx->fourcc_output){ + //enable when input and output format are different. + is_transform_enabled = 1; + } + + if(is_transform_enabled == 0){ + memset(p_table, 0, 8 * 4); + }else{ + *p_table ++ = ( 0 << 29 | //reserved + intel_format_convert(tran_coef[1], 2, 10, 1) << 16 | //c1, s2.10 format + intel_format_convert(tran_coef[0], 2, 10, 1) << 3 | //c0, s2.10 format + 0 << 2 | //reserved + 0 << 1 | // yuv_channel swap + is_transform_enabled); + + *p_table ++ = ( 0 << 26 | //reserved + intel_format_convert(tran_coef[3], 2, 10, 1) << 13 | + intel_format_convert(tran_coef[2], 2, 10, 1)); + + *p_table ++ = ( 0 << 26 | //reserved + intel_format_convert(tran_coef[5], 2, 10, 1) << 13 | + intel_format_convert(tran_coef[4], 2, 10, 1)); + + *p_table ++ = ( 0 << 26 | //reserved + intel_format_convert(tran_coef[7], 2, 10, 1) << 13 | + intel_format_convert(tran_coef[6], 2, 10, 1)); + + *p_table ++ = ( 0 << 13 | //reserved + intel_format_convert(tran_coef[8], 2, 10, 1)); + + *p_table ++ = ( 0 << 22 | //reserved + intel_format_convert(u_coef[0], 10, 0, 1) << 11 | + intel_format_convert(v_coef[0], 10, 0, 1)); + + *p_table ++ = ( 0 << 22 | //reserved + intel_format_convert(u_coef[1], 10, 0, 1) << 11 | + intel_format_convert(v_coef[1], 10, 0, 1)); + + *p_table ++ = ( 0 << 22 | //reserved + intel_format_convert(u_coef[2], 10, 0, 1) << 11 | + intel_format_convert(v_coef[2], 10, 0, 1)); + } +} + +void hsw_veb_iecp_aoi_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 252); + // VAProcFilterParameterBuffer * tcc_param = + // (VAProcFilterParameterBuffer *) proc_ctx->filter_iecp_tcc; + + if(!(proc_ctx->filters_mask & VPP_IECP_AOI)){ + memset(p_table, 0, 3 * 4); + }else{ + *p_table ++ = 0x00000000; + *p_table ++ = 0x00030000; + *p_table ++ = 0x00030000; + } +} + +void hsw_veb_state_table_setup(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + if(proc_ctx->filters_mask & VPP_DNDI_MASK) { + dri_bo *dndi_bo = proc_ctx->dndi_state_table.bo; + dri_bo_map(dndi_bo, 1); + proc_ctx->dndi_state_table.ptr = dndi_bo->virtual; + + hsw_veb_dndi_table(ctx, proc_ctx); + + dri_bo_unmap(dndi_bo); + } + + if(proc_ctx->filters_mask & VPP_IECP_MASK) { + dri_bo *iecp_bo = proc_ctx->iecp_state_table.bo; + dri_bo_map(iecp_bo, 1); + proc_ctx->iecp_state_table.ptr = iecp_bo->virtual; + + hsw_veb_iecp_std_table(ctx, proc_ctx); + hsw_veb_iecp_ace_table(ctx, proc_ctx); + hsw_veb_iecp_tcc_table(ctx, proc_ctx); + hsw_veb_iecp_pro_amp_table(ctx, proc_ctx); + hsw_veb_iecp_csc_table(ctx, proc_ctx); + hsw_veb_iecp_aoi_table(ctx, proc_ctx); + + dri_bo_unmap(iecp_bo); + } +} + +void hsw_veb_state_command(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + + BEGIN_VEB_BATCH(batch, 6); + OUT_VEB_BATCH(batch, VEB_STATE | (6 - 2)); + OUT_VEB_BATCH(batch, + 0 << 26 | // state surface control bits + 0 << 11 | // reserved. + 0 << 10 | // pipe sync disable + proc_ctx->current_output_type << 8 | // DI output frame + 1 << 7 | // 444->422 downsample method + 1 << 6 | // 422->420 downsample method + proc_ctx->is_first_frame << 5 | // DN/DI first frame + proc_ctx->is_di_enabled << 4 | // DI enable + proc_ctx->is_dn_enabled << 3 | // DN enable + proc_ctx->is_iecp_enabled << 2 | // global IECP enabled + 0 << 1 | // ColorGamutCompressionEnable + 0 ) ; // ColorGamutExpansionEnable. + + OUT_RELOC(batch, + proc_ctx->dndi_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_RELOC(batch, + proc_ctx->iecp_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_RELOC(batch, + proc_ctx->gamut_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_RELOC(batch, + proc_ctx->vertex_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + ADVANCE_VEB_BATCH(batch); +} + +void hsw_veb_surface_state(VADriverContextP ctx, struct intel_vebox_context *proc_ctx, unsigned int is_output) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + unsigned int u_offset_y = 0, v_offset_y = 0; + unsigned int is_uv_interleaved = 0, tiling = 0, swizzle = 0; + unsigned int surface_format = PLANAR_420_8; + struct object_surface* obj_surf = NULL; + unsigned int surface_pitch = 0; + unsigned int half_pitch_chroma = 0; + + if(is_output){ + obj_surf = proc_ctx->frame_store[FRAME_OUT_CURRENT].obj_surface; + }else { + obj_surf = proc_ctx->frame_store[FRAME_IN_CURRENT].obj_surface; + } + + assert(obj_surf->fourcc == VA_FOURCC_NV12 || + obj_surf->fourcc == VA_FOURCC_YUY2 || + obj_surf->fourcc == VA_FOURCC_AYUV || + obj_surf->fourcc == VA_FOURCC_RGBA); + + if (obj_surf->fourcc == VA_FOURCC_NV12) { + surface_format = PLANAR_420_8; + surface_pitch = obj_surf->width; + is_uv_interleaved = 1; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_YUY2) { + surface_format = YCRCB_NORMAL; + surface_pitch = obj_surf->width * 2; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_AYUV) { + surface_format = PACKED_444A_8; + surface_pitch = obj_surf->width * 4; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_RGBA) { + surface_format = R8G8B8A8_UNORM_SRGB; + surface_pitch = obj_surf->width * 4; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } + + u_offset_y = obj_surf->y_cb_offset; + v_offset_y = obj_surf->y_cr_offset; + + dri_bo_get_tiling(obj_surf->bo, &tiling, &swizzle); + + BEGIN_VEB_BATCH(batch, 6); + OUT_VEB_BATCH(batch, VEB_SURFACE_STATE | (6 - 2)); + OUT_VEB_BATCH(batch, + 0 << 1 | // reserved + is_output); // surface indentification. + + OUT_VEB_BATCH(batch, + (obj_surf->height - 1) << 18 | // height . w3 + (obj_surf->width -1 ) << 4 | // width + 0); // reserve + + OUT_VEB_BATCH(batch, + surface_format << 28 | // surface format, YCbCr420. w4 + is_uv_interleaved << 27 | // interleave chrome , two seperate palar + 0 << 20 | // reserved + (surface_pitch - 1) << 3 | // surface pitch, 64 align + half_pitch_chroma << 2 | // half pitch for chrome + !!tiling << 1 | // tiled surface, linear surface used + (tiling == I915_TILING_Y)); // tiled walk, ignored when liner surface + + OUT_VEB_BATCH(batch, + 0 << 29 | // reserved . w5 + 0 << 16 | // X offset for V(Cb) + 0 << 15 | // reserved + u_offset_y); // Y offset for V(Cb) + + OUT_VEB_BATCH(batch, + 0 << 29 | // reserved . w6 + 0 << 16 | // X offset for V(Cr) + 0 << 15 | // reserved + v_offset_y ); // Y offset for V(Cr) + + ADVANCE_VEB_BATCH(batch); +} + +void hsw_veb_dndi_iecp_command(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + unsigned char frame_ctrl_bits = 0; + const unsigned int width64 = ALIGN(proc_ctx->width_input, 64); + + /* s1:update the previous and current input */ +/* tempFrame = proc_ctx->frame_store[FRAME_IN_PREVIOUS]; + proc_ctx->frame_store[FRAME_IN_PREVIOUS] = proc_ctx->frame_store[FRAME_IN_CURRENT]; ; + proc_ctx->frame_store[FRAME_IN_CURRENT] = tempFrame; + + if(proc_ctx->surface_input_vebox != -1){ + vpp_surface_copy(ctx, proc_ctx->frame_store[FRAME_IN_CURRENT].surface_id, + proc_ctx->surface_input_vebox); + } else { + vpp_surface_copy(ctx, proc_ctx->frame_store[FRAME_IN_CURRENT].surface_id, + proc_ctx->surface_input); + } +*/ + /*s2: update the STMM input and output */ +/* tempFrame = proc_ctx->frame_store[FRAME_IN_STMM]; + proc_ctx->frame_store[FRAME_IN_STMM] = proc_ctx->frame_store[FRAME_OUT_STMM]; ; + proc_ctx->frame_store[FRAME_OUT_STMM] = tempFrame; +*/ + /*s3:set reloc buffer address */ + BEGIN_VEB_BATCH(batch, 10); + OUT_VEB_BATCH(batch, VEB_DNDI_IECP_STATE | (10 - 2)); + OUT_VEB_BATCH(batch, (width64 - 1)); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_CURRENT].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_PREVIOUS].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_STMM].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_STMM].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_CURRENT_DN].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_CURRENT].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_PREVIOUS].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits); + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_STATISTIC].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits); + + ADVANCE_VEB_BATCH(batch); +} + +static void +frame_store_reset(VEBFrameStore *fs) +{ + fs->obj_surface = NULL; + fs->surface_id = VA_INVALID_ID; + fs->is_internal_surface = 0; + fs->is_scratch_surface = 0; +} + +static void +frame_store_clear(VEBFrameStore *fs, VADriverContextP ctx) +{ + if (fs->obj_surface && fs->is_scratch_surface) { + VASurfaceID surface_id = fs->obj_surface->base.id; + i965_DestroySurfaces(ctx, &surface_id, 1); + } + frame_store_reset(fs); +} + +static VAStatus +gen75_vebox_ensure_surfaces_storage(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_surface *input_obj_surface, *output_obj_surface; + unsigned int input_fourcc, output_fourcc; + unsigned int input_sampling, output_sampling; + unsigned int input_tiling, output_tiling; + unsigned int i, swizzle; + drm_intel_bo *bo; + VAStatus status; + + /* Determine input surface info. Use native VEBOX format whenever + possible. i.e. when the input surface format is not supported + by the VEBOX engine, then allocate a temporary surface (live + during the whole VPP pipeline lifetime) + + XXX: derive an actual surface format compatible with the input + surface chroma format */ + input_obj_surface = proc_ctx->surface_input_vebox_object ? + proc_ctx->surface_input_vebox_object : proc_ctx->surface_input_object; + if (input_obj_surface->bo) { + input_fourcc = input_obj_surface->fourcc; + input_sampling = input_obj_surface->subsampling; + dri_bo_get_tiling(input_obj_surface->bo, &input_tiling, &swizzle); + input_tiling = !!input_tiling; + } + else { + input_fourcc = VA_FOURCC_NV12; + input_sampling = SUBSAMPLE_YUV420; + input_tiling = 1; + status = i965_check_alloc_surface_bo(ctx, input_obj_surface, + input_tiling, input_fourcc, input_sampling); + if (status != VA_STATUS_SUCCESS) + return status; + } + + /* Determine output surface info. + + XXX: derive an actual surface format compatible with the input + surface chroma format */ + output_obj_surface = proc_ctx->surface_output_vebox_object ? + proc_ctx->surface_output_vebox_object : proc_ctx->surface_output_object; + if (output_obj_surface->bo) { + output_fourcc = output_obj_surface->fourcc; + output_sampling = output_obj_surface->subsampling; + dri_bo_get_tiling(output_obj_surface->bo, &output_tiling, &swizzle); + output_tiling = !!output_tiling; + } + else { + output_fourcc = VA_FOURCC_NV12; + output_sampling = SUBSAMPLE_YUV420; + output_tiling = 1; + status = i965_check_alloc_surface_bo(ctx, output_obj_surface, + output_tiling, output_fourcc, output_sampling); + if (status != VA_STATUS_SUCCESS) + return status; + } + + /* Update VEBOX pipeline formats */ + proc_ctx->fourcc_input = input_fourcc; + proc_ctx->fourcc_output = output_fourcc; + if (input_fourcc != output_fourcc) + proc_ctx->is_iecp_enabled = 1; // IECP needed for format conversion + + /* Create pipeline surfaces */ + for (i = 0; i < ARRAY_ELEMS(proc_ctx->frame_store); i ++) { + struct object_surface *obj_surface; + VASurfaceID new_surface; + + if (proc_ctx->frame_store[i].obj_surface) + continue; // user allocated surface, not VEBOX internal + + status = i965_CreateSurfaces(ctx, proc_ctx->width_input, + proc_ctx->height_input, VA_RT_FORMAT_YUV420, 1, &new_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + obj_surface = SURFACE(new_surface); + assert(obj_surface != NULL); + + if (i <= FRAME_IN_PREVIOUS || i == FRAME_OUT_CURRENT_DN) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + input_tiling, input_fourcc, input_sampling); + } + else if (i == FRAME_IN_STMM || i == FRAME_OUT_STMM) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + 1, input_fourcc, input_sampling); + } + else if (i >= FRAME_OUT_CURRENT) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + output_tiling, output_fourcc, output_sampling); + } + if (status != VA_STATUS_SUCCESS) + return status; + + proc_ctx->frame_store[i].obj_surface = obj_surface; + proc_ctx->frame_store[i].is_internal_surface = 1; + proc_ctx->frame_store[i].is_scratch_surface = 1; + } + + /* Allocate DNDI state table */ + drm_intel_bo_unreference(proc_ctx->dndi_state_table.bo); + bo = drm_intel_bo_alloc(i965->intel.bufmgr, "vebox: dndi state Buffer", + 0x1000, 0x1000); + proc_ctx->dndi_state_table.bo = bo; + if (!bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + /* Allocate IECP state table */ + drm_intel_bo_unreference(proc_ctx->iecp_state_table.bo); + bo = drm_intel_bo_alloc(i965->intel.bufmgr, "vebox: iecp state Buffer", + 0x1000, 0x1000); + proc_ctx->iecp_state_table.bo = bo; + if (!bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + /* Allocate Gamut state table */ + drm_intel_bo_unreference(proc_ctx->gamut_state_table.bo); + bo = drm_intel_bo_alloc(i965->intel.bufmgr, "vebox: gamut state Buffer", + 0x1000, 0x1000); + proc_ctx->gamut_state_table.bo = bo; + if (!bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + /* Allocate vertex state table */ + drm_intel_bo_unreference(proc_ctx->vertex_state_table.bo); + bo = drm_intel_bo_alloc(i965->intel.bufmgr, "vebox: vertex state Buffer", + 0x1000, 0x1000); + proc_ctx->vertex_state_table.bo = bo; + if (!bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_vebox_ensure_surfaces(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + VEBFrameStore *ifs, *ofs; + bool is_new_frame = 0; + int i; + + /* Update the previous input surface */ + obj_surface = proc_ctx->surface_input_object; + + is_new_frame = proc_ctx->frame_store[FRAME_IN_CURRENT].surface_id != + obj_surface->base.id; + if (is_new_frame) { + ifs = &proc_ctx->frame_store[FRAME_IN_PREVIOUS]; + ofs = &proc_ctx->frame_store[proc_ctx->is_dn_enabled ? + FRAME_OUT_CURRENT_DN : FRAME_IN_CURRENT]; + do { + const VAProcPipelineParameterBuffer * const pipe = + proc_ctx->pipeline_param; + + if (pipe->num_forward_references < 1) + break; + if (pipe->forward_references[0] == VA_INVALID_ID) + break; + + obj_surface = SURFACE(pipe->forward_references[0]); + if (!obj_surface || obj_surface->base.id == ifs->surface_id) + break; + + frame_store_clear(ifs, ctx); + if (obj_surface->base.id == ofs->surface_id) { + *ifs = *ofs; + frame_store_reset(ofs); + } + else { + ifs->obj_surface = obj_surface; + ifs->surface_id = obj_surface->base.id; + ifs->is_internal_surface = 0; + ifs->is_scratch_surface = 0; + } + } while (0); + } + + /* Update the input surface */ + obj_surface = proc_ctx->surface_input_vebox_object ? + proc_ctx->surface_input_vebox_object : proc_ctx->surface_input_object; + + ifs = &proc_ctx->frame_store[FRAME_IN_CURRENT]; + frame_store_clear(ifs, ctx); + ifs->obj_surface = obj_surface; + ifs->surface_id = proc_ctx->surface_input_object->base.id; + ifs->is_internal_surface = proc_ctx->surface_input_vebox_object != NULL; + ifs->is_scratch_surface = 0; + + /* Update the Spatial Temporal Motion Measure (STMM) surfaces */ + if (is_new_frame) { + const VEBFrameStore tmpfs = proc_ctx->frame_store[FRAME_IN_STMM]; + proc_ctx->frame_store[FRAME_IN_STMM] = + proc_ctx->frame_store[FRAME_OUT_STMM]; + proc_ctx->frame_store[FRAME_OUT_STMM] = tmpfs; + } + + /* Reset the output surfaces to defaults. i.e. clean from user surfaces */ + for (i = FRAME_OUT_CURRENT_DN; i <= FRAME_OUT_PREVIOUS; i++) { + ofs = &proc_ctx->frame_store[i]; + if (!ofs->is_scratch_surface) + ofs->obj_surface = NULL; + ofs->surface_id = proc_ctx->surface_input_object->base.id; + } + + /* Update the output surfaces */ + obj_surface = proc_ctx->surface_output_vebox_object ? + proc_ctx->surface_output_vebox_object : proc_ctx->surface_output_object; + + proc_ctx->current_output_type = 2; + if (proc_ctx->filters_mask == VPP_DNDI_DN && !proc_ctx->is_iecp_enabled) + proc_ctx->current_output = FRAME_OUT_CURRENT_DN; + else if (proc_ctx->is_di_adv_enabled && !proc_ctx->is_first_frame) { + proc_ctx->current_output_type = 0; + proc_ctx->current_output = proc_ctx->is_second_field ? + FRAME_OUT_CURRENT : FRAME_OUT_PREVIOUS; + } + else + proc_ctx->current_output = FRAME_OUT_CURRENT; + ofs = &proc_ctx->frame_store[proc_ctx->current_output]; + frame_store_clear(ofs, ctx); + ofs->obj_surface = obj_surface; + ofs->surface_id = proc_ctx->surface_input_object->base.id; + ofs->is_internal_surface = proc_ctx->surface_output_vebox_object != NULL; + ofs->is_scratch_surface = 0; + + return VA_STATUS_SUCCESS; +} + +int hsw_veb_pre_format_convert(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + VAStatus va_status; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface* obj_surf_input = proc_ctx->surface_input_object; + struct object_surface* obj_surf_output = proc_ctx->surface_output_object; + struct object_surface* obj_surf_input_vebox; + struct object_surface* obj_surf_output_vebox; + + proc_ctx->format_convert_flags = 0; + + proc_ctx->width_input = obj_surf_input->orig_width; + proc_ctx->height_input = obj_surf_input->orig_height; + proc_ctx->width_output = obj_surf_output->orig_width; + proc_ctx->height_output = obj_surf_output->orig_height; + + /* only partial frame is not supported to be processed */ + /* + assert(proc_ctx->width_input == proc_ctx->pipeline_param->surface_region->width); + assert(proc_ctx->height_input == proc_ctx->pipeline_param->surface_region->height); + assert(proc_ctx->width_output == proc_ctx->pipeline_param->output_region->width); + assert(proc_ctx->height_output == proc_ctx->pipeline_param->output_region->height); + */ + + if(proc_ctx->width_output != proc_ctx->width_input || + proc_ctx->height_output != proc_ctx->height_input){ + proc_ctx->format_convert_flags |= POST_SCALING_CONVERT; + } + + /* convert the following format to NV12 format */ + if(obj_surf_input->fourcc == VA_FOURCC_YV12 || + obj_surf_input->fourcc == VA_FOURCC_I420 || + obj_surf_input->fourcc == VA_FOURCC_IMC1 || + obj_surf_input->fourcc == VA_FOURCC_IMC3 || + obj_surf_input->fourcc == VA_FOURCC_RGBA || + obj_surf_input->fourcc == VA_FOURCC_BGRA){ + + proc_ctx->format_convert_flags |= PRE_FORMAT_CONVERT; + + } else if(obj_surf_input->fourcc == VA_FOURCC_AYUV || + obj_surf_input->fourcc == VA_FOURCC_YUY2 || + obj_surf_input->fourcc == VA_FOURCC_NV12){ + // nothing to do here + } else { + /* not support other format as input */ + assert(0); + } + + if (proc_ctx->format_convert_flags & PRE_FORMAT_CONVERT) { + if(proc_ctx->surface_input_vebox_object == NULL){ + va_status = i965_CreateSurfaces(ctx, + proc_ctx->width_input, + proc_ctx->height_input, + VA_RT_FORMAT_YUV420, + 1, + &(proc_ctx->surface_input_vebox)); + assert(va_status == VA_STATUS_SUCCESS); + obj_surf_input_vebox = SURFACE(proc_ctx->surface_input_vebox); + assert(obj_surf_input_vebox); + + if (obj_surf_input_vebox) { + proc_ctx->surface_input_vebox_object = obj_surf_input_vebox; + i965_check_alloc_surface_bo(ctx, obj_surf_input_vebox, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + } + } + + vpp_surface_convert(ctx, proc_ctx->surface_input_object, proc_ctx->surface_input_vebox_object); + } + + /* create one temporary NV12 surfaces for conversion*/ + if(obj_surf_output->fourcc == VA_FOURCC_YV12 || + obj_surf_output->fourcc == VA_FOURCC_I420 || + obj_surf_output->fourcc == VA_FOURCC_IMC1 || + obj_surf_output->fourcc == VA_FOURCC_IMC3 || + obj_surf_output->fourcc == VA_FOURCC_RGBA || + obj_surf_output->fourcc == VA_FOURCC_BGRA) { + + proc_ctx->format_convert_flags |= POST_FORMAT_CONVERT; + } else if(obj_surf_output->fourcc == VA_FOURCC_AYUV || + obj_surf_output->fourcc == VA_FOURCC_YUY2 || + obj_surf_output->fourcc == VA_FOURCC_NV12){ + /* Nothing to do here */ + } else { + /* not support other format as input */ + assert(0); + } + + if(proc_ctx->format_convert_flags & POST_FORMAT_CONVERT || + proc_ctx->format_convert_flags & POST_SCALING_CONVERT){ + if(proc_ctx->surface_output_vebox_object == NULL){ + va_status = i965_CreateSurfaces(ctx, + proc_ctx->width_input, + proc_ctx->height_input, + VA_RT_FORMAT_YUV420, + 1, + &(proc_ctx->surface_output_vebox)); + assert(va_status == VA_STATUS_SUCCESS); + obj_surf_output_vebox = SURFACE(proc_ctx->surface_output_vebox); + assert(obj_surf_output_vebox); + + if (obj_surf_output_vebox) { + proc_ctx->surface_output_vebox_object = obj_surf_output_vebox; + i965_check_alloc_surface_bo(ctx, obj_surf_output_vebox, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + } + } + } + + if(proc_ctx->format_convert_flags & POST_SCALING_CONVERT){ + if(proc_ctx->surface_output_scaled_object == NULL){ + va_status = i965_CreateSurfaces(ctx, + proc_ctx->width_output, + proc_ctx->height_output, + VA_RT_FORMAT_YUV420, + 1, + &(proc_ctx->surface_output_scaled)); + assert(va_status == VA_STATUS_SUCCESS); + obj_surf_output_vebox = SURFACE(proc_ctx->surface_output_scaled); + assert(obj_surf_output_vebox); + + if (obj_surf_output_vebox) { + proc_ctx->surface_output_scaled_object = obj_surf_output_vebox; + i965_check_alloc_surface_bo(ctx, obj_surf_output_vebox, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + } + } + } + + return 0; +} + +int hsw_veb_post_format_convert(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + struct object_surface *obj_surface = NULL; + + obj_surface = proc_ctx->frame_store[proc_ctx->current_output].obj_surface; + + if (proc_ctx->format_convert_flags & POST_COPY_CONVERT) { + /* copy the saved frame in the second call */ + vpp_surface_convert(ctx, obj_surface, proc_ctx->surface_output_object); + } else if(!(proc_ctx->format_convert_flags & POST_FORMAT_CONVERT) && + !(proc_ctx->format_convert_flags & POST_SCALING_CONVERT)){ + /* Output surface format is covered by vebox pipeline and + * processed picture is already store in output surface + * so nothing will be done here */ + } else if ((proc_ctx->format_convert_flags & POST_FORMAT_CONVERT) && + !(proc_ctx->format_convert_flags & POST_SCALING_CONVERT)){ + /* convert and copy NV12 to YV12/IMC3/IMC2/RGBA output*/ + vpp_surface_convert(ctx, obj_surface, proc_ctx->surface_output_object); + + } else if(proc_ctx->format_convert_flags & POST_SCALING_CONVERT) { + VAProcPipelineParameterBuffer * const pipe = proc_ctx->pipeline_param; + /* scaling, convert and copy NV12 to YV12/IMC3/IMC2/RGBA output*/ + assert(obj_surface->fourcc == VA_FOURCC_NV12); + + /* first step :surface scaling */ + vpp_surface_scaling(ctx, obj_surface, + proc_ctx->surface_output_scaled_object, pipe->filter_flags); + + /* second step: color format convert and copy to output */ + obj_surface = proc_ctx->surface_output_object; + + if(obj_surface->fourcc == VA_FOURCC_NV12 || + obj_surface->fourcc == VA_FOURCC_YV12 || + obj_surface->fourcc == VA_FOURCC_I420 || + obj_surface->fourcc == VA_FOURCC_YUY2 || + obj_surface->fourcc == VA_FOURCC_IMC1 || + obj_surface->fourcc == VA_FOURCC_IMC3 || + obj_surface->fourcc == VA_FOURCC_RGBA) { + vpp_surface_convert(ctx, proc_ctx->surface_output_scaled_object, obj_surface); + }else { + assert(0); + } + } + + return 0; +} + +static VAStatus +gen75_vebox_init_pipe_params(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + const VAProcPipelineParameterBuffer * const pipe = proc_ctx->pipeline_param; + VAProcFilterParameterBuffer *filter; + unsigned int i; + + proc_ctx->filters_mask = 0; + for (i = 0; i < pipe->num_filters; i++) { + struct object_buffer * const obj_buffer = BUFFER(pipe->filters[i]); + + assert(obj_buffer && obj_buffer->buffer_store); + if (!obj_buffer || !obj_buffer->buffer_store) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + filter = (VAProcFilterParameterBuffer *) + obj_buffer->buffer_store->buffer; + switch (filter->type) { + case VAProcFilterNoiseReduction: + proc_ctx->filters_mask |= VPP_DNDI_DN; + proc_ctx->filter_dn = filter; + break; + case VAProcFilterDeinterlacing: + proc_ctx->filters_mask |= VPP_DNDI_DI; + proc_ctx->filter_di = filter; + break; + case VAProcFilterColorBalance: + proc_ctx->filters_mask |= VPP_IECP_PRO_AMP; + proc_ctx->filter_iecp_amp = filter; + proc_ctx->filter_iecp_amp_num_elements = obj_buffer->num_elements; + break; + case VAProcFilterSkinToneEnhancement: + proc_ctx->filters_mask |= VPP_IECP_STD_STE; + proc_ctx->filter_iecp_std = filter; + break; + default: + WARN_ONCE("unsupported filter (type: %d)\n", filter->type); + return VA_STATUS_ERROR_UNSUPPORTED_FILTER; + } + } + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen75_vebox_init_filter_params(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + proc_ctx->format_convert_flags = 0; /* initialized in hsw_veb_pre_format_convert() */ + + proc_ctx->is_iecp_enabled = (proc_ctx->filters_mask & VPP_IECP_MASK) != 0; + proc_ctx->is_dn_enabled = (proc_ctx->filters_mask & VPP_DNDI_DN) != 0; + proc_ctx->is_di_enabled = (proc_ctx->filters_mask & VPP_DNDI_DI) != 0; + proc_ctx->is_di_adv_enabled = 0; + proc_ctx->is_first_frame = 0; + proc_ctx->is_second_field = 0; + + /* Check whether we are deinterlacing the second field */ + if (proc_ctx->is_di_enabled) { + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + proc_ctx->filter_di; + + const unsigned int tff = + !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD_FIRST); + const unsigned int is_top_field = + !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD); + + if ((tff ^ is_top_field) != 0) { + struct object_surface * const obj_surface = + proc_ctx->surface_input_object; + + if (proc_ctx->frame_store[FRAME_IN_CURRENT].surface_id != obj_surface->base.id) { + WARN_ONCE("invalid surface provided for second field\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + proc_ctx->is_second_field = 1; + } + } + + /* Check whether we are deinterlacing the first frame */ + if (proc_ctx->is_di_enabled) { + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + proc_ctx->filter_di; + + switch (deint_params->algorithm) { + case VAProcDeinterlacingBob: + proc_ctx->is_first_frame = 1; + break; + case VAProcDeinterlacingMotionAdaptive: + case VAProcDeinterlacingMotionCompensated: + if (proc_ctx->frame_store[FRAME_IN_CURRENT].surface_id == VA_INVALID_ID) + proc_ctx->is_first_frame = 1; + else if (proc_ctx->is_second_field) { + /* At this stage, we have already deinterlaced the + first field successfully. So, the first frame flag + is trigerred if the previous field was deinterlaced + without reference frame */ + if (proc_ctx->frame_store[FRAME_IN_PREVIOUS].surface_id == VA_INVALID_ID) + proc_ctx->is_first_frame = 1; + } + else { + const VAProcPipelineParameterBuffer * const pipe = + proc_ctx->pipeline_param; + + if (pipe->num_forward_references < 1 || + pipe->forward_references[0] == VA_INVALID_ID) { + WARN_ONCE("A forward temporal reference is needed for Motion adaptive/compensated deinterlacing !!!\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + } + proc_ctx->is_di_adv_enabled = 1; + break; + default: + WARN_ONCE("unsupported deinterlacing algorithm (%d)\n", + deint_params->algorithm); + return VA_STATUS_ERROR_UNSUPPORTED_FILTER; + } + } + return VA_STATUS_SUCCESS; +} + +VAStatus +gen75_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + VAStatus status; + + status = gen75_vebox_init_pipe_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_init_filter_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + hsw_veb_pre_format_convert(ctx, proc_ctx); + + status = gen75_vebox_ensure_surfaces(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_ensure_surfaces_storage(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + if (proc_ctx->format_convert_flags & POST_COPY_CONVERT) { + assert(proc_ctx->is_second_field); + /* directly copy the saved frame in the second call */ + } else { + intel_batchbuffer_start_atomic_veb(proc_ctx->batch, 0x1000); + intel_batchbuffer_emit_mi_flush(proc_ctx->batch); + hsw_veb_state_table_setup(ctx, proc_ctx); + hsw_veb_state_command(ctx, proc_ctx); + hsw_veb_surface_state(ctx, proc_ctx, INPUT_SURFACE); + hsw_veb_surface_state(ctx, proc_ctx, OUTPUT_SURFACE); + hsw_veb_dndi_iecp_command(ctx, proc_ctx); + intel_batchbuffer_end_atomic(proc_ctx->batch); + intel_batchbuffer_flush(proc_ctx->batch); + } + + hsw_veb_post_format_convert(ctx, proc_ctx); + + return VA_STATUS_SUCCESS; +} + +void gen75_vebox_context_destroy(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + int i; + + if(proc_ctx->surface_input_vebox != VA_INVALID_ID){ + i965_DestroySurfaces(ctx, &proc_ctx->surface_input_vebox, 1); + proc_ctx->surface_input_vebox = VA_INVALID_ID; + proc_ctx->surface_input_vebox_object = NULL; + } + + if(proc_ctx->surface_output_vebox != VA_INVALID_ID){ + i965_DestroySurfaces(ctx, &proc_ctx->surface_output_vebox, 1); + proc_ctx->surface_output_vebox = VA_INVALID_ID; + proc_ctx->surface_output_vebox_object = NULL; + } + + if(proc_ctx->surface_output_scaled != VA_INVALID_ID){ + i965_DestroySurfaces(ctx, &proc_ctx->surface_output_scaled, 1); + proc_ctx->surface_output_scaled = VA_INVALID_ID; + proc_ctx->surface_output_scaled_object = NULL; + } + + for (i = 0; i < ARRAY_ELEMS(proc_ctx->frame_store); i++) + frame_store_clear(&proc_ctx->frame_store[i], ctx); + + /* dndi state table */ + drm_intel_bo_unreference(proc_ctx->dndi_state_table.bo); + proc_ctx->dndi_state_table.bo = NULL; + + /* iecp state table */ + drm_intel_bo_unreference(proc_ctx->iecp_state_table.bo); + proc_ctx->iecp_state_table.bo = NULL; + + /* gamut statu table */ + drm_intel_bo_unreference(proc_ctx->gamut_state_table.bo); + proc_ctx->gamut_state_table.bo = NULL; + + /* vertex state table */ + drm_intel_bo_unreference(proc_ctx->vertex_state_table.bo); + proc_ctx->vertex_state_table.bo = NULL; + + intel_batchbuffer_free(proc_ctx->batch); + + free(proc_ctx); +} + +struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct intel_vebox_context *proc_context = calloc(1, sizeof(struct intel_vebox_context)); + int i; + + assert(proc_context); + proc_context->batch = intel_batchbuffer_new(intel, I915_EXEC_VEBOX, 0); + + for (i = 0; i < ARRAY_ELEMS(proc_context->frame_store); i++) + proc_context->frame_store[i].surface_id = VA_INVALID_ID; + + proc_context->filters_mask = 0; + proc_context->surface_output_object = NULL; + proc_context->surface_input_object = NULL; + proc_context->surface_input_vebox = VA_INVALID_ID; + proc_context->surface_input_vebox_object = NULL; + proc_context->surface_output_vebox = VA_INVALID_ID; + proc_context->surface_output_vebox_object = NULL; + proc_context->surface_output_scaled = VA_INVALID_ID; + proc_context->surface_output_scaled_object = NULL; + proc_context->filters_mask = 0; + proc_context->format_convert_flags = 0; + + return proc_context; +} + +void bdw_veb_state_command(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + + BEGIN_VEB_BATCH(batch, 0xc); + OUT_VEB_BATCH(batch, VEB_STATE | (0xc - 2)); + OUT_VEB_BATCH(batch, + 0 << 25 | // state surface control bits + 0 << 23 | // reserved. + 0 << 22 | // gamut expansion position + 0 << 15 | // reserved. + 0 << 14 | // single slice vebox enable + 0 << 13 | // hot pixel filter enable + 0 << 12 | // alpha plane enable + 0 << 11 | // vignette enable + 0 << 10 | // demosaic enable + proc_ctx->current_output_type << 8 | // DI output frame + 1 << 7 | // 444->422 downsample method + 1 << 6 | // 422->420 downsample method + proc_ctx->is_first_frame << 5 | // DN/DI first frame + proc_ctx->is_di_enabled << 4 | // DI enable + proc_ctx->is_dn_enabled << 3 | // DN enable + proc_ctx->is_iecp_enabled << 2 | // global IECP enabled + 0 << 1 | // ColorGamutCompressionEnable + 0 ) ; // ColorGamutExpansionEnable. + + OUT_RELOC(batch, + proc_ctx->dndi_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->iecp_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->gamut_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->vertex_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_VEB_BATCH(batch, 0);/*caputre pipe state pointer*/ + OUT_VEB_BATCH(batch, 0); + + ADVANCE_VEB_BATCH(batch); +} + +void bdw_veb_dndi_iecp_command(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + unsigned char frame_ctrl_bits = 0; + const unsigned int width64 = ALIGN(proc_ctx->width_input, 64); + + BEGIN_VEB_BATCH(batch, 0x14); + OUT_VEB_BATCH(batch, VEB_DNDI_IECP_STATE | (0x14 - 2));//DWord 0 + OUT_VEB_BATCH(batch, (width64 - 1)); + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_CURRENT].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits);//DWord 2 + OUT_VEB_BATCH(batch,0);//DWord 3 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_PREVIOUS].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits);//DWord 4 + OUT_VEB_BATCH(batch,0);//DWord 5 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_IN_STMM].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, 0, frame_ctrl_bits);//DWord 6 + OUT_VEB_BATCH(batch,0);//DWord 7 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_STMM].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits);//DWord 8 + OUT_VEB_BATCH(batch,0);//DWord 9 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_CURRENT_DN].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits);//DWord 10 + OUT_VEB_BATCH(batch,0);//DWord 11 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_CURRENT].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits);//DWord 12 + OUT_VEB_BATCH(batch,0);//DWord 13 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_PREVIOUS].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits);//DWord 14 + OUT_VEB_BATCH(batch,0);//DWord 15 + + OUT_RELOC(batch, + proc_ctx->frame_store[FRAME_OUT_STATISTIC].obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, frame_ctrl_bits);//DWord 16 + OUT_VEB_BATCH(batch,0);//DWord 17 + + OUT_VEB_BATCH(batch,0);//DWord 18 + OUT_VEB_BATCH(batch,0);//DWord 19 + + ADVANCE_VEB_BATCH(batch); +} + +VAStatus +gen8_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + VAStatus status; + + status = gen75_vebox_init_pipe_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_init_filter_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + hsw_veb_pre_format_convert(ctx, proc_ctx); + + status = gen75_vebox_ensure_surfaces(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_ensure_surfaces_storage(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + if (proc_ctx->format_convert_flags & POST_COPY_CONVERT) { + assert(proc_ctx->is_second_field); + /* directly copy the saved frame in the second call */ + } else { + intel_batchbuffer_start_atomic_veb(proc_ctx->batch, 0x1000); + intel_batchbuffer_emit_mi_flush(proc_ctx->batch); + hsw_veb_state_table_setup(ctx, proc_ctx); + bdw_veb_state_command(ctx, proc_ctx); + hsw_veb_surface_state(ctx, proc_ctx, INPUT_SURFACE); + hsw_veb_surface_state(ctx, proc_ctx, OUTPUT_SURFACE); + bdw_veb_dndi_iecp_command(ctx, proc_ctx); + intel_batchbuffer_end_atomic(proc_ctx->batch); + intel_batchbuffer_flush(proc_ctx->batch); + } + + hsw_veb_post_format_convert(ctx, proc_ctx); + + return VA_STATUS_SUCCESS; +} + + +void +skl_veb_dndi_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int* p_table ; + unsigned int progressive_dn = 1; + unsigned int dndi_top_first = 0; + unsigned int is_mcdi_enabled = 0; + + if (proc_ctx->is_di_enabled) { + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + proc_ctx->filter_di; + + progressive_dn = 0; + + /* If we are in "First Frame" mode, i.e. past frames are not + available for motion measure, then don't use the TFF flag */ + dndi_top_first = !(deint_params->flags & (proc_ctx->is_first_frame ? + VA_DEINTERLACING_BOTTOM_FIELD : + VA_DEINTERLACING_BOTTOM_FIELD_FIRST)); + + is_mcdi_enabled = + (deint_params->algorithm == VAProcDeinterlacingMotionCompensated); + } + + /* + VAProcFilterParameterBufferDeinterlacing *di_param = + (VAProcFilterParameterBufferDeinterlacing *) proc_ctx->filter_di; + + VAProcFilterParameterBuffer * dn_param = + (VAProcFilterParameterBuffer *) proc_ctx->filter_dn; + */ + p_table = (unsigned int *)proc_ctx->dndi_state_table.ptr; + + *p_table ++ = ( 140 << 20 | // denoise stad threshold . w1 + 192 << 12 | // dnmh_history_max + 7 << 8 | // dnmh_delta[3:0] + 1 ); // denoise moving pixel threshold + + *p_table ++ = ( 38 << 20 | // denoise asd threshold + 0 << 10 | // temporal diff th + 0 ); // low temporal diff th + + *p_table ++ = ( progressive_dn << 28 | // progressive dn + 38 << 16 | // denoise th for sum of complexity measure + 32 << 10 | // dnmh_history_init[5:0] + 0 ); // reserved + + *p_table ++ = ( 0 << 28 | // hot pixel count + 0 << 20 | // hot pixel threshold + 1 << 12 | // block noise estimate edge threshold + 20 ); // block noise estimate noise threshold + + *p_table ++ = ( 140<< 16 | // chroma denoise stad threshold + 0 << 13 | // reserved + 1 << 12 | // chrome denoise enable + 13 << 6 | // chr temp diff th + 7 ); // chr temp diff low + + *p_table ++ = 0; // weight + + *p_table ++ = ( 0 << 16 | // dn_thmax + 0 ); // dn_thmin + + *p_table ++ = ( 0 << 16 | // dn_prt5 + 0 ); // dn_dyn_thmin + + *p_table ++ = ( 0 << 16 | // dn_prt4 + 0 ); // dn_prt3 + + *p_table ++ = ( 0 << 16 | // dn_prt2 + 0 ); // dn_prt1 + + *p_table ++ = ( 0 << 16 | // dn_prt0 + 0 << 10 | // dn_wd22 + 0 << 5 | // dh_wd21 + 0 ); // dh_wd20 + + *p_table ++ = ( 0 << 25 | // dn_wd12 + 0 << 20 | // dn_wd11 + 0 << 15 | // dn_wd10 + 0 << 10 | // dn_wd02 + 0 << 5 | // dn_wd01 + 0 ); // dn_wd00 + + *p_table ++ = ( 2 << 10 | // stmm c2 + 9 << 6 | // cat slope minus 1 + 5 << 2 | // sad tight threshold + 0 ); // smooth mv th + + *p_table ++ = ( 0 << 31 | // stmm blending constant select + 64 << 24 | // stmm trc1 + 125<< 16 | // stmm trc2 + 0 << 14 | // reserved + 30 << 8 | // multiplier for vecm + 150 ); // maximum stmm + + *p_table ++ = ( 118<< 24 | // minumum stmm + 0 << 22 | // stmm shift down + 1 << 20 | // stmm shift up + 5 << 16 | // stmm output shift + 100 << 8 | // sdi threshold + 5 ); // sdi delta + + *p_table ++ = ( 50 << 24 | // sdi fallback mode 1 t1 constant + 100 << 16 | // sdi fallback mode 1 t2 constant + 37 << 8 | // sdi fallback mode 2 constant(angle2x1) + 175 ); // fmd temporal difference threshold + + *p_table ++ = ( 16 << 24 | // fmd #1 vertical difference th . w7 + 100<< 16 | // fmd #2 vertical difference th + 0 << 14 | // cat threshold + 2 << 8 | // fmd tear threshold + is_mcdi_enabled << 7 | // mcdi enable, use motion compensated deinterlace algorithm + dndi_top_first << 3 | // dn/di top first + 0 ); // reserved + + *p_table ++ = ( 10 << 19 | // neighbor pixel threshold + 0 << 16 | // fmd for 2nd field of previous frame + 25 << 10 | // mc pixel consistency threshold + 0 << 8 | // fmd for 1st field for current frame + 10 << 4 | // sad thb + 5 ); // sad tha +} + +void skl_veb_iecp_csc_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 220); + float tran_coef[9] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0}; + float v_coef[3] = {0.0, 0.0, 0.0}; + float u_coef[3] = {0.0, 0.0, 0.0}; + int is_transform_enabled = 0; + + if(!(proc_ctx->filters_mask & VPP_IECP_CSC)){ + memset(p_table, 0, 12 * 4); + return; + } + + if(proc_ctx->fourcc_input == VA_FOURCC_RGBA && + (proc_ctx->fourcc_output == VA_FOURCC_NV12 || + proc_ctx->fourcc_output == VA_FOURCC_YV12 || + proc_ctx->fourcc_output == VA_FOURCC_YVY2 || + proc_ctx->fourcc_output == VA_FOURCC_AYUV)) { + + tran_coef[0] = 0.257; + tran_coef[1] = 0.504; + tran_coef[2] = 0.098; + tran_coef[3] = -0.148; + tran_coef[4] = -0.291; + tran_coef[5] = 0.439; + tran_coef[6] = 0.439; + tran_coef[7] = -0.368; + tran_coef[8] = -0.071; + + u_coef[0] = 16 * 4; + u_coef[1] = 128 * 4; + u_coef[2] = 128 * 4; + + is_transform_enabled = 1; + }else if((proc_ctx->fourcc_input == VA_FOURCC_NV12 || + proc_ctx->fourcc_input == VA_FOURCC_YV12 || + proc_ctx->fourcc_input == VA_FOURCC_YUY2 || + proc_ctx->fourcc_input == VA_FOURCC_AYUV) && + proc_ctx->fourcc_output == VA_FOURCC_RGBA) { + tran_coef[0] = 1.164; + tran_coef[1] = 0.000; + tran_coef[2] = 1.569; + tran_coef[3] = 1.164; + tran_coef[4] = -0.813; + tran_coef[5] = -0.392; + tran_coef[6] = 1.164; + tran_coef[7] = 2.017; + tran_coef[8] = 0.000; + + v_coef[0] = -16 * 4; + v_coef[1] = -128 * 4; + v_coef[2] = -128 * 4; + + is_transform_enabled = 1; + }else if(proc_ctx->fourcc_input != proc_ctx->fourcc_output){ + //enable when input and output format are different. + is_transform_enabled = 1; + } + + if(is_transform_enabled == 0){ + memset(p_table, 0, 12 * 4); + }else{ + *p_table ++ = ( is_transform_enabled << 31 | + 0 << 29 | // yuv_channel swap + intel_format_convert(tran_coef[0], 2, 16, 1)); //c0, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[1], 2, 16, 1)); //c1, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[2], 2, 16, 1)); //c2, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[3], 2, 16, 1)); //c3, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[4], 2, 16, 1)); //c4, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[5], 2, 16, 1)); //c5, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[6], 2, 16, 1)); //c6, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[7], 2, 16, 1)); //c7, s2.16 format + + *p_table ++ = ( 0 << 19 | //reserved + intel_format_convert(tran_coef[8], 2, 16, 1)); //c8, s2.16 format + + *p_table ++ = ( intel_format_convert(u_coef[0], 16, 0, 1) << 16 | + intel_format_convert(v_coef[0], 16, 0, 1)); + + *p_table ++ = ( intel_format_convert(u_coef[1], 16, 0, 1) << 16 | + intel_format_convert(v_coef[1], 16, 0, 1)); + + *p_table ++ = ( intel_format_convert(u_coef[2], 16, 0, 1) << 16 | + intel_format_convert(v_coef[2], 16, 0, 1)); + } +} + +void skl_veb_iecp_aoi_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + unsigned int *p_table = (unsigned int*)(proc_ctx->iecp_state_table.ptr + 27 * sizeof(unsigned int)); + + if (!(proc_ctx->filters_mask & VPP_IECP_AOI)) { + memset(p_table, 0, 3 * 4); + } else { + *p_table ++ = 0x00000000; + *p_table ++ = 0x00030000; + *p_table ++ = 0x00030000; + } +} + +void skl_veb_state_table_setup(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + if(proc_ctx->filters_mask & VPP_DNDI_MASK) { + dri_bo *dndi_bo = proc_ctx->dndi_state_table.bo; + dri_bo_map(dndi_bo, 1); + proc_ctx->dndi_state_table.ptr = dndi_bo->virtual; + + skl_veb_dndi_table(ctx, proc_ctx); + + dri_bo_unmap(dndi_bo); + } + + if(proc_ctx->filters_mask & VPP_IECP_MASK) { + dri_bo *iecp_bo = proc_ctx->iecp_state_table.bo; + dri_bo_map(iecp_bo, 1); + proc_ctx->iecp_state_table.ptr = iecp_bo->virtual; + + hsw_veb_iecp_std_table(ctx, proc_ctx); + hsw_veb_iecp_ace_table(ctx, proc_ctx); + hsw_veb_iecp_tcc_table(ctx, proc_ctx); + hsw_veb_iecp_pro_amp_table(ctx, proc_ctx); + skl_veb_iecp_csc_table(ctx, proc_ctx); + skl_veb_iecp_aoi_table(ctx, proc_ctx); + + dri_bo_unmap(iecp_bo); + } +} + +void +skl_veb_state_command(VADriverContextP ctx, struct intel_vebox_context *proc_ctx) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + + BEGIN_VEB_BATCH(batch, 0x10); + OUT_VEB_BATCH(batch, VEB_STATE | (0x10 - 2)); + OUT_VEB_BATCH(batch, + 0 << 25 | // state surface control bits + 0 << 23 | // reserved. + 0 << 22 | // gamut expansion position + 0 << 15 | // reserved. + 0 << 14 | // single slice vebox enable + 0 << 13 | // hot pixel filter enable + 0 << 12 | // alpha plane enable + 0 << 11 | // vignette enable + 0 << 10 | // demosaic enable + proc_ctx->current_output_type << 8 | // DI output frame + 1 << 7 | // 444->422 downsample method + 1 << 6 | // 422->420 downsample method + proc_ctx->is_first_frame << 5 | // DN/DI first frame + proc_ctx->is_di_enabled << 4 | // DI enable + proc_ctx->is_dn_enabled << 3 | // DN enable + proc_ctx->is_iecp_enabled << 2 | // global IECP enabled + 0 << 1 | // ColorGamutCompressionEnable + 0 ) ; // ColorGamutExpansionEnable. + + OUT_RELOC(batch, + proc_ctx->dndi_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->iecp_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->gamut_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_RELOC(batch, + proc_ctx->vertex_state_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + OUT_VEB_BATCH(batch, 0); + + OUT_VEB_BATCH(batch, 0);/*caputre pipe state pointer*/ + OUT_VEB_BATCH(batch, 0); + + OUT_VEB_BATCH(batch, 0);/*lace lut table state pointer*/ + OUT_VEB_BATCH(batch, 0); + + OUT_VEB_BATCH(batch, 0);/*gamma correction values address*/ + OUT_VEB_BATCH(batch, 0); + + ADVANCE_VEB_BATCH(batch); +} + +void skl_veb_surface_state(VADriverContextP ctx, struct intel_vebox_context *proc_ctx, unsigned int is_output) +{ + struct intel_batchbuffer *batch = proc_ctx->batch; + unsigned int u_offset_y = 0, v_offset_y = 0; + unsigned int is_uv_interleaved = 0, tiling = 0, swizzle = 0; + unsigned int surface_format = PLANAR_420_8; + struct object_surface* obj_surf = NULL; + unsigned int surface_pitch = 0; + unsigned int half_pitch_chroma = 0; + unsigned int derived_pitch; + + if (is_output) { + obj_surf = proc_ctx->frame_store[FRAME_OUT_CURRENT].obj_surface; + } else { + obj_surf = proc_ctx->frame_store[FRAME_IN_CURRENT].obj_surface; + } + + assert(obj_surf->fourcc == VA_FOURCC_NV12 || + obj_surf->fourcc == VA_FOURCC_YUY2 || + obj_surf->fourcc == VA_FOURCC_AYUV || + obj_surf->fourcc == VA_FOURCC_RGBA); + + if (obj_surf->fourcc == VA_FOURCC_NV12) { + surface_format = PLANAR_420_8; + surface_pitch = obj_surf->width; + is_uv_interleaved = 1; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_YUY2) { + surface_format = YCRCB_NORMAL; + surface_pitch = obj_surf->width * 2; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_AYUV) { + surface_format = PACKED_444A_8; + surface_pitch = obj_surf->width * 4; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } else if (obj_surf->fourcc == VA_FOURCC_RGBA) { + surface_format = R8G8B8A8_UNORM_SRGB; + surface_pitch = obj_surf->width * 4; + is_uv_interleaved = 0; + half_pitch_chroma = 0; + } + + derived_pitch = surface_pitch; + + u_offset_y = obj_surf->y_cb_offset; + v_offset_y = obj_surf->y_cr_offset; + + dri_bo_get_tiling(obj_surf->bo, &tiling, &swizzle); + + BEGIN_VEB_BATCH(batch, 9); + OUT_VEB_BATCH(batch, VEB_SURFACE_STATE | (9 - 2)); + OUT_VEB_BATCH(batch, + 0 << 1 | // reserved + is_output); // surface indentification. + + OUT_VEB_BATCH(batch, + (obj_surf->height - 1) << 18 | // height . w3 + (obj_surf->width -1 ) << 4 | // width + 0); // reserve + + OUT_VEB_BATCH(batch, + surface_format << 28 | // surface format, YCbCr420. w4 + is_uv_interleaved << 27 | // interleave chrome , two seperate palar + 0 << 20 | // reserved + (surface_pitch - 1) << 3 | // surface pitch, 64 align + half_pitch_chroma << 2 | // half pitch for chrome + !!tiling << 1 | // tiled surface, linear surface used + (tiling == I915_TILING_Y)); // tiled walk, ignored when liner surface + + OUT_VEB_BATCH(batch, + 0 << 16 | // X offset for V(Cb) + u_offset_y); // Y offset for V(Cb) + + OUT_VEB_BATCH(batch, + 0 << 16 | // X offset for V(Cr) + v_offset_y ); // Y offset for V(Cr) + + OUT_VEB_BATCH(batch, 0); + + OUT_VEB_BATCH(batch, derived_pitch - 1); + + OUT_VEB_BATCH(batch, 0); + + ADVANCE_VEB_BATCH(batch); +} + +VAStatus +gen9_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx) +{ + VAStatus status; + + status = gen75_vebox_init_pipe_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_init_filter_params(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + hsw_veb_pre_format_convert(ctx, proc_ctx); + + status = gen75_vebox_ensure_surfaces(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + status = gen75_vebox_ensure_surfaces_storage(ctx, proc_ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + if (proc_ctx->format_convert_flags & POST_COPY_CONVERT) { + assert(proc_ctx->is_second_field); + /* directly copy the saved frame in the second call */ + } else { + intel_batchbuffer_start_atomic_veb(proc_ctx->batch, 0x1000); + intel_batchbuffer_emit_mi_flush(proc_ctx->batch); + skl_veb_state_table_setup(ctx, proc_ctx); + skl_veb_state_command(ctx, proc_ctx); + skl_veb_surface_state(ctx, proc_ctx, INPUT_SURFACE); + skl_veb_surface_state(ctx, proc_ctx, OUTPUT_SURFACE); + bdw_veb_dndi_iecp_command(ctx, proc_ctx); + intel_batchbuffer_end_atomic(proc_ctx->batch); + intel_batchbuffer_flush(proc_ctx->batch); + } + + hsw_veb_post_format_convert(ctx, proc_ctx); + + return VA_STATUS_SUCCESS; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.h new file mode 100644 index 000000000..a0d5e2e51 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen75_vpp_vebox.h @@ -0,0 +1,170 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Li Xiaowei + * + */ + +#ifndef _GEN75_VPP_VEBOX_H +#define _GEN75_VPP_VEBOX_H + +#include +#include +#include +#include +#include +#include "i965_drv_video.h" + +#include "i965_post_processing.h" + +#define INPUT_SURFACE 0 +#define OUTPUT_SURFACE 1 + +#define VPP_DNDI_DN 0x00000001 +#define VPP_DNDI_DI 0x00000002 +#define VPP_DNDI_MASK 0x000000ff +#define VPP_IECP_STD_STE 0x00000100 +#define VPP_IECP_ACE 0x00000200 +#define VPP_IECP_TCC 0x00000400 +#define VPP_IECP_PRO_AMP 0x00000800 +#define VPP_IECP_CSC 0x00001000 +#define VPP_IECP_AOI 0x00002000 +#define VPP_IECP_MASK 0x0000ff00 +#define MAX_FILTER_SUM 8 + +#define PRE_FORMAT_CONVERT 0x01 +#define POST_FORMAT_CONVERT 0x02 +#define POST_SCALING_CONVERT 0x04 +#define POST_COPY_CONVERT 0x08 + +enum { + FRAME_IN_CURRENT = 0, + FRAME_IN_PREVIOUS, + FRAME_IN_STMM, + FRAME_OUT_STMM, + FRAME_OUT_CURRENT_DN, + FRAME_OUT_CURRENT, + FRAME_OUT_PREVIOUS, + FRAME_OUT_STATISTIC, + FRAME_STORE_COUNT, +}; + +enum SURFACE_FORMAT{ + YCRCB_NORMAL = 0, + YCRCB_SWAPUVY, + YCRCB_SWAPUV, + YCRCB_SWAPY, + PLANAR_420_8, //NV12 + PACKED_444A_8, + PACKED_422_16, + R10G10B10A2_UNORM_SRGB, + R8G8B8A8_UNORM_SRGB, + PACKED_444_16, + PLANAR_422_16, + Y8_UNORM, + PLANAR_420_16, + R16G16B16A16, + SURFACE_FORMAT_SUM +}; + +typedef struct veb_frame_store { + struct object_surface *obj_surface; + VASurfaceID surface_id; /* always relative to the input surface */ + unsigned int is_internal_surface : 1; + unsigned int is_scratch_surface : 1; +} VEBFrameStore; + +typedef struct veb_buffer { + dri_bo *bo; + void * ptr; + unsigned char valid; +} VEBBuffer; + +struct intel_vebox_context +{ + struct intel_batchbuffer *batch; + + struct object_surface *surface_input_object; + struct object_surface *surface_output_object; + VASurfaceID surface_input_vebox; + struct object_surface *surface_input_vebox_object; + VASurfaceID surface_output_vebox; + struct object_surface *surface_output_vebox_object; + VASurfaceID surface_output_scaled; + struct object_surface *surface_output_scaled_object; + + unsigned int fourcc_input; + unsigned int fourcc_output; + + int width_input; + int height_input; + int width_output; + int height_output; + + VEBFrameStore frame_store[FRAME_STORE_COUNT]; + + VEBBuffer dndi_state_table; + VEBBuffer iecp_state_table; + VEBBuffer gamut_state_table; + VEBBuffer vertex_state_table; + + unsigned int filters_mask; + int current_output; + int current_output_type; /* 0:Both, 1:Previous, 2:Current */ + + VAProcPipelineParameterBuffer * pipeline_param; + void * filter_dn; + void * filter_di; + void * filter_iecp_std; + void * filter_iecp_ace; + void * filter_iecp_tcc; + void * filter_iecp_amp; + + unsigned int filter_iecp_amp_num_elements; + unsigned char format_convert_flags; + + /* Temporary flags live until the current picture is processed */ + unsigned int is_iecp_enabled : 1; + unsigned int is_dn_enabled : 1; + unsigned int is_di_enabled : 1; + unsigned int is_di_adv_enabled : 1; + unsigned int is_first_frame : 1; + unsigned int is_second_field : 1; +}; + +VAStatus gen75_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx); + +void gen75_vebox_context_destroy(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx); + +struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx); + +VAStatus gen8_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx); + +VAStatus gen9_vebox_process_picture(VADriverContextP ctx, + struct intel_vebox_context *proc_ctx); + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfc.c new file mode 100644 index 000000000..2c17779d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfc.c @@ -0,0 +1,1169 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou Chang + * Xiang, Haihao + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +extern void +gen6_mfc_pipe_buf_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); +extern void +gen6_mfc_bsp_buf_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); +extern void +gen6_mfc_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern VAStatus +gen6_mfc_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern VAStatus +gen6_mfc_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size); + +extern VAStatus +gen6_mfc_avc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +static const uint32_t gen7_mfc_batchbuffer_avc_intra[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_intra.g7b" +}; + +static const uint32_t gen7_mfc_batchbuffer_avc_inter[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_inter.g7b" +}; + +static struct i965_kernel gen7_mfc_kernels[] = { + { + "MFC AVC INTRA BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTRA, + gen7_mfc_batchbuffer_avc_intra, + sizeof(gen7_mfc_batchbuffer_avc_intra), + NULL + }, + + { + "MFC AVC INTER BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTER, + gen7_mfc_batchbuffer_avc_inter, + sizeof(gen7_mfc_batchbuffer_avc_inter), + NULL + }, +}; + +static void +gen7_mfc_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC); + + BEGIN_BCS_BATCH(batch, 5); + + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Must be long format for encoder */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (1 << 10) | /* Stream-Out Enable */ + ((!!mfc_context->post_deblocking_output.bo) << 9) | /* Post Deblocking Output */ + ((!!mfc_context->pre_deblocking_output.bo) << 8) | /* Pre Deblocking Output */ + (0 << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (1 << 4) | /* encoding mode */ + (standard_select << 0)); /* standard select: avc or mpeg2 */ + OUT_BCS_BATCH(batch, + (0 << 7) | /* expand NOA bus flag */ + (0 << 6) | /* disable slice-level clock gating */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_surface_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((mfc_context->surface_state.height - 1) << 18) | + ((mfc_context->surface_state.width - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((mfc_context->surface_state.w_pitch - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (mfc_context->surface_state.h_pitch)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_ind_obj_base_addr_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + BEGIN_BCS_BATCH(batch, 11); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /*MFC Indirect PAK-BSE Object Base Address for Encoder*/ + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_avc_img_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + BEGIN_BCS_BATCH(batch, 16); + + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + /*DW1 frame size */ + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs - 1) & 0xFFFF)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + /*DW3 Qp setting */ + OUT_BCS_BATCH(batch, + (0 << 24) | /* Second Chroma QP Offset */ + (0 << 16) | /* Chroma QP Offset */ + (0 << 14) | /* Max-bit conformance Intra flag */ + (0 << 13) | /* Max Macroblock size conformance Inter flag */ + (pPicParameter->pic_fields.bits.weighted_pred_flag << 12) | /*Weighted_Pred_Flag */ + (pPicParameter->pic_fields.bits.weighted_bipred_idc << 10) | /* Weighted_BiPred_Idc */ + (0 << 8) | /* FIXME: Image Structure */ + (0 << 0) ); /* Current Decoed Image Frame Store ID, reserved in Encode mode */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* Mininum Frame size */ + (0 << 15) | /* Disable reading of Macroblock Status Buffer */ + (0 << 14) | /* Load BitStream Pointer only once, 1 slic 1 frame */ + (0 << 13) | /* CABAC 0 word insertion test enable */ + (1 << 12) | /* MVUnpackedEnable,compliant to DXVA */ + (1 << 10) | /* Chroma Format IDC, 4:2:0 */ + (0 << 9) | /* FIXME: MbMvFormatFlag */ + (pPicParameter->pic_fields.bits.entropy_coding_mode_flag << 7) | /*0:CAVLC encoding mode,1:CABAC*/ + (0 << 6) | /* Only valid for VLD decoding mode */ + (0 << 5) | /* Constrained Intra Predition Flag, from PPS */ + (0 << 4) | /* Direct 8x8 inference flag */ + (pPicParameter->pic_fields.bits.transform_8x8_mode_flag << 3) | /*8x8 or 4x4 IDCT Transform Mode Flag*/ + (1 << 2) | /* Frame MB only flag */ + (0 << 1) | /* MBAFF mode is in active */ + (0 << 0)); /* Field picture flag */ + /*DW5 trequllis quantization */ + OUT_BCS_BATCH(batch, 0); /* Mainly about MB rate control and debug, just ignoring */ + OUT_BCS_BATCH(batch, /* Inter and Intra Conformance Max size limit */ + (0xBB8 << 16) | /* InterMbMaxSz */ + (0xEE8) ); /* IntraMbMaxSz */ + /* DW7 */ + OUT_BCS_BATCH(batch, 0); /* Reserved */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + /* DW10 frame bit setting */ + OUT_BCS_BATCH(batch, 0x8C000000); + OUT_BCS_BATCH(batch, 0x00010000); + OUT_BCS_BATCH(batch, 0); + /* DW13 Ref setting */ + OUT_BCS_BATCH(batch, 0x02010100); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_qm_state(VADriverContextP ctx, + int qm_type, + unsigned int *qm, + int qm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16); + assert(sizeof(*qm) == 4); + memcpy(qm_buffer, qm, qm_length * 4); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_avc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[16] = { + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010 + }; + + gen7_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 12, encoder_context); + gen7_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 12, encoder_context); + gen7_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 16, encoder_context); + gen7_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 16, encoder_context); +} + +static void +gen7_mfc_fqm_state(VADriverContextP ctx, + int fqm_type, + unsigned int *fqm, + int fqm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int fqm_buffer[32]; + + assert(fqm_length <= 32); + assert(sizeof(*fqm) == 4); + memcpy(fqm_buffer, fqm, fqm_length * 4); + + BEGIN_BCS_BATCH(batch, 34); + OUT_BCS_BATCH(batch, MFX_FQM_STATE | (34 - 2)); + OUT_BCS_BATCH(batch, fqm_type << 0); + intel_batchbuffer_data(batch, fqm_buffer, 32 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_avc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[32] = { + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000 + }; + + gen7_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 24, encoder_context); + gen7_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 24, encoder_context); + gen7_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 32, encoder_context); + gen7_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 32, encoder_context); +} + +static void +gen7_mfc_avc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, MFX_INSERT_OBJECT | (lenght_in_dws + 2 - 2)); + OUT_BCS_BATCH(batch, + (0 << 16) | /* always start at offset 0 */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* FIXME: ??? */ + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + + ADVANCE_BCS_BATCH(batch); +} + +static const int +va_to_gen7_mpeg2_picture_type[3] = { + 1, /* I */ + 2, /* P */ + 3 /* B */ +}; + +static void +gen7_mfc_mpeg2_pic_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferMPEG2 *pic_param; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code[1][1] & 0xf) << 28 | /* f_code[1][1] */ + (pic_param->f_code[1][0] & 0xf) << 24 | /* f_code[1][0] */ + (pic_param->f_code[0][1] & 0xf) << 20 | /* f_code[0][1] */ + (pic_param->f_code[0][0] & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + 0 << 14 | /* LoadSlicePointerFlag, 0 means only loading bitstream pointer once */ + va_to_gen7_mpeg2_picture_type[pic_param->picture_type] << 9 | + 0); + OUT_BCS_BATCH(batch, + 1 << 31 | /* slice concealment */ + (height_in_mbs - 1) << 16 | + (width_in_mbs - 1)); + + if (slice_param && slice_param->quantiser_scale_code >= 14) + OUT_BCS_BATCH(batch, (3 << 1) | (1 << 4) | (5 << 8) | (1 << 12)); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + 0xFFF << 16 | /* InterMBMaxSize */ + 0xFFF << 0 | /* IntraMBMaxSize */ + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfc_mpeg2_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned char intra_qm[64] = { + 8, 16, 19, 22, 26, 27, 29, 34, + 16, 16, 22, 24, 27, 29, 34, 37, + 19, 22, 26, 27, 29, 34, 34, 38, + 22, 22, 26, 27, 29, 34, 37, 40, + 22, 26, 27, 29, 32, 35, 40, 48, + 26, 27, 29, 32, 35, 40, 48, 58, + 26, 27, 29, 34, 38, 46, 56, 69, + 27, 29, 35, 38, 46, 56, 69, 83 + }; + + unsigned char non_intra_qm[64] = { + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16 + }; + + gen7_mfc_qm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_qm, 16, encoder_context); + gen7_mfc_qm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_qm, 16,encoder_context); +} + +static void +gen7_mfc_mpeg2_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned short intra_fqm[64] = { + 65536/0x8, 65536/0x10, 65536/0x13, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, + 65536/0x10, 65536/0x10, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1b, 65536/0x1b, 65536/0x1d, + 65536/0x13, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, 65536/0x1d, 65536/0x1d, 65536/0x23, + 65536/0x16, 65536/0x18, 65536/0x1b, 65536/0x1b, 65536/0x13, 65536/0x20, 65536/0x22, 65536/0x26, + 65536/0x1a, 65536/0x1b, 65536/0x13, 65536/0x13, 65536/0x20, 65536/0x23, 65536/0x26, 65536/0x2e, + 65536/0x1b, 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x23, 65536/0x28, 65536/0x2e, 65536/0x38, + 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x25, 65536/0x28, 65536/0x30, 65536/0x38, 65536/0x45, + 65536/0x22, 65536/0x25, 65536/0x26, 65536/0x28, 65536/0x30, 65536/0x3a, 65536/0x45, 65536/0x53, + }; + + unsigned short non_intra_fqm[64] = { + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + }; + + gen7_mfc_fqm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_fqm, 32, encoder_context); + gen7_mfc_fqm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_fqm, 32, encoder_context); +} + +static void +gen7_mfc_mpeg2_slicegroup_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int next_x, int next_y, + int is_fisrt_slice_group, + int is_last_slice_group, + int intra_slice, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, 8); + + OUT_BCS_BATCH(batch, MFC_MPEG2_SLICEGROUP_STATE | (8 - 2)); + OUT_BCS_BATCH(batch, + 0 << 31 | /* MbRateCtrlFlag */ + !!is_last_slice_group << 19 | /* IsLastSliceGrp */ + 1 << 17 | /* Insert Header before the first slice group data */ + 1 << 16 | /* SliceData PresentFlag: always 1 */ + 1 << 15 | /* TailPresentFlag: always 1 */ + 0 << 14 | /* FirstSliceHdrDisabled: slice header for each slice */ + !!intra_slice << 13 | /* IntraSlice */ + !!intra_slice << 12 | /* IntraSliceFlag */ + 0); + OUT_BCS_BATCH(batch, + next_y << 24 | + next_x << 16 | + y << 8 | + x << 0 | + 0); + OUT_BCS_BATCH(batch, qp); /* FIXME: SliceGroupQp */ + /* bitstream pointer is only loaded once for the first slice of a frame when + * LoadSlicePointerFlag is 0 + */ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, 0); /* FIXME: */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CorrectPoints */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CVxxx */ + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen7_mfc_mpeg2_pak_object_intra(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int mb_type, + int qp_scale_code, + int coded_block_pattern, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 9; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 0 << 24 | /* PackedMvNum */ + 0 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 1 << 13 | /* IntraMbFlag */ + mb_type << 8 | /* MbType: Intra */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + coded_block_pattern << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + OUT_BCS_BATCH(batch, 0); /* MV[0][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +#define MV_OFFSET_IN_WORD 112 + +static struct _mv_ranges +{ + int low; /* in the unit of 1/2 pixel */ + int high; /* in the unit of 1/2 pixel */ +} mv_ranges[] = { + {0, 0}, + {-16, 15}, + {-32, 31}, + {-64, 63}, + {-128, 127}, + {-256, 255}, + {-512, 511}, + {-1024, 1023}, + {-2048, 2047}, + {-4096, 4095} +}; + +static int +mpeg2_motion_vector(int mv, int pos, int display_max, int f_code) +{ + if (mv + pos * 16 * 2 < 0 || + mv + (pos + 1) * 16 * 2 > display_max * 2) + mv = 0; + + if (f_code > 0 && f_code < 10) { + if (mv < mv_ranges[f_code].low) + mv = mv_ranges[f_code].low; + + if (mv > mv_ranges[f_code].high) + mv = mv_ranges[f_code].high; + } + + return mv; +} + +static int +gen7_mfc_mpeg2_pak_object_inter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + unsigned int *msg, + int width_in_mbs, int height_in_mbs, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int qp_scale_code, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + VAEncPictureParameterBufferMPEG2 *pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + int len_in_dwords = 9; + short *mvptr, mvx0, mvy0, mvx1, mvy1; + + if (batch == NULL) + batch = encoder_context->base.batch; + + mvptr = (short *)msg; + mvx0 = mpeg2_motion_vector(mvptr[0] / 2, x, width_in_mbs * 16, pic_param->f_code[0][0]); + mvy0 = mpeg2_motion_vector(mvptr[1] / 2, y, height_in_mbs * 16, pic_param->f_code[0][0]); + mvx1 = mpeg2_motion_vector(mvptr[2] / 2, x, width_in_mbs * 16, pic_param->f_code[1][0]); + mvy1 = mpeg2_motion_vector(mvptr[3] / 2, y, height_in_mbs * 16, pic_param->f_code[1][0]); + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 2 << 24 | /* PackedMvNum */ + 7 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 0 << 13 | /* IntraMbFlag */ + 1 << 8 | /* MbType: Frame-based */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + 0x3f << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + + OUT_BCS_BATCH(batch, (mvx0 & 0xFFFF) | mvy0 << 16); /* MV[0][0] */ + OUT_BCS_BATCH(batch, (mvx1 & 0xFFFF) | mvy1 << 16); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static void +gen7_mfc_mpeg2_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_SPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_PPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } +} + +static void +gen7_mfc_mpeg2_pipeline_slice_group(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + VAEncSliceParameterBufferMPEG2 *next_slice_group_param, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + unsigned char tail_delimiter[] = {MPEG2_DELIMITER0, MPEG2_DELIMITER1, MPEG2_DELIMITER2, MPEG2_DELIMITER3, MPEG2_DELIMITER4, 0, 0, 0}; + unsigned char section_delimiter[] = {0x0, 0x0, 0x0, 0x0}; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + int i, j; + int h_start_pos, v_start_pos, h_next_start_pos, v_next_start_pos; + unsigned int *msg = NULL; + unsigned char *msg_ptr = NULL; + + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[slice_index]->buffer; + h_start_pos = slice_param->macroblock_address % width_in_mbs; + v_start_pos = slice_param->macroblock_address / width_in_mbs; + assert(h_start_pos + slice_param->num_macroblocks <= width_in_mbs); + + dri_bo_map(vme_context->vme_output.bo , 0); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (next_slice_group_param) { + h_next_start_pos = next_slice_group_param->macroblock_address % width_in_mbs; + v_next_start_pos = next_slice_group_param->macroblock_address / width_in_mbs; + } else { + h_next_start_pos = 0; + v_next_start_pos = height_in_mbs; + } + + gen7_mfc_mpeg2_slicegroup_state(ctx, + encoder_context, + h_start_pos, + v_start_pos, + h_next_start_pos, + v_next_start_pos, + slice_index == 0, + next_slice_group_param == NULL, + slice_param->is_intra_slice, + slice_param->quantiser_scale_code, + slice_batch); + + if (slice_index == 0) + gen7_mfc_mpeg2_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + /* Insert '00' to make sure the header is valid */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int*)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 0, + 0, + slice_batch); + + for (i = 0; i < encode_state->slice_params_ext[slice_index]->num_elements; i++) { + /* PAK for each macroblocks */ + for (j = 0; j < slice_param->num_macroblocks; j++) { + int h_pos = (slice_param->macroblock_address + j) % width_in_mbs; + int v_pos = (slice_param->macroblock_address + j) / width_in_mbs; + int first_mb_in_slice = (j == 0); + int last_mb_in_slice = (j == slice_param->num_macroblocks - 1); + int first_mb_in_slice_group = (i == 0 && j == 0); + int last_mb_in_slice_group = (i == encode_state->slice_params_ext[slice_index]->num_elements - 1 && + j == slice_param->num_macroblocks - 1); + + if (slice_param->is_intra_slice) { + gen7_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + } else { + msg = (unsigned int *)(msg_ptr + (slice_param->macroblock_address + j) * vme_context->vme_output.size_block); + + if(msg[32] & INTRA_MB_FLAG_MASK) { + gen7_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + } else { + + gen7_mfc_mpeg2_pak_object_inter(ctx, + encode_state, + encoder_context, + msg, + width_in_mbs, height_in_mbs, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + slice_param->quantiser_scale_code, + 0, + 0xff, + slice_batch); + } + } + } + + slice_param++; + } + + dri_bo_unmap(vme_context->vme_output.bo); + + /* tail data */ + if (next_slice_group_param == NULL) { /* end of a picture */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)tail_delimiter, + 2, + 8, /* 8bits in the last DWORD */ + 5, /* 5 bytes */ + 1, + 1, + 0, + slice_batch); + } else { /* end of a lsice group */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 1, + 0, + slice_batch); + } +} + +/* + * A batch buffer for all slices, including slice state, + * slice insert object and slice pak object commands + * + */ +static dri_bo * +gen7_mfc_mpeg2_software_slice_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + VAEncSliceParameterBufferMPEG2 *next_slice_group_param = NULL; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + if (i == encode_state->num_slice_params_ext - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[i + 1]->buffer; + + gen7_mfc_mpeg2_pipeline_slice_group(ctx, encode_state, encoder_context, i, next_slice_group_param, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +static void +gen7_mfc_mpeg2_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_MPEG2, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen6_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen6_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + gen7_mfc_mpeg2_pic_state(ctx, encoder_context, encode_state); + gen7_mfc_mpeg2_qm_state(ctx, encoder_context); + gen7_mfc_mpeg2_fqm_state(ctx, encoder_context); +} + +static void +gen7_mfc_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + slice_batch_bo = gen7_mfc_mpeg2_software_slice_batchbuffer(ctx, encode_state, encoder_context); + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen7_mfc_mpeg2_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +static VAStatus +gen7_mfc_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAStatus vaStatus = VA_STATUS_SUCCESS; + dri_bo *bo; + int i; + + /* reconstructed surface */ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + mfc_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->pre_deblocking_output.bo); + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* forward reference */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[0].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[0].bo); + } else + mfc_context->reference_surfaces[0].bo = NULL; + + /* backward reference */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[1].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } else { + mfc_context->reference_surfaces[1].bo = mfc_context->reference_surfaces[0].bo; + + if (mfc_context->reference_surfaces[1].bo) + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } + + for (i = 2; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + mfc_context->reference_surfaces[i].bo = mfc_context->reference_surfaces[i & 1].bo; + + if (mfc_context->reference_surfaces[i].bo) + dri_bo_reference(mfc_context->reference_surfaces[i].bo); + } + + /* input YUV surface */ + obj_surface = encode_state->input_yuv_object; + mfc_context->uncompressed_picture_source.bo = obj_surface->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + /* coded buffer */ + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + /* set the internal flag to 0 to indicate the coded size is unknown */ + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + +static VAStatus +gen7_mfc_mpeg2_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen6_mfc_init(ctx, encode_state, encoder_context); + gen7_mfc_mpeg2_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen7_mfc_mpeg2_pipeline_programing(ctx, encode_state, encoder_context); + gen6_mfc_run(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +VAStatus +gen7_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + vaStatus = gen6_mfc_avc_encode_picture(ctx, encode_state, encoder_context); + break; + + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + vaStatus = gen7_mfc_mpeg2_encode_picture(ctx, encode_state, encoder_context); + break; + + /* FIXME: add for other profile */ + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +Bool +gen7_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = calloc(1, sizeof(struct gen6_mfc_context)); + + if (!mfc_context) + return False; + + mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + mfc_context->gpe_context.idrt.max_entries = MAX_GPE_KERNELS; + mfc_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + mfc_context->gpe_context.curbe.length = 32 * 4; + + mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + mfc_context->gpe_context.vfe_state.num_urb_entries = 16; + mfc_context->gpe_context.vfe_state.gpgpu_mode = 0; + mfc_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + mfc_context->gpe_context.vfe_state.curbe_allocation_size = 37 - 1; + + i965_gpe_load_kernels(ctx, + &mfc_context->gpe_context, + gen7_mfc_kernels, + NUM_MFC_KERNEL); + + mfc_context->pipe_mode_select = gen7_mfc_pipe_mode_select; + mfc_context->set_surface_state = gen7_mfc_surface_state; + mfc_context->ind_obj_base_addr_state = gen7_mfc_ind_obj_base_addr_state; + mfc_context->avc_img_state = gen7_mfc_avc_img_state; + mfc_context->avc_qm_state = gen7_mfc_avc_qm_state; + mfc_context->avc_fqm_state = gen7_mfc_avc_fqm_state; + mfc_context->insert_object = gen7_mfc_avc_insert_object; + mfc_context->buffer_suface_setup = gen7_gpe_buffer_suface_setup; + + encoder_context->mfc_context = mfc_context; + encoder_context->mfc_context_destroy = gen6_mfc_context_destroy; + encoder_context->mfc_pipeline = gen7_mfc_pipeline; + encoder_context->mfc_brc_prepare = intel_mfc_brc_prepare; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.c new file mode 100644 index 000000000..9cf44027d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.c @@ -0,0 +1,2763 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include "sysdeps.h" + +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" + +#include "gen7_mfd.h" +#include "intel_media.h" + +static const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void +gen7_mfd_init_avc_surface(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenAvcSurface *gen7_avc_surface = obj_surface->private_data; + int width_in_mbs, height_in_mbs; + + obj_surface->free_private_data = gen_free_avc_surface; + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + if (!gen7_avc_surface) { + gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1); + assert(gen7_avc_surface); + gen7_avc_surface->base.frame_store_id = -1; + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_avc_surface; + } + + gen7_avc_surface->dmv_bottom_flag = (pic_param->pic_fields.bits.field_pic_flag && + !pic_param->seq_fields.bits.direct_8x8_inference_flag); + + if (gen7_avc_surface->dmv_top == NULL) { + gen7_avc_surface->dmv_top = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * (height_in_mbs + 1) * 64, + 0x1000); + assert(gen7_avc_surface->dmv_top); + } + + if (gen7_avc_surface->dmv_bottom_flag && + gen7_avc_surface->dmv_bottom == NULL) { + gen7_avc_surface->dmv_bottom = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * (height_in_mbs + 1) * 64, + 0x1000); + assert(gen7_avc_surface->dmv_bottom); + } +} + +static void +gen7_mfd_pipe_mode_select(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_VC1 || + standard_select == MFX_FORMAT_JPEG); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (gen7_mfd_context->post_deblocking_output.valid << 9) | /* Post Deblocking Output */ + (gen7_mfd_context->pre_deblocking_output.valid << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (standard_select << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + unsigned int y_cb_offset; + unsigned int y_cr_offset; + unsigned int surface_format; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + y_cr_offset = obj_surface->y_cr_offset; + + surface_format = obj_surface->fourcc == VA_FOURCC_Y800 ? + MFX_SURFACE_MONOCHROME : MFX_SURFACE_PLANAR_420_8; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_height - 1) << 18) | + ((obj_surface->orig_width - 1) << 4)); + OUT_BCS_BATCH(batch, + (surface_format << 28) | /* 420 planar YUV surface */ + ((standard_select != MFX_FORMAT_JPEG) << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (y_cr_offset << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 24); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (24 - 2)); + if (gen7_mfd_context->pre_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->post_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + + if (gen7_mfd_context->intra_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + /* DW 7..22 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + struct object_surface *obj_surface; + + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->bo) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + OUT_BCS_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); /* ignore DW23 for decoding */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_ind_obj_base_addr_state(VADriverContextP ctx, + dri_bo *slice_data_bo, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, slice_data_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); /* MFX Indirect Bitstream Object Base Address */ + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_bsp_buf_base_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + + if (gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->mpr_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->mpr_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (gen7_mfd_context->bitplane_read_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bitplane_read_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_qm_state(VADriverContextP ctx, + int qm_type, + unsigned char *qm, + int qm_length, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16 * 4); + memcpy(qm_buffer, qm, qm_length); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_avc_img_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct; + int mbaff_frame_flag; + unsigned int width_in_mbs, height_in_mbs; + VAPictureParameterBufferH264 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD) + img_struct = 1; + else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD) + img_struct = 3; + else + img_struct = 0; + + if ((img_struct & 0x1) == 0x1) { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x1); + } else { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x0); + } + + if (pic_param->seq_fields.bits.frame_mbs_only_flag) { /* a frame containing only frame macroblocks */ + assert(pic_param->seq_fields.bits.mb_adaptive_frame_field_flag == 0); + assert(pic_param->pic_fields.bits.field_pic_flag == 0); + } else { + assert(pic_param->seq_fields.bits.direct_8x8_inference_flag == 1); /* see H.264 spec */ + } + + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + /* MFX unit doesn't support 4:2:2 and 4:4:4 picture */ + assert(pic_param->seq_fields.bits.chroma_format_idc == 0 || /* monochrome picture */ + pic_param->seq_fields.bits.chroma_format_idc == 1); /* 4:2:0 */ + assert(pic_param->seq_fields.bits.residual_colour_transform_flag == 0); /* only available for 4:4:4 */ + + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + OUT_BCS_BATCH(batch, + (width_in_mbs * height_in_mbs - 1)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + ((pic_param->second_chroma_qp_index_offset & 0x1f) << 24) | + ((pic_param->chroma_qp_index_offset & 0x1f) << 16) | + (0 << 14) | /* Max-bit conformance Intra flag ??? FIXME */ + (0 << 13) | /* Max Macroblock size conformance Inter flag ??? FIXME */ + (pic_param->pic_fields.bits.weighted_pred_flag << 12) | /* differ from GEN6 */ + (pic_param->pic_fields.bits.weighted_bipred_idc << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (pic_param->seq_fields.bits.chroma_format_idc << 10) | + (pic_param->pic_fields.bits.entropy_coding_mode_flag << 7) | + ((!pic_param->pic_fields.bits.reference_pic_flag) << 6) | + (pic_param->pic_fields.bits.constrained_intra_pred_flag << 5) | + (pic_param->seq_fields.bits.direct_8x8_inference_flag << 4) | + (pic_param->pic_fields.bits.transform_8x8_mode_flag << 3) | + (pic_param->seq_fields.bits.frame_mbs_only_flag << 2) | + (mbaff_frame_flag << 1) | + (pic_param->pic_fields.bits.field_pic_flag << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_avc_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferH264 *iq_matrix; + VAPictureParameterBufferH264 *pic_param; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + iq_matrix = (VAIQMatrixBufferH264 *)decode_state->iq_matrix->buffer; + else + iq_matrix = &gen7_mfd_context->iq_matrix.h264; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + gen7_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, &iq_matrix->ScalingList4x4[0][0], 3 * 16, gen7_mfd_context); + gen7_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, &iq_matrix->ScalingList4x4[3][0], 3 * 16, gen7_mfd_context); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) { + gen7_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, &iq_matrix->ScalingList8x8[0][0], 64, gen7_mfd_context); + gen7_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, &iq_matrix->ScalingList8x8[1][0], 64, gen7_mfd_context); + } +} + +static void +gen7_mfd_avc_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + GenAvcSurface *gen7_avc_surface; + VAPictureH264 *va_pic; + int i; + + BEGIN_BCS_BATCH(batch, 69); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->private_data) { + + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + gen7_avc_surface = obj_surface->private_data; + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + if (gen7_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + /* the current decoding frame/field */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + assert(obj_surface->bo && obj_surface->private_data); + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + if (gen7_avc_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_avc_phantom_slice_first(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen7_mfd_context->base.batch); +} + +static void +gen7_mfd_avc_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + int first_mb_in_slice = 0, first_mb_in_next_slice = 0; + int slice_type; + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) { + slice_type = SLICE_TYPE_I; + } else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) { + slice_type = SLICE_TYPE_P; + } else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + first_mb_in_slice = slice_param->first_mb_in_slice; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + if (mbaff_picture) + slice_ver_pos = slice_ver_pos << 1; + + if (next_slice_param) { + first_mb_in_next_slice = next_slice_param->first_mb_in_slice; + next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs; + next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs; + + if (mbaff_picture) + next_slice_ver_pos = next_slice_ver_pos << 1; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag); + } + + BEGIN_BCS_BATCH(batch, 11); /* FIXME: is it 10??? */ + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (slice_param->chroma_log2_weight_denom << 8) | + (slice_param->luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, + (next_slice_param == NULL) << 19); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen7_mfd_avc_ref_idx_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_send_avc_ref_idx_state( + gen7_mfd_context->base.batch, + slice_param, + gen7_mfd_context->reference_surface + ); +} + +static void +gen7_mfd_avc_weightoffset_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i, j, num_weight_offset_table = 0; + short weightoffsets[32 * 6]; + + if ((slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) && + (pic_param->pic_fields.bits.weighted_pred_flag == 1)) { + num_weight_offset_table = 1; + } + + if ((slice_param->slice_type == SLICE_TYPE_B) && + (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) { + num_weight_offset_table = 2; + } + + for (i = 0; i < num_weight_offset_table; i++) { + BEGIN_BCS_BATCH(batch, 98); + OUT_BCS_BATCH(batch, MFX_AVC_WEIGHTOFFSET_STATE | (98 - 2)); + OUT_BCS_BATCH(batch, i); + + if (i == 0) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l0[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l0[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l0[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l0[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l0[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l0[j][1]; + } + } else { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l1[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l1[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l1[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l1[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l1[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l1[j][1]; + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +gen7_mfd_avc_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int slice_data_bit_offset; + + slice_data_bit_offset = avc_get_first_mb_bit_offset( + slice_data_bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag + ); + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_size - slice_param->slice_data_offset)); + OUT_BCS_BATCH(batch, slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((slice_data_bit_offset >> 3) << 16) | + (1 << 7) | + (0 << 5) | + (0 << 4) | + ((next_slice_param == NULL) << 3) | /* LastSlice Flag */ + (slice_data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen7_mfd_avc_context_init( + VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context +) +{ + /* Initialize flat scaling lists */ + avc_gen_default_iq_matrix(&gen7_mfd_context->iq_matrix.h264); +} + +static void +gen7_mfd_avc_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int i, j, enable_avc_ildb = 0; + unsigned int width_in_mbs, height_in_mbs; + + for (j = 0; j < decode_state->num_slice_params && enable_avc_ildb == 0; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + intel_update_avc_frame_store_index(ctx, decode_state, pic_param, + gen7_mfd_context->reference_surface, &gen7_mfd_context->fs_ctx); + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */ + assert(height_in_mbs > 0 && height_in_mbs <= 256); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; + + avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + gen7_mfd_init_avc_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 64 * 4, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen7_mfd_avc_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen7_mfd_avc_decode_init(ctx, decode_state, gen7_mfd_context); + + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen7_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen7_mfd_surface_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen7_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen7_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen7_mfd_avc_qm_state(ctx, decode_state, gen7_mfd_context); + gen7_mfd_avc_img_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen7_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_AVC, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j + 1]->buffer; + + if (j == 0 && slice_param->first_mb_in_slice) + gen7_mfd_avc_phantom_slice_first(ctx, pic_param, slice_param, gen7_mfd_context); + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen7_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen7_mfd_context); + gen7_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen7_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen7_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context); + gen7_mfd_avc_bsd_object(ctx, pic_param, slice_param, slice_data_bo, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen7_mfd_mpeg2_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferMPEG2 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + unsigned int width_in_mbs; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + + mpeg2_set_reference_surfaces( + ctx, + gen7_mfd_context->reference_surface, + decode_state, + pic_param + ); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->post_deblocking_output.valid = 0; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen7_mfd_mpeg2_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + unsigned int slice_concealment_disable_bit = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + if (IS_HASWELL(i965->intel.device_info)) { + /* XXX: disable concealment for now */ + slice_concealment_disable_bit = 1; + } + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code & 0xf) << 28 | /* f_code[1][1] */ + ((pic_param->f_code >> 4) & 0xf) << 24 | /* f_code[1][0] */ + ((pic_param->f_code >> 8) & 0xf) << 20 | /* f_code[0][1] */ + ((pic_param->f_code >> 12) & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + pic_param->picture_coding_type << 9); + OUT_BCS_BATCH(batch, + (slice_concealment_disable_bit << 31) | + ((ALIGN(pic_param->vertical_size, 16) / 16) - 1) << 16 | + ((ALIGN(pic_param->horizontal_size, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_mpeg2_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferMPEG2 * const gen_iq_matrix = &gen7_mfd_context->iq_matrix.mpeg2; + int i, j; + + /* Update internal QM state */ + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) { + VAIQMatrixBufferMPEG2 * const iq_matrix = + (VAIQMatrixBufferMPEG2 *)decode_state->iq_matrix->buffer; + + if (gen_iq_matrix->load_intra_quantiser_matrix == -1 || + iq_matrix->load_intra_quantiser_matrix) { + gen_iq_matrix->load_intra_quantiser_matrix = + iq_matrix->load_intra_quantiser_matrix; + if (iq_matrix->load_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->intra_quantiser_matrix[j]; + } + } + + if (gen_iq_matrix->load_non_intra_quantiser_matrix == -1 || + iq_matrix->load_non_intra_quantiser_matrix) { + gen_iq_matrix->load_non_intra_quantiser_matrix = + iq_matrix->load_non_intra_quantiser_matrix; + if (iq_matrix->load_non_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->non_intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->non_intra_quantiser_matrix[j]; + } + } + } + + /* Commit QM state to HW */ + for (i = 0; i < 2; i++) { + unsigned char *qm = NULL; + int qm_type; + + if (i == 0) { + if (gen_iq_matrix->load_intra_quantiser_matrix) { + qm = gen_iq_matrix->intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX; + } + } else { + if (gen_iq_matrix->load_non_intra_quantiser_matrix) { + qm = gen_iq_matrix->non_intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX; + } + } + + if (!qm) + continue; + + gen7_mfd_qm_state(ctx, qm_type, qm, 64, gen7_mfd_context); + } +} + +uint32_t mpeg2_get_slice_data_length(dri_bo *slice_data_bo, VASliceParameterBufferMPEG2 *slice_param) +{ + uint8_t *buf; + uint32_t buf_offset = slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3); + uint32_t buf_size = slice_param->slice_data_size - (slice_param->macroblock_offset >> 3); + uint32_t i = 0; + + dri_bo_map(slice_data_bo, 0); + buf = (uint8_t *)slice_data_bo->virtual + buf_offset; + + if (buf_size < 4) + return buf_size; + + while (i <= (buf_size - 4)) { + if (buf[i + 2] > 1) { + i += 3; + } else if (buf[i + 1]) { + i += 2; + } else if (buf[i] || buf[i + 2] != 1) { + i++; + } else { + break; + } + } + + if (i <= (buf_size - 4)) + buf_size = i; + + dri_bo_unmap(slice_data_bo); + return buf_size; +} + +static void +gen7_mfd_mpeg2_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + dri_bo *slice_data_bo, + VASliceParameterBufferMPEG2 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + int mb_count, vpos0, hpos0, vpos1, hpos1, is_field_pic_wa, is_field_pic = 0; + + if (pic_param->picture_coding_extension.bits.picture_structure == MPEG_TOP_FIELD || + pic_param->picture_coding_extension.bits.picture_structure == MPEG_BOTTOM_FIELD) + is_field_pic = 1; + is_field_pic_wa = is_field_pic && + gen7_mfd_context->wa_mpeg2_slice_vertical_position > 0; + + vpos0 = slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos0 = slice_param->slice_horizontal_position; + + if (next_slice_param == NULL) { + vpos1 = ALIGN(pic_param->vertical_size, 16) / 16 / (1 + is_field_pic); + hpos1 = 0; + } else { + vpos1 = next_slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos1 = next_slice_param->slice_horizontal_position; + } + + mb_count = (vpos1 * width_in_mbs + hpos1) - (vpos0 * width_in_mbs + hpos0); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_MPEG2_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + mpeg2_get_slice_data_length(slice_data_bo, slice_param)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + hpos0 << 24 | + vpos0 << 16 | + mb_count << 8 | + (next_slice_param == NULL) << 5 | + (next_slice_param == NULL) << 3 | + (slice_param->macroblock_offset & 0x7)); + OUT_BCS_BATCH(batch, + (slice_param->quantiser_scale_code << 24) | + (IS_HASWELL(i965->intel.device_info) ? (vpos1 << 8 | hpos1) : 0)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_mpeg2_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + VASliceParameterBufferMPEG2 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + gen7_mfd_mpeg2_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen7_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen7_mfd_surface_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen7_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen7_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen7_mfd_mpeg2_pic_state(ctx, decode_state, gen7_mfd_context); + gen7_mfd_mpeg2_qm_state(ctx, decode_state, gen7_mfd_context); + + if (gen7_mfd_context->wa_mpeg2_slice_vertical_position < 0) + gen7_mfd_context->wa_mpeg2_slice_vertical_position = + mpeg2_wa_slice_vertical_position(decode_state, pic_param); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen7_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_MPEG2, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen7_mfd_mpeg2_bsd_object(ctx, pic_param, slice_param, slice_data_bo, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static const int va_to_gen7_vc1_pic_type[5] = { + GEN7_VC1_I_PICTURE, + GEN7_VC1_P_PICTURE, + GEN7_VC1_B_PICTURE, + GEN7_VC1_BI_PICTURE, + GEN7_VC1_P_PICTURE, +}; + +static const int va_to_gen7_vc1_mv[4] = { + 1, /* 1-MV */ + 2, /* 1-MV half-pel */ + 3, /* 1-MV half-pef bilinear */ + 0, /* Mixed MV */ +}; + +static const int b_picture_scale_factor[21] = { + 128, 85, 170, 64, 192, + 51, 102, 153, 204, 43, + 215, 37, 74, 111, 148, + 185, 222, 32, 96, 160, + 224, +}; + +static const int va_to_gen7_vc1_condover[3] = { + 0, + 2, + 3 +}; + +static const int va_to_gen7_vc1_profile[4] = { + GEN7_VC1_SIMPLE_PROFILE, + GEN7_VC1_MAIN_PROFILE, + GEN7_VC1_RESERVED_PROFILE, + GEN7_VC1_ADVANCED_PROFILE +}; + +static void +gen7_mfd_free_vc1_surface(void **data) +{ + struct gen7_vc1_surface *gen7_vc1_surface = *data; + + if (!gen7_vc1_surface) + return; + + dri_bo_unreference(gen7_vc1_surface->dmv); + free(gen7_vc1_surface); + *data = NULL; +} + +static void +gen7_mfd_init_vc1_surface(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen7_vc1_surface *gen7_vc1_surface = obj_surface->private_data; + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + + obj_surface->free_private_data = gen7_mfd_free_vc1_surface; + + if (!gen7_vc1_surface) { + gen7_vc1_surface = calloc(sizeof(struct gen7_vc1_surface), 1); + assert(gen7_vc1_surface); + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_vc1_surface; + } + + gen7_vc1_surface->picture_type = pic_param->picture_fields.bits.picture_type; + + if (gen7_vc1_surface->dmv == NULL) { + gen7_vc1_surface->dmv = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 64, + 0x1000); + } +} + +static void +gen7_mfd_vc1_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferVC1 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int width_in_mbs; + int picture_type; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + picture_type = pic_param->picture_fields.bits.picture_type; + + intel_update_vc1_frame_store_index(ctx, + decode_state, + pic_param, + gen7_mfd_context->reference_surface); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen7_mfd_init_vc1_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 7 * 64, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value; + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + + if (gen7_mfd_context->bitplane_read_buffer.valid) { + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + int bitplane_width = ALIGN(width_in_mbs, 2) / 2; + int src_w, src_h; + uint8_t *src = NULL, *dst = NULL; + + assert(decode_state->bit_plane->buffer); + src = decode_state->bit_plane->buffer; + + bo = dri_bo_alloc(i965->intel.bufmgr, + "VC-1 Bitplane", + bitplane_width * height_in_mbs, + 0x1000); + assert(bo); + gen7_mfd_context->bitplane_read_buffer.bo = bo; + + dri_bo_map(bo, True); + assert(bo->virtual); + dst = bo->virtual; + + for (src_h = 0; src_h < height_in_mbs; src_h++) { + for(src_w = 0; src_w < width_in_mbs; src_w++) { + int src_index, dst_index; + int src_shift; + uint8_t src_value; + + src_index = (src_h * width_in_mbs + src_w) / 2; + src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4; + src_value = ((src[src_index] >> src_shift) & 0xf); + + if (picture_type == GEN7_VC1_SKIPPED_PICTURE){ + src_value |= 0x2; + } + + dst_index = src_w / 2; + dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4)); + } + + if (src_w & 1) + dst[src_w / 2] >>= 4; + + dst += bitplane_width; + } + + dri_bo_unmap(bo); + } else + gen7_mfd_context->bitplane_read_buffer.bo = NULL; +} + +static void +gen7_mfd_vc1_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + struct object_surface *obj_surface; + int alt_pquant_config = 0, alt_pquant_edge_mask = 0, alt_pq; + int dquant, dquantfrm, dqprofile, dqdbedge, dqsbedge, dqbilevel; + int unified_mv_mode; + int ref_field_pic_polarity = 0; + int scale_factor = 0; + int trans_ac_y = 0; + int dmv_surface_valid = 0; + int brfd = 0; + int fcm = 0; + int picture_type; + int profile; + int overlap; + int interpolation_mode = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + profile = va_to_gen7_vc1_profile[pic_param->sequence_fields.bits.profile]; + dquant = pic_param->pic_quantizer_fields.bits.dquant; + dquantfrm = pic_param->pic_quantizer_fields.bits.dq_frame; + dqprofile = pic_param->pic_quantizer_fields.bits.dq_profile; + dqdbedge = pic_param->pic_quantizer_fields.bits.dq_db_edge; + dqsbedge = pic_param->pic_quantizer_fields.bits.dq_sb_edge; + dqbilevel = pic_param->pic_quantizer_fields.bits.dq_binary_level; + alt_pq = pic_param->pic_quantizer_fields.bits.alt_pic_quantizer; + + if (dquant == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + } else if (dquant == 2) { + alt_pquant_config = 1; + alt_pquant_edge_mask = 0xf; + } else { + assert(dquant == 1); + if (dquantfrm == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + alt_pq = 0; + } else { + assert(dquantfrm == 1); + alt_pquant_config = 1; + + switch (dqprofile) { + case 3: + if (dqbilevel == 0) { + alt_pquant_config = 2; + alt_pquant_edge_mask = 0; + } else { + assert(dqbilevel == 1); + alt_pquant_config = 3; + alt_pquant_edge_mask = 0; + } + break; + + case 0: + alt_pquant_edge_mask = 0xf; + break; + + case 1: + if (dqdbedge == 3) + alt_pquant_edge_mask = 0x9; + else + alt_pquant_edge_mask = (0x3 << dqdbedge); + + break; + + case 2: + alt_pquant_edge_mask = (0x1 << dqsbedge); + break; + + default: + assert(0); + } + } + } + + if (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation) { + assert(pic_param->mv_fields.bits.mv_mode2 < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode2]; + } else { + assert(pic_param->mv_fields.bits.mv_mode < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode]; + } + + if (pic_param->sequence_fields.bits.interlace == 1 && + pic_param->picture_fields.bits.frame_coding_mode != 0) { /* frame-interlace or field-interlace */ + /* FIXME: calculate reference field picture polarity */ + assert(0); + ref_field_pic_polarity = 0; + } + + if (pic_param->b_picture_fraction < 21) + scale_factor = b_picture_scale_factor[pic_param->b_picture_fraction]; + + picture_type = va_to_gen7_vc1_pic_type[pic_param->picture_fields.bits.picture_type]; + + if (profile == GEN7_VC1_ADVANCED_PROFILE && + picture_type == GEN7_VC1_I_PICTURE) + picture_type = GEN7_VC1_BI_PICTURE; + + if (picture_type == GEN7_VC1_I_PICTURE || picture_type == GEN7_VC1_BI_PICTURE) /* I picture */ + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2; + else { + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1; + /* + * 8.3.6.2.1 Transform Type Selection + * If variable-sized transform coding is not enabled, + * then the 8x8 transform shall be used for all blocks. + * it is also MFX_VC1_PIC_STATE requirement. + */ + if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) { + pic_param->transform_fields.bits.mb_level_transform_type_flag = 1; + pic_param->transform_fields.bits.frame_level_transform_type = 0; + } + } + + + if (picture_type == GEN7_VC1_B_PICTURE) { + struct gen7_vc1_surface *gen7_vc1_surface = NULL; + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface) + gen7_vc1_surface = obj_surface->private_data; + + if (!gen7_vc1_surface || + (va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_I_PICTURE || + va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_BI_PICTURE)) + dmv_surface_valid = 0; + else + dmv_surface_valid = 1; + } + + assert(pic_param->picture_fields.bits.frame_coding_mode < 3); + + if (pic_param->picture_fields.bits.frame_coding_mode < 2) + fcm = pic_param->picture_fields.bits.frame_coding_mode; + else { + if (pic_param->picture_fields.bits.top_field_first) + fcm = 2; + else + fcm = 3; + } + + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_B_PICTURE) { /* B picture */ + brfd = pic_param->reference_fields.bits.reference_distance; + brfd = (scale_factor * brfd) >> 8; + brfd = pic_param->reference_fields.bits.reference_distance - brfd - 1; + + if (brfd < 0) + brfd = 0; + } + + overlap = pic_param->sequence_fields.bits.overlap; + + if (overlap) { + overlap = 0; + if (profile != GEN7_VC1_ADVANCED_PROFILE) { + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9 && + pic_param->picture_fields.bits.picture_type != GEN7_VC1_B_PICTURE) { + overlap = 1; + } + }else { + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_P_PICTURE && + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_I_PICTURE || + pic_param->picture_fields.bits.picture_type == GEN7_VC1_BI_PICTURE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } else if (va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 2 || + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 3) { + overlap = 1; + } + } + } + } + + assert(pic_param->conditional_overlap_flag < 3); + assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */ + + if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear)) + interpolation_mode = 9; /* Half-pel bilinear */ + else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel)) + interpolation_mode = 1; /* Half-pel bicubic */ + else + interpolation_mode = 0; /* Quarter-pel bicubic */ + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + (((ALIGN(pic_param->coded_height, 16) / 16) - 1) << 16) | + ((ALIGN(pic_param->coded_width, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, + ((ALIGN(pic_param->coded_width, 16) / 16 + 1) / 2 - 1) << 24 | + dmv_surface_valid << 15 | + (pic_param->pic_quantizer_fields.bits.quantizer == 0) << 14 | /* implicit quantizer */ + pic_param->rounding_control << 13 | + pic_param->sequence_fields.bits.syncmarker << 12 | + interpolation_mode << 8 | + 0 << 7 | /* FIXME: scale up or down ??? */ + pic_param->range_reduction_frame << 6 | + pic_param->entrypoint_fields.bits.loopfilter << 5 | + overlap << 4 | + !pic_param->picture_fields.bits.is_first_field << 3 | + (pic_param->sequence_fields.bits.profile == 3) << 0); + OUT_BCS_BATCH(batch, + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] << 29 | + picture_type << 26 | + fcm << 24 | + alt_pq << 16 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale << 8 | + scale_factor << 0); + OUT_BCS_BATCH(batch, + unified_mv_mode << 28 | + pic_param->mv_fields.bits.four_mv_switch << 27 | + pic_param->fast_uvmc_flag << 26 | + ref_field_pic_polarity << 25 | + pic_param->reference_fields.bits.num_reference_pictures << 24 | + pic_param->reference_fields.bits.reference_distance << 20 | + pic_param->reference_fields.bits.reference_distance << 16 | /* FIXME: ??? */ + pic_param->mv_fields.bits.extended_dmv_range << 10 | + pic_param->mv_fields.bits.extended_mv_range << 8 | + alt_pquant_edge_mask << 4 | + alt_pquant_config << 2 | + pic_param->pic_quantizer_fields.bits.half_qp << 1 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0); + OUT_BCS_BATCH(batch, + !!pic_param->bitplane_present.value << 31 | + !pic_param->bitplane_present.flags.bp_forward_mb << 30 | + !pic_param->bitplane_present.flags.bp_mv_type_mb << 29 | + !pic_param->bitplane_present.flags.bp_skip_mb << 28 | + !pic_param->bitplane_present.flags.bp_direct_mb << 27 | + !pic_param->bitplane_present.flags.bp_overflags << 26 | + !pic_param->bitplane_present.flags.bp_ac_pred << 25 | + !pic_param->bitplane_present.flags.bp_field_tx << 24 | + pic_param->mv_fields.bits.mv_table << 20 | + pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 | + pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 | + pic_param->transform_fields.bits.frame_level_transform_type << 12 | + pic_param->transform_fields.bits.mb_level_transform_type_flag << 11 | + pic_param->mb_mode_table << 8 | + trans_ac_y << 6 | + pic_param->transform_fields.bits.transform_ac_codingset_idx1 << 4 | + pic_param->transform_fields.bits.intra_transform_dc_table << 3 | + pic_param->cbp_table << 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_vc1_pred_pipe_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + int intensitycomp_single; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + intensitycomp_single = (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation); + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_VC1_PRED_PIPE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + 0 << 14 | /* FIXME: double ??? */ + 0 << 12 | + intensitycomp_single << 10 | + intensitycomp_single << 8 | + 0 << 4 | /* FIXME: interlace mode */ + 0); + OUT_BCS_BATCH(batch, + pic_param->luma_shift << 16 | + pic_param->luma_scale << 0); /* FIXME: Luma Scaling */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen7_mfd_vc1_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + dri_bo *dmv_read_buffer = NULL, *dmv_write_buffer = NULL; + + obj_surface = decode_state->render_object; + + if (obj_surface && obj_surface->private_data) { + dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface && obj_surface->private_data) { + dmv_read_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_VC1_DIRECTMODE_STATE | (3 - 2)); + + if (dmv_write_buffer) + OUT_BCS_RELOC(batch, dmv_write_buffer, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + if (dmv_read_buffer) + OUT_BCS_RELOC(batch, dmv_read_buffer, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen7_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offset, int profile) +{ + int out_slice_data_bit_offset; + int slice_header_size = in_slice_data_bit_offset / 8; + int i, j; + + if (profile != 3) + out_slice_data_bit_offset = in_slice_data_bit_offset; + else { + for (i = 0, j = 0; i < slice_header_size; i++, j++) { + if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) { + i++, j += 2; + } + } + + out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8; + } + + return out_slice_data_bit_offset; +} + +static void +gen7_mfd_vc1_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + VASliceParameterBufferVC1 *slice_param, + VASliceParameterBufferVC1 *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int next_slice_start_vert_pos; + int macroblock_offset; + uint8_t *slice_data = NULL; + + dri_bo_map(slice_data_bo, 0); + slice_data = (uint8_t *)(slice_data_bo->virtual + slice_param->slice_data_offset); + macroblock_offset = gen7_mfd_vc1_get_macroblock_bit_offset(slice_data, + slice_param->macroblock_offset, + pic_param->sequence_fields.bits.profile); + dri_bo_unmap(slice_data_bo); + + if (next_slice_param) + next_slice_start_vert_pos = next_slice_param->slice_vertical_position; + else + next_slice_start_vert_pos = ALIGN(pic_param->coded_height, 16) / 16; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_VC1_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_vertical_position << 16 | + next_slice_start_vert_pos << 0); + OUT_BCS_BATCH(batch, + (macroblock_offset & 0x7)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_vc1_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + VASliceParameterBufferVC1 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + gen7_mfd_vc1_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen7_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen7_mfd_surface_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen7_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen7_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen7_mfd_vc1_pic_state(ctx, decode_state, gen7_mfd_context); + gen7_mfd_vc1_pred_pipe_state(ctx, decode_state, gen7_mfd_context); + gen7_mfd_vc1_directmode_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen7_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_VC1, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen7_mfd_vc1_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen7_mfd_jpeg_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface; + VAPictureParameterBufferJPEGBaseline *pic_param; + int subsampling = SUBSAMPLE_YUV420; + int fourcc = VA_FOURCC_IMC3; + + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) { + subsampling = SUBSAMPLE_YUV400; + fourcc = VA_FOURCC_Y800; + } else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV420; + fourcc = VA_FOURCC_IMC3; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV444; + fourcc = VA_FOURCC_444P; + } else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV411; + fourcc = VA_FOURCC_411P; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else + assert(0); + } else { + assert(0); + } + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, fourcc, subsampling); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + gen7_mfd_context->post_deblocking_output.bo = NULL; + gen7_mfd_context->post_deblocking_output.valid = 0; + + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static const int va_to_gen7_jpeg_rotation[4] = { + GEN7_JPEG_ROTATION_0, + GEN7_JPEG_ROTATION_90, + GEN7_JPEG_ROTATION_180, + GEN7_JPEG_ROTATION_270 +}; + +static void +gen7_mfd_jpeg_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + int chroma_type = GEN7_YUV420; + int frame_width_in_blks; + int frame_height_in_blks; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) + chroma_type = GEN7_YUV400; + else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV420; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422H_2Y; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV444; + else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV411; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_2Y; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) + chroma_type = GEN7_YUV422H_4Y; + else if (h2 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_4Y; + else + assert(0); + } + + if (chroma_type == GEN7_YUV400 || + chroma_type == GEN7_YUV444 || + chroma_type == GEN7_YUV422V_2Y) { + frame_width_in_blks = ((pic_param->picture_width + 7) / 8); + frame_height_in_blks = ((pic_param->picture_height + 7) / 8); + } else if (chroma_type == GEN7_YUV411) { + frame_width_in_blks = ((pic_param->picture_width + 31) / 32) * 4; + frame_height_in_blks = ((pic_param->picture_height + 31) / 32) * 4; + } else { + frame_width_in_blks = ((pic_param->picture_width + 15) / 16) * 2; + frame_height_in_blks = ((pic_param->picture_height + 15) / 16) * 2; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_JPEG_PIC_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (va_to_gen7_jpeg_rotation[0] << 4) | /* without rotation */ + (chroma_type << 0)); + OUT_BCS_BATCH(batch, + ((frame_height_in_blks - 1) << 16) | /* FrameHeightInBlks */ + ((frame_width_in_blks - 1) << 0)); /* FrameWidthInBlks */ + ADVANCE_BCS_BATCH(batch); +} + +static const int va_to_gen7_jpeg_hufftable[2] = { + MFX_HUFFTABLE_ID_Y, + MFX_HUFFTABLE_ID_UV +}; + +static void +gen7_mfd_jpeg_huff_table_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context, + int num_tables) +{ + VAHuffmanTableBufferJPEGBaseline *huffman_table; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int index; + + if (!decode_state->huffman_table || !decode_state->huffman_table->buffer) + return; + + huffman_table = (VAHuffmanTableBufferJPEGBaseline *)decode_state->huffman_table->buffer; + + for (index = 0; index < num_tables; index++) { + int id = va_to_gen7_jpeg_hufftable[index]; + if (!huffman_table->load_huffman_table[index]) + continue; + BEGIN_BCS_BATCH(batch, 53); + OUT_BCS_BATCH(batch, MFX_JPEG_HUFF_TABLE_STATE | (53 - 2)); + OUT_BCS_BATCH(batch, id); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_dc_codes, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].dc_values, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_ac_codes, 16); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].ac_values, 164); + ADVANCE_BCS_BATCH(batch); + } +} + +static const int va_to_gen7_jpeg_qm[5] = { + -1, + MFX_QM_JPEG_LUMA_Y_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CB_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CR_QUANTIZER_MATRIX, + MFX_QM_JPEG_ALPHA_QUANTIZER_MATRIX +}; + +static void +gen7_mfd_jpeg_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferJPEGBaseline *pic_param; + VAIQMatrixBufferJPEGBaseline *iq_matrix; + int index; + + if (!decode_state->iq_matrix || !decode_state->iq_matrix->buffer) + return; + + iq_matrix = (VAIQMatrixBufferJPEGBaseline *)decode_state->iq_matrix->buffer; + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + assert(pic_param->num_components <= 3); + + for (index = 0; index < pic_param->num_components; index++) { + int id = pic_param->components[index].component_id - pic_param->components[0].component_id + 1; + int qm_type; + unsigned char *qm = iq_matrix->quantiser_table[pic_param->components[index].quantiser_table_selector]; + unsigned char raster_qm[64]; + int j; + + if (id > 4 || id < 1) + continue; + + if (!iq_matrix->load_quantiser_table[pic_param->components[index].quantiser_table_selector]) + continue; + + qm_type = va_to_gen7_jpeg_qm[id]; + + for (j = 0; j < 64; j++) + raster_qm[zigzag_direct[j]] = qm[j]; + + gen7_mfd_qm_state(ctx, qm_type, raster_qm, 64, gen7_mfd_context); + } +} + +static void +gen7_mfd_jpeg_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferJPEGBaseline *pic_param, + VASliceParameterBufferJPEGBaseline *slice_param, + VASliceParameterBufferJPEGBaseline *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int scan_component_mask = 0; + int i; + + assert(slice_param->num_components > 0); + assert(slice_param->num_components < 4); + assert(slice_param->num_components <= pic_param->num_components); + + for (i = 0; i < slice_param->num_components; i++) { + switch (slice_param->components[i].component_selector - pic_param->components[0].component_id + 1) { + case 1: + scan_component_mask |= (1 << 0); + break; + case 2: + scan_component_mask |= (1 << 1); + break; + case 3: + scan_component_mask |= (1 << 2); + break; + default: + assert(0); + break; + } + } + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_JPEG_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + slice_param->slice_horizontal_position << 16 | + slice_param->slice_vertical_position << 0); + OUT_BCS_BATCH(batch, + ((slice_param->num_components != 1) << 30) | /* interleaved */ + (scan_component_mask << 27) | /* scan components */ + (0 << 26) | /* disable interrupt allowed */ + (slice_param->num_mcus << 0)); /* MCU count */ + OUT_BCS_BATCH(batch, + (slice_param->restart_interval << 0)); /* RestartInterval */ + ADVANCE_BCS_BATCH(batch); +} + +/* Workaround for JPEG decoding on Ivybridge */ + +static struct { + int width; + int height; + unsigned char data[32]; + int data_size; + int data_bit_offset; + int qp; +} gen7_jpeg_wa_clip = { + 16, + 16, + { + 0x65, 0xb8, 0x40, 0x32, 0x13, 0xfd, 0x06, 0x6c, + 0xfc, 0x0a, 0x50, 0x71, 0x5c, 0x00 + }, + 14, + 40, + 28, +}; + +static void +gen7_jpeg_wa_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus status; + struct object_surface *obj_surface; + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + + status = i965_CreateSurfaces(ctx, + gen7_jpeg_wa_clip.width, + gen7_jpeg_wa_clip.height, + VA_RT_FORMAT_YUV420, + 1, + &gen7_mfd_context->jpeg_wa_surface_id); + assert(status == VA_STATUS_SUCCESS); + + obj_surface = SURFACE(gen7_mfd_context->jpeg_wa_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen7_mfd_context->jpeg_wa_surface_object = obj_surface; + + if (!gen7_mfd_context->jpeg_wa_slice_data_bo) { + gen7_mfd_context->jpeg_wa_slice_data_bo = dri_bo_alloc(i965->intel.bufmgr, + "JPEG WA data", + 0x1000, + 0x1000); + dri_bo_subdata(gen7_mfd_context->jpeg_wa_slice_data_bo, + 0, + gen7_jpeg_wa_clip.data_size, + gen7_jpeg_wa_clip.data); + } +} + +static void +gen7_jpeg_wa_pipe_mode_select(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (0 << 9) | /* Post Deblocking Output */ + (1 << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (MFX_FORMAT_AVC << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_surface_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_width - 1) << 18) | + ((obj_surface->orig_height - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (obj_surface->y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (0 << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_pipe_buf_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *intra_bo; + int i; + + intra_bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + 128 * 64, + 0x1000); + + BEGIN_BCS_BATCH(batch, 24); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (24 - 2)); + OUT_BCS_RELOC(batch, + obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); /* post deblocking */ + + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + + OUT_BCS_RELOC(batch, + intra_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + + /* DW 7..22 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); /* ignore DW23 for decoding */ + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(intra_bo); +} + +static void +gen7_jpeg_wa_bsp_buf_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *bsd_mpc_bo, *mpr_bo; + + bsd_mpc_bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + 11520, /* 1.5 * 120 * 64 */ + 0x1000); + + mpr_bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + 7680, /* 1. 0 * 120 * 64 */ + 0x1000); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (4 - 2)); + + OUT_BCS_RELOC(batch, + bsd_mpc_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_RELOC(batch, + mpr_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(bsd_mpc_bo); + dri_bo_unreference(mpr_bo); +} + +static void +gen7_jpeg_wa_avc_qm_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + +} + +static void +gen7_jpeg_wa_avc_img_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct = 0; + int mbaff_frame_flag = 0; + unsigned int width_in_mbs = 1, height_in_mbs = 1; + + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + OUT_BCS_BATCH(batch, + (width_in_mbs * height_in_mbs - 1)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + (0 << 24) | + (0 << 16) | + (0 << 14) | + (0 << 13) | + (0 << 12) | /* differ from GEN6 */ + (0 << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (1 << 10) | /* 4:2:0 */ + (1 << 7) | /* CABAC */ + (0 << 6) | + (0 << 5) | + (0 << 4) | + (0 << 3) | + (1 << 2) | + (mbaff_frame_flag << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_avc_directmode_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 69); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (69 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + } + + /* the current decoding frame/field */ + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + + /* POC List */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_ind_obj_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, + gen7_mfd_context->jpeg_wa_slice_data_bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0x80000000); /* must set, up to 2G */ + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_avc_bsd_object(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, gen7_jpeg_wa_clip.data_size); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((gen7_jpeg_wa_clip.data_bit_offset >> 3) << 16) | + (0 << 5) | + (0 << 4) | + (1 << 3) | /* LastSlice Flag */ + (gen7_jpeg_wa_clip.data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_jpeg_wa_avc_slice_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int slice_hor_pos = 0, slice_ver_pos = 0, next_slice_hor_pos = 0, next_slice_ver_pos = 1; + int num_ref_idx_l0 = 0, num_ref_idx_l1 = 0; + int first_mb_in_slice = 0; + int slice_type = SLICE_TYPE_I; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (0 << 29) | + (1 << 27) | /* disable Deblocking */ + (0 << 24) | + (gen7_jpeg_wa_clip.qp << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, (1 << 19)); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen7_mfd_jpeg_wa(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + gen7_jpeg_wa_init(ctx, gen7_mfd_context); + intel_batchbuffer_emit_mi_flush(batch); + gen7_jpeg_wa_pipe_mode_select(ctx, gen7_mfd_context); + gen7_jpeg_wa_surface_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_pipe_buf_addr_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_bsp_buf_base_addr_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_avc_qm_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_avc_img_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_ind_obj_base_addr_state(ctx, gen7_mfd_context); + + gen7_jpeg_wa_avc_directmode_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_avc_slice_state(ctx, gen7_mfd_context); + gen7_jpeg_wa_avc_bsd_object(ctx, gen7_mfd_context); +} + +void +gen7_mfd_jpeg_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + VASliceParameterBufferJPEGBaseline *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j, max_selector = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + /* Currently only support Baseline DCT */ + gen7_mfd_jpeg_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + gen7_mfd_jpeg_wa(ctx, gen7_mfd_context); + intel_batchbuffer_emit_mi_flush(batch); + gen7_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen7_mfd_surface_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen7_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen7_mfd_jpeg_pic_state(ctx, decode_state, gen7_mfd_context); + gen7_mfd_jpeg_qm_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen7_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + int component; + + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + for (component = 0; component < slice_param->num_components; component++) { + if (max_selector < slice_param->components[component].dc_table_selector) + max_selector = slice_param->components[component].dc_table_selector; + + if (max_selector < slice_param->components[component].ac_table_selector) + max_selector = slice_param->components[component].ac_table_selector; + } + + slice_param++; + } + } + + assert(max_selector < 2); + gen7_mfd_jpeg_huff_table_state(ctx, decode_state, gen7_mfd_context, max_selector + 1); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen7_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen7_mfd_jpeg_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static VAStatus +gen7_mfd_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) + +{ + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + assert(gen7_mfd_context); + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + gen7_mfd_context->wa_mpeg2_slice_vertical_position = -1; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen7_mfd_mpeg2_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + gen7_mfd_avc_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + gen7_mfd_vc1_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileJPEGBaseline: + gen7_mfd_jpeg_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + default: + assert(0); + break; + } + + vaStatus = VA_STATUS_SUCCESS; + +out: + return vaStatus; +} + +static void +gen7_mfd_context_destroy(void *hw_context) +{ + VADriverContextP ctx; + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + + ctx = (VADriverContextP)(gen7_mfd_context->driver_context); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->jpeg_wa_slice_data_bo); + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) { + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + gen7_mfd_context->jpeg_wa_surface_object = NULL; + } + + intel_batchbuffer_free(gen7_mfd_context->base.batch); + free(gen7_mfd_context); +} + +static void gen7_mfd_mpeg2_context_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen7_mfd_context->iq_matrix.mpeg2.load_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_non_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_non_intra_quantiser_matrix = -1; +} + +struct hw_context * +gen7_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct gen7_mfd_context *gen7_mfd_context = calloc(1, sizeof(struct gen7_mfd_context)); + int i; + + assert(gen7_mfd_context); + gen7_mfd_context->base.destroy = gen7_mfd_context_destroy; + gen7_mfd_context->base.run = gen7_mfd_decode_picture; + gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; + gen7_mfd_context->reference_surface[i].frame_store_id = -1; + gen7_mfd_context->reference_surface[i].obj_surface = NULL; + } + + gen7_mfd_context->jpeg_wa_surface_id = VA_INVALID_SURFACE; + gen7_mfd_context->jpeg_wa_surface_object = NULL; + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen7_mfd_mpeg2_context_init(ctx, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + gen7_mfd_avc_context_init(ctx, gen7_mfd_context); + break; + default: + break; + } + + gen7_mfd_context->driver_context = ctx; + return (struct hw_context *)gen7_mfd_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.h new file mode 100644 index 000000000..f268f5a83 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_mfd.h @@ -0,0 +1,100 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef _GEN7_MFD_H_ +#define _GEN7_MFD_H_ + +#include +#include +#include +#include +#include "i965_decoder.h" + +#define GEN7_VC1_I_PICTURE 0 +#define GEN7_VC1_P_PICTURE 1 +#define GEN7_VC1_B_PICTURE 2 +#define GEN7_VC1_BI_PICTURE 3 +#define GEN7_VC1_SKIPPED_PICTURE 4 + +#define GEN7_VC1_SIMPLE_PROFILE 0 +#define GEN7_VC1_MAIN_PROFILE 1 +#define GEN7_VC1_ADVANCED_PROFILE 2 +#define GEN7_VC1_RESERVED_PROFILE 3 + +#define GEN7_JPEG_ROTATION_0 0 +#define GEN7_JPEG_ROTATION_90 1 +#define GEN7_JPEG_ROTATION_270 2 +#define GEN7_JPEG_ROTATION_180 3 + +#define GEN7_YUV400 0 +#define GEN7_YUV420 1 +#define GEN7_YUV422H_2Y 2 +#define GEN7_YUV444 3 +#define GEN7_YUV411 4 +#define GEN7_YUV422V_2Y 5 +#define GEN7_YUV422H_4Y 6 +#define GEN7_YUV422V_4Y 7 + +struct gen7_vc1_surface +{ + dri_bo *dmv; + int picture_type; +}; + +struct hw_context; + +struct gen7_mfd_context +{ + struct hw_context base; + + union { + VAIQMatrixBufferMPEG2 mpeg2; + VAIQMatrixBufferH264 h264; /* flat scaling lists (default) */ + } iq_matrix; + + GenFrameStoreContext fs_ctx; + GenFrameStore reference_surface[MAX_GEN_REFERENCE_FRAMES]; + GenBuffer post_deblocking_output; + GenBuffer pre_deblocking_output; + GenBuffer intra_row_store_scratch_buffer; + GenBuffer deblocking_filter_row_store_scratch_buffer; + GenBuffer bsd_mpc_row_store_scratch_buffer; + GenBuffer mpr_row_store_scratch_buffer; + GenBuffer bitplane_read_buffer; + GenBuffer segmentation_buffer; + + VASurfaceID jpeg_wa_surface_id; + struct object_surface *jpeg_wa_surface_object; + dri_bo *jpeg_wa_slice_data_bo; + + int wa_mpeg2_slice_vertical_position; + + void *driver_context; +}; + +#endif /* _GEN7_MFD_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_vme.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_vme.c new file mode 100644 index 000000000..9da44d1ea --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen7_vme.c @@ -0,0 +1,1079 @@ +/* + * Copyright © 2010-2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" +#ifdef SURFACE_STATE_PADDED_SIZE +#undef SURFACE_STATE_PADDED_SIZE +#endif + +#define VME_MSG_LENGTH 32 + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN7 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define CURBE_ALLOCATION_SIZE 37 /* in 256-bit */ +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) /* in byte, it should be less than or equal to CURBE_ALLOCATION_SIZE * 32 */ +#define CURBE_URB_ENTRY_LENGTH 4 /* in 256-bit, it should be less than or equal to CURBE_TOTAL_DATA_LENGTH / 32 */ + +enum VIDEO_CODING_TYPE{ + VIDEO_CODING_AVC = 0, + VIDEO_CODING_MPEG2, + VIDEO_CODING_SUM +}; + +enum AVC_VME_KERNEL_TYPE{ + AVC_VME_INTRA_SHADER = 0, + AVC_VME_INTER_SHADER, + AVC_VME_BATCHBUFFER, + AVC_VME_BINTER_SHADER, + AVC_VME_KERNEL_SUM +}; + +enum MPEG2_VME_KERNEL_TYPE{ + MPEG2_VME_INTER_SHADER = 0, + MPEG2_VME_BATCHBUFFER, + MPEG2_VME_KERNEL_SUM +}; + + +static const uint32_t gen7_vme_intra_frame[][4] = { +#include "shaders/vme/intra_frame_ivb.g7b" +}; + +static const uint32_t gen7_vme_inter_frame[][4] = { +#include "shaders/vme/inter_frame_ivb.g7b" +}; + +static const uint32_t gen7_vme_batchbuffer[][4] = { +#include "shaders/vme/batchbuffer.g7b" +}; + +static const uint32_t gen7_vme_binter_frame[][4] = { +#include "shaders/vme/inter_bframe_ivb.g7b" +}; + +static struct i965_kernel gen7_vme_kernels[] = { + { + "AVC VME Intra Frame", + AVC_VME_INTRA_SHADER, /*index*/ + gen7_vme_intra_frame, + sizeof(gen7_vme_intra_frame), + NULL + }, + { + "AVC VME inter Frame", + AVC_VME_INTER_SHADER, + gen7_vme_inter_frame, + sizeof(gen7_vme_inter_frame), + NULL + }, + { + "AVC VME BATCHBUFFER", + AVC_VME_BATCHBUFFER, + gen7_vme_batchbuffer, + sizeof(gen7_vme_batchbuffer), + NULL + }, + { + "AVC VME binter Frame", + AVC_VME_BINTER_SHADER, + gen7_vme_binter_frame, + sizeof(gen7_vme_binter_frame), + NULL + } +}; + +static const uint32_t gen7_vme_mpeg2_inter_frame[][4] = { +#include "shaders/vme/mpeg2_inter_ivb.g7b" +}; + +static const uint32_t gen7_vme_mpeg2_batchbuffer[][4] = { +#include "shaders/vme/batchbuffer.g7b" +}; + +static struct i965_kernel gen7_vme_mpeg2_kernels[] = { + { + "MPEG2 VME inter Frame", + MPEG2_VME_INTER_SHADER, + gen7_vme_mpeg2_inter_frame, + sizeof(gen7_vme_mpeg2_inter_frame), + NULL + }, + { + "MPEG2 VME BATCHBUFFER", + MPEG2_VME_BATCHBUFFER, + gen7_vme_mpeg2_batchbuffer, + sizeof(gen7_vme_mpeg2_batchbuffer), + NULL + }, +}; + +/* only used for VME source surface state */ +static void +gen7_vme_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_surface2_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen7_vme_media_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_rw_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen7_vme_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES; + else + vme_context->vme_output.size_block = INTER_VME_OUTPUT_IN_BYTES; + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen7_vme_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 32; /* 2 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static VAStatus +gen7_vme_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen7_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen7_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); + + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen7_vme_source_surface_state); + + if (slice_type == SLICE_TYPE_B) + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen7_vme_source_surface_state); + } + + /* VME output */ + gen7_vme_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen7_vme_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen7_vme_interface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = vme_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < vme_context->vme_kernel_sum; i++) { + struct i965_kernel *kernel; + kernel = &vme_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 1; /* FIXME: */ + desc->desc2.sampler_state_pointer = (vme_context->vme_state.bo->offset >> 5); + desc->desc3.binding_table_entry_count = 1; /* FIXME: */ + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = CURBE_URB_ENTRY_LENGTH; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + /*Sampler State(VME state pointer)*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + (1 << 2), // + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc2), + vme_context->vme_state.bo); + desc++; + } + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen7_vme_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned char *constant_buffer; + unsigned int *vme_state_message; + int mv_num; + + vme_state_message = (unsigned int *)vme_context->vme_state_message; + mv_num = 32; + + if (encoder_context->codec == CODEC_H264) { + if (vme_context->h264_level >= 30) { + mv_num = 16; + + if (vme_context->h264_level >= 31) + mv_num = 8; + } + } else if (encoder_context->codec == CODEC_MPEG2) { + mv_num = 2; + } + + + vme_state_message[31] = mv_num; + + dri_bo_map(vme_context->gpe_context.curbe.bo, 1); + assert(vme_context->gpe_context.curbe.bo->virtual); + constant_buffer = vme_context->gpe_context.curbe.bo->virtual; + + /* Pass the required constant info into the constant buffer */ + memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); + + dri_bo_unmap( vme_context->gpe_context.curbe.bo); + + return VA_STATUS_SUCCESS; +} + + +static VAStatus gen7_vme_avc_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *vme_state_message; + unsigned int *mb_cost_table; + int i; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + unsigned int is_low_quality = (encoder_context->quality_level == ENCODER_LOW_QUALITY); + + mb_cost_table = (unsigned int *)vme_context->vme_state_message; + //building VME state message + dri_bo_map(vme_context->vme_state.bo, 1); + assert(vme_context->vme_state.bo->virtual); + vme_state_message = (unsigned int *)vme_context->vme_state.bo->virtual; + + if (((slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP)) && + !is_low_quality) { + vme_state_message[0] = 0x01010101; + vme_state_message[1] = 0x10010101; + vme_state_message[2] = 0x0F0F0F0F; + vme_state_message[3] = 0x100F0F0F; + vme_state_message[4] = 0x01010101; + vme_state_message[5] = 0x10010101; + vme_state_message[6] = 0x0F0F0F0F; + vme_state_message[7] = 0x100F0F0F; + vme_state_message[8] = 0x01010101; + vme_state_message[9] = 0x10010101; + vme_state_message[10] = 0x0F0F0F0F; + vme_state_message[11] = 0x000F0F0F; + vme_state_message[12] = 0x00; + vme_state_message[13] = 0x00; + } else { + vme_state_message[0] = 0x10010101; + vme_state_message[1] = 0x100F0F0F; + vme_state_message[2] = 0x10010101; + vme_state_message[3] = 0x000F0F0F; + vme_state_message[4] = 0; + vme_state_message[5] = 0; + vme_state_message[6] = 0; + vme_state_message[7] = 0; + vme_state_message[8] = 0; + vme_state_message[9] = 0; + vme_state_message[10] = 0; + vme_state_message[11] = 0; + vme_state_message[12] = 0; + vme_state_message[13] = 0; + } + + vme_state_message[14] = (mb_cost_table[2] & 0xFFFF); + vme_state_message[15] = 0; + vme_state_message[16] = mb_cost_table[0]; + vme_state_message[17] = mb_cost_table[1]; + vme_state_message[18] = mb_cost_table[3]; + vme_state_message[19] = mb_cost_table[4]; + + for(i = 20; i < 32; i++) { + vme_state_message[i] = 0; + } + + dri_bo_unmap( vme_context->vme_state.bo); + return VA_STATUS_SUCCESS; +} + +static VAStatus gen7_vme_mpeg2_state_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *vme_state_message; + int i; + unsigned int *mb_cost_table; + + mb_cost_table = (unsigned int *)vme_context->vme_state_message; + + //building VME state message + dri_bo_map(vme_context->vme_state.bo, 1); + assert(vme_context->vme_state.bo->virtual); + vme_state_message = (unsigned int *)vme_context->vme_state.bo->virtual; + + vme_state_message[0] = 0x01010101; + vme_state_message[1] = 0x10010101; + vme_state_message[2] = 0x0F0F0F0F; + vme_state_message[3] = 0x100F0F0F; + vme_state_message[4] = 0x01010101; + vme_state_message[5] = 0x10010101; + vme_state_message[6] = 0x0F0F0F0F; + vme_state_message[7] = 0x100F0F0F; + vme_state_message[8] = 0x01010101; + vme_state_message[9] = 0x10010101; + vme_state_message[10] = 0x0F0F0F0F; + vme_state_message[11] = 0x000F0F0F; + vme_state_message[12] = 0x00; + vme_state_message[13] = 0x00; + + vme_state_message[14] = (mb_cost_table[2] & 0xFFFF); + vme_state_message[15] = 0; + vme_state_message[16] = mb_cost_table[0]; + vme_state_message[17] = 0; + vme_state_message[18] = mb_cost_table[3]; + vme_state_message[19] = mb_cost_table[4]; + + for(i = 20; i < 32; i++) { + vme_state_message[i] = 0; + } + //vme_state_message[16] = 0x42424242; //cost function LUT set 0 for Intra + + dri_bo_unmap( vme_context->vme_state.bo); + return VA_STATUS_SUCCESS; +} + +static void +gen7_vme_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s, j; + unsigned int *command_ptr; + + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + int slice_mb_begin = slice_param->macroblock_address; + int slice_mb_number = slice_param->num_macroblocks; + unsigned int mb_intra_ub; + int slice_mb_x = slice_param->macroblock_address % mb_width; + + for (i = 0; i < slice_mb_number;) { + int mb_count = i + slice_mb_begin; + + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ((encoder_context->quality_level << 24) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + i += 1; + } + + slice_param++; + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + + +static void gen7_vme_media_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + dri_bo *bo; + + i965_gpe_context_init(ctx, &vme_context->gpe_context); + + /* VME output buffer */ + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + /* VME state */ + dri_bo_unreference(vme_context->vme_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 1024*16, 64); + assert(bo); + vme_context->vme_state.bo = bo; +} + +static void gen7_vme_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + int s; + bool allow_hwscore = true; + int kernel_shader; + unsigned int is_low_quality = (encoder_context->quality_level == ENCODER_LOW_QUALITY); + + if (is_low_quality) + allow_hwscore = false; + else { + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + if ((pSliceParameter->macroblock_address % width_in_mbs)) { + allow_hwscore = false; + break; + } + } + } + + if ((pSliceParameter->slice_type == SLICE_TYPE_I) || + (pSliceParameter->slice_type == SLICE_TYPE_SI)) { + kernel_shader = AVC_VME_INTRA_SHADER; + } else if ((pSliceParameter->slice_type == SLICE_TYPE_P) || + (pSliceParameter->slice_type == SLICE_TYPE_SP)) { + kernel_shader = AVC_VME_INTER_SHADER; + } else { + kernel_shader = AVC_VME_BINTER_SHADER; + if (!allow_hwscore) + kernel_shader = AVC_VME_INTER_SHADER; + } + + if (allow_hwscore) + gen7_vme_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + else + gen7_vme_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen6_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen7_vme_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if (!vme_context->h264_level || + (vme_context->h264_level != pSequenceParameter->level_idc)) { + vme_context->h264_level = pSequenceParameter->level_idc; + } + + intel_vme_update_mbmv_cost(ctx, encode_state, encoder_context); + /*Setup all the memory object*/ + gen7_vme_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen7_vme_interface_setup(ctx, encode_state, encoder_context); + gen7_vme_constant_setup(ctx, encode_state, encoder_context); + gen7_vme_avc_state_setup(ctx, encode_state, is_intra, encoder_context); + + /*Programing media pipeline*/ + gen7_vme_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + +static VAStatus gen7_vme_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen7_vme_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen7_vme_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen7_vme_media_init(ctx, encoder_context); + gen7_vme_prepare(ctx, encode_state, encoder_context); + gen7_vme_run(ctx, encode_state, encoder_context); + gen7_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen7_vme_mpeg2_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES; + else + vme_context->vme_output.size_block = INTER_VME_OUTPUT_IN_BYTES; + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen7_vme_mpeg2_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 32; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static VAStatus +gen7_vme_mpeg2_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen7_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen7_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + if (obj_surface->bo != NULL) + gen7_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + if (obj_surface && obj_surface->bo != NULL) + gen7_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen7_vme_mpeg2_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen7_vme_mpeg2_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen7_vme_mpeg2_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s, j; + unsigned int *command_ptr; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + int slice_mb_begin = slice_param->macroblock_address; + int slice_mb_number = slice_param->num_macroblocks; + unsigned int mb_intra_ub; + + for (i = 0; i < slice_mb_number;) { + int mb_count = i + slice_mb_begin; + + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + + + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ( (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + i += 1; + } + + slice_param++; + } + } + + *command_ptr++ = 0; + *command_ptr++ = MI_BATCH_BUFFER_END; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen7_vme_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + bool allow_hwscore = true; + int s; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + int j; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + if (slice_param->macroblock_address % width_in_mbs) { + allow_hwscore = false; + break; + } + } + } + + if (allow_hwscore) + gen7_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + MPEG2_VME_INTER_SHADER, + encoder_context); + else + gen7_vme_mpeg2_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + MPEG2_VME_INTER_SHADER, + 0, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen6_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen7_vme_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if ((!vme_context->mpeg2_level) || + (vme_context->mpeg2_level != (seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK))) { + vme_context->mpeg2_level = seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK; + } + + /*Setup all the memory object*/ + + intel_vme_mpeg2_state_setup(ctx, encode_state, encoder_context); + gen7_vme_mpeg2_surface_setup(ctx, encode_state, 0, encoder_context); + gen7_vme_interface_setup(ctx, encode_state, encoder_context); + gen7_vme_constant_setup(ctx, encode_state, encoder_context); + gen7_vme_mpeg2_state_setup(ctx, encode_state, 0, encoder_context); + + /*Programing media pipeline*/ + gen7_vme_mpeg2_pipeline_programing(ctx, encode_state, 0, encoder_context); + + return vaStatus; +} + +static VAStatus +gen7_vme_mpeg2_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSliceParameterBufferMPEG2 *slice_param = + (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferMPEG2 *seq_param = + (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + + /*No need of to exec VME for Intra slice */ + if (slice_param->is_intra_slice) { + if(!vme_context->vme_output.bo) { + int w_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int h_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + vme_context->vme_output.num_blocks = w_in_mbs * h_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES; + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "MPEG2 VME output buffer", + vme_context->vme_output.num_blocks + * vme_context->vme_output.size_block, + 0x1000); + } + + return VA_STATUS_SUCCESS; + } + + gen7_vme_media_init(ctx, encoder_context); + gen7_vme_mpeg2_prepare(ctx, encode_state, encoder_context); + gen7_vme_run(ctx, encode_state, encoder_context); + gen7_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen7_vme_context_destroy(void *context) +{ + struct gen6_vme_context *vme_context = context; + + i965_gpe_context_destroy(&vme_context->gpe_context); + + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + if (vme_context->vme_state_message) { + free(vme_context->vme_state_message); + vme_context->vme_state_message = NULL; + } + + free(vme_context); +} + +Bool gen7_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = calloc(1, sizeof(struct gen6_vme_context)); + struct i965_kernel *vme_kernel_list = NULL; + + assert(vme_context); + vme_context->gpe_context.surface_state_binding_table.length = + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6; + vme_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH; + + vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + vme_context->gpe_context.vfe_state.num_urb_entries = 16; + vme_context->gpe_context.vfe_state.gpgpu_mode = 0; + vme_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + gen7_vme_scoreboard_init(ctx, vme_context); + + if (encoder_context->codec == CODEC_H264) { + vme_kernel_list = gen7_vme_kernels; + vme_context->video_coding_type = VIDEO_CODING_AVC; + vme_context->vme_kernel_sum = AVC_VME_KERNEL_SUM; + encoder_context->vme_pipeline = gen7_vme_pipeline; + } else if (encoder_context->codec == CODEC_MPEG2) { + vme_kernel_list = gen7_vme_mpeg2_kernels; + vme_context->video_coding_type = VIDEO_CODING_MPEG2; + vme_context->vme_kernel_sum = MPEG2_VME_KERNEL_SUM; + encoder_context->vme_pipeline = gen7_vme_mpeg2_pipeline; + } else { + /* Unsupported codec */ + assert(0); + } + + i965_gpe_load_kernels(ctx, + &vme_context->gpe_context, + vme_kernel_list, + vme_context->vme_kernel_sum); + + vme_context->vme_surface2_setup = gen7_gpe_surface2_setup; + vme_context->vme_media_rw_surface_setup = gen7_gpe_media_rw_surface_setup; + vme_context->vme_buffer_suface_setup = gen7_gpe_buffer_suface_setup; + + encoder_context->vme_context = vme_context; + encoder_context->vme_context_destroy = gen7_vme_context_destroy; + vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int)); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfc.c new file mode 100644 index 000000000..c30bad6d6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfc.c @@ -0,0 +1,4609 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" +#include "intel_media.h" +#include +#include "vp8_probs.h" + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define MFC_SOFTWARE_HASWELL 1 + +#define B0_STEP_REV 2 +#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV) + +//Zigzag scan order of the the Luma and Chroma components +//Note: Jpeg Spec ISO/IEC 10918-1, Figure A.6 shows the zigzag order differently. +//The Spec is trying to show the zigzag pattern with number positions. The below +//table will use the pattern shown by A.6 and map the position of the elements in the array +static const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +//Default Luminance quantization table +//Source: Jpeg Spec ISO/IEC 10918-1, Annex K, Table K.1 +static const uint8_t jpeg_luma_quant[64] = { + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99 +}; + +//Default Chroma quantization table +//Source: Jpeg Spec ISO/IEC 10918-1, Annex K, Table K.2 +static const uint8_t jpeg_chroma_quant[64] = { + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 +}; + + +static const int va_to_gen7_jpeg_hufftable[2] = { + MFX_HUFFTABLE_ID_Y, + MFX_HUFFTABLE_ID_UV +}; + +static const uint32_t gen8_mfc_batchbuffer_avc_intra[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_intra.g7b" +}; + +static const uint32_t gen8_mfc_batchbuffer_avc_inter[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_inter.g7b" +}; + +static struct i965_kernel gen8_mfc_kernels[] = { + { + "MFC AVC INTRA BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTRA, + gen8_mfc_batchbuffer_avc_intra, + sizeof(gen8_mfc_batchbuffer_avc_intra), + NULL + }, + + { + "MFC AVC INTER BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTER, + gen8_mfc_batchbuffer_avc_inter, + sizeof(gen8_mfc_batchbuffer_avc_inter), + NULL + }, +}; + +#define INTER_MODE_MASK 0x03 +#define INTER_8X8 0x03 +#define INTER_16X8 0x01 +#define INTER_8X16 0x02 +#define SUBMB_SHAPE_MASK 0x00FF00 +#define INTER_16X16 0x00 + +#define INTER_MV8 (4 << 20) +#define INTER_MV32 (6 << 20) + + +static void +gen8_mfc_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_JPEG || + standard_select == MFX_FORMAT_VP8); + + BEGIN_BCS_BATCH(batch, 5); + + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Must be long format for encoder */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* Stream-Out Enable */ + ((!!mfc_context->post_deblocking_output.bo) << 9) | /* Post Deblocking Output */ + ((!!mfc_context->pre_deblocking_output.bo) << 8) | /* Pre Deblocking Output */ + (0 << 6) | /* frame statistics stream-out enable*/ + (0 << 5) | /* not in stitch mode */ + (1 << 4) | /* encoding mode */ + (standard_select << 0)); /* standard select: avc or mpeg2 or jpeg*/ + OUT_BCS_BATCH(batch, + (0 << 7) | /* expand NOA bus flag */ + (0 << 6) | /* disable slice-level clock gating */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_surface_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((mfc_context->surface_state.height - 1) << 18) | + ((mfc_context->surface_state.width - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((mfc_context->surface_state.w_pitch - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (mfc_context->surface_state.h_pitch)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_ind_obj_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int vme_size; + unsigned int bse_offset; + + BEGIN_BCS_BATCH(batch, 26); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (26 - 2)); + /* the DW1-3 is for the MFX indirect bistream offset */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW4-5 is the MFX upper bound */ + if (encoder_context->codec == CODEC_VP8) { + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + if(encoder_context->codec != CODEC_JPEG) { + vme_size = vme_context->vme_output.size_block * vme_context->vme_output.num_blocks; + /* the DW6-10 is for MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, vme_size); + OUT_BCS_BATCH(batch, 0); + } else { + /* No VME for JPEG */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + /* the DW11-15 is for MFX IT-COFF. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-20 is for MFX indirect DBLK. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW21-25 is for MFC Indirect PAK-BSE Object Base Address for Encoder*/ + bse_offset = (encoder_context->codec == CODEC_JPEG) ? (mfc_context->mfc_indirect_pak_bse_object.offset) : 0; + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + bse_offset); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_avc_img_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + BEGIN_BCS_BATCH(batch, 16); + + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + /*DW1. MB setting of frame */ + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs - 1) & 0xFFFF)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + /* DW3 QP setting */ + OUT_BCS_BATCH(batch, + (0 << 24) | /* Second Chroma QP Offset */ + (0 << 16) | /* Chroma QP Offset */ + (0 << 14) | /* Max-bit conformance Intra flag */ + (0 << 13) | /* Max Macroblock size conformance Inter flag */ + (pPicParameter->pic_fields.bits.weighted_pred_flag << 12) | /*Weighted_Pred_Flag */ + (pPicParameter->pic_fields.bits.weighted_bipred_idc << 10) | /* Weighted_BiPred_Idc */ + (0 << 8) | /* FIXME: Image Structure */ + (0 << 0) ); /* Current Decoed Image Frame Store ID, reserved in Encode mode */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* Mininum Frame size */ + (0 << 15) | /* Disable reading of Macroblock Status Buffer */ + (0 << 14) | /* Load BitStream Pointer only once, 1 slic 1 frame */ + (0 << 13) | /* CABAC 0 word insertion test enable */ + (1 << 12) | /* MVUnpackedEnable,compliant to DXVA */ + (1 << 10) | /* Chroma Format IDC, 4:2:0 */ + (0 << 8) | /* FIXME: MbMvFormatFlag */ + (pPicParameter->pic_fields.bits.entropy_coding_mode_flag << 7) | /*0:CAVLC encoding mode,1:CABAC*/ + (0 << 6) | /* Only valid for VLD decoding mode */ + (0 << 5) | /* Constrained Intra Predition Flag, from PPS */ + (0 << 4) | /* Direct 8x8 inference flag */ + (pPicParameter->pic_fields.bits.transform_8x8_mode_flag << 3) | /*8x8 or 4x4 IDCT Transform Mode Flag*/ + (1 << 2) | /* Frame MB only flag */ + (0 << 1) | /* MBAFF mode is in active */ + (0 << 0)); /* Field picture flag */ + /* DW5 Trellis quantization */ + OUT_BCS_BATCH(batch, 0); /* Mainly about MB rate control and debug, just ignoring */ + OUT_BCS_BATCH(batch, /* Inter and Intra Conformance Max size limit */ + (0xBB8 << 16) | /* InterMbMaxSz */ + (0xEE8) ); /* IntraMbMaxSz */ + OUT_BCS_BATCH(batch, 0); /* Reserved */ + /* DW8. QP delta */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + /* DW10. Bit setting for MB */ + OUT_BCS_BATCH(batch, 0x8C000000); + OUT_BCS_BATCH(batch, 0x00010000); + /* DW12. */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0x02010100); + /* DW14. For short format */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_qm_state(VADriverContextP ctx, + int qm_type, + unsigned int *qm, + int qm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16); + assert(sizeof(*qm) == 4); + memcpy(qm_buffer, qm, qm_length * 4); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_avc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[16] = { + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010 + }; + + gen8_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 12, encoder_context); + gen8_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 12, encoder_context); + gen8_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 16, encoder_context); + gen8_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 16, encoder_context); +} + +static void +gen8_mfc_fqm_state(VADriverContextP ctx, + int fqm_type, + unsigned int *fqm, + int fqm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int fqm_buffer[32]; + + assert(fqm_length <= 32); + assert(sizeof(*fqm) == 4); + memcpy(fqm_buffer, fqm, fqm_length * 4); + + BEGIN_BCS_BATCH(batch, 34); + OUT_BCS_BATCH(batch, MFX_FQM_STATE | (34 - 2)); + OUT_BCS_BATCH(batch, fqm_type << 0); + intel_batchbuffer_data(batch, fqm_buffer, 32 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_avc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[32] = { + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000 + }; + + gen8_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 24, encoder_context); + gen8_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 24, encoder_context); + gen8_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 32, encoder_context); + gen8_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 32, encoder_context); +} + +static void +gen8_mfc_avc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + if (data_bits_in_last_dw == 0) + data_bits_in_last_dw = 32; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, MFX_INSERT_OBJECT | (lenght_in_dws + 2 - 2)); + OUT_BCS_BATCH(batch, + (0 << 16) | /* always start at offset 0 */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* FIXME: ??? */ + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen8_mfc_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + dri_bo *bo; + int i; + int width_in_mbs = 0; + int height_in_mbs = 0; + int slice_batchbuffer_size; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + width_in_mbs = pSequenceParameter->picture_width_in_mbs; + height_in_mbs = pSequenceParameter->picture_height_in_mbs; + } else if (encoder_context->codec == CODEC_MPEG2) { + VAEncSequenceParameterBufferMPEG2 *pSequenceParameter = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + + assert(encoder_context->codec == CODEC_MPEG2); + + width_in_mbs = ALIGN(pSequenceParameter->picture_width, 16) / 16; + height_in_mbs = ALIGN(pSequenceParameter->picture_height, 16) / 16; + } else { + assert(encoder_context->codec == CODEC_JPEG); + VAEncPictureParameterBufferJPEG *pic_param = (VAEncPictureParameterBufferJPEG *)encode_state->pic_param_ext->buffer; + + width_in_mbs = ALIGN(pic_param->picture_width, 16) / 16; + height_in_mbs = ALIGN(pic_param->picture_height, 16) / 16; + } + + slice_batchbuffer_size = 64 * width_in_mbs * height_in_mbs + 4096 + + (SLICE_HEADER + SLICE_TAIL) * encode_state->num_slice_params_ext; + + /*Encode common setup for MFC*/ + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + if (mfc_context->direct_mv_buffers[i].bo != NULL) + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 64, + 64); + assert(bo); + mfc_context->intra_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 64); + assert(bo); + mfc_context->macroblock_status_buffer.bo = bo; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 4 * width_in_mbs * 64, /* 4 * width_in_mbs * 64 */ + 64); + assert(bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 2 * width_in_mbs * 64, /* 2 * width_in_mbs * 64 */ + 0x1000); + assert(bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; + + i965_gpe_context_init(ctx, &mfc_context->gpe_context); +} + +static void +gen8_mfc_pipe_buf_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int i; + + BEGIN_BCS_BATCH(batch, 61); + + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + + /* the DW1-3 is for pre_deblocking */ + if (mfc_context->pre_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); /* pre output addr */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW4-6 is for the post_deblocking */ + + if (mfc_context->post_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* post output addr */ + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for the uncompressed_picture */ + OUT_BCS_RELOC(batch, mfc_context->uncompressed_picture_source.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* uncompressed data */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW10-12 is for the mb status */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* StreamOut data*/ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW13-15 is for the intra_row_store_scratch */ + OUT_BCS_RELOC(batch, mfc_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-18 is for the deblocking filter */ + OUT_BCS_RELOC(batch, mfc_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 19-50 is for Reference pictures*/ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + if ( mfc_context->reference_surfaces[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->reference_surfaces[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + + /* The DW 52-54 is for the MB status buffer */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* Macroblock status buffer*/ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 55-57 is the ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 58-60 is the second ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_avc_directmode_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + int i; + + BEGIN_BCS_BATCH(batch, 71); + + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* Reference frames and Current frames */ + /* the DW1-32 is for the direct MV for reference */ + for(i = 0; i < NUM_MFC_DMV_BUFFERS - 2; i += 2) { + if ( mfc_context->direct_mv_buffers[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); + + /* the DW34-36 is the MV for the current reference */ + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[NUM_MFC_DMV_BUFFERS - 2].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POL list */ + for(i = 0; i < 32; i++) { + OUT_BCS_BATCH(batch, i/2); + } + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen8_mfc_bsp_buf_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 10); + + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + OUT_BCS_RELOC(batch, mfc_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW4-6 is for MPR Row Store Scratch Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for Bitplane Read Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen8_mfc_avc_pipeline_picture_programing( VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_AVC, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen8_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen8_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + mfc_context->avc_img_state(ctx, encode_state, encoder_context); + mfc_context->avc_qm_state(ctx, encoder_context); + mfc_context->avc_fqm_state(ctx, encoder_context); + gen8_mfc_avc_directmode_state(ctx, encoder_context); + intel_mfc_avc_ref_idx_state(ctx, encode_state, encoder_context); +} + + +static VAStatus gen8_mfc_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); //run the pipeline + + return VA_STATUS_SUCCESS; +} + + +static VAStatus +gen8_mfc_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size) +{ + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VACodedBufferSegment *coded_buffer_segment; + + vaStatus = i965_MapBuffer(ctx, pPicParameter->coded_buf, (void **)&coded_buffer_segment); + assert(vaStatus == VA_STATUS_SUCCESS); + *encoded_bits_size = coded_buffer_segment->size * 8; + i965_UnmapBuffer(ctx, pPicParameter->coded_buf); + + return VA_STATUS_SUCCESS; +} + + +static void +gen8_mfc_avc_slice_state(VADriverContextP ctx, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int rate_control_enable, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int beginmb = slice_param->macroblock_address; + int endmb = beginmb + slice_param->num_macroblocks; + int beginx = beginmb % width_in_mbs; + int beginy = beginmb / width_in_mbs; + int nextx = endmb % width_in_mbs; + int nexty = endmb / width_in_mbs; + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + int last_slice = (endmb == (width_in_mbs * height_in_mbs)); + int maxQpN, maxQpP; + unsigned char correct[6], grow, shrink; + int i; + int weighted_pred_idc = 0; + unsigned int luma_log2_weight_denom = slice_param->luma_log2_weight_denom; + unsigned int chroma_log2_weight_denom = slice_param->chroma_log2_weight_denom; + int num_ref_l0 = 0, num_ref_l1 = 0; + + if (batch == NULL) + batch = encoder_context->base.batch; + + if (slice_type == SLICE_TYPE_I) { + luma_log2_weight_denom = 0; + chroma_log2_weight_denom = 0; + } else if (slice_type == SLICE_TYPE_P) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + } else if (slice_type == SLICE_TYPE_B) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = pic_param->num_ref_idx_l1_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) { + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (weighted_pred_idc == 2) { + /* 8.4.3 - Derivation process for prediction weights (8-279) */ + luma_log2_weight_denom = 5; + chroma_log2_weight_denom = 5; + } + } + + maxQpN = mfc_context->bit_rate_control_context[slice_type].MaxQpNegModifier; + maxQpP = mfc_context->bit_rate_control_context[slice_type].MaxQpPosModifier; + + for (i = 0; i < 6; i++) + correct[i] = mfc_context->bit_rate_control_context[slice_type].Correct[i]; + + grow = mfc_context->bit_rate_control_context[slice_type].GrowInit + + (mfc_context->bit_rate_control_context[slice_type].GrowResistance << 4); + shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit + + (mfc_context->bit_rate_control_context[slice_type].ShrinkResistance << 4); + + BEGIN_BCS_BATCH(batch, 11);; + + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2) ); + OUT_BCS_BATCH(batch, slice_type); /*Slice Type: I:P:B Slice*/ + + OUT_BCS_BATCH(batch, + (num_ref_l0 << 16) | + (num_ref_l1 << 24) | + (chroma_log2_weight_denom << 8) | + (luma_log2_weight_denom << 0)); + + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag<<29) | /*Direct Prediction Type*/ + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + (qp<<16) | /*Slice Quantization Parameter*/ + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (beginy << 24) | /*First MB X&Y , the begin postion of current slice*/ + (beginx << 16) | + slice_param->macroblock_address ); + OUT_BCS_BATCH(batch, (nexty << 16) | nextx); /*Next slice first MB X&Y*/ + OUT_BCS_BATCH(batch, + (0/*rate_control_enable*/ << 31) | /*in CBR mode RateControlCounterEnable = enable*/ + (1 << 30) | /*ResetRateControlCounter*/ + (0 << 28) | /*RC Triggle Mode = Always Rate Control*/ + (4 << 24) | /*RC Stable Tolerance, middle level*/ + (0/*rate_control_enable*/ << 23) | /*RC Panic Enable*/ + (0 << 22) | /*QP mode, don't modfiy CBP*/ + (0 << 21) | /*MB Type Direct Conversion Enabled*/ + (0 << 20) | /*MB Type Skip Conversion Enabled*/ + (last_slice << 19) | /*IsLastSlice*/ + (0 << 18) | /*BitstreamOutputFlag Compressed BitStream Output Disable Flag 0:enable 1:disable*/ + (1 << 17) | /*HeaderPresentFlag*/ + (1 << 16) | /*SliceData PresentFlag*/ + (1 << 15) | /*TailPresentFlag*/ + (1 << 13) | /*RBSP NAL TYPE*/ + (0 << 12) ); /*CabacZeroWordInsertionEnable*/ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, + (maxQpN << 24) | /*Target QP - 24 is lowest QP*/ + (maxQpP << 16) | /*Target QP + 20 is highest QP*/ + (shrink << 8) | + (grow << 0)); + OUT_BCS_BATCH(batch, + (correct[5] << 20) | + (correct[4] << 16) | + (correct[3] << 12) | + (correct[2] << 8) | + (correct[1] << 4) | + (correct[0] << 0)); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +#ifdef MFC_SOFTWARE_HASWELL + +static int +gen8_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y, int end_mb, + int qp,unsigned int *msg, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size, unsigned char max_mb_size, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 12; + unsigned int intra_msg; +#define INTRA_MSG_FLAG (1 << 13) +#define INTRA_MBTYPE_MASK (0x1F0000) + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + intra_msg = msg[0] & 0xC0FF; + intra_msg |= INTRA_MSG_FLAG; + intra_msg |= ((msg[0] & INTRA_MBTYPE_MASK) >> 8); + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 24) | /* PackedMvNum, Debug*/ + (0 << 20) | /* No motion vector */ + (1 << 19) | /* CbpDcY */ + (1 << 18) | /* CbpDcU */ + (1 << 17) | /* CbpDcV */ + intra_msg); + + OUT_BCS_BATCH(batch, (0xFFFF << 16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ + OUT_BCS_BATCH(batch, (0 << 27) | (end_mb << 26) | qp); /* Last MB */ + + /*Stuff for Intra MB*/ + OUT_BCS_BATCH(batch, msg[1]); /* We using Intra16x16 no 4x4 predmode*/ + OUT_BCS_BATCH(batch, msg[2]); + OUT_BCS_BATCH(batch, msg[3]&0xFF); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static int +gen8_mfc_avc_pak_object_inter(VADriverContextP ctx, int x, int y, int end_mb, int qp, + unsigned int *msg, unsigned int offset, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size,unsigned char max_mb_size, int slice_type, + struct intel_batchbuffer *batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int len_in_dwords = 12; + unsigned int inter_msg = 0; + if (batch == NULL) + batch = encoder_context->base.batch; + { +#define MSG_MV_OFFSET 4 + unsigned int *mv_ptr; + mv_ptr = msg + MSG_MV_OFFSET; + /* MV of VME output is based on 16 sub-blocks. So it is necessary + * to convert them to be compatible with the format of AVC_PAK + * command. + */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X16) { + /* MV[0] and MV[2] are replicated */ + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[6] = mv_ptr[8]; + mv_ptr[7] = mv_ptr[9]; + } else if ((msg[0] & INTER_MODE_MASK) == INTER_16X8) { + /* MV[0] and MV[1] are replicated */ + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } else if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + !(msg[1] & SUBMB_SHAPE_MASK)) { + /* Don't touch MV[0] or MV[1] */ + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } + } + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + + inter_msg = 32; + /* MV quantity */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X8) { + if (msg[1] & SUBMB_SHAPE_MASK) + inter_msg = 128; + } + OUT_BCS_BATCH(batch, inter_msg); /* 32 MV*/ + OUT_BCS_BATCH(batch, offset); + inter_msg = msg[0] & (0x1F00FFFF); + inter_msg |= INTER_MV8; + inter_msg |= ((1 << 19) | (1 << 18) | (1 << 17)); + if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + (msg[1] & SUBMB_SHAPE_MASK)) { + inter_msg |= INTER_MV32; + } + + OUT_BCS_BATCH(batch, inter_msg); + + OUT_BCS_BATCH(batch, (0xFFFF<<16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ +#if 0 + if ( slice_type == SLICE_TYPE_B) { + OUT_BCS_BATCH(batch, (0xF<<28) | (end_mb << 26) | qp); /* Last MB */ + } else { + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ + } +#else + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ +#endif + + inter_msg = msg[1] >> 8; + /*Stuff for Inter MB*/ + OUT_BCS_BATCH(batch, inter_msg); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0x0); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +#define AVC_INTRA_RDO_OFFSET 4 +#define AVC_INTER_RDO_OFFSET 10 +#define AVC_INTER_MSG_OFFSET 8 +#define AVC_INTER_MV_OFFSET 48 +#define AVC_RDO_MASK 0xFFFF + +static void +gen8_mfc_avc_pipeline_slice_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + unsigned int *msg = NULL, offset = 0; + unsigned char *msg_ptr = NULL; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int i,x,y; + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int is_intra = slice_type == SLICE_TYPE_I; + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + gen8_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, encoder_context, + (rate_control_mode == VA_RC_CBR), qp_slice, slice_batch); + + if ( slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + dri_bo_map(vme_context->vme_output.bo , 1); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (is_intra) { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } else { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } + + for (i = pSliceParameter->macroblock_address; + i < pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks; i++) { + int last_mb = (i == (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks - 1) ); + x = i % width_in_mbs; + y = i / width_in_mbs; + msg = (unsigned int *) (msg_ptr + i * vme_context->vme_output.size_block); + + if (is_intra) { + assert(msg); + gen8_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + offset = i * vme_context->vme_output.size_block + AVC_INTER_MV_OFFSET; + if (intra_rdo < inter_rdo) { + gen8_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + msg += AVC_INTER_MSG_OFFSET; + gen8_mfc_avc_pak_object_inter(ctx, x, y, last_mb, qp, msg, offset, encoder_context, 0, 0, pSliceParameter->slice_type, slice_batch); + } + } + } + + dri_bo_unmap(vme_context->vme_output.bo); + + if ( last_slice ) { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 2, 8, + 2, 1, 1, 0, slice_batch); + } else { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 1, 8, + 1, 1, 1, 0, slice_batch); + } +} + +static dri_bo * +gen8_mfc_avc_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + gen8_mfc_avc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +#else + +static void +gen8_mfc_batchbuffer_surfaces_input(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(vme_context->vme_output.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(BIND_IDX_VME_OUTPUT), + SURFACE_STATE_OFFSET(BIND_IDX_VME_OUTPUT)); + assert(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->aux_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_SLICE_HEADER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_SLICE_HEADER)); +} + +static void +gen8_mfc_batchbuffer_surfaces_output(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + mfc_context->mfc_batchbuffer_surface.num_blocks = width_in_mbs * height_in_mbs + encode_state->num_slice_params_ext * 8 + 1; + mfc_context->mfc_batchbuffer_surface.size_block = 16 * CMD_LEN_IN_OWORD; /* 3 OWORDs */ + mfc_context->mfc_batchbuffer_surface.pitch = 16; + mfc_context->mfc_batchbuffer_surface.bo = dri_bo_alloc(i965->intel.bufmgr, + "MFC batchbuffer", + mfc_context->mfc_batchbuffer_surface.num_blocks * mfc_context->mfc_batchbuffer_surface.size_block, + 0x1000); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->mfc_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_BATCHBUFFER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_BATCHBUFFER)); +} + +static void +gen8_mfc_batchbuffer_surfaces_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_mfc_batchbuffer_surfaces_input(ctx, encode_state, encoder_context); + gen8_mfc_batchbuffer_surfaces_output(ctx, encode_state, encoder_context); +} + +static void +gen8_mfc_batchbuffer_idrt_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = mfc_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < mfc_context->gpe_context.num_kernels; i++) { + struct i965_kernel *kernel; + + kernel = &mfc_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 2; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = 4; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +gen8_mfc_batchbuffer_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + (void)mfc_context; +} + +static void +gen8_mfc_batchbuffer_emit_object_command(struct intel_batchbuffer *batch, + int index, + int head_offset, + int batchbuffer_offset, + int head_size, + int tail_size, + int number_mb_cmds, + int first_object, + int last_object, + int last_slice, + int mb_x, + int mb_y, + int width_in_mbs, + int qp) +{ + BEGIN_BATCH(batch, 12); + + OUT_BATCH(batch, CMD_MEDIA_OBJECT | (12 - 2)); + OUT_BATCH(batch, index); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*inline data */ + OUT_BATCH(batch, head_offset); + OUT_BATCH(batch, batchbuffer_offset); + OUT_BATCH(batch, + head_size << 16 | + tail_size); + OUT_BATCH(batch, + number_mb_cmds << 16 | + first_object << 2 | + last_object << 1 | + last_slice); + OUT_BATCH(batch, + mb_y << 8 | + mb_x); + OUT_BATCH(batch, + qp << 16 | + width_in_mbs); + + ADVANCE_BATCH(batch); +} + +static void +gen8_mfc_avc_batchbuffer_slice_command(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + VAEncSliceParameterBufferH264 *slice_param, + int head_offset, + unsigned short head_size, + unsigned short tail_size, + int batchbuffer_offset, + int qp, + int last_slice) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int total_mbs = slice_param->num_macroblocks; + int number_mb_cmds = 128; + int starting_mb = 0; + int last_object = 0; + int first_object = 1; + int i; + int mb_x, mb_y; + int index = (slice_param->slice_type == SLICE_TYPE_I) ? MFC_BATCHBUFFER_AVC_INTRA : MFC_BATCHBUFFER_AVC_INTER; + + for (i = 0; i < total_mbs / number_mb_cmds; i++) { + last_object = (total_mbs - starting_mb) == number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + + starting_mb += number_mb_cmds; + + gen8_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp); + + if (first_object) { + head_offset += head_size; + batchbuffer_offset += head_size; + } + + if (last_object) { + head_offset += tail_size; + batchbuffer_offset += tail_size; + } + + batchbuffer_offset += number_mb_cmds * CMD_LEN_IN_OWORD; + + first_object = 0; + } + + if (!last_object) { + last_object = 1; + number_mb_cmds = total_mbs % number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + starting_mb += number_mb_cmds; + + gen8_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp); + } +} + +/* + * return size in Owords (16bytes) + */ +static int +gen8_mfc_avc_batchbuffer_slice(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + int batchbuffer_offset) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *slice_batch = mfc_context->aux_batchbuffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + long head_offset; + int old_used = intel_batchbuffer_used_size(slice_batch), used; + unsigned short head_size, tail_size; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + head_offset = old_used / 16; + gen8_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, + encoder_context, + (rate_control_mode == VA_RC_CBR), + qp_slice, + slice_batch); + + if (slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + head_size = (used - old_used) / 16; + old_used = used; + + /* tail */ + if (last_slice) { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 2, + 8, + 2, + 1, + 1, + 0, + slice_batch); + } else { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 1, + 8, + 1, + 1, + 1, + 0, + slice_batch); + } + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + tail_size = (used - old_used) / 16; + + + gen8_mfc_avc_batchbuffer_slice_command(ctx, + encoder_context, + pSliceParameter, + head_offset, + head_size, + tail_size, + batchbuffer_offset, + qp, + last_slice); + + return head_size + tail_size + pSliceParameter->num_macroblocks * CMD_LEN_IN_OWORD; +} + +static void +gen8_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i, size, offset = 0; + intel_batchbuffer_start_atomic(batch, 0x4000); + gen6_gpe_pipeline_setup(ctx, &mfc_context->gpe_context, batch); + + for ( i = 0; i < encode_state->num_slice_params_ext; i++) { + size = gen8_mfc_avc_batchbuffer_slice(ctx, encode_state, encoder_context, i, offset); + offset += size; + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen8_mfc_build_avc_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_mfc_batchbuffer_surfaces_setup(ctx, encode_state, encoder_context); + gen8_mfc_batchbuffer_idrt_setup(ctx, encode_state, encoder_context); + gen8_mfc_batchbuffer_constant_setup(ctx, encode_state, encoder_context); + gen8_mfc_avc_batchbuffer_pipeline(ctx, encode_state, encoder_context); +} + +static dri_bo * +gen8_mfc_avc_hardware_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + gen8_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context); + dri_bo_reference(mfc_context->mfc_batchbuffer_surface.bo); + + return mfc_context->mfc_batchbuffer_surface.bo; +} + +#endif + +static void +gen8_mfc_avc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + if ( intel_mfc_interlace_check(ctx, encode_state, encoder_context) ) { + fprintf(stderr, "Current VA driver don't support interlace mode!\n"); + assert(0); + return; + } + +#ifdef MFC_SOFTWARE_HASWELL + slice_batch_bo = gen8_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context); +#else + slice_batch_bo = gen8_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context); +#endif + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen8_mfc_avc_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + + +static VAStatus +gen8_mfc_avc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + for (;;) { + gen8_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_avc_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen8_mfc_avc_pipeline_programing(ctx, encode_state, encoder_context); //filling the pipeline + gen8_mfc_run(ctx, encode_state, encoder_context); + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + gen8_mfc_stop(ctx, encode_state, encoder_context, ¤t_frame_bits_size); + sts = intel_mfc_brc_postpack(encode_state, mfc_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + intel_mfc_hrd_context_update(encode_state, mfc_context); + break; + } + else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!mfc_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP)? "overflow": "underflow"); + mfc_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } else { + break; + } + } + + return VA_STATUS_SUCCESS; +} + +/* + * MPEG-2 + */ + +static const int +va_to_gen8_mpeg2_picture_type[3] = { + 1, /* I */ + 2, /* P */ + 3 /* B */ +}; + +static void +gen8_mfc_mpeg2_pic_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferMPEG2 *pic_param; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code[1][1] & 0xf) << 28 | /* f_code[1][1] */ + (pic_param->f_code[1][0] & 0xf) << 24 | /* f_code[1][0] */ + (pic_param->f_code[0][1] & 0xf) << 20 | /* f_code[0][1] */ + (pic_param->f_code[0][0] & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + 0 << 14 | /* LoadSlicePointerFlag, 0 means only loading bitstream pointer once */ + va_to_gen8_mpeg2_picture_type[pic_param->picture_type] << 9 | + 0); + OUT_BCS_BATCH(batch, + 1 << 31 | /* slice concealment */ + (height_in_mbs - 1) << 16 | + (width_in_mbs - 1)); + + if (slice_param && slice_param->quantiser_scale_code >= 14) + OUT_BCS_BATCH(batch, (3 << 1) | (1 << 4) | (5 << 8) | (1 << 12)); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + 0xFFF << 16 | /* InterMBMaxSize */ + 0xFFF << 0 | /* IntraMBMaxSize */ + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_mpeg2_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned char intra_qm[64] = { + 8, 16, 19, 22, 26, 27, 29, 34, + 16, 16, 22, 24, 27, 29, 34, 37, + 19, 22, 26, 27, 29, 34, 34, 38, + 22, 22, 26, 27, 29, 34, 37, 40, + 22, 26, 27, 29, 32, 35, 40, 48, + 26, 27, 29, 32, 35, 40, 48, 58, + 26, 27, 29, 34, 38, 46, 56, 69, + 27, 29, 35, 38, 46, 56, 69, 83 + }; + + unsigned char non_intra_qm[64] = { + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16 + }; + + gen8_mfc_qm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_qm, 16, encoder_context); + gen8_mfc_qm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_qm, 16,encoder_context); +} + +static void +gen8_mfc_mpeg2_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned short intra_fqm[64] = { + 65536/0x8, 65536/0x10, 65536/0x13, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, + 65536/0x10, 65536/0x10, 65536/0x16, 65536/0x16, 65536/0x1a, 65536/0x1b, 65536/0x1b, 65536/0x1d, + 65536/0x13, 65536/0x16, 65536/0x1a, 65536/0x1a, 65536/0x1b, 65536/0x1d, 65536/0x1d, 65536/0x23, + 65536/0x16, 65536/0x18, 65536/0x1b, 65536/0x1b, 65536/0x13, 65536/0x20, 65536/0x22, 65536/0x26, + 65536/0x1a, 65536/0x1b, 65536/0x13, 65536/0x13, 65536/0x20, 65536/0x23, 65536/0x26, 65536/0x2e, + 65536/0x1b, 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x23, 65536/0x28, 65536/0x2e, 65536/0x38, + 65536/0x1d, 65536/0x22, 65536/0x22, 65536/0x25, 65536/0x28, 65536/0x30, 65536/0x38, 65536/0x45, + 65536/0x22, 65536/0x25, 65536/0x26, 65536/0x28, 65536/0x30, 65536/0x3a, 65536/0x45, 65536/0x53, + }; + + unsigned short non_intra_fqm[64] = { + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + }; + + gen8_mfc_fqm_state(ctx, MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX, (unsigned int *)intra_fqm, 32, encoder_context); + gen8_mfc_fqm_state(ctx, MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX, (unsigned int *)non_intra_fqm, 32, encoder_context); +} + +static void +gen8_mfc_mpeg2_slicegroup_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int next_x, int next_y, + int is_fisrt_slice_group, + int is_last_slice_group, + int intra_slice, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, 8); + + OUT_BCS_BATCH(batch, MFC_MPEG2_SLICEGROUP_STATE | (8 - 2)); + OUT_BCS_BATCH(batch, + 0 << 31 | /* MbRateCtrlFlag */ + !!is_last_slice_group << 19 | /* IsLastSliceGrp */ + 1 << 17 | /* Insert Header before the first slice group data */ + 1 << 16 | /* SliceData PresentFlag: always 1 */ + 1 << 15 | /* TailPresentFlag: always 1 */ + 0 << 14 | /* FirstSliceHdrDisabled: slice header for each slice */ + !!intra_slice << 13 | /* IntraSlice */ + !!intra_slice << 12 | /* IntraSliceFlag */ + 0); + OUT_BCS_BATCH(batch, + next_y << 24 | + next_x << 16 | + y << 8 | + x << 0 | + 0); + OUT_BCS_BATCH(batch, qp); /* FIXME: SliceGroupQp */ + /* bitstream pointer is only loaded once for the first slice of a frame when + * LoadSlicePointerFlag is 0 + */ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, 0); /* FIXME: */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CorrectPoints */ + OUT_BCS_BATCH(batch, 0); /* FIXME: CVxxx */ + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen8_mfc_mpeg2_pak_object_intra(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int mb_type, + int qp_scale_code, + int coded_block_pattern, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 9; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 0 << 24 | /* PackedMvNum */ + 0 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 1 << 13 | /* IntraMbFlag */ + mb_type << 8 | /* MbType: Intra */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + coded_block_pattern << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + OUT_BCS_BATCH(batch, 0); /* MV[0][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +/* Byte offset */ +#define MPEG2_INTER_MV_OFFSET 48 + +static struct _mv_ranges +{ + int low; /* in the unit of 1/2 pixel */ + int high; /* in the unit of 1/2 pixel */ +} mv_ranges[] = { + {0, 0}, + {-16, 15}, + {-32, 31}, + {-64, 63}, + {-128, 127}, + {-256, 255}, + {-512, 511}, + {-1024, 1023}, + {-2048, 2047}, + {-4096, 4095} +}; + +static int +mpeg2_motion_vector(int mv, int pos, int display_max, int f_code) +{ + if (mv + pos * 16 * 2 < 0 || + mv + (pos + 1) * 16 * 2 > display_max * 2) + mv = 0; + + if (f_code > 0 && f_code < 10) { + if (mv < mv_ranges[f_code].low) + mv = mv_ranges[f_code].low; + + if (mv > mv_ranges[f_code].high) + mv = mv_ranges[f_code].high; + } + + return mv; +} + +static int +gen8_mfc_mpeg2_pak_object_inter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + unsigned int *msg, + int width_in_mbs, int height_in_mbs, + int x, int y, + int first_mb_in_slice, + int last_mb_in_slice, + int first_mb_in_slice_group, + int last_mb_in_slice_group, + int qp_scale_code, + unsigned char target_size_in_word, + unsigned char max_size_in_word, + struct intel_batchbuffer *batch) +{ + VAEncPictureParameterBufferMPEG2 *pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + int len_in_dwords = 9; + short *mvptr, mvx0, mvy0, mvx1, mvy1; + + if (batch == NULL) + batch = encoder_context->base.batch; + + mvptr = (short *)((unsigned char *)msg + MPEG2_INTER_MV_OFFSET);; + mvx0 = mpeg2_motion_vector(mvptr[0] / 2, x, width_in_mbs * 16, pic_param->f_code[0][0]); + mvy0 = mpeg2_motion_vector(mvptr[1] / 2, y, height_in_mbs * 16, pic_param->f_code[0][0]); + mvx1 = mpeg2_motion_vector(mvptr[2] / 2, x, width_in_mbs * 16, pic_param->f_code[1][0]); + mvy1 = mpeg2_motion_vector(mvptr[3] / 2, y, height_in_mbs * 16, pic_param->f_code[1][0]); + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_MPEG2_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + 2 << 24 | /* PackedMvNum */ + 7 << 20 | /* MvFormat */ + 7 << 17 | /* CbpDcY/CbpDcU/CbpDcV */ + 0 << 15 | /* TransformFlag: frame DCT */ + 0 << 14 | /* FieldMbFlag */ + 0 << 13 | /* IntraMbFlag */ + 1 << 8 | /* MbType: Frame-based */ + 0 << 2 | /* SkipMbFlag */ + 0 << 0 | /* InterMbMode */ + 0); + OUT_BCS_BATCH(batch, y << 16 | x); + OUT_BCS_BATCH(batch, + max_size_in_word << 24 | + target_size_in_word << 16 | + 0x3f << 6 | /* CBP */ + 0); + OUT_BCS_BATCH(batch, + last_mb_in_slice << 31 | + first_mb_in_slice << 30 | + 0 << 27 | /* EnableCoeffClamp */ + last_mb_in_slice_group << 26 | + 0 << 25 | /* MbSkipConvDisable */ + first_mb_in_slice_group << 24 | + 0 << 16 | /* MvFieldSelect */ + qp_scale_code << 0 | + 0); + + OUT_BCS_BATCH(batch, (mvx0 & 0xFFFF) | mvy0 << 16); /* MV[0][0] */ + OUT_BCS_BATCH(batch, (mvx1 & 0xFFFF) | mvy1 << 16); /* MV[1][0] */ + OUT_BCS_BATCH(batch, 0); /* MV[0][1] */ + OUT_BCS_BATCH(batch, 0); /* MV[1][1] */ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static void +intel_mfc_mpeg2_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_SPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderMPEG2_PPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 5, /* FIXME: check it */ + 0, + 0, + 0, /* Needn't insert emulation bytes for MPEG-2 */ + slice_batch); + } +} + +static void +gen8_mfc_mpeg2_pipeline_slice_group(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + VAEncSliceParameterBufferMPEG2 *next_slice_group_param, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferMPEG2 *slice_param = NULL; + unsigned char tail_delimiter[] = {MPEG2_DELIMITER0, MPEG2_DELIMITER1, MPEG2_DELIMITER2, MPEG2_DELIMITER3, MPEG2_DELIMITER4, 0, 0, 0}; + unsigned char section_delimiter[] = {0x0, 0x0, 0x0, 0x0}; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + int i, j; + int h_start_pos, v_start_pos, h_next_start_pos, v_next_start_pos; + unsigned int *msg = NULL; + unsigned char *msg_ptr = NULL; + + slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[slice_index]->buffer; + h_start_pos = slice_param->macroblock_address % width_in_mbs; + v_start_pos = slice_param->macroblock_address / width_in_mbs; + assert(h_start_pos + slice_param->num_macroblocks <= width_in_mbs); + + dri_bo_map(vme_context->vme_output.bo , 0); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (next_slice_group_param) { + h_next_start_pos = next_slice_group_param->macroblock_address % width_in_mbs; + v_next_start_pos = next_slice_group_param->macroblock_address / width_in_mbs; + } else { + h_next_start_pos = 0; + v_next_start_pos = height_in_mbs; + } + + gen8_mfc_mpeg2_slicegroup_state(ctx, + encoder_context, + h_start_pos, + v_start_pos, + h_next_start_pos, + v_next_start_pos, + slice_index == 0, + next_slice_group_param == NULL, + slice_param->is_intra_slice, + slice_param->quantiser_scale_code, + slice_batch); + + if (slice_index == 0) + intel_mfc_mpeg2_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + /* Insert '00' to make sure the header is valid */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int*)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 0, + 0, + slice_batch); + + for (i = 0; i < encode_state->slice_params_ext[slice_index]->num_elements; i++) { + /* PAK for each macroblocks */ + for (j = 0; j < slice_param->num_macroblocks; j++) { + int h_pos = (slice_param->macroblock_address + j) % width_in_mbs; + int v_pos = (slice_param->macroblock_address + j) / width_in_mbs; + int first_mb_in_slice = (j == 0); + int last_mb_in_slice = (j == slice_param->num_macroblocks - 1); + int first_mb_in_slice_group = (i == 0 && j == 0); + int last_mb_in_slice_group = (i == encode_state->slice_params_ext[slice_index]->num_elements - 1 && + j == slice_param->num_macroblocks - 1); + + msg = (unsigned int *)(msg_ptr + (slice_param->macroblock_address + j) * vme_context->vme_output.size_block); + + if (slice_param->is_intra_slice) { + gen8_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + + if (intra_rdo < inter_rdo) + gen8_mfc_mpeg2_pak_object_intra(ctx, + encoder_context, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + 0x1a, + slice_param->quantiser_scale_code, + 0x3f, + 0, + 0xff, + slice_batch); + else + gen8_mfc_mpeg2_pak_object_inter(ctx, + encode_state, + encoder_context, + msg, + width_in_mbs, height_in_mbs, + h_pos, v_pos, + first_mb_in_slice, + last_mb_in_slice, + first_mb_in_slice_group, + last_mb_in_slice_group, + slice_param->quantiser_scale_code, + 0, + 0xff, + slice_batch); + } + } + + slice_param++; + } + + dri_bo_unmap(vme_context->vme_output.bo); + + /* tail data */ + if (next_slice_group_param == NULL) { /* end of a picture */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)tail_delimiter, + 2, + 8, /* 8bits in the last DWORD */ + 5, /* 5 bytes */ + 1, + 1, + 0, + slice_batch); + } else { /* end of a lsice group */ + mfc_context->insert_object(ctx, + encoder_context, + (unsigned int *)section_delimiter, + 1, + 8, /* 8bits in the last DWORD */ + 1, /* 1 byte */ + 1, + 1, + 0, + slice_batch); + } +} + +/* + * A batch buffer for all slices, including slice state, + * slice insert object and slice pak object commands + * + */ +static dri_bo * +gen8_mfc_mpeg2_software_slice_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + VAEncSliceParameterBufferMPEG2 *next_slice_group_param = NULL; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + if (i == encode_state->num_slice_params_ext - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[i + 1]->buffer; + + gen8_mfc_mpeg2_pipeline_slice_group(ctx, encode_state, encoder_context, i, next_slice_group_param, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +static void +gen8_mfc_mpeg2_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_MPEG2, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen8_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen8_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + gen8_mfc_mpeg2_pic_state(ctx, encoder_context, encode_state); + gen8_mfc_mpeg2_qm_state(ctx, encoder_context); + gen8_mfc_mpeg2_fqm_state(ctx, encoder_context); +} + +static void +gen8_mfc_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + slice_batch_bo = gen8_mfc_mpeg2_software_slice_batchbuffer(ctx, encode_state, encoder_context); + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen8_mfc_mpeg2_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +static VAStatus +intel_mfc_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAStatus vaStatus = VA_STATUS_SUCCESS; + dri_bo *bo; + int i; + + /* reconstructed surface */ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + mfc_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->pre_deblocking_output.bo); + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* forward reference */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[0].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[0].bo); + } else + mfc_context->reference_surfaces[0].bo = NULL; + + /* backward reference */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[1].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } else { + mfc_context->reference_surfaces[1].bo = mfc_context->reference_surfaces[0].bo; + + if (mfc_context->reference_surfaces[1].bo) + dri_bo_reference(mfc_context->reference_surfaces[1].bo); + } + + for (i = 2; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + mfc_context->reference_surfaces[i].bo = mfc_context->reference_surfaces[i & 1].bo; + + if (mfc_context->reference_surfaces[i].bo) + dri_bo_reference(mfc_context->reference_surfaces[i].bo); + } + + /* input YUV surface */ + obj_surface = encode_state->input_yuv_object; + mfc_context->uncompressed_picture_source.bo = obj_surface->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + /* coded buffer */ + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + /* set the internal flag to 0 to indicate the coded size is unknown */ + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + +static VAStatus +gen8_mfc_mpeg2_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_mpeg2_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen8_mfc_mpeg2_pipeline_programing(ctx, encode_state, encoder_context); + gen8_mfc_run(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +/* JPEG encode methods */ + +static VAStatus +intel_mfc_jpeg_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAStatus vaStatus = VA_STATUS_SUCCESS; + dri_bo *bo; + + /* input YUV surface */ + obj_surface = encode_state->input_yuv_object; + mfc_context->uncompressed_picture_source.bo = obj_surface->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + /* coded buffer */ + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + /* set the internal flag to 0 to indicate the coded size is unknown */ + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + + +static void +gen8_mfc_jpeg_set_surface_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct object_surface *obj_surface = encode_state->input_yuv_object; + unsigned int input_fourcc; + unsigned int y_cb_offset; + unsigned int y_cr_offset; + unsigned int surface_format; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + y_cr_offset = obj_surface->y_cr_offset; + input_fourcc = obj_surface->fourcc; + + surface_format = (obj_surface->fourcc == VA_FOURCC_Y800) ? + MFX_SURFACE_MONOCHROME : MFX_SURFACE_PLANAR_420_8; + + + switch (input_fourcc) { + case VA_FOURCC_Y800: { + surface_format = MFX_SURFACE_MONOCHROME; + break; + } + case VA_FOURCC_NV12: { + surface_format = MFX_SURFACE_PLANAR_420_8; + break; + } + case VA_FOURCC_UYVY: { + surface_format = MFX_SURFACE_YCRCB_SWAPY; + break; + } + case VA_FOURCC_YUY2: { + surface_format = MFX_SURFACE_YCRCB_NORMAL; + break; + } + case VA_FOURCC_RGBA: + case VA_FOURCC_444P: { + surface_format = MFX_SURFACE_R8G8B8A8_UNORM; + break; + } + } + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_height - 1) << 18) | + ((obj_surface->orig_width - 1) << 4)); + OUT_BCS_BATCH(batch, + (surface_format << 28) | /* Surface Format */ + (0 << 27) | /* must be 1 for interleave U/V, hardware requirement for AVC/VC1/MPEG and 0 for JPEG */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (y_cr_offset << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoeo for JPEG */ + + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_jpeg_pic_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct object_surface *obj_surface = encode_state->input_yuv_object; + VAEncPictureParameterBufferJPEG *pic_param; + unsigned int surface_format; + unsigned int frame_width_in_blks; + unsigned int frame_height_in_blks; + unsigned int pixels_in_horizontal_lastMCU; + unsigned int pixels_in_vertical_lastMCU; + unsigned int input_surface_format; + unsigned int output_mcu_format; + unsigned int picture_width; + unsigned int picture_height; + + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + assert(obj_surface); + pic_param = (VAEncPictureParameterBufferJPEG *)encode_state->pic_param_ext->buffer; + surface_format = obj_surface->fourcc; + picture_width = pic_param->picture_width; + picture_height = pic_param->picture_height; + + switch (surface_format) { + case VA_FOURCC_Y800: { + input_surface_format = JPEG_ENC_SURFACE_Y8; + output_mcu_format = JPEG_ENC_MCU_YUV400; + break; + } + case VA_FOURCC_NV12: { + input_surface_format = JPEG_ENC_SURFACE_NV12; + output_mcu_format = JPEG_ENC_MCU_YUV420; + break; + } + case VA_FOURCC_UYVY: { + input_surface_format = JPEG_ENC_SURFACE_UYVY; + output_mcu_format = JPEG_ENC_MCU_YUV422H_2Y; + break; + } + case VA_FOURCC_YUY2: { + input_surface_format = JPEG_ENC_SURFACE_YUY2; + output_mcu_format = JPEG_ENC_MCU_YUV422H_2Y; + break; + } + + case VA_FOURCC_RGBA: + case VA_FOURCC_444P: { + input_surface_format = JPEG_ENC_SURFACE_RGB; + output_mcu_format = JPEG_ENC_MCU_RGB; + break; + } + default : { + input_surface_format = JPEG_ENC_SURFACE_NV12; + output_mcu_format = JPEG_ENC_MCU_YUV420; + break; + } + } + + + switch (output_mcu_format) { + + case JPEG_ENC_MCU_YUV400: + case JPEG_ENC_MCU_RGB: { + pixels_in_horizontal_lastMCU = (picture_width % 8); + pixels_in_vertical_lastMCU = (picture_height % 8); + + //H1=1,V1=1 for YUV400 and YUV444. So, compute these values accordingly + frame_width_in_blks = ((picture_width + 7) / 8); + frame_height_in_blks = ((picture_height + 7) / 8); + break; + } + + case JPEG_ENC_MCU_YUV420: { + if((picture_width % 2) == 0) + pixels_in_horizontal_lastMCU = picture_width % 16; + else + pixels_in_horizontal_lastMCU = ((picture_width % 16) + 1) % 16; + + if((picture_height % 2) == 0) + pixels_in_vertical_lastMCU = picture_height % 16; + else + pixels_in_vertical_lastMCU = ((picture_height % 16) + 1) % 16; + + //H1=2,V1=2 for YUV420. So, compute these values accordingly + frame_width_in_blks = ((picture_width + 15) / 16) * 2; + frame_height_in_blks = ((picture_height + 15) / 16) * 2; + break; + } + + case JPEG_ENC_MCU_YUV422H_2Y: { + if(picture_width % 2 == 0) + pixels_in_horizontal_lastMCU = picture_width % 16; + else + pixels_in_horizontal_lastMCU = ((picture_width % 16) + 1) % 16; + + pixels_in_vertical_lastMCU = picture_height % 8; + + //H1=2,V1=1 for YUV422H_2Y. So, compute these values accordingly + frame_width_in_blks = ((picture_width + 15) / 16) * 2; + frame_height_in_blks = ((picture_height + 7) / 8); + break; + } + } //end of switch + + BEGIN_BCS_BATCH(batch, 3); + /* DWORD 0 */ + OUT_BCS_BATCH(batch, MFX_JPEG_PIC_STATE | (3 - 2)); + /* DWORD 1 */ + OUT_BCS_BATCH(batch, + ( pixels_in_horizontal_lastMCU << 26) | /* Pixels In Horizontal Last MCU */ + ( pixels_in_vertical_lastMCU << 21) | /* Pixels In Vertical Last MCU */ + ( input_surface_format << 8) | /* Input Surface format */ + ( output_mcu_format << 0)); /* Output MCU Structure */ + /* DWORD 2 */ + OUT_BCS_BATCH(batch, + ((frame_height_in_blks - 1) << 16) | /* Frame Height In Blks Minus 1 */ + (JPEG_ENC_ROUND_QUANT_DEFAULT << 13) | /* Rounding Quant set to default value 0 */ + ((frame_width_in_blks - 1) << 0)); /* Frame Width In Blks Minus 1 */ + ADVANCE_BCS_BATCH(batch); +} + +static void +get_reciprocal_dword_qm(unsigned char *raster_qm, uint32_t *dword_qm) +{ + int i = 0, j = 0; + short reciprocal_qm[64]; + + for(i=0; i<64; i++) { + reciprocal_qm[i] = 65535/(raster_qm[i]); + } + + for(i=0; i<64; i++) { + dword_qm[j] = ((reciprocal_qm[i+1] <<16) | (reciprocal_qm[i])); + j++; + i++; + } + +} + + +static void +gen8_mfc_jpeg_fqm_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + unsigned int quality = 0; + uint32_t temp, i = 0, j = 0, dword_qm[32]; + VAEncPictureParameterBufferJPEG *pic_param; + VAQMatrixBufferJPEG *qmatrix; + unsigned char raster_qm[64], column_raster_qm[64]; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + pic_param = (VAEncPictureParameterBufferJPEG *)encode_state->pic_param_ext->buffer; + quality = pic_param->quality; + + //If the app sends the qmatrix, use it, buffer it for using it with the next frames + //The app can send qmatrix for the first frame and not send for the subsequent frames + if(encode_state->q_matrix && encode_state->q_matrix->buffer) { + qmatrix = (VAQMatrixBufferJPEG *)encode_state->q_matrix->buffer; + + mfc_context->buffered_qmatrix.load_lum_quantiser_matrix = 1; + memcpy(mfc_context->buffered_qmatrix.lum_quantiser_matrix, qmatrix->lum_quantiser_matrix, 64 * (sizeof(unsigned char))); + + if(pic_param->num_components > 1) { + mfc_context->buffered_qmatrix.load_chroma_quantiser_matrix = 1; + memcpy(mfc_context->buffered_qmatrix.chroma_quantiser_matrix, qmatrix->chroma_quantiser_matrix, 64 * (sizeof(unsigned char))); + } else { + mfc_context->buffered_qmatrix.load_chroma_quantiser_matrix = 0; + } + + } else { + //If the app doesnt send the qmatrix, use the buffered/default qmatrix + qmatrix = &mfc_context->buffered_qmatrix; + qmatrix->load_lum_quantiser_matrix = 1; + qmatrix->load_chroma_quantiser_matrix = (pic_param->num_components > 1) ? 1 : 0; + } + + + //As per the design, normalization of the quality factor and scaling of the Quantization tables + //based on the quality factor needs to be done in the driver before sending the values to the HW. + //But note, the driver expects the scaled quantization tables (as per below logic) to be sent as + //packed header information. The packed header is written as the header of the jpeg file. This + //header information is used to decode the jpeg file. So, it is the app's responsibility to send + //the correct header information (See build_packed_jpeg_header_buffer() in jpegenc.c in LibVa on + //how to do this). QTables can be different for different applications. If no tables are provided, + //the default tables in the driver are used. + + //Normalization of the quality factor + if (quality > 100) quality=100; + if (quality == 0) quality=1; + quality = (quality < 50) ? (5000/quality) : (200 - (quality*2)); + + //Step 1. Apply Quality factor and clip to range [1, 255] for luma and chroma Quantization matrices + //Step 2. HW expects the 1/Q[i] values in the qm sent, so get reciprocals + //Step 3. HW also expects 32 dwords, hence combine 2 (1/Q) values into 1 dword + //Step 4. Send the Quantization matrix to the HW, use gen8_mfc_fqm_state + + //For luma (Y or R) + if(qmatrix->load_lum_quantiser_matrix) { + //apply quality to lum_quantiser_matrix + for(i=0; i < 64; i++) { + temp = (qmatrix->lum_quantiser_matrix[i] * quality)/100; + //clamp to range [1,255] + temp = (temp > 255) ? 255 : temp; + temp = (temp < 1) ? 1 : temp; + qmatrix->lum_quantiser_matrix[i] = (unsigned char)temp; + } + + //For VAAPI, the VAQMatrixBuffer needs to be in zigzag order. + //The App should send it in zigzag. Now, the driver has to extract the raster from it. + for (j = 0; j < 64; j++) + raster_qm[zigzag_direct[j]] = qmatrix->lum_quantiser_matrix[j]; + + //Convert the raster order(row-ordered) to the column-raster (column by column). + //To be consistent with the other encoders, send it in column order. + //Need to double check if our HW expects col or row raster. + for (j = 0; j < 64; j++) { + int row = j / 8, col = j % 8; + column_raster_qm[col * 8 + row] = raster_qm[j]; + } + + //Convert to raster QM to reciprocal. HW expects values in reciprocal. + get_reciprocal_dword_qm(column_raster_qm, dword_qm); + + //send the luma qm to the command buffer + gen8_mfc_fqm_state(ctx, MFX_QM_JPEG_LUMA_Y_QUANTIZER_MATRIX, dword_qm, 32, encoder_context); + } + + //For Chroma, if chroma exists (Cb, Cr or G, B) + if(qmatrix->load_chroma_quantiser_matrix) { + //apply quality to chroma_quantiser_matrix + for(i=0; i < 64; i++) { + temp = (qmatrix->chroma_quantiser_matrix[i] * quality)/100; + //clamp to range [1,255] + temp = (temp > 255) ? 255 : temp; + temp = (temp < 1) ? 1 : temp; + qmatrix->chroma_quantiser_matrix[i] = (unsigned char)temp; + } + + //For VAAPI, the VAQMatrixBuffer needs to be in zigzag order. + //The App should send it in zigzag. Now, the driver has to extract the raster from it. + for (j = 0; j < 64; j++) + raster_qm[zigzag_direct[j]] = qmatrix->chroma_quantiser_matrix[j]; + + //Convert the raster order(row-ordered) to the column-raster (column by column). + //To be consistent with the other encoders, send it in column order. + //Need to double check if our HW expects col or row raster. + for (j = 0; j < 64; j++) { + int row = j / 8, col = j % 8; + column_raster_qm[col * 8 + row] = raster_qm[j]; + } + + + //Convert to raster QM to reciprocal. HW expects values in reciprocal. + get_reciprocal_dword_qm(column_raster_qm, dword_qm); + + //send the same chroma qm to the command buffer (for both U,V or G,B) + gen8_mfc_fqm_state(ctx, MFX_QM_JPEG_CHROMA_CB_QUANTIZER_MATRIX, dword_qm, 32, encoder_context); + gen8_mfc_fqm_state(ctx, MFX_QM_JPEG_CHROMA_CR_QUANTIZER_MATRIX, dword_qm, 32, encoder_context); + } +} + + +//Translation of Table K.5 into code: This method takes the huffval from the +//Huffmantable buffer and converts into index for the coefficients and size tables +uint8_t map_huffval_to_index(uint8_t huff_val) +{ + uint8_t index = 0; + + if(huff_val < 0xF0) { + index = (((huff_val >> 4) & 0x0F) * 0xA) + (huff_val & 0x0F); + } else { + index = 1 + (((huff_val >> 4) & 0x0F) * 0xA) + (huff_val & 0x0F); + } + + return index; +} + + +//Implementation of Flow chart Annex C - Figure C.1 +static void +generate_huffman_codesizes_table(uint8_t *bits, uint8_t *huff_size_table, uint8_t *lastK) +{ + uint8_t i=1, j=1, k=0; + + while(i <= 16) { + while(j <= (uint8_t)bits[i-1]) { + huff_size_table[k] = i; + k = k+1; + j = j+1; + } + + i = i+1; + j = 1; + } + huff_size_table[k] = 0; + (*lastK) = k; +} + +//Implementation of Flow chart Annex C - Figure C.2 +static void +generate_huffman_codes_table(uint8_t *huff_size_table, uint16_t *huff_code_table) +{ + uint8_t k=0; + uint16_t code=0; + uint8_t si=huff_size_table[k]; + + while(huff_size_table[k] != 0) { + + while(huff_size_table[k] == si) { + + // An huffman code can never be 0xFFFF. Replace it with 0 if 0xFFFF + if(code == 0xFFFF) { + code = 0x0000; + } + + huff_code_table[k] = code; + code = code+1; + k = k+1; + } + + code <<= 1; + si = si+1; + } + +} + +//Implementation of Flow chat Annex C - Figure C.3 +static void +generate_ordered_codes_table(uint8_t *huff_vals, uint8_t *huff_size_table, uint16_t *huff_code_table, uint8_t type, uint8_t lastK) +{ + uint8_t huff_val_size=0, i=0, k=0; + + huff_val_size = (type == 0) ? 12 : 162; + uint8_t huff_si_table[huff_val_size]; + uint16_t huff_co_table[huff_val_size]; + + memset(huff_si_table, 0, sizeof(huff_si_table)); + memset(huff_co_table, 0, sizeof(huff_co_table)); + + do { + i = map_huffval_to_index(huff_vals[k]); + huff_co_table[i] = huff_code_table[k]; + huff_si_table[i] = huff_size_table[k]; + k++; + } while(k < lastK); + + memcpy(huff_size_table, huff_si_table, sizeof(uint8_t)*huff_val_size); + memcpy(huff_code_table, huff_co_table, sizeof(uint16_t)*huff_val_size); +} + + +//This method converts the huffman table to code words which is needed by the HW +//Flowcharts from Jpeg Spec Annex C - Figure C.1, Figure C.2, Figure C.3 are used here +static void +convert_hufftable_to_codes(VAHuffmanTableBufferJPEGBaseline *huff_buffer, uint32_t *table, uint8_t type, uint8_t index) +{ + uint8_t lastK = 0, i=0; + uint8_t huff_val_size = 0; + uint8_t *huff_bits, *huff_vals; + + huff_val_size = (type == 0) ? 12 : 162; + uint8_t huff_size_table[huff_val_size+1]; //The +1 for adding 0 at the end of huff_val_size + uint16_t huff_code_table[huff_val_size]; + + memset(huff_size_table, 0, sizeof(huff_size_table)); + memset(huff_code_table, 0, sizeof(huff_code_table)); + + huff_bits = (type == 0) ? (huff_buffer->huffman_table[index].num_dc_codes) : (huff_buffer->huffman_table[index].num_ac_codes); + huff_vals = (type == 0) ? (huff_buffer->huffman_table[index].dc_values) : (huff_buffer->huffman_table[index].ac_values); + + + //Generation of table of Huffman code sizes + generate_huffman_codesizes_table(huff_bits, huff_size_table, &lastK); + + //Generation of table of Huffman codes + generate_huffman_codes_table(huff_size_table, huff_code_table); + + //Ordering procedure for encoding procedure code tables + generate_ordered_codes_table(huff_vals, huff_size_table, huff_code_table, type, lastK); + + //HW expects Byte0: Code length; Byte1,Byte2: Code Word, Byte3: Dummy + //Since IA is littlended, &, | and << accordingly to store the values in the DWord. + for(i=0; ibase.batch; + uint8_t index; + uint32_t dc_table[12], ac_table[162]; + + assert(encode_state->huffman_table && encode_state->huffman_table->buffer); + huff_buffer = (VAHuffmanTableBufferJPEGBaseline *)encode_state->huffman_table->buffer; + + memset(dc_table, 0, 12); + memset(ac_table, 0, 162); + + for (index = 0; index < num_tables; index++) { + int id = va_to_gen7_jpeg_hufftable[index]; + + if (!huff_buffer->load_huffman_table[index]) + continue; + + //load DC table with 12 DWords + convert_hufftable_to_codes(huff_buffer, dc_table, 0, index); //0 for Dc + + //load AC table with 162 DWords + convert_hufftable_to_codes(huff_buffer, ac_table, 1, index); //1 for AC + + BEGIN_BCS_BATCH(batch, 176); + OUT_BCS_BATCH(batch, MFC_JPEG_HUFF_TABLE_STATE | (176 - 2)); + OUT_BCS_BATCH(batch, id); //Huff table id + + //DWord 2 - 13 has DC_TABLE + intel_batchbuffer_data(batch, dc_table, 12*4); + + //Dword 14 -175 has AC_TABLE + intel_batchbuffer_data(batch, ac_table, 162*4); + ADVANCE_BCS_BATCH(batch); + } +} + + +//This method is used to compute the MCU count used for setting MFC_JPEG_SCAN_OBJECT +static void get_Y_sampling_factors(uint32_t surface_format, uint8_t *h_factor, uint8_t *v_factor) +{ + switch (surface_format) { + case VA_FOURCC_Y800: { + (* h_factor) = 1; + (* v_factor) = 1; + break; + } + case VA_FOURCC_NV12: { + (* h_factor) = 2; + (* v_factor) = 2; + break; + } + case VA_FOURCC_UYVY: { + (* h_factor) = 2; + (* v_factor) = 1; + break; + } + case VA_FOURCC_YUY2: { + (* h_factor) = 2; + (* v_factor) = 1; + break; + } + case VA_FOURCC_RGBA: + case VA_FOURCC_444P: { + (* h_factor) = 1; + (* v_factor) = 1; + break; + } + default : { //May be have to insert error handling here. For now just use as below + (* h_factor) = 1; + (* v_factor) = 1; + break; + } + } +} + +//set MFC_JPEG_SCAN_OBJECT +static void +gen8_mfc_jpeg_scan_object(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + uint32_t mcu_count, surface_format, Mx, My; + uint8_t i, horizontal_sampling_factor, vertical_sampling_factor, huff_ac_table=0, huff_dc_table=0; + uint8_t is_last_scan = 1; //Jpeg has only 1 scan per frame. When last scan, HW inserts EOI code. + uint8_t head_present_flag=1; //Header has tables and app data + uint16_t num_components, restart_interval; //Specifies number of MCUs in an ECS. + VAEncSliceParameterBufferJPEG *slice_param; + VAEncPictureParameterBufferJPEG *pic_param; + + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct object_surface *obj_surface = encode_state->input_yuv_object; + + assert(encode_state->slice_params_ext[0] && encode_state->slice_params_ext[0]->buffer); + assert(encode_state->pic_param_ext && encode_state->pic_param_ext->buffer); + assert(obj_surface); + pic_param = (VAEncPictureParameterBufferJPEG *)encode_state->pic_param_ext->buffer; + slice_param = (VAEncSliceParameterBufferJPEG *)encode_state->slice_params_ext[0]->buffer; + surface_format = obj_surface->fourcc; + + get_Y_sampling_factors(surface_format, &horizontal_sampling_factor, &vertical_sampling_factor); + + // Mx = #MCUs in a row, My = #MCUs in a column + Mx = (pic_param->picture_width + (horizontal_sampling_factor*8 -1))/(horizontal_sampling_factor*8); + My = (pic_param->picture_height + (vertical_sampling_factor*8 -1))/(vertical_sampling_factor*8); + mcu_count = (Mx * My); + + num_components = pic_param->num_components; + restart_interval = slice_param->restart_interval; + + //Depending on number of components and values set for table selectors, + //only those bits are set in 24:22 for AC table, 20:18 for DC table + for(i=0; icomponents[i].ac_table_selector)<components[i].dc_table_selector)<base.batch; + assert(batch); + + if (data_bits_in_last_dw == 0) + data_bits_in_last_dw = 32; + + BEGIN_BCS_BATCH(batch, length_in_dws + 2); + + OUT_BCS_BATCH(batch, MFX_INSERT_OBJECT | (length_in_dws + 2 - 2)); + //DWord 1 + OUT_BCS_BATCH(batch, + (0 << 16) | //DataByteOffset 0 for JPEG Encoder + (0 << 15) | //HeaderLengthExcludeFrmSize 0 for JPEG Encoder + (data_bits_in_last_dw << 8) | //DataBitsInLastDW + (0 << 4) | //SkipEmulByteCount 0 for JPEG Encoder + (0 << 3) | //EmulationFlag 0 for JPEG Encoder + ((!!is_last_header) << 2) | //LastHeaderFlag + ((!!is_end_of_slice) << 1) | //EndOfSliceFlag + (1 << 0)); //BitstreamStartReset 1 for JPEG Encoder + //Data Paylaod + intel_batchbuffer_data(batch, insert_data, length_in_dws*4); + + ADVANCE_BCS_BATCH(batch); +} + + +//send the jpeg headers to HW using MFX_PAK_INSERT_OBJECT +static void +gen8_mfc_jpeg_add_headers(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + if (encode_state->packed_header_data_ext) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)(*encode_state->packed_header_data_ext)->buffer; + unsigned int length_in_bits; + + param = (VAEncPackedHeaderParameterBuffer *)(*encode_state->packed_header_params_ext)->buffer; + length_in_bits = param->bit_length; + + gen8_mfc_jpeg_pak_insert_object(encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + 1, + 1); + } +} + +//Initialize the buffered_qmatrix with the default qmatrix in the driver. +//If the app sends the qmatrix, this will be replaced with the one app sends. +static void +jpeg_init_default_qmatrix(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + int i=0; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + //Load the the QM in zigzag order. If app sends QM, it is always in zigzag order. + for(i=0; i<64; i++) + mfc_context->buffered_qmatrix.lum_quantiser_matrix[i] = jpeg_luma_quant[zigzag_direct[i]]; + + for(i=0; i<64; i++) + mfc_context->buffered_qmatrix.chroma_quantiser_matrix[i] = jpeg_chroma_quant[zigzag_direct[i]]; +} + +/* This is at the picture level */ +static void +gen8_mfc_jpeg_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + int i, j, component, max_selector = 0; + VAEncSliceParameterBufferJPEG *slice_param; + + gen8_mfc_pipe_mode_select(ctx, MFX_FORMAT_JPEG, encoder_context); + gen8_mfc_jpeg_set_surface_state(ctx, encoder_context, encode_state); + gen8_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen8_mfc_ind_obj_base_addr_state(ctx, encoder_context); + gen8_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + gen8_mfc_jpeg_pic_state(ctx, encoder_context, encode_state); + + //do the slice level encoding here + gen8_mfc_jpeg_fqm_state(ctx, encoder_context, encode_state); + + //I dont think I need this for loop. Just to be consistent with other encoding logic... + for(i = 0; i < encode_state->num_slice_params_ext; i++) { + assert(encode_state->slice_params && encode_state->slice_params_ext[i]->buffer); + slice_param = (VAEncSliceParameterBufferJPEG *)encode_state->slice_params_ext[i]->buffer; + + for(j = 0; j < encode_state->slice_params_ext[i]->num_elements; j++) { + + for(component = 0; component < slice_param->num_components; component++) { + if(max_selector < slice_param->components[component].dc_table_selector) + max_selector = slice_param->components[component].dc_table_selector; + + if (max_selector < slice_param->components[component].ac_table_selector) + max_selector = slice_param->components[component].ac_table_selector; + } + + slice_param++; + } + } + + assert(max_selector < 2); + //send the huffman table using MFC_JPEG_HUFF_TABLE + gen8_mfc_jpeg_huff_table_state(ctx, encode_state, encoder_context, max_selector+1); + //set MFC_JPEG_SCAN_OBJECT + gen8_mfc_jpeg_scan_object(ctx, encode_state, encoder_context); + //add headers using MFX_PAK_INSERT_OBJECT (it is refered as MFX_INSERT_OBJECT in this driver code) + gen8_mfc_jpeg_add_headers(ctx, encode_state, encoder_context); + +} + +static void +gen8_mfc_jpeg_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen8_mfc_jpeg_pipeline_picture_programing(ctx, encode_state, encoder_context); + + // end programing + intel_batchbuffer_end_atomic(batch); + +} + + +static VAStatus +gen8_mfc_jpeg_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_jpeg_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen8_mfc_jpeg_pipeline_programing(ctx, encode_state, encoder_context); + gen8_mfc_run(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static int gen8_mfc_vp8_qindex_estimate(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int target_frame_size, + int is_key_frame) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + unsigned int max_qindex = pic_param->clamp_qindex_high; + unsigned int min_qindex = pic_param->clamp_qindex_low; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + int target_mb_size; + int last_size_gap = -1; + int per_mb_size_at_qindex; + int target_qindex = min_qindex, i; + + /* make sure would not overflow*/ + if (target_frame_size >= (0x7fffffff >> 9)) + target_mb_size = (target_frame_size / width_in_mbs / height_in_mbs) << 9; + else + target_mb_size = (target_frame_size << 9) / width_in_mbs / height_in_mbs; + + for (i = min_qindex; i <= max_qindex; i++) { + per_mb_size_at_qindex = vp8_bits_per_mb[!is_key_frame][i]; + target_qindex = i; + if (per_mb_size_at_qindex <= target_mb_size) { + if (target_mb_size - per_mb_size_at_qindex < last_size_gap) + target_qindex--; + break; + } + else + last_size_gap = per_mb_size_at_qindex - target_mb_size; + } + + return target_qindex; +} + +static void +gen8_mfc_vp8_bit_rate_control_context_init(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncMiscParameterBuffer *misc_param_frame_rate_buffer = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + VAEncMiscParameterFrameRate* param_frame_rate = (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buffer->data; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + float fps = param_frame_rate->framerate; + int inter_mb_size = seq_param->bits_per_second * 1.0 / (fps+4.0) / width_in_mbs / height_in_mbs; + int intra_mb_size = inter_mb_size * 5.0; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].target_mb_size = intra_mb_size; + mfc_context->bit_rate_control_context[SLICE_TYPE_I].target_frame_size = intra_mb_size * width_in_mbs * height_in_mbs; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].target_mb_size = inter_mb_size; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].target_frame_size = inter_mb_size * width_in_mbs * height_in_mbs; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].TargetSizeInWord = (intra_mb_size + 16)/ 16; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].TargetSizeInWord = (inter_mb_size + 16)/ 16; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].MaxSizeInWord = mfc_context->bit_rate_control_context[SLICE_TYPE_I].TargetSizeInWord * 1.5; + mfc_context->bit_rate_control_context[SLICE_TYPE_P].MaxSizeInWord = mfc_context->bit_rate_control_context[SLICE_TYPE_P].TargetSizeInWord * 1.5; +} + +static void gen8_mfc_vp8_brc_init(struct encode_state *encode_state, + struct intel_encoder_context* encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncMiscParameterBuffer* misc_param_hrd = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + VAEncMiscParameterHRD* param_hrd = (VAEncMiscParameterHRD*)misc_param_hrd->data; + VAEncMiscParameterBuffer* misc_param_frame_rate_buffer = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + VAEncMiscParameterFrameRate* param_frame_rate = (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buffer->data; + double bitrate = seq_param->bits_per_second; + unsigned int frame_rate = param_frame_rate->framerate; + int inum = 1, pnum = 0; + int intra_period = seq_param->intra_period; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + int max_frame_size = (vp8_bits_per_mb[0][0] >> 9) * width_in_mbs * height_in_mbs;/* vp8_bits_per_mb table mutilpled 512 */ + + pnum = intra_period - 1; + + mfc_context->brc.mode = encoder_context->rate_control_mode; + + mfc_context->brc.target_frame_size[SLICE_TYPE_I] = (int)((double)((bitrate * intra_period)/frame_rate) / + (double)(inum + BRC_PWEIGHT * pnum )); + mfc_context->brc.target_frame_size[SLICE_TYPE_P] = BRC_PWEIGHT * mfc_context->brc.target_frame_size[SLICE_TYPE_I]; + + mfc_context->brc.gop_nums[SLICE_TYPE_I] = inum; + mfc_context->brc.gop_nums[SLICE_TYPE_P] = pnum; + + mfc_context->brc.bits_per_frame = bitrate/frame_rate; + + mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY = gen8_mfc_vp8_qindex_estimate(encode_state, + mfc_context, + mfc_context->brc.target_frame_size[SLICE_TYPE_I], + 1); + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY = gen8_mfc_vp8_qindex_estimate(encode_state, + mfc_context, + mfc_context->brc.target_frame_size[SLICE_TYPE_P], + 0); + + mfc_context->hrd.buffer_size = (double)param_hrd->buffer_size; + mfc_context->hrd.current_buffer_fullness = + (double)(param_hrd->initial_buffer_fullness < mfc_context->hrd.buffer_size)? + param_hrd->initial_buffer_fullness: mfc_context->hrd.buffer_size/2.; + mfc_context->hrd.target_buffer_fullness = (double)mfc_context->hrd.buffer_size/2.; + mfc_context->hrd.buffer_capacity = (double)mfc_context->hrd.buffer_size/max_frame_size; + mfc_context->hrd.violation_noted = 0; +} + +static int gen8_mfc_vp8_brc_postpack(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context, + int frame_bits) +{ + gen6_brc_status sts = BRC_NO_HRD_VIOLATION; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + int is_key_frame = !pic_param->pic_flags.bits.frame_type; + int slicetype = (is_key_frame ? SLICE_TYPE_I : SLICE_TYPE_P); + int qpi = mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY; + int qpp = mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY; + int qp; // quantizer of previously encoded slice of current type + int qpn; // predicted quantizer for next frame of current type in integer format + double qpf; // predicted quantizer for next frame of current type in float format + double delta_qp; // QP correction + int target_frame_size, frame_size_next; + /* Notes: + * x - how far we are from HRD buffer borders + * y - how far we are from target HRD buffer fullness + */ + double x, y; + double frame_size_alpha; + unsigned int max_qindex = pic_param->clamp_qindex_high; + unsigned int min_qindex = pic_param->clamp_qindex_low; + + qp = mfc_context->bit_rate_control_context[slicetype].QpPrimeY; + + target_frame_size = mfc_context->brc.target_frame_size[slicetype]; + if (mfc_context->hrd.buffer_capacity < 5) + frame_size_alpha = 0; + else + frame_size_alpha = (double)mfc_context->brc.gop_nums[slicetype]; + if (frame_size_alpha > 30) frame_size_alpha = 30; + frame_size_next = target_frame_size + (double)(target_frame_size - frame_bits) / + (double)(frame_size_alpha + 1.); + + /* frame_size_next: avoiding negative number and too small value */ + if ((double)frame_size_next < (double)(target_frame_size * 0.25)) + frame_size_next = (int)((double)target_frame_size * 0.25); + + qpf = (double)qp * target_frame_size / frame_size_next; + qpn = (int)(qpf + 0.5); + + if (qpn == qp) { + /* setting qpn we round qpf making mistakes: now we are trying to compensate this */ + mfc_context->brc.qpf_rounding_accumulator += qpf - qpn; + if (mfc_context->brc.qpf_rounding_accumulator > 1.0) { + qpn++; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } else if (mfc_context->brc.qpf_rounding_accumulator < -1.0) { + qpn--; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } + } + + /* making sure that QP is not changing too fast */ + if ((qpn - qp) > BRC_QP_MAX_CHANGE) qpn = qp + BRC_QP_MAX_CHANGE; + else if ((qpn - qp) < -BRC_QP_MAX_CHANGE) qpn = qp - BRC_QP_MAX_CHANGE; + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, min_qindex, max_qindex); + + /* checking wthether HRD compliance is still met */ + sts = intel_mfc_update_hrd(encode_state, mfc_context, frame_bits); + + /* calculating QP delta as some function*/ + x = mfc_context->hrd.target_buffer_fullness - mfc_context->hrd.current_buffer_fullness; + if (x > 0) { + x /= mfc_context->hrd.target_buffer_fullness; + y = mfc_context->hrd.current_buffer_fullness; + } + else { + x /= (mfc_context->hrd.buffer_size - mfc_context->hrd.target_buffer_fullness); + y = mfc_context->hrd.buffer_size - mfc_context->hrd.current_buffer_fullness; + } + if (y < 0.01) y = 0.01; + if (x > 1) x = 1; + else if (x < -1) x = -1; + + delta_qp = BRC_QP_MAX_CHANGE*exp(-1/y)*sin(BRC_PI_0_5 * x); + qpn = (int)(qpn + delta_qp + 0.5); + + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, min_qindex, max_qindex); + + if (sts == BRC_NO_HRD_VIOLATION) { // no HRD violation + /* correcting QPs of slices of other types */ + if (!is_key_frame) { + if (abs(qpn - BRC_I_P_QP_DIFF - qpi) > 4) + mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY += (qpn - BRC_I_P_QP_DIFF - qpi) >> 2; + } else { + if (abs(qpn + BRC_I_P_QP_DIFF - qpp) > 4) + mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY += (qpn + BRC_I_P_QP_DIFF - qpp) >> 2; + } + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_I].QpPrimeY, min_qindex, max_qindex); + BRC_CLIP(mfc_context->bit_rate_control_context[SLICE_TYPE_P].QpPrimeY, min_qindex, max_qindex); + } else if (sts == BRC_UNDERFLOW) { // underflow + if (qpn <= qp) qpn = qp + 2; + if (qpn > max_qindex) { + qpn = max_qindex; + sts = BRC_UNDERFLOW_WITH_MAX_QP; //underflow with maxQP + } + } else if (sts == BRC_OVERFLOW) { + if (qpn >= qp) qpn = qp - 2; + if (qpn < min_qindex) { // < 0 (?) overflow with minQP + qpn = min_qindex; + sts = BRC_OVERFLOW_WITH_MIN_QP; // bit stuffing to be done + } + } + + mfc_context->bit_rate_control_context[slicetype].QpPrimeY = qpn; + + return sts; +} + +static void gen8_mfc_vp8_hrd_context_init(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int target_bit_rate = seq_param->bits_per_second; + + // current we only support CBR mode. + if (rate_control_mode == VA_RC_CBR) { + mfc_context->vui_hrd.i_bit_rate_value = target_bit_rate >> 10; + mfc_context->vui_hrd.i_cpb_size_value = (target_bit_rate * 8) >> 10; + mfc_context->vui_hrd.i_initial_cpb_removal_delay = mfc_context->vui_hrd.i_cpb_size_value * 0.5 * 1024 / target_bit_rate * 90000; + mfc_context->vui_hrd.i_cpb_removal_delay = 2; + mfc_context->vui_hrd.i_frame_number = 0; + + mfc_context->vui_hrd.i_initial_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_dpb_output_delay_length = 24; + } + +} + +static void gen8_mfc_vp8_hrd_context_update(struct encode_state *encode_state, + struct gen6_mfc_context *mfc_context) +{ + mfc_context->vui_hrd.i_frame_number++; +} + +/* + * Check whether the parameters related with CBR are updated and decide whether + * it needs to reinitialize the configuration related with CBR. + * Currently it will check the following parameters: + * bits_per_second + * frame_rate + * gop_configuration(intra_period, ip_period, intra_idr_period) + */ +static bool gen8_mfc_vp8_brc_updated_check(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + double cur_fps, cur_bitrate; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncMiscParameterBuffer *misc_param_frame_rate_buf = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + VAEncMiscParameterFrameRate *param_frame_rate = (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buf->data; + unsigned int frame_rate = param_frame_rate->framerate; + + if (rate_control_mode != VA_RC_CBR) { + return false; + } + + cur_bitrate = seq_param->bits_per_second; + cur_fps = frame_rate; + + if ((cur_bitrate == mfc_context->brc.saved_bps) && + (cur_fps == mfc_context->brc.saved_fps) && + (seq_param->intra_period == mfc_context->brc.saved_intra_period)) { + /* the parameters related with CBR are not updaetd */ + return false; + } + + mfc_context->brc.saved_intra_period = seq_param->intra_period; + mfc_context->brc.saved_fps = cur_fps; + mfc_context->brc.saved_bps = cur_bitrate; + return true; +} + +static void gen8_mfc_vp8_brc_prepare(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + if (rate_control_mode == VA_RC_CBR) { + bool brc_updated; + assert(encoder_context->codec != CODEC_MPEG2); + + brc_updated = gen8_mfc_vp8_brc_updated_check(encode_state, encoder_context); + + /*Programing bit rate control */ + if ((mfc_context->bit_rate_control_context[SLICE_TYPE_I].MaxSizeInWord == 0) || + brc_updated) { + gen8_mfc_vp8_bit_rate_control_context_init(encode_state, mfc_context); + gen8_mfc_vp8_brc_init(encode_state, encoder_context); + } + + /*Programing HRD control */ + if ((mfc_context->vui_hrd.i_cpb_size_value == 0) || brc_updated ) + gen8_mfc_vp8_hrd_context_init(encode_state, encoder_context); + } +} + +static void vp8_enc_state_init(struct gen6_mfc_context *mfc_context, + VAEncPictureParameterBufferVP8 *pic_param, + VAQMatrixBufferVP8 *q_matrix) +{ + + int is_key_frame = !pic_param->pic_flags.bits.frame_type; + unsigned char *coeff_probs_stream_in_buffer; + + mfc_context->vp8_state.frame_header_lf_update_pos = 0; + mfc_context->vp8_state.frame_header_qindex_update_pos = 0; + mfc_context->vp8_state.frame_header_token_update_pos = 0; + mfc_context->vp8_state.frame_header_bin_mv_upate_pos = 0; + + mfc_context->vp8_state.prob_skip_false = 255; + memset(mfc_context->vp8_state.mb_segment_tree_probs, 0, sizeof(mfc_context->vp8_state.mb_segment_tree_probs)); + memcpy(mfc_context->vp8_state.mv_probs, vp8_default_mv_context, sizeof(mfc_context->vp8_state.mv_probs)); + + if (is_key_frame) { + memcpy(mfc_context->vp8_state.y_mode_probs, vp8_kf_ymode_prob, sizeof(mfc_context->vp8_state.y_mode_probs)); + memcpy(mfc_context->vp8_state.uv_mode_probs, vp8_kf_uv_mode_prob, sizeof(mfc_context->vp8_state.uv_mode_probs)); + + mfc_context->vp8_state.prob_intra = 255; + mfc_context->vp8_state.prob_last = 128; + mfc_context->vp8_state.prob_gf = 128; + } else { + memcpy(mfc_context->vp8_state.y_mode_probs, vp8_ymode_prob, sizeof(mfc_context->vp8_state.y_mode_probs)); + memcpy(mfc_context->vp8_state.uv_mode_probs, vp8_uv_mode_prob, sizeof(mfc_context->vp8_state.uv_mode_probs)); + + mfc_context->vp8_state.prob_intra = 63; + mfc_context->vp8_state.prob_last = 128; + mfc_context->vp8_state.prob_gf = 128; + } + + mfc_context->vp8_state.prob_skip_false = vp8_base_skip_false_prob[q_matrix->quantization_index[0]]; + + dri_bo_map(mfc_context->vp8_state.coeff_probs_stream_in_bo, 1); + coeff_probs_stream_in_buffer = (unsigned char *)mfc_context->vp8_state.coeff_probs_stream_in_bo->virtual; + assert(coeff_probs_stream_in_buffer); + memcpy(coeff_probs_stream_in_buffer, vp8_default_coef_probs, sizeof(vp8_default_coef_probs)); + dri_bo_unmap(mfc_context->vp8_state.coeff_probs_stream_in_bo); +} + +static void vp8_enc_state_update(struct gen6_mfc_context *mfc_context, + VAQMatrixBufferVP8 *q_matrix) +{ + + /*some other probabilities need to be updated*/ +} + +extern void binarize_vp8_frame_header(VAEncSequenceParameterBufferVP8 *seq_param, + VAEncPictureParameterBufferVP8 *pic_param, + VAQMatrixBufferVP8 *q_matrix, + struct gen6_mfc_context *mfc_context, + struct intel_encoder_context *encoder_context); + +static void vp8_enc_frame_header_binarize(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct gen6_mfc_context *mfc_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + VAQMatrixBufferVP8 *q_matrix = (VAQMatrixBufferVP8 *)encode_state->q_matrix->buffer; + unsigned char *frame_header_buffer; + + binarize_vp8_frame_header(seq_param, pic_param, q_matrix, mfc_context, encoder_context); + + dri_bo_map(mfc_context->vp8_state.frame_header_bo, 1); + frame_header_buffer = (unsigned char *)mfc_context->vp8_state.frame_header_bo->virtual; + assert(frame_header_buffer); + memcpy(frame_header_buffer, mfc_context->vp8_state.vp8_frame_header, (mfc_context->vp8_state.frame_header_bit_count + 7) / 8); + dri_bo_unmap(mfc_context->vp8_state.frame_header_bo); +} + +#define MAX_VP8_FRAME_HEADER_SIZE 0x2000 +#define VP8_TOKEN_STATISTICS_BUFFER_SIZE 0x2000 + +static void gen8_mfc_vp8_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + dri_bo *bo; + int i; + int width_in_mbs = 0; + int height_in_mbs = 0; + int slice_batchbuffer_size; + int is_key_frame, slice_type, rate_control_mode; + + VAEncSequenceParameterBufferVP8 *pSequenceParameter = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + VAQMatrixBufferVP8 *q_matrix = (VAQMatrixBufferVP8 *)encode_state->q_matrix->buffer; + + width_in_mbs = ALIGN(pSequenceParameter->frame_height, 16) / 16; + height_in_mbs = ALIGN(pSequenceParameter->frame_height, 16) / 16; + + is_key_frame = !pic_param->pic_flags.bits.frame_type; + slice_type = (is_key_frame ? SLICE_TYPE_I : SLICE_TYPE_P); + rate_control_mode = encoder_context->rate_control_mode; + + if (rate_control_mode == VA_RC_CBR) { + q_matrix->quantization_index[0] = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + for (i = 1; i < 4; i++) + q_matrix->quantization_index[i] = q_matrix->quantization_index[0]; + for (i = 0; i < 5; i++) + q_matrix->quantization_index_delta[i] = 0; + } + + slice_batchbuffer_size = 64 * width_in_mbs * height_in_mbs + 4096 + + (SLICE_HEADER + SLICE_TAIL); + + /*Encode common setup for MFC*/ + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + if ( mfc_context->direct_mv_buffers[i].bo != NULL) + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 64 * 16, + 64); + assert(bo); + mfc_context->intra_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 64); + assert(bo); + mfc_context->macroblock_status_buffer.bo = bo; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 16 * width_in_mbs * 64, /* 16 * width_in_mbs * 64 */ + 64); + assert(bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 16 * width_in_mbs * 64, /* 16 * width_in_mbs * 64 */ + 0x1000); + assert(bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; + + i965_gpe_context_init(ctx, &mfc_context->gpe_context); + + /* alloc vp8 encoding buffers*/ + dri_bo_unreference(mfc_context->vp8_state.frame_header_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + MAX_VP8_FRAME_HEADER_SIZE, + 0x1000); + assert(bo); + mfc_context->vp8_state.frame_header_bo = bo; + + mfc_context->vp8_state.intermediate_buffer_max_size = width_in_mbs * height_in_mbs * 384 * 9; + for(i = 0; i < 8; i++) { + mfc_context->vp8_state.intermediate_partition_offset[i] = width_in_mbs * height_in_mbs * 384 * (i + 1); + } + dri_bo_unreference(mfc_context->vp8_state.intermediate_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + mfc_context->vp8_state.intermediate_buffer_max_size, + 0x1000); + assert(bo); + mfc_context->vp8_state.intermediate_bo = bo; + + dri_bo_unreference(mfc_context->vp8_state.stream_out_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 0x1000); + assert(bo); + mfc_context->vp8_state.stream_out_bo = bo; + + dri_bo_unreference(mfc_context->vp8_state.coeff_probs_stream_in_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + sizeof(vp8_default_coef_probs), + 0x1000); + assert(bo); + mfc_context->vp8_state.coeff_probs_stream_in_bo = bo; + + dri_bo_unreference(mfc_context->vp8_state.token_statistics_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + VP8_TOKEN_STATISTICS_BUFFER_SIZE, + 0x1000); + assert(bo); + mfc_context->vp8_state.token_statistics_bo = bo; + + dri_bo_unreference(mfc_context->vp8_state.mpc_row_store_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 16 * 64, + 0x1000); + assert(bo); + mfc_context->vp8_state.mpc_row_store_bo = bo; + + vp8_enc_state_init(mfc_context, pic_param, q_matrix); + vp8_enc_frame_header_binarize(encode_state, encoder_context, mfc_context); +} + +static VAStatus +intel_mfc_vp8_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + VAStatus vaStatus = VA_STATUS_SUCCESS; + dri_bo *bo; + int i; + + /* reconstructed surface */ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420); + if (pic_param->loop_filter_level[0] == 0) { + mfc_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->pre_deblocking_output.bo); + } else { + mfc_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(mfc_context->post_deblocking_output.bo); + } + + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* set vp8 reference frames */ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + obj_surface = encode_state->reference_objects[i]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[i].bo = obj_surface->bo; + dri_bo_reference(mfc_context->reference_surfaces[i].bo); + } else { + mfc_context->reference_surfaces[i].bo = NULL; + } + } + + /* input YUV surface */ + obj_surface = encode_state->input_yuv_object; + mfc_context->uncompressed_picture_source.bo = obj_surface->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + /* coded buffer */ + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->mfc_indirect_pak_bse_object.bo = bo; + mfc_context->mfc_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->mfc_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->mfc_indirect_pak_bse_object.bo); + + dri_bo_unreference(mfc_context->vp8_state.final_frame_bo); + mfc_context->vp8_state.final_frame_bo = mfc_context->mfc_indirect_pak_bse_object.bo; + mfc_context->vp8_state.final_frame_byte_offset = I965_CODEDBUFFER_HEADER_SIZE; + dri_bo_reference(mfc_context->vp8_state.final_frame_bo); + + /* set the internal flag to 0 to indicate the coded size is unknown */ + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)bo->virtual; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + +static void +gen8_mfc_vp8_encoder_cfg(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + + BEGIN_BCS_BATCH(batch, 30); + OUT_BCS_BATCH(batch, MFX_VP8_ENCODER_CFG | (30 - 2)); /* SKL should be 31-2 ? */ + + OUT_BCS_BATCH(batch, + 0 << 9 | /* compressed bitstream output disable */ + 1 << 7 | /* disable per-segment delta qindex and loop filter in RC */ + 1 << 6 | /* RC initial pass */ + 0 << 4 | /* upate segment feature date flag */ + 1 << 3 | /* bitstream statistics output enable */ + 1 << 2 | /* token statistics output enable */ + 0 << 1 | /* final bitstream output disable */ + 0 << 0); /*DW1*/ + + OUT_BCS_BATCH(batch, 0); /*DW2*/ + + OUT_BCS_BATCH(batch, + 0xfff << 16 | /* max intra mb bit count limit */ + 0xfff << 0 /* max inter mb bit count limit */ + ); /*DW3*/ + + OUT_BCS_BATCH(batch, 0); /*DW4*/ + OUT_BCS_BATCH(batch, 0); /*DW5*/ + OUT_BCS_BATCH(batch, 0); /*DW6*/ + OUT_BCS_BATCH(batch, 0); /*DW7*/ + OUT_BCS_BATCH(batch, 0); /*DW8*/ + OUT_BCS_BATCH(batch, 0); /*DW9*/ + OUT_BCS_BATCH(batch, 0); /*DW10*/ + OUT_BCS_BATCH(batch, 0); /*DW11*/ + OUT_BCS_BATCH(batch, 0); /*DW12*/ + OUT_BCS_BATCH(batch, 0); /*DW13*/ + OUT_BCS_BATCH(batch, 0); /*DW14*/ + OUT_BCS_BATCH(batch, 0); /*DW15*/ + OUT_BCS_BATCH(batch, 0); /*DW16*/ + OUT_BCS_BATCH(batch, 0); /*DW17*/ + OUT_BCS_BATCH(batch, 0); /*DW18*/ + OUT_BCS_BATCH(batch, 0); /*DW19*/ + OUT_BCS_BATCH(batch, 0); /*DW20*/ + OUT_BCS_BATCH(batch, 0); /*DW21*/ + + OUT_BCS_BATCH(batch, + pic_param->pic_flags.bits.show_frame << 23 | + pic_param->pic_flags.bits.version << 20 + ); /*DW22*/ + + OUT_BCS_BATCH(batch, + (seq_param->frame_height_scale << 14 | seq_param->frame_height) << 16 | + (seq_param->frame_width_scale << 14 | seq_param->frame_width) << 0 + ); + + /*DW24*/ + OUT_BCS_BATCH(batch, mfc_context->vp8_state.frame_header_bit_count); /* frame header bit count */ + + /*DW25*/ + OUT_BCS_BATCH(batch, mfc_context->vp8_state.frame_header_qindex_update_pos); /* frame header bin buffer qindex update pointer */ + + /*DW26*/ + OUT_BCS_BATCH(batch, mfc_context->vp8_state.frame_header_lf_update_pos); /* frame header bin buffer loop filter update pointer*/ + + /*DW27*/ + OUT_BCS_BATCH(batch, mfc_context->vp8_state.frame_header_token_update_pos); /* frame header bin buffer token update pointer */ + + /*DW28*/ + OUT_BCS_BATCH(batch, mfc_context->vp8_state.frame_header_bin_mv_upate_pos); /*frame header bin buffer mv update pointer */ + + /*DW29*/ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_vp8_pic_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + VAQMatrixBufferVP8 *q_matrix = (VAQMatrixBufferVP8 *)encode_state->q_matrix->buffer; + int i, j, log2num; + + log2num = pic_param->pic_flags.bits.num_token_partitions; + + /*update mode and token probs*/ + vp8_enc_state_update(mfc_context, q_matrix); + + BEGIN_BCS_BATCH(batch, 38); + OUT_BCS_BATCH(batch, MFX_VP8_PIC_STATE | (38 - 2)); + OUT_BCS_BATCH(batch, + (ALIGN(seq_param->frame_height, 16) / 16 - 1) << 16 | + (ALIGN(seq_param->frame_width, 16) / 16 - 1) << 0); + + OUT_BCS_BATCH(batch, + log2num << 24 | + pic_param->sharpness_level << 16 | + pic_param->pic_flags.bits.sign_bias_alternate << 13 | + pic_param->pic_flags.bits.sign_bias_golden << 12 | + pic_param->pic_flags.bits.loop_filter_adj_enable << 11 | + pic_param->pic_flags.bits.mb_no_coeff_skip << 10 | + pic_param->pic_flags.bits.update_mb_segmentation_map << 9 | + pic_param->pic_flags.bits.segmentation_enabled << 8 | + !pic_param->pic_flags.bits.frame_type << 5 | /* 0 indicate an intra frame in VP8 stream/spec($9.1)*/ + (pic_param->pic_flags.bits.version / 2) << 4 | + (pic_param->pic_flags.bits.version == 3) << 1 | /* full pixel mode for version 3 */ + !!pic_param->pic_flags.bits.version << 0); /* version 0: 6 tap */ + + OUT_BCS_BATCH(batch, + pic_param->loop_filter_level[3] << 24 | + pic_param->loop_filter_level[2] << 16 | + pic_param->loop_filter_level[1] << 8 | + pic_param->loop_filter_level[0] << 0); + + OUT_BCS_BATCH(batch, + q_matrix->quantization_index[3] << 24 | + q_matrix->quantization_index[2] << 16 | + q_matrix->quantization_index[1] << 8 | + q_matrix->quantization_index[0] << 0); + + OUT_BCS_BATCH(batch, + ((unsigned short)(q_matrix->quantization_index_delta[4]) >> 15) << 28 | + abs(q_matrix->quantization_index_delta[4]) << 24 | + ((unsigned short)(q_matrix->quantization_index_delta[3]) >> 15) << 20 | + abs(q_matrix->quantization_index_delta[3]) << 16 | + ((unsigned short)(q_matrix->quantization_index_delta[2]) >> 15) << 12 | + abs(q_matrix->quantization_index_delta[2]) << 8 | + ((unsigned short)(q_matrix->quantization_index_delta[1]) >> 15) << 4 | + abs(q_matrix->quantization_index_delta[1]) << 0); + + OUT_BCS_BATCH(batch, + ((unsigned short)(q_matrix->quantization_index_delta[0]) >> 15) << 4 | + abs(q_matrix->quantization_index_delta[0]) << 0); + + OUT_BCS_BATCH(batch, + pic_param->clamp_qindex_high << 8 | + pic_param->clamp_qindex_low << 0); + + for (i = 8; i < 19; i++) { + OUT_BCS_BATCH(batch, 0xffffffff); + } + + OUT_BCS_BATCH(batch, + mfc_context->vp8_state.mb_segment_tree_probs[2] << 16 | + mfc_context->vp8_state.mb_segment_tree_probs[1] << 8 | + mfc_context->vp8_state.mb_segment_tree_probs[0] << 0); + + OUT_BCS_BATCH(batch, + mfc_context->vp8_state.prob_skip_false << 24 | + mfc_context->vp8_state.prob_intra << 16 | + mfc_context->vp8_state.prob_last << 8 | + mfc_context->vp8_state.prob_gf << 0); + + OUT_BCS_BATCH(batch, + mfc_context->vp8_state.y_mode_probs[3] << 24 | + mfc_context->vp8_state.y_mode_probs[2] << 16 | + mfc_context->vp8_state.y_mode_probs[1] << 8 | + mfc_context->vp8_state.y_mode_probs[0] << 0); + + OUT_BCS_BATCH(batch, + mfc_context->vp8_state.uv_mode_probs[2] << 16 | + mfc_context->vp8_state.uv_mode_probs[1] << 8 | + mfc_context->vp8_state.uv_mode_probs[0] << 0); + + /* MV update value, DW23-DW32 */ + for (i = 0; i < 2; i++) { + for (j = 0; j < 20; j += 4) { + OUT_BCS_BATCH(batch, + (j + 3 == 19 ? 0 : mfc_context->vp8_state.mv_probs[i][j + 3]) << 24 | + mfc_context->vp8_state.mv_probs[i][j + 2] << 16 | + mfc_context->vp8_state.mv_probs[i][j + 1] << 8 | + mfc_context->vp8_state.mv_probs[i][j + 0] << 0); + } + } + + OUT_BCS_BATCH(batch, + (pic_param->ref_lf_delta[3] & 0x7f) << 24 | + (pic_param->ref_lf_delta[2] & 0x7f) << 16 | + (pic_param->ref_lf_delta[1] & 0x7f) << 8 | + (pic_param->ref_lf_delta[0] & 0x7f) << 0); + + OUT_BCS_BATCH(batch, + (pic_param->mode_lf_delta[3] & 0x7f) << 24 | + (pic_param->mode_lf_delta[2] & 0x7f) << 16 | + (pic_param->mode_lf_delta[1] & 0x7f) << 8 | + (pic_param->mode_lf_delta[0] & 0x7f) << 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +#define OUT_VP8_BUFFER(bo, offset) \ + if (bo) \ + OUT_BCS_RELOC(batch, \ + bo, \ + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, \ + offset); \ + else \ + OUT_BCS_BATCH(batch, 0); \ + OUT_BCS_BATCH(batch, 0); \ + OUT_BCS_BATCH(batch, 0); + +static void +gen8_mfc_vp8_bsp_buf_base_addr_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 32); + OUT_BCS_BATCH(batch, MFX_VP8_BSP_BUF_BASE_ADDR_STATE | (32 - 2)); + + OUT_VP8_BUFFER(mfc_context->vp8_state.frame_header_bo, 0); + + OUT_VP8_BUFFER(mfc_context->vp8_state.intermediate_bo, 0); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[0]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[1]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[2]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[3]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[4]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[5]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[6]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_partition_offset[7]); + OUT_BCS_BATCH(batch, mfc_context->vp8_state.intermediate_buffer_max_size); + + OUT_VP8_BUFFER(mfc_context->vp8_state.final_frame_bo, I965_CODEDBUFFER_HEADER_SIZE); + OUT_BCS_BATCH(batch, 0); + + OUT_VP8_BUFFER(mfc_context->vp8_state.stream_out_bo, 0); + OUT_VP8_BUFFER(mfc_context->vp8_state.coeff_probs_stream_in_bo, 0); + OUT_VP8_BUFFER(mfc_context->vp8_state.token_statistics_bo, 0); + OUT_VP8_BUFFER(mfc_context->vp8_state.mpc_row_store_bo, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_vp8_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_VP8, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen8_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen8_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + gen8_mfc_vp8_bsp_buf_base_addr_state(ctx, encode_state, encoder_context); + gen8_mfc_vp8_pic_state(ctx, encode_state,encoder_context); + gen8_mfc_vp8_encoder_cfg(ctx, encode_state, encoder_context); +} + +static const unsigned char +vp8_intra_mb_mode_map[VME_MB_INTRA_MODE_COUNT] = { + PAK_V_PRED, + PAK_H_PRED, + PAK_DC_PRED, + PAK_TM_PRED +}; + +static const unsigned char +vp8_intra_block_mode_map[VME_B_INTRA_MODE_COUNT] = { + PAK_B_VE_PRED, + PAK_B_HE_PRED, + PAK_B_DC_PRED, + PAK_B_LD_PRED, + PAK_B_RD_PRED, + PAK_B_VR_PRED, + PAK_B_HD_PRED, + PAK_B_VL_PRED, + PAK_B_HU_PRED +}; + +static int inline gen8_mfc_vp8_intra_mb_mode_map(unsigned int vme_pred_mode, int is_luma_4x4) +{ + unsigned int i, pak_pred_mode = 0; + unsigned int vme_sub_blocks_pred_mode[8], pak_sub_blocks_pred_mode[8]; /* 8 blocks's intra mode */ + + if (!is_luma_4x4) { + pak_pred_mode = vp8_intra_mb_mode_map[vme_pred_mode & 0x3]; + } else { + for (i = 0; i < 8; i++) { + vme_sub_blocks_pred_mode[i] = ((vme_pred_mode >> (4 * i)) & 0xf); + assert(vme_sub_blocks_pred_mode[i] < VME_B_INTRA_MODE_COUNT); + pak_sub_blocks_pred_mode[i] = vp8_intra_block_mode_map[vme_sub_blocks_pred_mode[i]]; + pak_pred_mode |= (pak_sub_blocks_pred_mode[i] << (4 * i)); + } + } + + return pak_pred_mode; +} +static void +gen8_mfc_vp8_pak_object_intra(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + unsigned int *msg, + int x, int y, + struct intel_batchbuffer *batch) +{ + unsigned int vme_intra_mb_mode, vme_chroma_pred_mode; + unsigned int pak_intra_mb_mode, pak_chroma_pred_mode; + unsigned int vme_luma_pred_mode[2], pak_luma_pred_mode[2]; + + if (batch == NULL) + batch = encoder_context->base.batch; + + vme_intra_mb_mode = ((msg[0] & 0x30) >> 4); + assert((vme_intra_mb_mode == 0) || (vme_intra_mb_mode == 2)); //vp8 only support intra_16x16 and intra_4x4 + pak_intra_mb_mode = (vme_intra_mb_mode >> 1); + + vme_luma_pred_mode[0] = msg[1]; + vme_luma_pred_mode[1] = msg[2]; + vme_chroma_pred_mode = msg[3] & 0x3; + + pak_luma_pred_mode[0] = gen8_mfc_vp8_intra_mb_mode_map(vme_luma_pred_mode[0], pak_intra_mb_mode); + pak_luma_pred_mode[1] = gen8_mfc_vp8_intra_mb_mode_map(vme_luma_pred_mode[1], pak_intra_mb_mode); + pak_chroma_pred_mode = gen8_mfc_vp8_intra_mb_mode_map(vme_chroma_pred_mode, 0); + + BEGIN_BCS_BATCH(batch, 7); + + OUT_BCS_BATCH(batch, MFX_VP8_PAK_OBJECT | (7 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 20) | /* mv format: intra mb */ + (0 << 18) | /* Segment ID */ + (0 << 17) | /* disable coeff clamp */ + (1 << 13) | /* intra mb flag */ + (0 << 11) | /* refer picture select: last frame */ + (pak_intra_mb_mode << 8) | /* mb type */ + (pak_chroma_pred_mode << 4) | /* mb uv mode */ + (0 << 2) | /* skip mb flag: disable */ + 0); + + OUT_BCS_BATCH(batch, (y << 16) | x); + OUT_BCS_BATCH(batch, pak_luma_pred_mode[0]); + OUT_BCS_BATCH(batch, pak_luma_pred_mode[1]); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_vp8_pak_object_inter(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + unsigned int *msg, + int offset, + int x, int y, + struct intel_batchbuffer *batch) +{ + int i; + + if (batch == NULL) + batch = encoder_context->base.batch; + + /* only support inter_16x16 now */ + assert((msg[AVC_INTER_MSG_OFFSET] & INTER_MODE_MASK) == INTER_16X16); + /* for inter_16x16, all 16 MVs should be same, + * and move mv to the vme mb start address to make sure offset is 64 bytes aligned + * as vp8 spec, all vp8 luma motion vectors are doulbled stored + */ + msg[0] = (((msg[AVC_INTER_MV_OFFSET/4] & 0xffff0000) << 1) | ((msg[AVC_INTER_MV_OFFSET/4] << 1) & 0xffff)); + + for (i = 1; i < 16; i++) { + msg[i] = msg[0]; + } + + BEGIN_BCS_BATCH(batch, 7); + + OUT_BCS_BATCH(batch, MFX_VP8_PAK_OBJECT | (7 - 2)); + OUT_BCS_BATCH(batch, + (0 << 29) | /* enable inline mv data: disable */ + 64); + OUT_BCS_BATCH(batch, + offset); + OUT_BCS_BATCH(batch, + (4 << 20) | /* mv format: inter */ + (0 << 18) | /* Segment ID */ + (0 << 17) | /* coeff clamp: disable */ + (0 << 13) | /* intra mb flag: inter mb */ + (0 << 11) | /* refer picture select: last frame */ + (0 << 8) | /* mb type: 16x16 */ + (0 << 4) | /* mb uv mode: dc_pred */ + (0 << 2) | /* skip mb flag: disable */ + 0); + + OUT_BCS_BATCH(batch, (y << 16) | x); + + /*new mv*/ + OUT_BCS_BATCH(batch, 0x8); + OUT_BCS_BATCH(batch, 0x8); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfc_vp8_pak_pipeline(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + unsigned int *msg = NULL; + unsigned char *msg_ptr = NULL; + unsigned int i, offset, is_intra_frame; + + is_intra_frame = !pic_param->pic_flags.bits.frame_type; + + dri_bo_map(vme_context->vme_output.bo , 1); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + for( i = 0; i < width_in_mbs * height_in_mbs; i++) { + int h_pos = i % width_in_mbs; + int v_pos = i / width_in_mbs; + msg = (unsigned int *) (msg_ptr + i * vme_context->vme_output.size_block); + + if (is_intra_frame) { + gen8_mfc_vp8_pak_object_intra(ctx, + encoder_context, + msg, + h_pos, v_pos, + slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + + if (intra_rdo < inter_rdo) { + gen8_mfc_vp8_pak_object_intra(ctx, + encoder_context, + msg, + h_pos, v_pos, + slice_batch); + } else { + offset = i * vme_context->vme_output.size_block; + gen8_mfc_vp8_pak_object_inter(ctx, + encoder_context, + msg, + offset, + h_pos, v_pos, + slice_batch); + } + } + } + + dri_bo_unmap(vme_context->vme_output.bo); +} + +/* + * A batch buffer for vp8 pak object commands + */ +static dri_bo * +gen8_mfc_vp8_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + gen8_mfc_vp8_pak_pipeline(ctx, encode_state, encoder_context, batch); + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +static void +gen8_mfc_vp8_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + slice_batch_bo = gen8_mfc_vp8_software_batchbuffer(ctx, encode_state, encoder_context); + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen8_mfc_vp8_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +static int gen8_mfc_calc_vp8_coded_buffer_size(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + unsigned char is_intra_frame = !pic_param->pic_flags.bits.frame_type; + unsigned int *vp8_encoding_status, i, first_partition_bytes, token_partition_bytes, vp8_coded_bytes; + + int partition_num = 1 << pic_param->pic_flags.bits.num_token_partitions; + + first_partition_bytes = token_partition_bytes = vp8_coded_bytes = 0; + + dri_bo_map(mfc_context->vp8_state.token_statistics_bo, 0); + + vp8_encoding_status = (unsigned int *)mfc_context->vp8_state.token_statistics_bo->virtual; + first_partition_bytes = (vp8_encoding_status[0] + 7) / 8; + + for (i = 1; i <= partition_num; i++) + token_partition_bytes += (vp8_encoding_status[i] + 7) / 8; + + /*coded_bytes includes P0~P8 partitions bytes + uncompresse date bytes + partion_size bytes in bitstream + 3 extra bytes */ + /*it seems the last partition size in vp8 status buffer is smaller than reality. so add 3 extra bytes */ + vp8_coded_bytes = first_partition_bytes + token_partition_bytes + (3 + 7 * !!is_intra_frame) + (partition_num - 1) * 3 + 3; + + dri_bo_unmap(mfc_context->vp8_state.token_statistics_bo); + + dri_bo_map(mfc_context->vp8_state.final_frame_bo, 0); + struct i965_coded_buffer_segment *coded_buffer_segment = (struct i965_coded_buffer_segment *)(mfc_context->vp8_state.final_frame_bo->virtual); + coded_buffer_segment->base.size = vp8_coded_bytes; + dri_bo_unmap(mfc_context->vp8_state.final_frame_bo); + + return vp8_coded_bytes; +} + +static VAStatus +gen8_mfc_vp8_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + gen8_mfc_vp8_init(ctx, encode_state, encoder_context); + intel_mfc_vp8_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen8_mfc_vp8_pipeline_programing(ctx, encode_state, encoder_context); + gen8_mfc_run(ctx, encode_state, encoder_context); + current_frame_bits_size = 8 * gen8_mfc_calc_vp8_coded_buffer_size(ctx, encode_state, encoder_context); + + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + sts = gen8_mfc_vp8_brc_postpack(encode_state, mfc_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + gen8_mfc_vp8_hrd_context_update(encode_state, mfc_context); + } + else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!mfc_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP)? "overflow": "underflow"); + mfc_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } + + return VA_STATUS_SUCCESS; +} + +static void +gen8_mfc_context_destroy(void *context) +{ + struct gen6_mfc_context *mfc_context = context; + int i; + + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + mfc_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + mfc_context->macroblock_status_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + i965_gpe_context_destroy(&mfc_context->gpe_context); + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = NULL; + + dri_bo_unreference(mfc_context->vp8_state.coeff_probs_stream_in_bo); + mfc_context->vp8_state.coeff_probs_stream_in_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.final_frame_bo); + mfc_context->vp8_state.final_frame_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.frame_header_bo); + mfc_context->vp8_state.frame_header_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.intermediate_bo); + mfc_context->vp8_state.intermediate_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.mpc_row_store_bo); + mfc_context->vp8_state.mpc_row_store_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.stream_out_bo); + mfc_context->vp8_state.stream_out_bo = NULL; + + dri_bo_unreference(mfc_context->vp8_state.token_statistics_bo); + mfc_context->vp8_state.token_statistics_bo = NULL; + + free(mfc_context); +} + +static VAStatus gen8_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + vaStatus = gen8_mfc_avc_encode_picture(ctx, encode_state, encoder_context); + break; + + /* FIXME: add for other profile */ + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + vaStatus = gen8_mfc_mpeg2_encode_picture(ctx, encode_state, encoder_context); + break; + + case VAProfileJPEGBaseline: + jpeg_init_default_qmatrix(ctx, encoder_context); + vaStatus = gen8_mfc_jpeg_encode_picture(ctx, encode_state, encoder_context); + break; + + case VAProfileVP8Version0_3: + vaStatus = gen8_mfc_vp8_encode_picture(ctx, encode_state, encoder_context); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +Bool gen8_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = calloc(1, sizeof(struct gen6_mfc_context)); + assert(mfc_context); + mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + mfc_context->gpe_context.idrt.max_entries = MAX_GPE_KERNELS; + mfc_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + mfc_context->gpe_context.curbe.length = 32 * 4; + + mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + mfc_context->gpe_context.vfe_state.num_urb_entries = 16; + mfc_context->gpe_context.vfe_state.gpgpu_mode = 0; + mfc_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + mfc_context->gpe_context.vfe_state.curbe_allocation_size = 37 - 1; + + i965_gpe_load_kernels(ctx, + &mfc_context->gpe_context, + gen8_mfc_kernels, + NUM_MFC_KERNEL); + + mfc_context->pipe_mode_select = gen8_mfc_pipe_mode_select; + mfc_context->set_surface_state = gen8_mfc_surface_state; + mfc_context->ind_obj_base_addr_state = gen8_mfc_ind_obj_base_addr_state; + mfc_context->avc_img_state = gen8_mfc_avc_img_state; + mfc_context->avc_qm_state = gen8_mfc_avc_qm_state; + mfc_context->avc_fqm_state = gen8_mfc_avc_fqm_state; + mfc_context->insert_object = gen8_mfc_avc_insert_object; + mfc_context->buffer_suface_setup = gen8_gpe_buffer_suface_setup; + + encoder_context->mfc_context = mfc_context; + encoder_context->mfc_context_destroy = gen8_mfc_context_destroy; + encoder_context->mfc_pipeline = gen8_mfc_pipeline; + + if (encoder_context->codec == CODEC_VP8) + encoder_context->mfc_brc_prepare = gen8_mfc_vp8_brc_prepare; + else + encoder_context->mfc_brc_prepare = intel_mfc_brc_prepare; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfd.c new file mode 100644 index 000000000..23eaca31a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_mfd.c @@ -0,0 +1,3218 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zhao Yakui + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" + +#include "gen7_mfd.h" +#include "intel_media.h" + +#define B0_STEP_REV 2 +#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV) + +static const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void +gen8_mfd_init_avc_surface(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenAvcSurface *gen7_avc_surface = obj_surface->private_data; + int width_in_mbs, height_in_mbs; + + obj_surface->free_private_data = gen_free_avc_surface; + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + if (!gen7_avc_surface) { + gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1); + + if (!gen7_avc_surface) + return; + + gen7_avc_surface->base.frame_store_id = -1; + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_avc_surface; + } + + /* DMV buffers now relate to the whole frame, irrespective of + field coding modes */ + if (gen7_avc_surface->dmv_top == NULL) { + gen7_avc_surface->dmv_top = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 128, + 0x1000); + assert(gen7_avc_surface->dmv_top); + } +} + +static void +gen8_mfd_pipe_mode_select(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_VC1 || + standard_select == MFX_FORMAT_JPEG || + standard_select == MFX_FORMAT_VP8); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (gen7_mfd_context->post_deblocking_output.valid << 9) | /* Post Deblocking Output */ + (gen7_mfd_context->pre_deblocking_output.valid << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (standard_select << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + unsigned int y_cb_offset; + unsigned int y_cr_offset; + unsigned int surface_format; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + y_cr_offset = obj_surface->y_cr_offset; + + surface_format = obj_surface->fourcc == VA_FOURCC_Y800 ? + MFX_SURFACE_MONOCHROME : MFX_SURFACE_PLANAR_420_8; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_height - 1) << 18) | + ((obj_surface->orig_width - 1) << 4)); + OUT_BCS_BATCH(batch, + (surface_format << 28) | /* 420 planar YUV surface */ + ((standard_select != MFX_FORMAT_JPEG) << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (y_cr_offset << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 61); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + /* Pre-deblock 1-3 */ + if (gen7_mfd_context->pre_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* Post-debloing 4-6 */ + if (gen7_mfd_context->post_deblocking_output.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* uncompressed-video & stream out 7-12 */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* intra row-store scratch 13-15 */ + if (gen7_mfd_context->intra_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* deblocking-filter-row-store 16-18 */ + if (gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* DW 19..50 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + struct object_surface *obj_surface; + + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->bo) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + OUT_BCS_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + } + + /* reference property 51 */ + OUT_BCS_BATCH(batch, 0); + + /* Macroblock status & ILDB 52-57 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the second Macroblock status 58-60 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_ind_obj_base_addr_state(VADriverContextP ctx, + dri_bo *slice_data_bo, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 26); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (26 - 2)); + /* MFX In BS 1-5 */ + OUT_BCS_RELOC(batch, slice_data_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); /* MFX Indirect Bitstream Object Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* Upper bound 4-5 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX indirect MV 6-10 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX IT_COFF 11-15 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX IT_DBLK 16-20 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* MFX PAK_BSE object for encoder 21-25 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_bsp_buf_base_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + int standard_select, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + + if (gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* MPR Row Store Scratch buffer 4-6 */ + if (gen7_mfd_context->mpr_row_store_scratch_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->mpr_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* Bitplane 7-9 */ + if (gen7_mfd_context->bitplane_read_buffer.valid) + OUT_BCS_RELOC(batch, gen7_mfd_context->bitplane_read_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_qm_state(VADriverContextP ctx, + int qm_type, + unsigned char *qm, + int qm_length, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16 * 4); + memcpy(qm_buffer, qm, qm_length); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_avc_img_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct; + int mbaff_frame_flag; + unsigned int width_in_mbs, height_in_mbs; + VAPictureParameterBufferH264 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID)); + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD) + img_struct = 1; + else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD) + img_struct = 3; + else + img_struct = 0; + + if ((img_struct & 0x1) == 0x1) { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x1); + } else { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x0); + } + + if (pic_param->seq_fields.bits.frame_mbs_only_flag) { /* a frame containing only frame macroblocks */ + assert(pic_param->seq_fields.bits.mb_adaptive_frame_field_flag == 0); + assert(pic_param->pic_fields.bits.field_pic_flag == 0); + } else { + assert(pic_param->seq_fields.bits.direct_8x8_inference_flag == 1); /* see H.264 spec */ + } + + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + /* MFX unit doesn't support 4:2:2 and 4:4:4 picture */ + assert(pic_param->seq_fields.bits.chroma_format_idc == 0 || /* monochrome picture */ + pic_param->seq_fields.bits.chroma_format_idc == 1); /* 4:2:0 */ + assert(pic_param->seq_fields.bits.residual_colour_transform_flag == 0); /* only available for 4:4:4 */ + + BEGIN_BCS_BATCH(batch, 17); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (17 - 2)); + OUT_BCS_BATCH(batch, + (width_in_mbs * height_in_mbs - 1)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + ((pic_param->second_chroma_qp_index_offset & 0x1f) << 24) | + ((pic_param->chroma_qp_index_offset & 0x1f) << 16) | + (0 << 14) | /* Max-bit conformance Intra flag ??? FIXME */ + (0 << 13) | /* Max Macroblock size conformance Inter flag ??? FIXME */ + (pic_param->pic_fields.bits.weighted_pred_flag << 12) | /* differ from GEN6 */ + (pic_param->pic_fields.bits.weighted_bipred_idc << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (pic_param->seq_fields.bits.chroma_format_idc << 10) | + (pic_param->pic_fields.bits.entropy_coding_mode_flag << 7) | + ((!pic_param->pic_fields.bits.reference_pic_flag) << 6) | + (pic_param->pic_fields.bits.constrained_intra_pred_flag << 5) | + (pic_param->seq_fields.bits.direct_8x8_inference_flag << 4) | + (pic_param->pic_fields.bits.transform_8x8_mode_flag << 3) | + (pic_param->seq_fields.bits.frame_mbs_only_flag << 2) | + (mbaff_frame_flag << 1) | + (pic_param->pic_fields.bits.field_pic_flag << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_avc_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferH264 *iq_matrix; + VAPictureParameterBufferH264 *pic_param; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + iq_matrix = (VAIQMatrixBufferH264 *)decode_state->iq_matrix->buffer; + else + iq_matrix = &gen7_mfd_context->iq_matrix.h264; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + gen8_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, &iq_matrix->ScalingList4x4[0][0], 3 * 16, gen7_mfd_context); + gen8_mfd_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, &iq_matrix->ScalingList4x4[3][0], 3 * 16, gen7_mfd_context); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) { + gen8_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, &iq_matrix->ScalingList8x8[0][0], 64, gen7_mfd_context); + gen8_mfd_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, &iq_matrix->ScalingList8x8[1][0], 64, gen7_mfd_context); + } +} + +static inline void +gen8_mfd_avc_picid_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen75_send_avc_picid_state(gen7_mfd_context->base.batch, + gen7_mfd_context->reference_surface); +} + +static void +gen8_mfd_avc_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + GenAvcSurface *gen7_avc_surface; + VAPictureH264 *va_pic; + int i; + + BEGIN_BCS_BATCH(batch, 71); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + if (gen7_mfd_context->reference_surface[i].surface_id != VA_INVALID_ID && + gen7_mfd_context->reference_surface[i].obj_surface && + gen7_mfd_context->reference_surface[i].obj_surface->private_data) { + + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); + + /* the current decoding frame/field */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + assert(obj_surface->bo && obj_surface->private_data); + gen7_avc_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + obj_surface = gen7_mfd_context->reference_surface[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_avc_phantom_slice_first(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen7_mfd_context->base.batch); +} + +static void +gen8_mfd_avc_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + int first_mb_in_slice = 0, first_mb_in_next_slice = 0; + int slice_type; + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) { + slice_type = SLICE_TYPE_I; + } else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) { + slice_type = SLICE_TYPE_P; + } else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + first_mb_in_slice = slice_param->first_mb_in_slice; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + if (mbaff_picture) + slice_ver_pos = slice_ver_pos << 1; + if (next_slice_param) { + first_mb_in_next_slice = next_slice_param->first_mb_in_slice; + next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs; + next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs; + + if (mbaff_picture) + next_slice_ver_pos = next_slice_ver_pos << 1; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag); + } + + BEGIN_BCS_BATCH(batch, 11); /* FIXME: is it 10??? */ + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (slice_param->chroma_log2_weight_denom << 8) | + (slice_param->luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, + (next_slice_param == NULL) << 19); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen8_mfd_avc_ref_idx_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen6_send_avc_ref_idx_state( + gen7_mfd_context->base.batch, + slice_param, + gen7_mfd_context->reference_surface + ); +} + +static void +gen8_mfd_avc_weightoffset_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i, j, num_weight_offset_table = 0; + short weightoffsets[32 * 6]; + + if ((slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) && + (pic_param->pic_fields.bits.weighted_pred_flag == 1)) { + num_weight_offset_table = 1; + } + + if ((slice_param->slice_type == SLICE_TYPE_B) && + (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) { + num_weight_offset_table = 2; + } + + for (i = 0; i < num_weight_offset_table; i++) { + BEGIN_BCS_BATCH(batch, 98); + OUT_BCS_BATCH(batch, MFX_AVC_WEIGHTOFFSET_STATE | (98 - 2)); + OUT_BCS_BATCH(batch, i); + + if (i == 0) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l0[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l0[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l0[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l0[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l0[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l0[j][1]; + } + } else { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_weight_l1[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_offset_l1[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_weight_l1[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_offset_l1[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_weight_l1[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_offset_l1[j][1]; + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +gen8_mfd_avc_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int slice_data_bit_offset = avc_get_first_mb_bit_offset(slice_data_bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag); + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_size)); + OUT_BCS_BATCH(batch, slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((slice_data_bit_offset >> 3) << 16) | + (1 << 7) | + (0 << 5) | + (0 << 4) | + ((next_slice_param == NULL) << 3) | /* LastSlice Flag */ + (slice_data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static inline void +gen8_mfd_avc_context_init( + VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context +) +{ + /* Initialize flat scaling lists */ + avc_gen_default_iq_matrix(&gen7_mfd_context->iq_matrix.h264); +} + +static void +gen8_mfd_avc_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int i, j, enable_avc_ildb = 0; + unsigned int width_in_mbs, height_in_mbs; + + for (j = 0; j < decode_state->num_slice_params && enable_avc_ildb == 0; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen75_update_avc_frame_store_index(ctx, decode_state, pic_param, + gen7_mfd_context->reference_surface); + width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; + assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */ + assert(height_in_mbs > 0 && height_in_mbs <= 256); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; + + avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + gen8_mfd_init_avc_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !enable_avc_ildb; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 64 * 4, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen8_mfd_avc_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + gen8_mfd_avc_decode_init(ctx, decode_state, gen7_mfd_context); + + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen8_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen8_mfd_surface_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen8_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen8_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context); + gen8_mfd_avc_qm_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_avc_picid_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_avc_img_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_AVC, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j + 1]->buffer; + + if (j == 0 && slice_param->first_mb_in_slice) + gen8_mfd_avc_phantom_slice_first(ctx, pic_param, slice_param, gen7_mfd_context); + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen8_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen7_mfd_context); + gen8_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen8_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen7_mfd_context); + gen8_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context); + gen8_mfd_avc_bsd_object(ctx, pic_param, slice_param, slice_data_bo, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen8_mfd_mpeg2_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferMPEG2 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + unsigned int width_in_mbs; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + + mpeg2_set_reference_surfaces( + ctx, + gen7_mfd_context->reference_surface, + decode_state, + pic_param + ); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->post_deblocking_output.valid = 0; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen8_mfd_mpeg2_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + unsigned int slice_concealment_disable_bit = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + slice_concealment_disable_bit = 1; + + BEGIN_BCS_BATCH(batch, 13); + OUT_BCS_BATCH(batch, MFX_MPEG2_PIC_STATE | (13 - 2)); + OUT_BCS_BATCH(batch, + (pic_param->f_code & 0xf) << 28 | /* f_code[1][1] */ + ((pic_param->f_code >> 4) & 0xf) << 24 | /* f_code[1][0] */ + ((pic_param->f_code >> 8) & 0xf) << 20 | /* f_code[0][1] */ + ((pic_param->f_code >> 12) & 0xf) << 16 | /* f_code[0][0] */ + pic_param->picture_coding_extension.bits.intra_dc_precision << 14 | + pic_param->picture_coding_extension.bits.picture_structure << 12 | + pic_param->picture_coding_extension.bits.top_field_first << 11 | + pic_param->picture_coding_extension.bits.frame_pred_frame_dct << 10 | + pic_param->picture_coding_extension.bits.concealment_motion_vectors << 9 | + pic_param->picture_coding_extension.bits.q_scale_type << 8 | + pic_param->picture_coding_extension.bits.intra_vlc_format << 7 | + pic_param->picture_coding_extension.bits.alternate_scan << 6); + OUT_BCS_BATCH(batch, + pic_param->picture_coding_type << 9); + OUT_BCS_BATCH(batch, + (slice_concealment_disable_bit << 31) | + ((ALIGN(pic_param->vertical_size, 16) / 16) - 1) << 16 | + ((ALIGN(pic_param->horizontal_size, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_mpeg2_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAIQMatrixBufferMPEG2 * const gen_iq_matrix = &gen7_mfd_context->iq_matrix.mpeg2; + int i, j; + + /* Update internal QM state */ + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) { + VAIQMatrixBufferMPEG2 * const iq_matrix = + (VAIQMatrixBufferMPEG2 *)decode_state->iq_matrix->buffer; + + if (gen_iq_matrix->load_intra_quantiser_matrix == -1 || + iq_matrix->load_intra_quantiser_matrix) { + gen_iq_matrix->load_intra_quantiser_matrix = + iq_matrix->load_intra_quantiser_matrix; + if (iq_matrix->load_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->intra_quantiser_matrix[j]; + } + } + + if (gen_iq_matrix->load_non_intra_quantiser_matrix == -1 || + iq_matrix->load_non_intra_quantiser_matrix) { + gen_iq_matrix->load_non_intra_quantiser_matrix = + iq_matrix->load_non_intra_quantiser_matrix; + if (iq_matrix->load_non_intra_quantiser_matrix) { + for (j = 0; j < 64; j++) + gen_iq_matrix->non_intra_quantiser_matrix[zigzag_direct[j]] = + iq_matrix->non_intra_quantiser_matrix[j]; + } + } + } + + /* Commit QM state to HW */ + for (i = 0; i < 2; i++) { + unsigned char *qm = NULL; + int qm_type; + + if (i == 0) { + if (gen_iq_matrix->load_intra_quantiser_matrix) { + qm = gen_iq_matrix->intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX; + } + } else { + if (gen_iq_matrix->load_non_intra_quantiser_matrix) { + qm = gen_iq_matrix->non_intra_quantiser_matrix; + qm_type = MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX; + } + } + + if (!qm) + continue; + + gen8_mfd_qm_state(ctx, qm_type, qm, 64, gen7_mfd_context); + } +} + +static void +gen8_mfd_mpeg2_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + VASliceParameterBufferMPEG2 *next_slice_param, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + unsigned int width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + int mb_count, vpos0, hpos0, vpos1, hpos1, is_field_pic_wa, is_field_pic = 0; + + if (pic_param->picture_coding_extension.bits.picture_structure == MPEG_TOP_FIELD || + pic_param->picture_coding_extension.bits.picture_structure == MPEG_BOTTOM_FIELD) + is_field_pic = 1; + is_field_pic_wa = is_field_pic && + gen7_mfd_context->wa_mpeg2_slice_vertical_position > 0; + + vpos0 = slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos0 = slice_param->slice_horizontal_position; + + if (next_slice_param == NULL) { + vpos1 = ALIGN(pic_param->vertical_size, 16) / 16 / (1 + is_field_pic); + hpos1 = 0; + } else { + vpos1 = next_slice_param->slice_vertical_position / (1 + is_field_pic_wa); + hpos1 = next_slice_param->slice_horizontal_position; + } + + mb_count = (vpos1 * width_in_mbs + hpos1) - (vpos0 * width_in_mbs + hpos0); + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_MPEG2_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + hpos0 << 24 | + vpos0 << 16 | + mb_count << 8 | + (next_slice_param == NULL) << 5 | + (next_slice_param == NULL) << 3 | + (slice_param->macroblock_offset & 0x7)); + OUT_BCS_BATCH(batch, + (slice_param->quantiser_scale_code << 24) | + (vpos1 << 8 | hpos1)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_mpeg2_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferMPEG2 *pic_param; + VASliceParameterBufferMPEG2 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + gen8_mfd_mpeg2_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen8_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen8_mfd_surface_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen8_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen8_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_MPEG2, gen7_mfd_context); + gen8_mfd_mpeg2_pic_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_mpeg2_qm_state(ctx, decode_state, gen7_mfd_context); + + if (gen7_mfd_context->wa_mpeg2_slice_vertical_position < 0) + gen7_mfd_context->wa_mpeg2_slice_vertical_position = + mpeg2_wa_slice_vertical_position(decode_state, pic_param); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_MPEG2, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen8_mfd_mpeg2_bsd_object(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static const int va_to_gen7_vc1_pic_type[5] = { + GEN7_VC1_I_PICTURE, + GEN7_VC1_P_PICTURE, + GEN7_VC1_B_PICTURE, + GEN7_VC1_BI_PICTURE, + GEN7_VC1_P_PICTURE, +}; + +static const int va_to_gen7_vc1_mv[4] = { + 1, /* 1-MV */ + 2, /* 1-MV half-pel */ + 3, /* 1-MV half-pef bilinear */ + 0, /* Mixed MV */ +}; + +static const int b_picture_scale_factor[21] = { + 128, 85, 170, 64, 192, + 51, 102, 153, 204, 43, + 215, 37, 74, 111, 148, + 185, 222, 32, 96, 160, + 224, +}; + +static const int va_to_gen7_vc1_condover[3] = { + 0, + 2, + 3 +}; + +static const int va_to_gen7_vc1_profile[4] = { + GEN7_VC1_SIMPLE_PROFILE, + GEN7_VC1_MAIN_PROFILE, + GEN7_VC1_RESERVED_PROFILE, + GEN7_VC1_ADVANCED_PROFILE +}; + +static void +gen8_mfd_free_vc1_surface(void **data) +{ + struct gen7_vc1_surface *gen7_vc1_surface = *data; + + if (!gen7_vc1_surface) + return; + + dri_bo_unreference(gen7_vc1_surface->dmv); + free(gen7_vc1_surface); + *data = NULL; +} + +static void +gen8_mfd_init_vc1_surface(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen7_vc1_surface *gen7_vc1_surface = obj_surface->private_data; + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + + obj_surface->free_private_data = gen8_mfd_free_vc1_surface; + + if (!gen7_vc1_surface) { + gen7_vc1_surface = calloc(sizeof(struct gen7_vc1_surface), 1); + + if (!gen7_vc1_surface) + return; + + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = gen7_vc1_surface; + } + + gen7_vc1_surface->picture_type = pic_param->picture_fields.bits.picture_type; + + if (gen7_vc1_surface->dmv == NULL) { + gen7_vc1_surface->dmv = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + width_in_mbs * height_in_mbs * 64, + 0x1000); + } +} + +static void +gen8_mfd_vc1_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferVC1 *pic_param; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + dri_bo *bo; + int width_in_mbs; + int picture_type; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + picture_type = pic_param->picture_fields.bits.picture_type; + + intel_update_vc1_frame_store_index(ctx, + decode_state, + pic_param, + gen7_mfd_context->reference_surface); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen8_mfd_init_vc1_surface(ctx, pic_param, obj_surface); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = !pic_param->entrypoint_fields.bits.loopfilter; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 7 * 64, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 96, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value; + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + + if (gen7_mfd_context->bitplane_read_buffer.valid) { + int width_in_mbs = ALIGN(pic_param->coded_width, 16) / 16; + int height_in_mbs = ALIGN(pic_param->coded_height, 16) / 16; + int bitplane_width = ALIGN(width_in_mbs, 2) / 2; + int src_w, src_h; + uint8_t *src = NULL, *dst = NULL; + + assert(decode_state->bit_plane->buffer); + src = decode_state->bit_plane->buffer; + + bo = dri_bo_alloc(i965->intel.bufmgr, + "VC-1 Bitplane", + bitplane_width * height_in_mbs, + 0x1000); + assert(bo); + gen7_mfd_context->bitplane_read_buffer.bo = bo; + + dri_bo_map(bo, True); + assert(bo->virtual); + dst = bo->virtual; + + for (src_h = 0; src_h < height_in_mbs; src_h++) { + for(src_w = 0; src_w < width_in_mbs; src_w++) { + int src_index, dst_index; + int src_shift; + uint8_t src_value; + + src_index = (src_h * width_in_mbs + src_w) / 2; + src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4; + src_value = ((src[src_index] >> src_shift) & 0xf); + + if (picture_type == GEN7_VC1_SKIPPED_PICTURE){ + src_value |= 0x2; + } + + dst_index = src_w / 2; + dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4)); + } + + if (src_w & 1) + dst[src_w / 2] >>= 4; + + dst += bitplane_width; + } + + dri_bo_unmap(bo); + } else + gen7_mfd_context->bitplane_read_buffer.bo = NULL; +} + +static void +gen8_mfd_vc1_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + struct object_surface *obj_surface; + int alt_pquant_config = 0, alt_pquant_edge_mask = 0, alt_pq; + int dquant, dquantfrm, dqprofile, dqdbedge, dqsbedge, dqbilevel; + int unified_mv_mode; + int ref_field_pic_polarity = 0; + int scale_factor = 0; + int trans_ac_y = 0; + int dmv_surface_valid = 0; + int brfd = 0; + int fcm = 0; + int picture_type; + int profile; + int overlap; + int interpolation_mode = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + profile = va_to_gen7_vc1_profile[pic_param->sequence_fields.bits.profile]; + dquant = pic_param->pic_quantizer_fields.bits.dquant; + dquantfrm = pic_param->pic_quantizer_fields.bits.dq_frame; + dqprofile = pic_param->pic_quantizer_fields.bits.dq_profile; + dqdbedge = pic_param->pic_quantizer_fields.bits.dq_db_edge; + dqsbedge = pic_param->pic_quantizer_fields.bits.dq_sb_edge; + dqbilevel = pic_param->pic_quantizer_fields.bits.dq_binary_level; + alt_pq = pic_param->pic_quantizer_fields.bits.alt_pic_quantizer; + + if (dquant == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + } else if (dquant == 2) { + alt_pquant_config = 1; + alt_pquant_edge_mask = 0xf; + } else { + assert(dquant == 1); + if (dquantfrm == 0) { + alt_pquant_config = 0; + alt_pquant_edge_mask = 0; + alt_pq = 0; + } else { + assert(dquantfrm == 1); + alt_pquant_config = 1; + + switch (dqprofile) { + case 3: + if (dqbilevel == 0) { + alt_pquant_config = 2; + alt_pquant_edge_mask = 0; + } else { + assert(dqbilevel == 1); + alt_pquant_config = 3; + alt_pquant_edge_mask = 0; + } + break; + + case 0: + alt_pquant_edge_mask = 0xf; + break; + + case 1: + if (dqdbedge == 3) + alt_pquant_edge_mask = 0x9; + else + alt_pquant_edge_mask = (0x3 << dqdbedge); + + break; + + case 2: + alt_pquant_edge_mask = (0x1 << dqsbedge); + break; + + default: + assert(0); + } + } + } + + if (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation) { + assert(pic_param->mv_fields.bits.mv_mode2 < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode2]; + } else { + assert(pic_param->mv_fields.bits.mv_mode < 4); + unified_mv_mode = va_to_gen7_vc1_mv[pic_param->mv_fields.bits.mv_mode]; + } + + if (pic_param->sequence_fields.bits.interlace == 1 && + pic_param->picture_fields.bits.frame_coding_mode != 0) { /* frame-interlace or field-interlace */ + /* FIXME: calculate reference field picture polarity */ + assert(0); + ref_field_pic_polarity = 0; + } + + if (pic_param->b_picture_fraction < 21) + scale_factor = b_picture_scale_factor[pic_param->b_picture_fraction]; + + picture_type = va_to_gen7_vc1_pic_type[pic_param->picture_fields.bits.picture_type]; + + if (profile == GEN7_VC1_ADVANCED_PROFILE && + picture_type == GEN7_VC1_I_PICTURE) + picture_type = GEN7_VC1_BI_PICTURE; + + if (picture_type == GEN7_VC1_I_PICTURE || picture_type == GEN7_VC1_BI_PICTURE) /* I picture */ + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2; + else { + trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1; + + /* + * 8.3.6.2.1 Transform Type Selection + * If variable-sized transform coding is not enabled, + * then the 8x8 transform shall be used for all blocks. + * it is also MFX_VC1_PIC_STATE requirement. + */ + if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) { + pic_param->transform_fields.bits.mb_level_transform_type_flag = 1; + pic_param->transform_fields.bits.frame_level_transform_type = 0; + } + } + + if (picture_type == GEN7_VC1_B_PICTURE) { + struct gen7_vc1_surface *gen7_vc1_surface = NULL; + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface) + gen7_vc1_surface = obj_surface->private_data; + + if (!gen7_vc1_surface || + (va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_I_PICTURE || + va_to_gen7_vc1_pic_type[gen7_vc1_surface->picture_type] == GEN7_VC1_BI_PICTURE)) + dmv_surface_valid = 0; + else + dmv_surface_valid = 1; + } + + assert(pic_param->picture_fields.bits.frame_coding_mode < 3); + + if (pic_param->picture_fields.bits.frame_coding_mode < 2) + fcm = pic_param->picture_fields.bits.frame_coding_mode; + else { + if (pic_param->picture_fields.bits.top_field_first) + fcm = 2; + else + fcm = 3; + } + + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_B_PICTURE) { /* B picture */ + brfd = pic_param->reference_fields.bits.reference_distance; + brfd = (scale_factor * brfd) >> 8; + brfd = pic_param->reference_fields.bits.reference_distance - brfd - 1; + + if (brfd < 0) + brfd = 0; + } + + overlap = pic_param->sequence_fields.bits.overlap; + + if (overlap) { + overlap = 0; + if (profile != GEN7_VC1_ADVANCED_PROFILE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9 && + pic_param->picture_fields.bits.picture_type != GEN7_VC1_B_PICTURE) { + overlap = 1; + } + }else { + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_P_PICTURE && + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } + if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_I_PICTURE || + pic_param->picture_fields.bits.picture_type == GEN7_VC1_BI_PICTURE){ + if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){ + overlap = 1; + } else if (va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 2 || + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] == 3) { + overlap = 1; + } + } + } + } + + assert(pic_param->conditional_overlap_flag < 3); + assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */ + + if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear)) + interpolation_mode = 9; /* Half-pel bilinear */ + else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel || + (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation && + pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel)) + interpolation_mode = 1; /* Half-pel bicubic */ + else + interpolation_mode = 0; /* Quarter-pel bicubic */ + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + (((ALIGN(pic_param->coded_height, 16) / 16) - 1) << 16) | + ((ALIGN(pic_param->coded_width, 16) / 16) - 1)); + OUT_BCS_BATCH(batch, + ((ALIGN(pic_param->coded_width, 16) / 16 + 1) / 2 - 1) << 24 | + dmv_surface_valid << 15 | + (pic_param->pic_quantizer_fields.bits.quantizer == 0) << 14 | /* implicit quantizer */ + pic_param->rounding_control << 13 | + pic_param->sequence_fields.bits.syncmarker << 12 | + interpolation_mode << 8 | + 0 << 7 | /* FIXME: scale up or down ??? */ + pic_param->range_reduction_frame << 6 | + pic_param->entrypoint_fields.bits.loopfilter << 5 | + overlap << 4 | + !pic_param->picture_fields.bits.is_first_field << 3 | + (pic_param->sequence_fields.bits.profile == 3) << 0); + OUT_BCS_BATCH(batch, + va_to_gen7_vc1_condover[pic_param->conditional_overlap_flag] << 29 | + picture_type << 26 | + fcm << 24 | + alt_pq << 16 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_scale << 8 | + scale_factor << 0); + OUT_BCS_BATCH(batch, + unified_mv_mode << 28 | + pic_param->mv_fields.bits.four_mv_switch << 27 | + pic_param->fast_uvmc_flag << 26 | + ref_field_pic_polarity << 25 | + pic_param->reference_fields.bits.num_reference_pictures << 24 | + pic_param->reference_fields.bits.reference_distance << 20 | + pic_param->reference_fields.bits.reference_distance << 16 | /* FIXME: ??? */ + pic_param->mv_fields.bits.extended_dmv_range << 10 | + pic_param->mv_fields.bits.extended_mv_range << 8 | + alt_pquant_edge_mask << 4 | + alt_pquant_config << 2 | + pic_param->pic_quantizer_fields.bits.half_qp << 1 | + pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0); + OUT_BCS_BATCH(batch, + !!pic_param->bitplane_present.value << 31 | + !pic_param->bitplane_present.flags.bp_forward_mb << 30 | + !pic_param->bitplane_present.flags.bp_mv_type_mb << 29 | + !pic_param->bitplane_present.flags.bp_skip_mb << 28 | + !pic_param->bitplane_present.flags.bp_direct_mb << 27 | + !pic_param->bitplane_present.flags.bp_overflags << 26 | + !pic_param->bitplane_present.flags.bp_ac_pred << 25 | + !pic_param->bitplane_present.flags.bp_field_tx << 24 | + pic_param->mv_fields.bits.mv_table << 20 | + pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 | + pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 | + pic_param->transform_fields.bits.frame_level_transform_type << 12 | + pic_param->transform_fields.bits.mb_level_transform_type_flag << 11 | + pic_param->mb_mode_table << 8 | + trans_ac_y << 6 | + pic_param->transform_fields.bits.transform_ac_codingset_idx1 << 4 | + pic_param->transform_fields.bits.intra_transform_dc_table << 3 | + pic_param->cbp_table << 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_vc1_pred_pipe_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + int intensitycomp_single; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + intensitycomp_single = (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation); + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_VC1_PRED_PIPE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + 0 << 14 | /* FIXME: double ??? */ + 0 << 12 | + intensitycomp_single << 10 | + intensitycomp_single << 8 | + 0 << 4 | /* FIXME: interlace mode */ + 0); + OUT_BCS_BATCH(batch, + pic_param->luma_shift << 16 | + pic_param->luma_scale << 0); /* FIXME: Luma Scaling */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_vc1_directmode_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + struct object_surface *obj_surface; + dri_bo *dmv_read_buffer = NULL, *dmv_write_buffer = NULL; + + obj_surface = decode_state->render_object; + + if (obj_surface && obj_surface->private_data) { + dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + obj_surface = decode_state->reference_objects[1]; + + if (obj_surface && obj_surface->private_data) { + dmv_read_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv; + } + + BEGIN_BCS_BATCH(batch, 7); + OUT_BCS_BATCH(batch, MFX_VC1_DIRECTMODE_STATE | (7 - 2)); + + if (dmv_write_buffer) + OUT_BCS_RELOC(batch, dmv_write_buffer, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + if (dmv_read_buffer) + OUT_BCS_RELOC(batch, dmv_read_buffer, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen8_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offset, int profile) +{ + int out_slice_data_bit_offset; + int slice_header_size = in_slice_data_bit_offset / 8; + int i, j; + + if (profile != 3) + out_slice_data_bit_offset = in_slice_data_bit_offset; + else { + for (i = 0, j = 0; i < slice_header_size; i++, j++) { + if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) { + i++, j += 2; + } + } + + out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8; + } + + return out_slice_data_bit_offset; +} + +static void +gen8_mfd_vc1_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferVC1 *pic_param, + VASliceParameterBufferVC1 *slice_param, + VASliceParameterBufferVC1 *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int next_slice_start_vert_pos; + int macroblock_offset; + uint8_t *slice_data = NULL; + + dri_bo_map(slice_data_bo, 0); + slice_data = (uint8_t *)(slice_data_bo->virtual + slice_param->slice_data_offset); + macroblock_offset = gen8_mfd_vc1_get_macroblock_bit_offset(slice_data, + slice_param->macroblock_offset, + pic_param->sequence_fields.bits.profile); + dri_bo_unmap(slice_data_bo); + + if (next_slice_param) + next_slice_start_vert_pos = next_slice_param->slice_vertical_position; + else + next_slice_start_vert_pos = ALIGN(pic_param->coded_height, 16) / 16; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFD_VC1_BSD_OBJECT | (5 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size - (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset + (macroblock_offset >> 3)); + OUT_BCS_BATCH(batch, + slice_param->slice_vertical_position << 16 | + next_slice_start_vert_pos << 0); + OUT_BCS_BATCH(batch, + (macroblock_offset & 0x7)); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_vc1_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVC1 *pic_param; + VASliceParameterBufferVC1 *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + + gen8_mfd_vc1_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen8_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen8_mfd_surface_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen8_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen8_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_VC1, gen7_mfd_context); + gen8_mfd_vc1_pic_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_vc1_pred_pipe_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_vc1_directmode_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_VC1, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferVC1 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen8_mfd_vc1_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen8_mfd_jpeg_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface; + VAPictureParameterBufferJPEGBaseline *pic_param; + int subsampling = SUBSAMPLE_YUV420; + int fourcc = VA_FOURCC_IMC3; + + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) + subsampling = SUBSAMPLE_YUV400; + else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV420; + fourcc = VA_FOURCC_IMC3; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV444; + fourcc = VA_FOURCC_444P; + } else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV411; + fourcc = VA_FOURCC_411P; + } else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) { + subsampling = SUBSAMPLE_YUV422H; + fourcc = VA_FOURCC_422H; + } else if (h1 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) { + subsampling = SUBSAMPLE_YUV422V; + fourcc = VA_FOURCC_422V; + } else + assert(0); + } + else { + assert(0); + } + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, fourcc, subsampling); + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = 1; + + gen7_mfd_context->post_deblocking_output.bo = NULL; + gen7_mfd_context->post_deblocking_output.valid = 0; + + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0; + + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static const int va_to_gen7_jpeg_rotation[4] = { + GEN7_JPEG_ROTATION_0, + GEN7_JPEG_ROTATION_90, + GEN7_JPEG_ROTATION_180, + GEN7_JPEG_ROTATION_270 +}; + +static void +gen8_mfd_jpeg_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + int chroma_type = GEN7_YUV420; + int frame_width_in_blks; + int frame_height_in_blks; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + if (pic_param->num_components == 1) + chroma_type = GEN7_YUV400; + else if (pic_param->num_components == 3) { + int h1 = pic_param->components[0].h_sampling_factor; + int h2 = pic_param->components[1].h_sampling_factor; + int h3 = pic_param->components[2].h_sampling_factor; + int v1 = pic_param->components[0].v_sampling_factor; + int v2 = pic_param->components[1].v_sampling_factor; + int v3 = pic_param->components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV420; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422H_2Y; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV444; + else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV411; + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_2Y; + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) + chroma_type = GEN7_YUV422H_4Y; + else if (h2 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) + chroma_type = GEN7_YUV422V_4Y; + else + assert(0); + } + + if (chroma_type == GEN7_YUV400 || + chroma_type == GEN7_YUV444 || + chroma_type == GEN7_YUV422V_2Y) { + frame_width_in_blks = ((pic_param->picture_width + 7) / 8); + frame_height_in_blks = ((pic_param->picture_height + 7) / 8); + } else if (chroma_type == GEN7_YUV411) { + frame_width_in_blks = ((pic_param->picture_width + 31) / 32) * 4; + frame_height_in_blks = ((pic_param->picture_height + 31) / 32) * 4; + } else { + frame_width_in_blks = ((pic_param->picture_width + 15) / 16) * 2; + frame_height_in_blks = ((pic_param->picture_height + 15) / 16) * 2; + } + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MFX_JPEG_PIC_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (va_to_gen7_jpeg_rotation[0] << 4) | /* without rotation */ + (chroma_type << 0)); + OUT_BCS_BATCH(batch, + ((frame_height_in_blks - 1) << 16) | /* FrameHeightInBlks */ + ((frame_width_in_blks - 1) << 0)); /* FrameWidthInBlks */ + ADVANCE_BCS_BATCH(batch); +} + +static const int va_to_gen7_jpeg_hufftable[2] = { + MFX_HUFFTABLE_ID_Y, + MFX_HUFFTABLE_ID_UV +}; + +static void +gen8_mfd_jpeg_huff_table_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context, + int num_tables) +{ + VAHuffmanTableBufferJPEGBaseline *huffman_table; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int index; + + if (!decode_state->huffman_table || !decode_state->huffman_table->buffer) + return; + + huffman_table = (VAHuffmanTableBufferJPEGBaseline *)decode_state->huffman_table->buffer; + + for (index = 0; index < num_tables; index++) { + int id = va_to_gen7_jpeg_hufftable[index]; + if (!huffman_table->load_huffman_table[index]) + continue; + BEGIN_BCS_BATCH(batch, 53); + OUT_BCS_BATCH(batch, MFX_JPEG_HUFF_TABLE_STATE | (53 - 2)); + OUT_BCS_BATCH(batch, id); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_dc_codes, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].dc_values, 12); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].num_ac_codes, 16); + intel_batchbuffer_data(batch, huffman_table->huffman_table[index].ac_values, 164); + ADVANCE_BCS_BATCH(batch); + } +} + +static const int va_to_gen7_jpeg_qm[5] = { + -1, + MFX_QM_JPEG_LUMA_Y_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CB_QUANTIZER_MATRIX, + MFX_QM_JPEG_CHROMA_CR_QUANTIZER_MATRIX, + MFX_QM_JPEG_ALPHA_QUANTIZER_MATRIX +}; + +static void +gen8_mfd_jpeg_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + VAPictureParameterBufferJPEGBaseline *pic_param; + VAIQMatrixBufferJPEGBaseline *iq_matrix; + int index; + + if (!decode_state->iq_matrix || !decode_state->iq_matrix->buffer) + return; + + iq_matrix = (VAIQMatrixBufferJPEGBaseline *)decode_state->iq_matrix->buffer; + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + assert(pic_param->num_components <= 3); + + for (index = 0; index < pic_param->num_components; index++) { + int id = pic_param->components[index].component_id - pic_param->components[0].component_id + 1; + int qm_type; + unsigned char *qm = iq_matrix->quantiser_table[pic_param->components[index].quantiser_table_selector]; + unsigned char raster_qm[64]; + int j; + + if (id > 4 || id < 1) + continue; + + if (!iq_matrix->load_quantiser_table[pic_param->components[index].quantiser_table_selector]) + continue; + + qm_type = va_to_gen7_jpeg_qm[id]; + + for (j = 0; j < 64; j++) + raster_qm[zigzag_direct[j]] = qm[j]; + + gen8_mfd_qm_state(ctx, qm_type, raster_qm, 64, gen7_mfd_context); + } +} + +static void +gen8_mfd_jpeg_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferJPEGBaseline *pic_param, + VASliceParameterBufferJPEGBaseline *slice_param, + VASliceParameterBufferJPEGBaseline *next_slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int scan_component_mask = 0; + int i; + + assert(slice_param->num_components > 0); + assert(slice_param->num_components < 4); + assert(slice_param->num_components <= pic_param->num_components); + + for (i = 0; i < slice_param->num_components; i++) { + switch (slice_param->components[i].component_selector - pic_param->components[0].component_id + 1) { + case 1: + scan_component_mask |= (1 << 0); + break; + case 2: + scan_component_mask |= (1 << 1); + break; + case 3: + scan_component_mask |= (1 << 2); + break; + default: + assert(0); + break; + } + } + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_JPEG_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, + slice_param->slice_data_size); + OUT_BCS_BATCH(batch, + slice_param->slice_data_offset); + OUT_BCS_BATCH(batch, + slice_param->slice_horizontal_position << 16 | + slice_param->slice_vertical_position << 0); + OUT_BCS_BATCH(batch, + ((slice_param->num_components != 1) << 30) | /* interleaved */ + (scan_component_mask << 27) | /* scan components */ + (0 << 26) | /* disable interrupt allowed */ + (slice_param->num_mcus << 0)); /* MCU count */ + OUT_BCS_BATCH(batch, + (slice_param->restart_interval << 0)); /* RestartInterval */ + ADVANCE_BCS_BATCH(batch); +} + +/* Workaround for JPEG decoding on Ivybridge */ +#ifdef JPEG_WA + +static struct { + int width; + int height; + unsigned char data[32]; + int data_size; + int data_bit_offset; + int qp; +} gen7_jpeg_wa_clip = { + 16, + 16, + { + 0x65, 0xb8, 0x40, 0x32, 0x13, 0xfd, 0x06, 0x6c, + 0xfc, 0x0a, 0x50, 0x71, 0x5c, 0x00 + }, + 14, + 40, + 28, +}; + +static void +gen8_jpeg_wa_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus status; + struct object_surface *obj_surface; + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + + status = i965_CreateSurfaces(ctx, + gen7_jpeg_wa_clip.width, + gen7_jpeg_wa_clip.height, + VA_RT_FORMAT_YUV420, + 1, + &gen7_mfd_context->jpeg_wa_surface_id); + assert(status == VA_STATUS_SUCCESS); + + obj_surface = SURFACE(gen7_mfd_context->jpeg_wa_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + gen7_mfd_context->jpeg_wa_surface_object = obj_surface; + + if (!gen7_mfd_context->jpeg_wa_slice_data_bo) { + gen7_mfd_context->jpeg_wa_slice_data_bo = dri_bo_alloc(i965->intel.bufmgr, + "JPEG WA data", + 0x1000, + 0x1000); + dri_bo_subdata(gen7_mfd_context->jpeg_wa_slice_data_bo, + 0, + gen7_jpeg_wa_clip.data_size, + gen7_jpeg_wa_clip.data); + } +} + +static void +gen8_jpeg_wa_pipe_mode_select(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 5); + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Currently only support long format */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* disable Stream-Out */ + (0 << 9) | /* Post Deblocking Output */ + (1 << 8) | /* Pre Deblocking Output */ + (0 << 5) | /* not in stitch mode */ + (MFX_CODEC_DECODE << 4) | /* decoding mode */ + (MFX_FORMAT_AVC << 0)); + OUT_BCS_BATCH(batch, + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); /* pic status/error report id */ + OUT_BCS_BATCH(batch, 0); /* reserved */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_surface_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((obj_surface->orig_width - 1) << 18) | + ((obj_surface->orig_height - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* interleave chroma, set to 0 for JPEG */ + (0 << 22) | /* surface object control state, ignored */ + ((obj_surface->width - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, must be 1 */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for U(Cb), must be 0 */ + (obj_surface->y_cb_offset << 0)); /* Y offset for U(Cb) */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* X offset for V(Cr), must be 0 */ + (0 << 0)); /* Y offset for V(Cr), must be 0 for video codec, non-zoro for JPEG */ + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_pipe_buf_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = gen7_mfd_context->jpeg_wa_surface_object; + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *intra_bo; + int i; + + intra_bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + 128 * 64, + 0x1000); + + BEGIN_BCS_BATCH(batch, 61); + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + OUT_BCS_RELOC(batch, + obj_surface->bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + + OUT_BCS_BATCH(batch, 0); /* post deblocking */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* uncompressed-video & stream out 7-12 */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); /* ignore for decoding */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 13-15 is for intra row store scratch */ + OUT_BCS_RELOC(batch, + intra_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 16-18 is for deblocking filter */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* DW 19..50 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + OUT_BCS_BATCH(batch, 0); + + /* the DW52-54 is for mb status address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW56-60 is for ILDB & second ILDB address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(intra_bo); +} + +static void +gen8_jpeg_wa_bsp_buf_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + dri_bo *bsd_mpc_bo, *mpr_bo; + + bsd_mpc_bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + 11520, /* 1.5 * 120 * 64 */ + 0x1000); + + mpr_bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + 7680, /* 1. 0 * 120 * 64 */ + 0x1000); + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + + OUT_BCS_RELOC(batch, + bsd_mpc_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, + mpr_bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + dri_bo_unreference(bsd_mpc_bo); + dri_bo_unreference(mpr_bo); +} + +static void +gen8_jpeg_wa_avc_qm_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + +} + +static void +gen8_jpeg_wa_avc_img_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int img_struct = 0; + int mbaff_frame_flag = 0; + unsigned int width_in_mbs = 1, height_in_mbs = 1; + + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + OUT_BCS_BATCH(batch, + width_in_mbs * height_in_mbs); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + OUT_BCS_BATCH(batch, + (0 << 24) | + (0 << 16) | + (0 << 14) | + (0 << 13) | + (0 << 12) | /* differ from GEN6 */ + (0 << 10) | + (img_struct << 8)); + OUT_BCS_BATCH(batch, + (1 << 10) | /* 4:2:0 */ + (1 << 7) | /* CABAC */ + (0 << 6) | + (0 << 5) | + (0 << 4) | + (0 << 3) | + (1 << 2) | + (mbaff_frame_flag << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_avc_directmode_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i; + + BEGIN_BCS_BATCH(batch, 71); + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* reference surfaces 0..15 */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); /* bottom */ + } + + OUT_BCS_BATCH(batch, 0); + + /* the current decoding frame/field */ + OUT_BCS_BATCH(batch, 0); /* top */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POC List */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_ind_obj_base_addr_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (11 - 2)); + OUT_BCS_RELOC(batch, + gen7_mfd_context->jpeg_wa_slice_data_bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* ignore for VLD mode */ + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_avc_bsd_object(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + + /* the input bitsteam format on GEN7 differs from GEN6 */ + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, gen7_jpeg_wa_clip.data_size); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 31) | + (0 << 14) | + (0 << 12) | + (0 << 10) | + (0 << 8)); + OUT_BCS_BATCH(batch, + ((gen7_jpeg_wa_clip.data_bit_offset >> 3) << 16) | + (0 << 5) | + (0 << 4) | + (1 << 3) | /* LastSlice Flag */ + (gen7_jpeg_wa_clip.data_bit_offset & 0x7)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_jpeg_wa_avc_slice_state(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int slice_hor_pos = 0, slice_ver_pos = 0, next_slice_hor_pos = 0, next_slice_ver_pos = 1; + int num_ref_idx_l0 = 0, num_ref_idx_l1 = 0; + int first_mb_in_slice = 0; + int slice_type = SLICE_TYPE_I; + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, slice_type); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (0 << 29) | + (1 << 27) | /* disable Deblocking */ + (0 << 24) | + (gen7_jpeg_wa_clip.qp << 16) | + (0 << 8) | + (0 << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (next_slice_ver_pos << 16) | + (next_slice_hor_pos << 0)); + OUT_BCS_BATCH(batch, (1 << 19)); /* last slice flag */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_jpeg_wa(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + gen8_jpeg_wa_init(ctx, gen7_mfd_context); + intel_batchbuffer_emit_mi_flush(batch); + gen8_jpeg_wa_pipe_mode_select(ctx, gen7_mfd_context); + gen8_jpeg_wa_surface_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_pipe_buf_addr_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_bsp_buf_base_addr_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_avc_qm_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_avc_img_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_ind_obj_base_addr_state(ctx, gen7_mfd_context); + + gen8_jpeg_wa_avc_directmode_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_avc_slice_state(ctx, gen7_mfd_context); + gen8_jpeg_wa_avc_bsd_object(ctx, gen7_mfd_context); +} + +#endif + +void +gen8_mfd_jpeg_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferJPEGBaseline *pic_param; + VASliceParameterBufferJPEGBaseline *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j, max_selector = 0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferJPEGBaseline *)decode_state->pic_param->buffer; + + /* Currently only support Baseline DCT */ + gen8_mfd_jpeg_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); +#ifdef JPEG_WA + gen8_mfd_jpeg_wa(ctx, gen7_mfd_context); +#endif + intel_batchbuffer_emit_mi_flush(batch); + gen8_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen8_mfd_surface_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen8_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_JPEG, gen7_mfd_context); + gen8_mfd_jpeg_pic_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_jpeg_qm_state(ctx, decode_state, gen7_mfd_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + int component; + + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + for (component = 0; component < slice_param->num_components; component++) { + if (max_selector < slice_param->components[component].dc_table_selector) + max_selector = slice_param->components[component].dc_table_selector; + + if (max_selector < slice_param->components[component].ac_table_selector) + max_selector = slice_param->components[component].ac_table_selector; + } + + slice_param++; + } + } + + assert(max_selector < 2); + gen8_mfd_jpeg_huff_table_state(ctx, decode_state, gen7_mfd_context, max_selector + 1); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_JPEG, gen7_mfd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferJPEGBaseline *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen8_mfd_jpeg_bsd_object(ctx, pic_param, slice_param, next_slice_param, slice_data_bo, gen7_mfd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static const int vp8_dc_qlookup[128] = +{ + 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, + 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, + 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157, +}; + +static const int vp8_ac_qlookup[128] = +{ + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, + 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, + 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, + 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, + 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284, +}; + +static inline unsigned int vp8_clip_quantization_index(int index) +{ + if(index > 127) + return 127; + else if(index <0) + return 0; + + return index; +} + +static void +gen8_mfd_vp8_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct object_surface *obj_surface; + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + VAPictureParameterBufferVP8 *pic_param = (VAPictureParameterBufferVP8 *)decode_state->pic_param->buffer; + int width_in_mbs = (pic_param->frame_width + 15) / 16; + int height_in_mbs = (pic_param->frame_height + 15) / 16; + + assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */ + assert(height_in_mbs > 0 && height_in_mbs <= 256); + + intel_update_vp8_frame_store_index(ctx, + decode_state, + pic_param, + gen7_mfd_context->reference_surface); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.valid = !pic_param->pic_fields.bits.loop_filter_disable; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = obj_surface->bo; + dri_bo_reference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.valid = pic_param->pic_fields.bits.loop_filter_disable; + + intel_ensure_vp8_segmentation_buffer(ctx, + &gen7_mfd_context->segmentation_buffer, width_in_mbs, height_in_mbs); + + /* The same as AVC */ + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "intra row store", + width_in_mbs * 64, + 0x1000); + assert(bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->intra_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "deblocking filter row store", + width_in_mbs * 64 * 4, + 0x1000); + assert(bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd mpc row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.valid = 1; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + width_in_mbs * 64 * 2, + 0x1000); + assert(bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = bo; + gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 1; + + gen7_mfd_context->bitplane_read_buffer.valid = 0; +} + +static void +gen8_mfd_vp8_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVP8 *pic_param = (VAPictureParameterBufferVP8 *)decode_state->pic_param->buffer; + VAIQMatrixBufferVP8 *iq_matrix = (VAIQMatrixBufferVP8 *)decode_state->iq_matrix->buffer; + VASliceParameterBufferVP8 *slice_param = (VASliceParameterBufferVP8 *)decode_state->slice_params[0]->buffer; /* one slice per frame */ + dri_bo *probs_bo = decode_state->probability_data->bo; + int i, j,log2num; + unsigned int quantization_value[4][6]; + + /* There is no safe way to error out if the segmentation buffer + could not be allocated. So, instead of aborting, simply decode + something even if the result may look totally inacurate */ + const unsigned int enable_segmentation = + pic_param->pic_fields.bits.segmentation_enabled && + gen7_mfd_context->segmentation_buffer.valid; + + log2num = (int)log2(slice_param->num_of_partitions - 1); + + BEGIN_BCS_BATCH(batch, 38); + OUT_BCS_BATCH(batch, MFX_VP8_PIC_STATE | (38 - 2)); + OUT_BCS_BATCH(batch, + (ALIGN(pic_param->frame_height, 16) / 16 - 1) << 16 | + (ALIGN(pic_param->frame_width, 16) / 16 - 1) << 0); + OUT_BCS_BATCH(batch, + log2num << 24 | + pic_param->pic_fields.bits.sharpness_level << 16 | + pic_param->pic_fields.bits.sign_bias_alternate << 13 | + pic_param->pic_fields.bits.sign_bias_golden << 12 | + pic_param->pic_fields.bits.loop_filter_adj_enable << 11 | + pic_param->pic_fields.bits.mb_no_coeff_skip << 10 | + (enable_segmentation && + pic_param->pic_fields.bits.update_mb_segmentation_map) << 9 | + pic_param->pic_fields.bits.segmentation_enabled << 8 | + (enable_segmentation && + !pic_param->pic_fields.bits.update_mb_segmentation_map) << 7 | + (enable_segmentation && + pic_param->pic_fields.bits.update_mb_segmentation_map) << 6 | + (pic_param->pic_fields.bits.key_frame == 0 ? 1 : 0) << 5 | /* 0 indicate an intra frame in VP8 stream/spec($9.1)*/ + pic_param->pic_fields.bits.filter_type << 4 | + (pic_param->pic_fields.bits.version == 3) << 1 | /* full pixel mode for version 3 */ + !!pic_param->pic_fields.bits.version << 0); /* version 0: 6 tap */ + + OUT_BCS_BATCH(batch, + pic_param->loop_filter_level[3] << 24 | + pic_param->loop_filter_level[2] << 16 | + pic_param->loop_filter_level[1] << 8 | + pic_param->loop_filter_level[0] << 0); + + /* Quantizer Value for 4 segmetns, DW4-DW15 */ + for (i = 0; i < 4; i++) { + quantization_value[i][0] = vp8_ac_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][0])];/*yac*/ + quantization_value[i][1] = vp8_dc_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][1])];/*ydc*/ + quantization_value[i][2] = 2*vp8_dc_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][2])];/*y2dc*/ + /* 101581>>16 is equivalent to 155/100 */ + quantization_value[i][3] = (101581*vp8_ac_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][3])]) >> 16;/*y2ac*/ + quantization_value[i][4] = vp8_dc_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][4])];/*uvdc*/ + quantization_value[i][5] = vp8_ac_qlookup[vp8_clip_quantization_index(iq_matrix->quantization_index[i][5])];/*uvac*/ + + quantization_value[i][3] = (quantization_value[i][3] > 8 ? quantization_value[i][3] : 8); + quantization_value[i][4] = (quantization_value[i][4] < 132 ? quantization_value[i][4] : 132); + + OUT_BCS_BATCH(batch, + quantization_value[i][0] << 16 | /* Y1AC */ + quantization_value[i][1] << 0); /* Y1DC */ + OUT_BCS_BATCH(batch, + quantization_value[i][5] << 16 | /* UVAC */ + quantization_value[i][4] << 0); /* UVDC */ + OUT_BCS_BATCH(batch, + quantization_value[i][3] << 16 | /* Y2AC */ + quantization_value[i][2] << 0); /* Y2DC */ + } + + /* CoeffProbability table for non-key frame, DW16-DW18 */ + if (probs_bo) { + OUT_BCS_RELOC(batch, probs_bo, + 0, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, + pic_param->mb_segment_tree_probs[2] << 16 | + pic_param->mb_segment_tree_probs[1] << 8 | + pic_param->mb_segment_tree_probs[0] << 0); + + OUT_BCS_BATCH(batch, + pic_param->prob_skip_false << 24 | + pic_param->prob_intra << 16 | + pic_param->prob_last << 8 | + pic_param->prob_gf << 0); + + OUT_BCS_BATCH(batch, + pic_param->y_mode_probs[3] << 24 | + pic_param->y_mode_probs[2] << 16 | + pic_param->y_mode_probs[1] << 8 | + pic_param->y_mode_probs[0] << 0); + + OUT_BCS_BATCH(batch, + pic_param->uv_mode_probs[2] << 16 | + pic_param->uv_mode_probs[1] << 8 | + pic_param->uv_mode_probs[0] << 0); + + /* MV update value, DW23-DW32 */ + for (i = 0; i < 2; i++) { + for (j = 0; j < 20; j += 4) { + OUT_BCS_BATCH(batch, + (j + 3 == 19 ? 0 : pic_param->mv_probs[i][j + 3]) << 24 | + pic_param->mv_probs[i][j + 2] << 16 | + pic_param->mv_probs[i][j + 1] << 8 | + pic_param->mv_probs[i][j + 0] << 0); + } + } + + OUT_BCS_BATCH(batch, + (pic_param->loop_filter_deltas_ref_frame[3] & 0x7f) << 24 | + (pic_param->loop_filter_deltas_ref_frame[2] & 0x7f) << 16 | + (pic_param->loop_filter_deltas_ref_frame[1] & 0x7f) << 8 | + (pic_param->loop_filter_deltas_ref_frame[0] & 0x7f) << 0); + + OUT_BCS_BATCH(batch, + (pic_param->loop_filter_deltas_mode[3] & 0x7f) << 24 | + (pic_param->loop_filter_deltas_mode[2] & 0x7f) << 16 | + (pic_param->loop_filter_deltas_mode[1] & 0x7f) << 8 | + (pic_param->loop_filter_deltas_mode[0] & 0x7f) << 0); + + /* segmentation id stream base address, DW35-DW37 */ + if (enable_segmentation) { + OUT_BCS_RELOC(batch, gen7_mfd_context->segmentation_buffer.bo, + 0, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + ADVANCE_BCS_BATCH(batch); +} + +static void +gen8_mfd_vp8_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferVP8 *pic_param, + VASliceParameterBufferVP8 *slice_param, + dri_bo *slice_data_bo, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + int i, log2num; + unsigned int offset = slice_param->slice_data_offset + ((slice_param->macroblock_offset + 7 ) >> 3); + unsigned int used_bits = 8-pic_param->bool_coder_ctx.count; + unsigned int partition_size_0 = slice_param->partition_size[0]; + + assert(pic_param->bool_coder_ctx.count >= 0 && pic_param->bool_coder_ctx.count <= 7); + if (used_bits == 8) { + used_bits = 0; + offset += 1; + partition_size_0 -= 1; + } + + assert(slice_param->num_of_partitions >= 2); + assert(slice_param->num_of_partitions <= 9); + + log2num = (int)log2(slice_param->num_of_partitions - 1); + + BEGIN_BCS_BATCH(batch, 22); + OUT_BCS_BATCH(batch, MFD_VP8_BSD_OBJECT | (22 - 2)); + OUT_BCS_BATCH(batch, + used_bits << 16 | /* Partition 0 CPBAC Entropy Count */ + pic_param->bool_coder_ctx.range << 8 | /* Partition 0 Count Entropy Range */ + log2num << 4 | + (slice_param->macroblock_offset & 0x7)); + OUT_BCS_BATCH(batch, + pic_param->bool_coder_ctx.value << 24 | /* Partition 0 Count Entropy Value */ + 0); + + OUT_BCS_BATCH(batch, partition_size_0 + 1); + OUT_BCS_BATCH(batch, offset); + //partion sizes in bytes are present after the above first partition when there are more than one token partition + offset += (partition_size_0 + 3 * (slice_param->num_of_partitions - 2)); + for (i = 1; i < 9; i++) { + if (i < slice_param->num_of_partitions) { + OUT_BCS_BATCH(batch, slice_param->partition_size[i] + 1); + OUT_BCS_BATCH(batch, offset); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + + offset += slice_param->partition_size[i]; + } + + OUT_BCS_BATCH(batch, 0); /* concealment method */ + + ADVANCE_BCS_BATCH(batch); +} + +void +gen8_mfd_vp8_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen7_mfd_context *gen7_mfd_context) +{ + struct intel_batchbuffer *batch = gen7_mfd_context->base.batch; + VAPictureParameterBufferVP8 *pic_param; + VASliceParameterBufferVP8 *slice_param; + dri_bo *slice_data_bo; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferVP8 *)decode_state->pic_param->buffer; + + /* one slice per frame */ + if (decode_state->num_slice_params != 1 || + (!decode_state->slice_params || + !decode_state->slice_params[0] || + (decode_state->slice_params[0]->num_elements != 1 || decode_state->slice_params[0]->buffer == NULL)) || + (!decode_state->slice_datas || + !decode_state->slice_datas[0] || + !decode_state->slice_datas[0]->bo) || + !decode_state->probability_data) { + WARN_ONCE("Wrong parameters for VP8 decoding\n"); + + return; + } + + slice_param = (VASliceParameterBufferVP8 *)decode_state->slice_params[0]->buffer; + slice_data_bo = decode_state->slice_datas[0]->bo; + + gen8_mfd_vp8_decode_init(ctx, decode_state, gen7_mfd_context); + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen8_mfd_pipe_mode_select(ctx, decode_state, MFX_FORMAT_VP8, gen7_mfd_context); + gen8_mfd_surface_state(ctx, decode_state, MFX_FORMAT_VP8, gen7_mfd_context); + gen8_mfd_pipe_buf_addr_state(ctx, decode_state, MFX_FORMAT_VP8, gen7_mfd_context); + gen8_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_VP8, gen7_mfd_context); + gen8_mfd_ind_obj_base_addr_state(ctx, slice_data_bo, MFX_FORMAT_VP8, gen7_mfd_context); + gen8_mfd_vp8_pic_state(ctx, decode_state, gen7_mfd_context); + gen8_mfd_vp8_bsd_object(ctx, pic_param, slice_param, slice_data_bo, gen7_mfd_context); + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static VAStatus +gen8_mfd_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) + +{ + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + assert(gen7_mfd_context); + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + gen7_mfd_context->wa_mpeg2_slice_vertical_position = -1; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen8_mfd_mpeg2_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + gen8_mfd_avc_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + gen8_mfd_vc1_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileJPEGBaseline: + gen8_mfd_jpeg_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + case VAProfileVP8Version0_3: + gen8_mfd_vp8_decode_picture(ctx, decode_state, gen7_mfd_context); + break; + + default: + assert(0); + break; + } + + vaStatus = VA_STATUS_SUCCESS; + +out: + return vaStatus; +} + +static void +gen8_mfd_context_destroy(void *hw_context) +{ + VADriverContextP ctx; + struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context; + + ctx = (VADriverContextP)(gen7_mfd_context->driver_context); + + dri_bo_unreference(gen7_mfd_context->post_deblocking_output.bo); + gen7_mfd_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo); + gen7_mfd_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->intra_row_store_scratch_buffer.bo); + gen7_mfd_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo); + gen7_mfd_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo); + gen7_mfd_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->mpr_row_store_scratch_buffer.bo); + gen7_mfd_context->mpr_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo); + gen7_mfd_context->bitplane_read_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->segmentation_buffer.bo); + gen7_mfd_context->segmentation_buffer.bo = NULL; + + dri_bo_unreference(gen7_mfd_context->jpeg_wa_slice_data_bo); + + if (gen7_mfd_context->jpeg_wa_surface_id != VA_INVALID_SURFACE) { + i965_DestroySurfaces(ctx, + &gen7_mfd_context->jpeg_wa_surface_id, + 1); + gen7_mfd_context->jpeg_wa_surface_object = NULL; + } + + intel_batchbuffer_free(gen7_mfd_context->base.batch); + free(gen7_mfd_context); +} + +static void gen8_mfd_mpeg2_context_init(VADriverContextP ctx, + struct gen7_mfd_context *gen7_mfd_context) +{ + gen7_mfd_context->iq_matrix.mpeg2.load_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_non_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_intra_quantiser_matrix = -1; + gen7_mfd_context->iq_matrix.mpeg2.load_chroma_non_intra_quantiser_matrix = -1; +} + +struct hw_context * +gen8_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct gen7_mfd_context *gen7_mfd_context = calloc(1, sizeof(struct gen7_mfd_context)); + int i; + + if (!gen7_mfd_context) + return NULL; + + gen7_mfd_context->base.destroy = gen8_mfd_context_destroy; + gen7_mfd_context->base.run = gen8_mfd_decode_picture; + gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { + gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; + gen7_mfd_context->reference_surface[i].frame_store_id = -1; + } + + gen7_mfd_context->jpeg_wa_surface_id = VA_INVALID_SURFACE; + gen7_mfd_context->segmentation_buffer.valid = 0; + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + gen8_mfd_mpeg2_context_init(ctx, gen7_mfd_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + gen8_mfd_avc_context_init(ctx, gen7_mfd_context); + break; + default: + break; + } + + gen7_mfd_context->driver_context = ctx; + return (struct hw_context *)gen7_mfd_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.c new file mode 100644 index 000000000..998e3c8b8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.c @@ -0,0 +1,1585 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zhao Yakui + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_post_processing.h" +#include "i965_render.h" +#include "i965_yuv_coefs.h" +#include "intel_media.h" + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 + +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET SURFACE_STATE_OFFSET(MAX_PP_SURFACES) + +#define GPU_ASM_BLOCK_WIDTH 16 +#define GPU_ASM_BLOCK_HEIGHT 8 +#define GPU_ASM_X_OFFSET_ALIGNMENT 4 + +#define VA_STATUS_SUCCESS_1 0xFFFFFFFE + +VAStatus pp_null_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +VAStatus gen8_pp_plx_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +/* TODO: Modify the shader and then compile it again. + * Currently it is derived from Haswell*/ +static const uint32_t pp_null_gen8[][4] = { +}; + +static const uint32_t pp_nv12_load_save_nv12_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_pl2.g8b" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_pl3.g8b" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen8[][4] = { +#include "shaders/post_processing/gen8/pl3_to_pl2.g8b" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen8[][4] = { +#include "shaders/post_processing/gen8/pl3_to_pl3.g8b" +}; + +static const uint32_t pp_nv12_scaling_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_pl2.g8b" +}; + +static const uint32_t pp_nv12_avs_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_pl2.g8b" +}; + +static const uint32_t pp_nv12_dndi_gen8[][4] = { +// #include "shaders/post_processing/gen7/dndi.g75b" +}; + +static const uint32_t pp_nv12_dn_gen8[][4] = { +// #include "shaders/post_processing/gen7/nv12_dn_nv12.g75b" +}; +static const uint32_t pp_nv12_load_save_pa_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_pa.g8b" +}; +static const uint32_t pp_pl3_load_save_pa_gen8[][4] = { +#include "shaders/post_processing/gen8/pl3_to_pa.g8b" +}; +static const uint32_t pp_pa_load_save_nv12_gen8[][4] = { +#include "shaders/post_processing/gen8/pa_to_pl2.g8b" +}; +static const uint32_t pp_pa_load_save_pl3_gen8[][4] = { +#include "shaders/post_processing/gen8/pa_to_pl3.g8b" +}; +static const uint32_t pp_pa_load_save_pa_gen8[][4] = { +#include "shaders/post_processing/gen8/pa_to_pa.g8b" +}; +static const uint32_t pp_rgbx_load_save_nv12_gen8[][4] = { +#include "shaders/post_processing/gen8/rgbx_to_nv12.g8b" +}; +static const uint32_t pp_nv12_load_save_rgbx_gen8[][4] = { +#include "shaders/post_processing/gen8/pl2_to_rgbx.g8b" +}; + +static struct pp_module pp_modules_gen8[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen8, + sizeof(pp_null_gen8), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen8, + sizeof(pp_nv12_load_save_nv12_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen8, + sizeof(pp_nv12_load_save_pl3_gen8), + NULL, + }, + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen8, + sizeof(pp_pl3_load_save_nv12_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen8, + sizeof(pp_pl3_load_save_pl3_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen8, + sizeof(pp_nv12_scaling_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen8, + sizeof(pp_nv12_avs_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen8, + sizeof(pp_nv12_dndi_gen8), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen8, + sizeof(pp_nv12_dn_gen8), + NULL, + }, + + pp_null_initialize, + }, + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen8, + sizeof(pp_nv12_load_save_pa_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen8, + sizeof(pp_pl3_load_save_pa_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen8, + sizeof(pp_pa_load_save_nv12_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen8, + sizeof(pp_pa_load_save_pl3_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen8, + sizeof(pp_pa_load_save_pa_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen8, + sizeof(pp_rgbx_load_save_nv12_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen8, + sizeof(pp_nv12_load_save_rgbx_gen8), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, +}; + +static int +pp_get_surface_fourcc(VADriverContextP ctx, const struct i965_surface *surface) +{ + int fourcc; + + if (surface->type == I965_SURFACE_TYPE_IMAGE) { + struct object_image *obj_image = (struct object_image *)surface->base; + fourcc = obj_image->image.format.fourcc; + } else { + struct object_surface *obj_surface = (struct object_surface *)surface->base; + fourcc = obj_surface->fourcc; + } + + return fourcc; +} + +static void +gen8_pp_set_surface_tiling(struct gen8_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen8_pp_set_surface2_tiling(struct gen8_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + + +static void +gen8_pp_set_surface_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int pitch, int format, + int index, int is_target) +{ + struct gen8_surface_state *ss; + dri_bo *ss_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss_bo = pp_context->surface_state_binding_table.bo; + assert(ss_bo); + + dri_bo_map(ss_bo, True); + assert(ss_bo->virtual); + ss = (struct gen8_surface_state *)((char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + ss->ss8.base_addr = surf_bo->offset + surf_bo_offset; + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + ss->ss3.pitch = pitch - 1; + + /* Always set 1(align 4 mode) per B-spec */ + ss->ss0.vertical_alignment = 1; + ss->ss0.horizontal_alignment = 1; + + gen8_pp_set_surface_tiling(ss, tiling); + gen8_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, is_target ? I915_GEM_DOMAIN_RENDER : 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state, ss8), + surf_bo); + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + + +static void +gen8_pp_set_surface2_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int wpitch, + int xoffset, int yoffset, + int format, int interleave_chroma, + int index) +{ + struct gen8_surface_state2 *ss2; + dri_bo *ss2_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss2_bo = pp_context->surface_state_binding_table.bo; + assert(ss2_bo); + + dri_bo_map(ss2_bo, True); + assert(ss2_bo->virtual); + ss2 = (struct gen8_surface_state2 *)((char *)ss2_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss2, 0, sizeof(*ss2)); + ss2->ss6.base_addr = surf_bo->offset + surf_bo_offset; + ss2->ss1.cbcr_pixel_offset_v_direction = 0; + ss2->ss1.width = width - 1; + ss2->ss1.height = height - 1; + ss2->ss2.pitch = wpitch - 1; + ss2->ss2.interleave_chroma = interleave_chroma; + ss2->ss2.surface_format = format; + ss2->ss3.x_offset_for_cb = xoffset; + ss2->ss3.y_offset_for_cb = yoffset; + gen8_pp_set_surface2_tiling(ss2, tiling); + dri_bo_emit_reloc(ss2_bo, + I915_GEM_DOMAIN_RENDER, 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state2, ss6), + surf_bo); + ((unsigned int *)((char *)ss2_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss2_bo); +} + +static void +gen8_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *surface, + int base_index, int is_target, + const VARectangle *rect, + int *width, int *height, int *pitch, int *offset) +{ + struct object_surface *obj_surface; + struct object_image *obj_image; + dri_bo *bo; + int fourcc = pp_get_surface_fourcc(ctx, surface); + const i965_fourcc_info *fourcc_info = get_fourcc_info(fourcc); + + if (fourcc_info == NULL) + return; + + if (surface->type == I965_SURFACE_TYPE_SURFACE) { + obj_surface = (struct object_surface *)surface->base; + bo = obj_surface->bo; + width[0] = MIN(rect->x + rect->width, obj_surface->orig_width); + height[0] = MIN(rect->y + rect->height, obj_surface->orig_height); + pitch[0] = obj_surface->width; + offset[0] = 0; + + if (fourcc_info->num_planes == 1 && is_target) + width[0] = width[0] * (fourcc_info->bpp[0] / 8); /* surface format is R8 */ + + width[1] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_surface->cb_cr_width); + height[1] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_surface->cb_cr_height); + pitch[1] = obj_surface->cb_cr_pitch; + offset[1] = obj_surface->y_cb_offset * obj_surface->width; + + width[2] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_surface->cb_cr_width); + height[2] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_surface->cb_cr_height); + pitch[2] = obj_surface->cb_cr_pitch; + offset[2] = obj_surface->y_cr_offset * obj_surface->width; + } else { + int U = 0, V = 0; + + /* FIXME: add support for ARGB/ABGR image */ + obj_image = (struct object_image *)surface->base; + bo = obj_image->bo; + width[0] = MIN(rect->x + rect->width, obj_image->image.width); + height[0] = MIN(rect->y + rect->height, obj_image->image.height); + pitch[0] = obj_image->image.pitches[0]; + offset[0] = obj_image->image.offsets[0]; + + if (fourcc_info->num_planes == 1) { + if (is_target) + width[0] = width[0] * (fourcc_info->bpp[0] / 8); /* surface format is R8 */ + } else if (fourcc_info->num_planes == 2) { + U = 1, V = 1; + } else { + assert(fourcc_info->num_components == 3); + + U = fourcc_info->components[1].plane; + V = fourcc_info->components[2].plane; + assert((U == 1 && V == 2) || + (U == 2 && V == 1)); + } + + /* Always set width/height although they aren't used for fourcc_info->num_planes == 1 */ + width[1] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_image->image.width / fourcc_info->hfactor); + height[1] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_image->image.height / fourcc_info->vfactor); + pitch[1] = obj_image->image.pitches[U]; + offset[1] = obj_image->image.offsets[U]; + + width[2] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_image->image.width / fourcc_info->hfactor); + height[2] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_image->image.height / fourcc_info->vfactor); + pitch[2] = obj_image->image.pitches[V]; + offset[2] = obj_image->image.offsets[V]; + } + + if (is_target) { + gen8_pp_set_surface_state(ctx, pp_context, + bo, 0, + ALIGN(width[0], 4) / 4, height[0], pitch[0], + I965_SURFACEFORMAT_R8_UINT, + base_index, 1); + + if (fourcc_info->num_planes == 2) { + gen8_pp_set_surface_state(ctx, pp_context, + bo, offset[1], + ALIGN(width[1], 2) / 2, height[1], pitch[1], + I965_SURFACEFORMAT_R8G8_SINT, + base_index + 1, 1); + } else if (fourcc_info->num_planes == 3) { + gen8_pp_set_surface_state(ctx, pp_context, + bo, offset[1], + ALIGN(width[1], 4) / 4, height[1], pitch[1], + I965_SURFACEFORMAT_R8_SINT, + base_index + 1, 1); + gen8_pp_set_surface_state(ctx, pp_context, + bo, offset[2], + ALIGN(width[2], 4) / 4, height[2], pitch[2], + I965_SURFACEFORMAT_R8_SINT, + base_index + 2, 1); + } + + if (fourcc_info->format == I965_COLOR_RGB) { + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + /* the format is MSB: X-B-G-R */ + pp_static_parameter->grf2.save_avs_rgb_swap = 0; + if ((fourcc == VA_FOURCC_BGRA) || + (fourcc == VA_FOURCC_BGRX)) { + /* It is stored as MSB: X-R-G-B */ + pp_static_parameter->grf2.save_avs_rgb_swap = 1; + } + } + } else { + int format0 = SURFACE_FORMAT_Y8_UNORM; + + switch (fourcc) { + case VA_FOURCC_YUY2: + format0 = SURFACE_FORMAT_YCRCB_NORMAL; + break; + + case VA_FOURCC_UYVY: + format0 = SURFACE_FORMAT_YCRCB_SWAPY; + break; + + default: + break; + } + + if (fourcc_info->format == I965_COLOR_RGB) { + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + /* Only R8G8B8A8_UNORM is supported for BGRX or RGBX */ + format0 = SURFACE_FORMAT_R8G8B8A8_UNORM; + pp_static_parameter->grf2.src_avs_rgb_swap = 0; + if ((fourcc == VA_FOURCC_BGRA) || + (fourcc == VA_FOURCC_BGRX)) { + pp_static_parameter->grf2.src_avs_rgb_swap = 1; + } + } + + gen8_pp_set_surface2_state(ctx, pp_context, + bo, offset[0], + width[0], height[0], pitch[0], + 0, 0, + format0, 0, + base_index); + + if (fourcc_info->num_planes == 2) { + gen8_pp_set_surface2_state(ctx, pp_context, + bo, offset[1], + width[1], height[1], pitch[1], + 0, 0, + SURFACE_FORMAT_R8B8_UNORM, 0, + base_index + 1); + } else if (fourcc_info->num_planes == 3) { + gen8_pp_set_surface2_state(ctx, pp_context, + bo, offset[1], + width[1], height[1], pitch[1], + 0, 0, + SURFACE_FORMAT_R8_UNORM, 0, + base_index + 1); + gen8_pp_set_surface2_state(ctx, pp_context, + bo, offset[2], + width[2], height[2], pitch[2], + 0, 0, + SURFACE_FORMAT_R8_UNORM, 0, + base_index + 2); + } + } +} + +static int +pp_null_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_null_y_steps(void *private_context) +{ + return 1; +} + +static int +pp_null_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + return 0; +} + +VAStatus +pp_null_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + /* private function & data */ + pp_context->pp_x_steps = pp_null_x_steps; + pp_context->pp_y_steps = pp_null_y_steps; + pp_context->private_context = NULL; + pp_context->pp_set_block_parameter = pp_null_set_block_parameter; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static void calculate_boundary_block_mask(struct i965_post_processing_context *pp_context, const VARectangle *dst_rect) +{ + int i, dst_width_adjust; + /* x offset of dest surface must be dword aligned. + * so we have to extend dst surface on left edge, and mask out pixels not interested + */ + if (dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT) { + pp_context->block_horizontal_mask_left = 0; + for (i=dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; iblock_horizontal_mask_left |= 1<block_horizontal_mask_left = 0xffff; + } + + dst_width_adjust = dst_rect->width + dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + if (dst_width_adjust%GPU_ASM_BLOCK_WIDTH){ + pp_context->block_horizontal_mask_right = (1 << (dst_width_adjust%GPU_ASM_BLOCK_WIDTH)) - 1; + } + else { + pp_context->block_horizontal_mask_right = 0xffff; + } + + if (dst_rect->height%GPU_ASM_BLOCK_HEIGHT){ + pp_context->block_vertical_mask_bottom = (1 << (dst_rect->height%GPU_ASM_BLOCK_HEIGHT)) - 1; + } + else { + pp_context->block_vertical_mask_bottom = 0xff; + } + +} + +static int +gen7_pp_avs_x_steps(void *private_context) +{ + struct pp_avs_context *pp_avs_context = private_context; + + return pp_avs_context->dest_w / 16; +} + +static int +gen7_pp_avs_y_steps(void *private_context) +{ + struct pp_avs_context *pp_avs_context = private_context; + + return pp_avs_context->dest_h / 16; +} + +static int +gen7_pp_avs_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)pp_context->private_context; + struct gen7_pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf9.destination_block_horizontal_origin = x * 16 + pp_avs_context->dest_x; + pp_inline_parameter->grf9.destination_block_vertical_origin = y * 16 + pp_avs_context->dest_y; + pp_inline_parameter->grf9.constant_0 = 0xffffffff; + pp_inline_parameter->grf9.sampler_load_main_video_x_scaling_step = pp_avs_context->horiz_range / pp_avs_context->src_w; + + return 0; +} + +static void gen7_update_src_surface_uv_offset(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *surface) +{ + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + int fourcc = pp_get_surface_fourcc(ctx, surface); + + if (fourcc == VA_FOURCC_YUY2) { + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 3; + } else if (fourcc == VA_FOURCC_UYVY) { + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 2; + } +} + +static const AVSConfig gen8_avs_config = { + .coeff_frac_bits = 6, + .coeff_epsilon = 1.0f / (1U << 6), + .num_phases = 16, + .num_luma_coeffs = 8, + .num_chroma_coeffs = 4, + + .coeff_range = { + .lower_bound = { + .y_k_h = { -2, -2, -2, -2, -2, -2, -2, -2 }, + .y_k_v = { -2, -2, -2, -2, -2, -2, -2, -2 }, + .uv_k_h = { -1, -2, -2, -1 }, + .uv_k_v = { -1, -2, -2, -1 }, + }, + .upper_bound = { + .y_k_h = { 2, 2, 2, 2, 2, 2, 2, 2 }, + .y_k_v = { 2, 2, 2, 2, 2, 2, 2, 2 }, + .uv_k_h = { 1, 2, 2, 1 }, + .uv_k_v = { 1, 2, 2, 1 }, + }, + }, +}; + +VAStatus +gen8_pp_plx_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ +/* TODO: Add the sampler_8x8 state */ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)&pp_context->pp_avs_context; + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct gen8_sampler_8x8_avs *sampler_8x8; + int i; + int width[3], height[3], pitch[3], offset[3]; + int src_width, src_height; + unsigned char *cc_ptr; + AVSState * const avs = &pp_avs_context->state; + float sx, sy; + const float * yuv_to_rgb_coefs; + size_t yuv_to_rgb_coefs_size; + + memset(pp_static_parameter, 0, sizeof(struct gen7_pp_static_parameter)); + + /* source surface */ + gen8_pp_set_media_rw_message_surface(ctx, pp_context, src_surface, 0, 0, + src_rect, + width, height, pitch, offset); + src_height = height[0]; + src_width = width[0]; + + /* destination surface */ + gen8_pp_set_media_rw_message_surface(ctx, pp_context, dst_surface, 24, 1, + dst_rect, + width, height, pitch, offset); + + /* sampler 8x8 state */ + dri_bo_map(pp_context->dynamic_state.bo, True); + assert(pp_context->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) pp_context->dynamic_state.bo->virtual + + pp_context->sampler_offset; + /* Currently only one gen8 sampler_8x8 is initialized */ + sampler_8x8 = (struct gen8_sampler_8x8_avs *) cc_ptr; + memset(sampler_8x8, 0, sizeof(*sampler_8x8)); + + sampler_8x8->dw0.gain_factor = 44; + sampler_8x8->dw0.weak_edge_threshold = 1; + sampler_8x8->dw0.strong_edge_threshold = 8; + /* Use the value like that on Ivy instead of default + * sampler_8x8->dw0.r3x_coefficient = 5; + */ + sampler_8x8->dw0.r3x_coefficient = 27; + sampler_8x8->dw0.r3c_coefficient = 5; + + sampler_8x8->dw2.global_noise_estimation = 255; + sampler_8x8->dw2.non_edge_weight = 1; + sampler_8x8->dw2.regular_weight = 2; + sampler_8x8->dw2.strong_edge_weight = 7; + /* Use the value like that on Ivy instead of default + * sampler_8x8->dw2.r5x_coefficient = 7; + * sampler_8x8->dw2.r5cx_coefficient = 7; + * sampler_8x8->dw2.r5c_coefficient = 7; + */ + sampler_8x8->dw2.r5x_coefficient = 9; + sampler_8x8->dw2.r5cx_coefficient = 8; + sampler_8x8->dw2.r5c_coefficient = 3; + + sampler_8x8->dw3.sin_alpha = 101; /* sin_alpha = 0 */ + sampler_8x8->dw3.cos_alpha = 79; /* cos_alpha = 0 */ + sampler_8x8->dw3.sat_max = 0x1f; + sampler_8x8->dw3.hue_max = 14; + /* The 8tap filter will determine whether the adaptive Filter is + * applied for all channels(dw153). + * If the 8tap filter is disabled, the adaptive filter should be disabled. + * Only when 8tap filter is enabled, it can be enabled or not. + */ + sampler_8x8->dw3.enable_8tap_filter = 3; + sampler_8x8->dw3.ief4_smooth_enable = 0; + + sampler_8x8->dw4.s3u = 0; + sampler_8x8->dw4.diamond_margin = 4; + sampler_8x8->dw4.vy_std_enable = 0; + sampler_8x8->dw4.umid = 110; + sampler_8x8->dw4.vmid = 154; + + sampler_8x8->dw5.diamond_dv = 0; + sampler_8x8->dw5.diamond_th = 35; + sampler_8x8->dw5.diamond_alpha = 100; /* diamond_alpha = 0 */ + sampler_8x8->dw5.hs_margin = 3; + sampler_8x8->dw5.diamond_du = 2; + + sampler_8x8->dw6.y_point1 = 46; + sampler_8x8->dw6.y_point2 = 47; + sampler_8x8->dw6.y_point3 = 254; + sampler_8x8->dw6.y_point4 = 255; + + sampler_8x8->dw7.inv_margin_vyl = 3300; /* inv_margin_vyl = 0 */ + + sampler_8x8->dw8.inv_margin_vyu = 1600; /* inv_margin_vyu = 0 */ + sampler_8x8->dw8.p0l = 46; + sampler_8x8->dw8.p1l = 216; + + sampler_8x8->dw9.p2l = 236; + sampler_8x8->dw9.p3l = 236; + sampler_8x8->dw9.b0l = 133; + sampler_8x8->dw9.b1l = 130; + + sampler_8x8->dw10.b2l = 130; + sampler_8x8->dw10.b3l = 130; + /* s0l = -5 / 256. s2.8 */ + sampler_8x8->dw10.s0l = 1029; /* s0l = 0 */ + sampler_8x8->dw10.y_slope2 = 31; /* y_slop2 = 0 */ + + sampler_8x8->dw11.s1l = 0; + sampler_8x8->dw11.s2l = 0; + + sampler_8x8->dw12.s3l = 0; + sampler_8x8->dw12.p0u = 46; + sampler_8x8->dw12.p1u = 66; + sampler_8x8->dw12.y_slope1 = 31; /* y_slope1 = 0 */ + + sampler_8x8->dw13.p2u = 130; + sampler_8x8->dw13.p3u = 236; + sampler_8x8->dw13.b0u = 143; + sampler_8x8->dw13.b1u = 163; + + sampler_8x8->dw14.b2u = 200; + sampler_8x8->dw14.b3u = 140; + sampler_8x8->dw14.s0u = 256; /* s0u = 0 */ + + sampler_8x8->dw15.s1u = 113; /* s1u = 0 */ + sampler_8x8->dw15.s2u = 1203; /* s2u = 0 */ + + sx = (float)dst_rect->width / src_rect->width; + sy = (float)dst_rect->height / src_rect->height; + avs_update_coefficients(avs, sx, sy, pp_context->filter_flags); + + assert(avs->config->num_phases >= 16); + for (i = 0; i <= 16; i++) { + struct gen8_sampler_8x8_avs_coefficients * const sampler_8x8_state = + &sampler_8x8->coefficients[i]; + const AVSCoeffs * const coeffs = &avs->coeffs[i]; + + sampler_8x8_state->dw0.table_0x_filter_c0 = + intel_format_convert(coeffs->y_k_h[0], 1, 6, 1); + sampler_8x8_state->dw0.table_0y_filter_c0 = + intel_format_convert(coeffs->y_k_v[0], 1, 6, 1); + sampler_8x8_state->dw0.table_0x_filter_c1 = + intel_format_convert(coeffs->y_k_h[1], 1, 6, 1); + sampler_8x8_state->dw0.table_0y_filter_c1 = + intel_format_convert(coeffs->y_k_v[1], 1, 6, 1); + + sampler_8x8_state->dw1.table_0x_filter_c2 = + intel_format_convert(coeffs->y_k_h[2], 1, 6, 1); + sampler_8x8_state->dw1.table_0y_filter_c2 = + intel_format_convert(coeffs->y_k_v[2], 1, 6, 1); + sampler_8x8_state->dw1.table_0x_filter_c3 = + intel_format_convert(coeffs->y_k_h[3], 1, 6, 1); + sampler_8x8_state->dw1.table_0y_filter_c3 = + intel_format_convert(coeffs->y_k_v[3], 1, 6, 1); + + sampler_8x8_state->dw2.table_0x_filter_c4 = + intel_format_convert(coeffs->y_k_h[4], 1, 6, 1); + sampler_8x8_state->dw2.table_0y_filter_c4 = + intel_format_convert(coeffs->y_k_v[4], 1, 6, 1); + sampler_8x8_state->dw2.table_0x_filter_c5 = + intel_format_convert(coeffs->y_k_h[5], 1, 6, 1); + sampler_8x8_state->dw2.table_0y_filter_c5 = + intel_format_convert(coeffs->y_k_v[5], 1, 6, 1); + + sampler_8x8_state->dw3.table_0x_filter_c6 = + intel_format_convert(coeffs->y_k_h[6], 1, 6, 1); + sampler_8x8_state->dw3.table_0y_filter_c6 = + intel_format_convert(coeffs->y_k_v[6], 1, 6, 1); + sampler_8x8_state->dw3.table_0x_filter_c7 = + intel_format_convert(coeffs->y_k_h[7], 1, 6, 1); + sampler_8x8_state->dw3.table_0y_filter_c7 = + intel_format_convert(coeffs->y_k_v[7], 1, 6, 1); + + sampler_8x8_state->dw4.pad0 = 0; + sampler_8x8_state->dw5.pad0 = 0; + sampler_8x8_state->dw4.table_1x_filter_c2 = + intel_format_convert(coeffs->uv_k_h[0], 1, 6, 1); + sampler_8x8_state->dw4.table_1x_filter_c3 = + intel_format_convert(coeffs->uv_k_h[1], 1, 6, 1); + sampler_8x8_state->dw5.table_1x_filter_c4 = + intel_format_convert(coeffs->uv_k_h[2], 1, 6, 1); + sampler_8x8_state->dw5.table_1x_filter_c5 = + intel_format_convert(coeffs->uv_k_h[3], 1, 6, 1); + + sampler_8x8_state->dw6.pad0 = + sampler_8x8_state->dw7.pad0 = + sampler_8x8_state->dw6.table_1y_filter_c2 = + intel_format_convert(coeffs->uv_k_v[0], 1, 6, 1); + sampler_8x8_state->dw6.table_1y_filter_c3 = + intel_format_convert(coeffs->uv_k_v[1], 1, 6, 1); + sampler_8x8_state->dw7.table_1y_filter_c4 = + intel_format_convert(coeffs->uv_k_v[2], 1, 6, 1); + sampler_8x8_state->dw7.table_1y_filter_c5 = + intel_format_convert(coeffs->uv_k_v[3], 1, 6, 1); + } + + sampler_8x8->dw152.default_sharpness_level = + -avs_is_needed(pp_context->filter_flags); + sampler_8x8->dw153.adaptive_filter_for_all_channel = 1; + sampler_8x8->dw153.bypass_y_adaptive_filtering = 1; + sampler_8x8->dw153.bypass_x_adaptive_filtering = 1; + + for ( ; i <= avs->config->num_phases; i++) { + struct gen8_sampler_8x8_avs_coefficients * const sampler_8x8_state = + &sampler_8x8->coefficients1[i - 17]; + const AVSCoeffs * const coeffs = &avs->coeffs[i]; + + sampler_8x8_state->dw0.table_0x_filter_c0 = + intel_format_convert(coeffs->y_k_h[0], 1, 6, 1); + sampler_8x8_state->dw0.table_0y_filter_c0 = + intel_format_convert(coeffs->y_k_v[0], 1, 6, 1); + sampler_8x8_state->dw0.table_0x_filter_c1 = + intel_format_convert(coeffs->y_k_h[1], 1, 6, 1); + sampler_8x8_state->dw0.table_0y_filter_c1 = + intel_format_convert(coeffs->y_k_v[1], 1, 6, 1); + + sampler_8x8_state->dw1.table_0x_filter_c2 = + intel_format_convert(coeffs->y_k_h[2], 1, 6, 1); + sampler_8x8_state->dw1.table_0y_filter_c2 = + intel_format_convert(coeffs->y_k_v[2], 1, 6, 1); + sampler_8x8_state->dw1.table_0x_filter_c3 = + intel_format_convert(coeffs->y_k_h[3], 1, 6, 1); + sampler_8x8_state->dw1.table_0y_filter_c3 = + intel_format_convert(coeffs->y_k_v[3], 1, 6, 1); + + sampler_8x8_state->dw2.table_0x_filter_c4 = + intel_format_convert(coeffs->y_k_h[4], 1, 6, 1); + sampler_8x8_state->dw2.table_0y_filter_c4 = + intel_format_convert(coeffs->y_k_v[4], 1, 6, 1); + sampler_8x8_state->dw2.table_0x_filter_c5 = + intel_format_convert(coeffs->y_k_h[5], 1, 6, 1); + sampler_8x8_state->dw2.table_0y_filter_c5 = + intel_format_convert(coeffs->y_k_v[5], 1, 6, 1); + + sampler_8x8_state->dw3.table_0x_filter_c6 = + intel_format_convert(coeffs->y_k_h[6], 1, 6, 1); + sampler_8x8_state->dw3.table_0y_filter_c6 = + intel_format_convert(coeffs->y_k_v[6], 1, 6, 1); + sampler_8x8_state->dw3.table_0x_filter_c7 = + intel_format_convert(coeffs->y_k_h[7], 1, 6, 1); + sampler_8x8_state->dw3.table_0y_filter_c7 = + intel_format_convert(coeffs->y_k_v[7], 1, 6, 1); + + sampler_8x8_state->dw4.pad0 = 0; + sampler_8x8_state->dw5.pad0 = 0; + sampler_8x8_state->dw4.table_1x_filter_c2 = + intel_format_convert(coeffs->uv_k_h[0], 1, 6, 1); + sampler_8x8_state->dw4.table_1x_filter_c3 = + intel_format_convert(coeffs->uv_k_h[1], 1, 6, 1); + sampler_8x8_state->dw5.table_1x_filter_c4 = + intel_format_convert(coeffs->uv_k_h[2], 1, 6, 1); + sampler_8x8_state->dw5.table_1x_filter_c5 = + intel_format_convert(coeffs->uv_k_h[3], 1, 6, 1); + + sampler_8x8_state->dw6.pad0 = + sampler_8x8_state->dw7.pad0 = + sampler_8x8_state->dw6.table_1y_filter_c2 = + intel_format_convert(coeffs->uv_k_v[0], 1, 6, 1); + sampler_8x8_state->dw6.table_1y_filter_c3 = + intel_format_convert(coeffs->uv_k_v[1], 1, 6, 1); + sampler_8x8_state->dw7.table_1y_filter_c4 = + intel_format_convert(coeffs->uv_k_v[2], 1, 6, 1); + sampler_8x8_state->dw7.table_1y_filter_c5 = + intel_format_convert(coeffs->uv_k_v[3], 1, 6, 1); + } + + dri_bo_unmap(pp_context->dynamic_state.bo); + + + /* private function & data */ + pp_context->pp_x_steps = gen7_pp_avs_x_steps; + pp_context->pp_y_steps = gen7_pp_avs_y_steps; + pp_context->private_context = &pp_context->pp_avs_context; + pp_context->pp_set_block_parameter = gen7_pp_avs_set_block_parameter; + + int dst_left_edge_extend = dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + pp_avs_context->dest_x = dst_rect->x - dst_left_edge_extend; + pp_avs_context->dest_y = dst_rect->y; + pp_avs_context->dest_w = ALIGN(dst_rect->width + dst_left_edge_extend, 16); + pp_avs_context->dest_h = ALIGN(dst_rect->height, 16); + pp_avs_context->src_w = src_rect->width; + pp_avs_context->src_h = src_rect->height; + pp_avs_context->horiz_range = (float)src_rect->width / src_width; + + int dw = (pp_avs_context->src_w - 1) / 16 + 1; + dw = MAX(dw, dst_rect->width + dst_left_edge_extend); + + pp_static_parameter->grf1.pointer_to_inline_parameter = 7; + pp_static_parameter->grf2.avs_wa_enable = 0; /* It is not required on GEN8+ */ + pp_static_parameter->grf2.alpha = 255; + + pp_static_parameter->grf3.sampler_load_horizontal_scaling_step_ratio = (float) pp_avs_context->src_w / dw; + pp_static_parameter->grf4.sampler_load_vertical_scaling_step = (float) src_rect->height / src_height / dst_rect->height; + pp_static_parameter->grf5.sampler_load_vertical_frame_origin = (float) src_rect->y / src_height - + (float) pp_avs_context->dest_y * pp_static_parameter->grf4.sampler_load_vertical_scaling_step; + pp_static_parameter->grf6.sampler_load_horizontal_frame_origin = (float) src_rect->x / src_width - + (float) pp_avs_context->dest_x * pp_avs_context->horiz_range / dw; + + gen7_update_src_surface_uv_offset(ctx, pp_context, dst_surface); + + yuv_to_rgb_coefs = i915_color_standard_to_coefs (i915_filter_to_color_standard (src_surface->flags & + VA_SRC_COLOR_MASK), + &yuv_to_rgb_coefs_size); + memcpy(&pp_static_parameter->grf7, yuv_to_rgb_coefs, yuv_to_rgb_coefs_size); + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +VAStatus +gen8_pp_initialize( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void * filter_param +) +{ + VAStatus va_status; + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + int bo_size; + unsigned int end_offset; + struct pp_module *pp_module; + int static_param_size, inline_param_size; + + dri_bo_unreference(pp_context->surface_state_binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_PP_SURFACES, + 4096); + assert(bo); + pp_context->surface_state_binding_table.bo = bo; + + pp_context->idrt.num_interface_descriptors = 0; + + pp_context->sampler_size = 4 * 4096; + + bo_size = 4096 + pp_context->curbe_size + pp_context->sampler_size + + pp_context->idrt_size; + + dri_bo_unreference(pp_context->dynamic_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "dynamic_state", + bo_size, + 4096); + + assert(bo); + pp_context->dynamic_state.bo = bo; + pp_context->dynamic_state.bo_size = bo_size; + + end_offset = 0; + pp_context->dynamic_state.end_offset = 0; + + /* Constant buffer offset */ + pp_context->curbe_offset = ALIGN(end_offset, 64); + end_offset = pp_context->curbe_offset + pp_context->curbe_size; + + /* Interface descriptor offset */ + pp_context->idrt_offset = ALIGN(end_offset, 64); + end_offset = pp_context->idrt_offset + pp_context->idrt_size; + + /* Sampler state offset */ + pp_context->sampler_offset = ALIGN(end_offset, 64); + end_offset = pp_context->sampler_offset + pp_context->sampler_size; + + /* update the end offset of dynamic_state */ + pp_context->dynamic_state.end_offset = ALIGN(end_offset, 64); + + static_param_size = sizeof(struct gen7_pp_static_parameter); + inline_param_size = sizeof(struct gen7_pp_inline_parameter); + + memset(pp_context->pp_static_parameter, 0, static_param_size); + memset(pp_context->pp_inline_parameter, 0, inline_param_size); + + assert(pp_index >= PP_NULL && pp_index < NUM_PP_MODULES); + pp_context->current_pp = pp_index; + pp_module = &pp_context->pp_modules[pp_index]; + + if (pp_module->initialize) + va_status = pp_module->initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + filter_param); + else + va_status = VA_STATUS_ERROR_UNIMPLEMENTED; + + calculate_boundary_block_mask(pp_context, dst_rect); + + return va_status; +} + +static void +gen8_pp_interface_descriptor_table(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct gen8_interface_descriptor_data *desc; + dri_bo *bo; + int pp_index = pp_context->current_pp; + unsigned char *cc_ptr; + + bo = pp_context->dynamic_state.bo; + + dri_bo_map(bo, 1); + assert(bo->virtual); + cc_ptr = (unsigned char *)bo->virtual + pp_context->idrt_offset; + + desc = (struct gen8_interface_descriptor_data *) cc_ptr + + pp_context->idrt.num_interface_descriptors; + + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = + pp_context->pp_modules[pp_index].kernel.kernel_offset >> 6; /* reloc */ + desc->desc2.single_program_flow = 1; + desc->desc2.floating_point_mode = FLOATING_POINT_IEEE_754; + desc->desc3.sampler_count = 0; /* 1 - 4 samplers used */ + desc->desc3.sampler_state_pointer = pp_context->sampler_offset >> 5; + desc->desc4.binding_table_entry_count = 0; + desc->desc4.binding_table_pointer = (BINDING_TABLE_OFFSET >> 5); + desc->desc5.constant_urb_entry_read_offset = 0; + + desc->desc5.constant_urb_entry_read_length = 8; /* grf 1-8 */ + + dri_bo_unmap(bo); + pp_context->idrt.num_interface_descriptors++; +} + + +static void +gen8_pp_upload_constants(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + unsigned char *constant_buffer; + int param_size; + + assert(sizeof(struct gen7_pp_static_parameter) == 256); + + param_size = sizeof(struct gen7_pp_static_parameter); + + dri_bo_map(pp_context->dynamic_state.bo, 1); + assert(pp_context->dynamic_state.bo->virtual); + constant_buffer = (unsigned char *) pp_context->dynamic_state.bo->virtual + + pp_context->curbe_offset; + + memcpy(constant_buffer, pp_context->pp_static_parameter, param_size); + dri_bo_unmap(pp_context->dynamic_state.bo); + return; +} + +void +gen8_pp_states_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + gen8_pp_interface_descriptor_table(ctx, pp_context); + gen8_pp_upload_constants(ctx, pp_context); +} + +static void +gen6_pp_pipeline_select(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +gen8_pp_state_base_address(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 16); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (16 - 2)); + /* DW1 Generate state address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /* DW4-5. Surface state address */ + OUT_RELOC64(batch, pp_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + + /* DW6-7. Dynamic state address */ + OUT_RELOC64(batch, pp_context->dynamic_state.bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, 0 | BASE_ADDRESS_MODIFY); + + /* DW8. Indirect object address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /* DW10-11. Instruction base address */ + OUT_RELOC64(batch, pp_context->instruction_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); +} + +void +gen8_pp_vfe_state(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, CMD_MEDIA_VFE_STATE | (9 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (pp_context->vfe_gpu_state.max_num_threads - 1) << 16 | + pp_context->vfe_gpu_state.num_urb_entries << 8); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (pp_context->vfe_gpu_state.urb_entry_size) << 16 | + /* URB Entry Allocation Size, in 256 bits unit */ + (pp_context->vfe_gpu_state.curbe_allocation_size)); + /* CURBE Allocation Size, in 256 bits unit */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +void +gen8_interface_descriptor_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 6); + + OUT_BATCH(batch, CMD_MEDIA_STATE_FLUSH); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, CMD_MEDIA_INTERFACE_DESCRIPTOR_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + pp_context->idrt.num_interface_descriptors * sizeof(struct gen8_interface_descriptor_data)); + OUT_BATCH(batch, pp_context->idrt_offset); + ADVANCE_BATCH(batch); +} + +void +gen8_pp_curbe_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + int param_size = 64; + + param_size = sizeof(struct gen7_pp_static_parameter); + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + param_size); + OUT_BATCH(batch, pp_context->curbe_offset); + ADVANCE_BATCH(batch); +} + +void +gen8_pp_object_walker(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = pp_context->batch; + int x, x_steps, y, y_steps; + int param_size, command_length_in_dws, extra_cmd_in_dws; + dri_bo *command_buffer; + unsigned int *command_ptr; + + param_size = sizeof(struct gen7_pp_inline_parameter); + + x_steps = pp_context->pp_x_steps(pp_context->private_context); + y_steps = pp_context->pp_y_steps(pp_context->private_context); + command_length_in_dws = 6 + (param_size >> 2); + extra_cmd_in_dws = 2; + command_buffer = dri_bo_alloc(i965->intel.bufmgr, + "command objects buffer", + (command_length_in_dws + extra_cmd_in_dws) * 4 * x_steps * y_steps + 64, + 4096); + + dri_bo_map(command_buffer, 1); + command_ptr = command_buffer->virtual; + + for (y = 0; y < y_steps; y++) { + for (x = 0; x < x_steps; x++) { + if (!pp_context->pp_set_block_parameter(pp_context, x, y)) { + + *command_ptr++ = (CMD_MEDIA_OBJECT | (command_length_in_dws - 2)); + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + memcpy(command_ptr, pp_context->pp_inline_parameter, param_size); + command_ptr += (param_size >> 2); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + } + } + } + + if ((command_length_in_dws + extra_cmd_in_dws) * x_steps * y_steps % 2 == 0) + *command_ptr++ = 0; + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(command_buffer); + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, command_buffer, + I915_GEM_DOMAIN_COMMAND, 0, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + dri_bo_unreference(command_buffer); + + /* Have to execute the batch buffer here becuase MI_BATCH_BUFFER_END + * will cause control to pass back to ring buffer + */ + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); + intel_batchbuffer_start_atomic(batch, 0x1000); +} + +static void +gen8_pp_pipeline_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_pp_pipeline_select(ctx, pp_context); + gen8_pp_state_base_address(ctx, pp_context); + gen8_pp_vfe_state(ctx, pp_context); + gen8_pp_curbe_load(ctx, pp_context); + gen8_interface_descriptor_load(ctx, pp_context); + gen8_pp_vfe_state(ctx, pp_context); + gen8_pp_object_walker(ctx, pp_context); + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen8_post_processing( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void * filter_param +) +{ + VAStatus va_status; + + va_status = gen8_pp_initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + pp_index, + filter_param); + + if (va_status == VA_STATUS_SUCCESS) { + gen8_pp_states_setup(ctx, pp_context); + gen8_pp_pipeline_setup(ctx, pp_context); + } + + return va_status; +} + +static void +gen8_post_processing_context_finalize(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + dri_bo_unreference(pp_context->surface_state_binding_table.bo); + pp_context->surface_state_binding_table.bo = NULL; + + dri_bo_unreference(pp_context->pp_dn_context.stmm_bo); + pp_context->pp_dn_context.stmm_bo = NULL; + + if (pp_context->instruction_state.bo) { + dri_bo_unreference(pp_context->instruction_state.bo); + pp_context->instruction_state.bo = NULL; + } + + if (pp_context->indirect_state.bo) { + dri_bo_unreference(pp_context->indirect_state.bo); + pp_context->indirect_state.bo = NULL; + } + + if (pp_context->dynamic_state.bo) { + dri_bo_unreference(pp_context->dynamic_state.bo); + pp_context->dynamic_state.bo = NULL; + } + + free(pp_context->pp_static_parameter); + free(pp_context->pp_inline_parameter); + pp_context->pp_static_parameter = NULL; + pp_context->pp_inline_parameter = NULL; +} + +#define VPP_CURBE_ALLOCATION_SIZE 32 + +void +gen8_post_processing_context_common_init(VADriverContextP ctx, + void *data, + struct pp_module *pp_modules, + int num_pp_modules, + struct intel_batchbuffer *batch) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i, kernel_size; + unsigned int kernel_offset, end_offset; + unsigned char *kernel_ptr; + struct pp_module *pp_module; + struct i965_post_processing_context *pp_context = data; + + pp_context->vfe_gpu_state.max_num_threads = 60; + pp_context->vfe_gpu_state.num_urb_entries = 59; + pp_context->vfe_gpu_state.gpgpu_mode = 0; + pp_context->vfe_gpu_state.urb_entry_size = 16 - 1; + pp_context->vfe_gpu_state.curbe_allocation_size = VPP_CURBE_ALLOCATION_SIZE; + + pp_context->intel_post_processing = gen8_post_processing; + pp_context->finalize = gen8_post_processing_context_finalize; + + assert(ARRAY_ELEMS(pp_context->pp_modules) == num_pp_modules); + + memcpy(pp_context->pp_modules, pp_modules, sizeof(pp_context->pp_modules)); + + kernel_size = 4096 ; + + for (i = 0; i < NUM_PP_MODULES; i++) { + pp_module = &pp_context->pp_modules[i]; + + if (pp_module->kernel.bin && pp_module->kernel.size) { + kernel_size += pp_module->kernel.size; + } + } + + pp_context->instruction_state.bo = dri_bo_alloc(i965->intel.bufmgr, + "kernel shader", + kernel_size, + 0x1000); + if (pp_context->instruction_state.bo == NULL) { + WARN_ONCE("failure to allocate the buffer space for kernel shader in VPP\n"); + return; + } + + assert(pp_context->instruction_state.bo); + + + pp_context->instruction_state.bo_size = kernel_size; + pp_context->instruction_state.end_offset = 0; + end_offset = 0; + + dri_bo_map(pp_context->instruction_state.bo, 1); + kernel_ptr = (unsigned char *)(pp_context->instruction_state.bo->virtual); + + for (i = 0; i < NUM_PP_MODULES; i++) { + pp_module = &pp_context->pp_modules[i]; + + kernel_offset = ALIGN(end_offset, 64); + pp_module->kernel.kernel_offset = kernel_offset; + + if (pp_module->kernel.bin && pp_module->kernel.size) { + + memcpy(kernel_ptr + kernel_offset, pp_module->kernel.bin, pp_module->kernel.size); + end_offset = kernel_offset + pp_module->kernel.size; + } + } + + pp_context->instruction_state.end_offset = ALIGN(end_offset, 64); + + dri_bo_unmap(pp_context->instruction_state.bo); + + /* static & inline parameters */ + pp_context->pp_static_parameter = calloc(sizeof(struct gen7_pp_static_parameter), 1); + pp_context->pp_inline_parameter = calloc(sizeof(struct gen7_pp_inline_parameter), 1); + + pp_context->batch = batch; + + pp_context->idrt_size = 5 * sizeof(struct gen8_interface_descriptor_data); + pp_context->curbe_size = 256; + +} + +void +gen8_post_processing_context_init(VADriverContextP ctx, + void *data, + struct intel_batchbuffer *batch) +{ + struct i965_post_processing_context *pp_context = data; + + gen8_post_processing_context_common_init(ctx, data, pp_modules_gen8, ARRAY_ELEMS(pp_modules_gen8), batch); + avs_init_state(&pp_context->pp_avs_context.state, &gen8_avs_config); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.h new file mode 100644 index 000000000..f3c09a80d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_post_processing.h @@ -0,0 +1,88 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _GEN8_POST_PROCESSING_H_ +#define _GEN8_POST_PROCESSING_H_ + +VAStatus pp_null_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +VAStatus +gen8_pp_plx_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +VAStatus +gen8_pp_nv12_blending_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +void +gen8_pp_vfe_state(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); + +void +gen8_interface_descriptor_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); + +void +gen8_pp_curbe_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); + +void +gen8_pp_object_walker(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); + +void +gen8_pp_states_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); + +VAStatus +gen8_pp_initialize(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param); + +void +gen8_post_processing_context_common_init(VADriverContextP ctx, + void *data, + struct pp_module *pp_modules, + int num_pp_modules, + struct intel_batchbuffer *batch); +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_render.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_render.c new file mode 100644 index 000000000..1bfe04cfd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_render.c @@ -0,0 +1,1819 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Eric Anholt + * Keith Packard + * Xiang Haihao + * Zhao Yakui + * + */ + +/* + * Most of rendering codes are ported from xf86-video-intel/src/i965_video.c + */ + +#include +#include +#include +#include +#include + +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_structs.h" +#include "i965_yuv_coefs.h" + +#include "i965_render.h" + +#define SF_KERNEL_NUM_GRF 16 +#define SF_MAX_THREADS 1 + +#define PS_KERNEL_NUM_GRF 48 +#define PS_MAX_THREADS 32 + +/* Programs for Gen8 */ +static const uint32_t sf_kernel_static_gen8[][4] ={ + +}; +static const uint32_t ps_kernel_static_gen8[][4] = { +#include "shaders/render/exa_wm_src_affine.g8b" +#include "shaders/render/exa_wm_src_sample_planar.g8b" +#include "shaders/render/exa_wm_yuv_color_balance.g8b" +#include "shaders/render/exa_wm_yuv_rgb.g8b" +#include "shaders/render/exa_wm_write.g8b" +}; + +static const uint32_t ps_subpic_kernel_static_gen8[][4] = { +#include "shaders/render/exa_wm_src_affine.g8b" +#include "shaders/render/exa_wm_src_sample_argb.g8b" +#include "shaders/render/exa_wm_write.g8b" +}; + + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 + +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET SURFACE_STATE_OFFSET(MAX_RENDER_SURFACES) + +enum { + SF_KERNEL = 0, + PS_KERNEL, + PS_SUBPIC_KERNEL +}; + +static struct i965_kernel render_kernels_gen8[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen8, + sizeof(sf_kernel_static_gen8), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen8, + sizeof(ps_kernel_static_gen8), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen8, + sizeof(ps_subpic_kernel_static_gen8), + NULL + } +}; + +#define URB_VS_ENTRIES 8 +#define URB_VS_ENTRY_SIZE 1 + +#define URB_GS_ENTRIES 0 +#define URB_GS_ENTRY_SIZE 0 + +#define URB_CLIP_ENTRIES 0 +#define URB_CLIP_ENTRY_SIZE 0 + +#define URB_SF_ENTRIES 1 +#define URB_SF_ENTRY_SIZE 2 + +#define URB_CS_ENTRIES 4 +#define URB_CS_ENTRY_SIZE 4 + +static void +gen8_render_set_surface_tiling(struct gen8_surface_state *ss, uint32_t tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +/* Set "Shader Channel Select" for GEN8+ */ +void +gen8_render_set_surface_scs(struct gen8_surface_state *ss) +{ + ss->ss7.shader_chanel_select_r = HSW_SCS_RED; + ss->ss7.shader_chanel_select_g = HSW_SCS_GREEN; + ss->ss7.shader_chanel_select_b = HSW_SCS_BLUE; + ss->ss7.shader_chanel_select_a = HSW_SCS_ALPHA; +} + +static void +gen8_render_set_surface_state( + struct gen8_surface_state *ss, + dri_bo *bo, + unsigned long offset, + int width, + int height, + int pitch, + int format, + unsigned int flags +) +{ + unsigned int tiling; + unsigned int swizzle; + + memset(ss, 0, sizeof(*ss)); + + switch (flags & (VA_TOP_FIELD|VA_BOTTOM_FIELD)) { + case VA_BOTTOM_FIELD: + ss->ss0.vert_line_stride_ofs = 1; + /* fall-through */ + case VA_TOP_FIELD: + ss->ss0.vert_line_stride = 1; + height /= 2; + break; + } + + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + + ss->ss8.base_addr = bo->offset + offset; + + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + + ss->ss3.pitch = pitch - 1; + + /* Always set 1(align 4 mode) per B-spec */ + ss->ss0.vertical_alignment = 1; + ss->ss0.horizontal_alignment = 1; + + dri_bo_get_tiling(bo, &tiling, &swizzle); + gen8_render_set_surface_tiling(ss, tiling); +} + +static void +gen8_render_src_surface_state( + VADriverContextP ctx, + int index, + dri_bo *region, + unsigned long offset, + int w, + int h, + int pitch, + int format, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + + assert(index < MAX_RENDER_SURFACES); + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + gen8_render_set_surface_state(ss, + region, offset, + w, h, + pitch, format, flags); + gen8_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_SAMPLER, 0, + offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state, ss8), + region); + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); + render_state->wm.sampler_count++; +} + +static void +gen8_render_src_surfaces_state( + VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags +) +{ + int region_pitch; + int rw, rh; + dri_bo *region; + + region_pitch = obj_surface->width; + rw = obj_surface->orig_width; + rh = obj_surface->orig_height; + region = obj_surface->bo; + + gen8_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); /* Y */ + gen8_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); + + if (obj_surface->fourcc == VA_FOURCC_Y800) /* single plane for grayscale */ + return; + + if (obj_surface->fourcc == VA_FOURCC_NV12) { + gen8_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); /* UV */ + gen8_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); + } else { + gen8_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* U */ + gen8_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + gen8_render_src_surface_state(ctx, 5, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* V */ + gen8_render_src_surface_state(ctx, 6, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + } +} + +static void +gen8_subpic_render_src_surfaces_state(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + dri_bo *subpic_region; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + struct object_image *obj_image = obj_subpic->obj_image; + + assert(obj_surface); + assert(obj_surface->bo); + subpic_region = obj_image->bo; + /*subpicture surface*/ + gen8_render_src_surface_state(ctx, 1, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); + gen8_render_src_surface_state(ctx, 2, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); +} + +static void +gen8_render_dest_surface_state(VADriverContextP ctx, int index) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + int format; + assert(index < MAX_RENDER_SURFACES); + + if (dest_region->cpp == 2) { + format = I965_SURFACEFORMAT_B5G6R5_UNORM; + } else { + format = I965_SURFACEFORMAT_B8G8R8A8_UNORM; + } + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + gen8_render_set_surface_state(ss, + dest_region->bo, 0, + dest_region->width, dest_region->height, + dest_region->pitch, format, 0); + gen8_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state, ss8), + dest_region->bo); + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + +static void +i965_fill_vertex_buffer( + VADriverContextP ctx, + float tex_coords[4], /* [(u1,v1);(u2,v2)] */ + float vid_coords[4] /* [(x1,y1);(x2,y2)] */ +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + float vb[12]; + + enum { X1, Y1, X2, Y2 }; + + static const unsigned int g_rotation_indices[][6] = { + [VA_ROTATION_NONE] = { X2, Y2, X1, Y2, X1, Y1 }, + [VA_ROTATION_90] = { X2, Y1, X2, Y2, X1, Y2 }, + [VA_ROTATION_180] = { X1, Y1, X2, Y1, X2, Y2 }, + [VA_ROTATION_270] = { X1, Y2, X1, Y1, X2, Y1 }, + }; + + const unsigned int * const rotation_indices = + g_rotation_indices[i965->rotation_attrib->value]; + + vb[0] = tex_coords[rotation_indices[0]]; /* bottom-right corner */ + vb[1] = tex_coords[rotation_indices[1]]; + vb[2] = vid_coords[X2]; + vb[3] = vid_coords[Y2]; + + vb[4] = tex_coords[rotation_indices[2]]; /* bottom-left corner */ + vb[5] = tex_coords[rotation_indices[3]]; + vb[6] = vid_coords[X1]; + vb[7] = vid_coords[Y2]; + + vb[8] = tex_coords[rotation_indices[4]]; /* top-left corner */ + vb[9] = tex_coords[rotation_indices[5]]; + vb[10] = vid_coords[X1]; + vb[11] = vid_coords[Y1]; + + dri_bo_subdata(i965->render_state.vb.vertex_buffer, 0, sizeof(vb), vb); +} + +static void +i965_subpic_render_upload_vertex(VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *output_rect) +{ + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + float tex_coords[4], vid_coords[4]; + VARectangle dst_rect; + + if (obj_subpic->flags & VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD) + dst_rect = obj_subpic->dst_rect; + else { + const float sx = (float)output_rect->width / obj_surface->orig_width; + const float sy = (float)output_rect->height / obj_surface->orig_height; + dst_rect.x = output_rect->x + sx * obj_subpic->dst_rect.x; + dst_rect.y = output_rect->y + sy * obj_subpic->dst_rect.y; + dst_rect.width = sx * obj_subpic->dst_rect.width; + dst_rect.height = sy * obj_subpic->dst_rect.height; + } + + tex_coords[0] = (float)obj_subpic->src_rect.x / obj_subpic->width; + tex_coords[1] = (float)obj_subpic->src_rect.y / obj_subpic->height; + tex_coords[2] = (float)(obj_subpic->src_rect.x + obj_subpic->src_rect.width) / obj_subpic->width; + tex_coords[3] = (float)(obj_subpic->src_rect.y + obj_subpic->src_rect.height) / obj_subpic->height; + + vid_coords[0] = dst_rect.x; + vid_coords[1] = dst_rect.y; + vid_coords[2] = (float)(dst_rect.x + dst_rect.width); + vid_coords[3] = (float)(dst_rect.y + dst_rect.height); + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +static void +i965_render_upload_vertex( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + float tex_coords[4], vid_coords[4]; + int width, height; + + width = obj_surface->orig_width; + height = obj_surface->orig_height; + + tex_coords[0] = (float)src_rect->x / width; + tex_coords[1] = (float)src_rect->y / height; + tex_coords[2] = (float)(src_rect->x + src_rect->width) / width; + tex_coords[3] = (float)(src_rect->y + src_rect->height) / height; + + vid_coords[0] = dest_region->x + dst_rect->x; + vid_coords[1] = dest_region->y + dst_rect->y; + vid_coords[2] = vid_coords[0] + dst_rect->width; + vid_coords[3] = vid_coords[1] + dst_rect->height; + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +static void +i965_render_drawing_rectangle(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_DRAWING_RECTANGLE | 2); + OUT_BATCH(batch, 0x00000000); + OUT_BATCH(batch, (dest_region->width - 1) | (dest_region->height - 1) << 16); + OUT_BATCH(batch, 0x00000000); + ADVANCE_BATCH(batch); +} + +static void +i965_render_upload_image_palette( + VADriverContextP ctx, + struct object_image *obj_image, + unsigned int alpha +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int i; + + assert(obj_image); + + if (!obj_image) + return; + + if (obj_image->image.num_palette_entries == 0) + return; + + BEGIN_BATCH(batch, 1 + obj_image->image.num_palette_entries); + OUT_BATCH(batch, CMD_SAMPLER_PALETTE_LOAD | (obj_image->image.num_palette_entries - 1)); + /*fill palette*/ + //int32_t out[16]; //0-23:color 23-31:alpha + for (i = 0; i < obj_image->image.num_palette_entries; i++) + OUT_BATCH(batch, (alpha << 24) | obj_image->palette[i]); + ADVANCE_BATCH(batch); +} + +static void +gen8_clear_dest_region(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + unsigned int blt_cmd, br13; + int pitch; + + blt_cmd = GEN8_XY_COLOR_BLT_CMD; + br13 = 0xf0 << 16; + pitch = dest_region->pitch; + + if (dest_region->cpp == 4) { + br13 |= BR13_8888; + blt_cmd |= (XY_COLOR_BLT_WRITE_RGB | XY_COLOR_BLT_WRITE_ALPHA); + } else { + assert(dest_region->cpp == 2); + br13 |= BR13_565; + } + + if (dest_region->tiling != I915_TILING_NONE) { + blt_cmd |= XY_COLOR_BLT_DST_TILED; + pitch /= 4; + } + + br13 |= pitch; + + intel_batchbuffer_start_atomic_blt(batch, 24); + BEGIN_BLT_BATCH(batch, 7); + + OUT_BATCH(batch, blt_cmd); + OUT_BATCH(batch, br13); + OUT_BATCH(batch, (dest_region->y << 16) | (dest_region->x)); + OUT_BATCH(batch, ((dest_region->y + dest_region->height) << 16) | + (dest_region->x + dest_region->width)); + OUT_RELOC(batch, dest_region->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0); + OUT_BATCH(batch, 0x0); + OUT_BATCH(batch, 0x0); + ADVANCE_BATCH(batch); + intel_batchbuffer_end_atomic(batch); +} + + +/* + * for GEN8 + */ +#define ALIGNMENT 64 + +static void +gen8_render_initialize(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + dri_bo *bo; + int size; + unsigned int end_offset; + + /* VERTEX BUFFER */ + dri_bo_unreference(render_state->vb.vertex_buffer); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vertex buffer", + 4096, + 4096); + assert(bo); + render_state->vb.vertex_buffer = bo; + + /* WM */ + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_RENDER_SURFACES, + 4096); + assert(bo); + render_state->wm.surface_state_binding_table_bo = bo; + + render_state->curbe_size = 256; + + render_state->wm.sampler_count = 0; + + render_state->sampler_size = MAX_SAMPLERS * sizeof(struct gen8_sampler_state); + + render_state->cc_state_size = sizeof(struct gen6_color_calc_state); + + render_state->cc_viewport_size = sizeof(struct i965_cc_viewport); + + render_state->blend_state_size = sizeof(struct gen8_global_blend_state) + + 16 * sizeof(struct gen8_blend_state_rt); + + render_state->sf_clip_size = 1024; + + render_state->scissor_size = 1024; + + size = ALIGN(render_state->curbe_size, ALIGNMENT) + + ALIGN(render_state->sampler_size, ALIGNMENT) + + ALIGN(render_state->cc_viewport_size, ALIGNMENT) + + ALIGN(render_state->cc_state_size, ALIGNMENT) + + ALIGN(render_state->blend_state_size, ALIGNMENT) + + ALIGN(render_state->sf_clip_size, ALIGNMENT) + + ALIGN(render_state->scissor_size, ALIGNMENT); + + dri_bo_unreference(render_state->dynamic_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "dynamic_state", + size, + 4096); + + render_state->dynamic_state.bo = bo; + + end_offset = 0; + render_state->dynamic_state.end_offset = 0; + + /* Constant buffer offset */ + render_state->curbe_offset = end_offset; + end_offset += ALIGN(render_state->curbe_size, ALIGNMENT); + + /* Sampler_state */ + render_state->sampler_offset = end_offset; + end_offset += ALIGN(render_state->sampler_size, ALIGNMENT); + + /* CC_VIEWPORT_state */ + render_state->cc_viewport_offset = end_offset; + end_offset += ALIGN(render_state->cc_viewport_size, ALIGNMENT); + + /* CC_STATE_state */ + render_state->cc_state_offset = end_offset; + end_offset += ALIGN(render_state->cc_state_size, ALIGNMENT); + + /* Blend_state */ + render_state->blend_state_offset = end_offset; + end_offset += ALIGN(render_state->blend_state_size, ALIGNMENT); + + /* SF_CLIP_state */ + render_state->sf_clip_offset = end_offset; + end_offset += ALIGN(render_state->sf_clip_size, ALIGNMENT); + + /* SCISSOR_state */ + render_state->scissor_offset = end_offset; + end_offset += ALIGN(render_state->scissor_size, ALIGNMENT); + + /* update the end offset of dynamic_state */ + render_state->dynamic_state.end_offset = end_offset; + +} + +static void +gen8_render_sampler(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_sampler_state *sampler_state; + int i; + unsigned char *cc_ptr; + + assert(render_state->wm.sampler_count > 0); + assert(render_state->wm.sampler_count <= MAX_SAMPLERS); + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->sampler_offset; + + sampler_state = (struct gen8_sampler_state *) cc_ptr; + + for (i = 0; i < render_state->wm.sampler_count; i++) { + memset(sampler_state, 0, sizeof(*sampler_state)); + sampler_state->ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss3.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state++; + } + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen8_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_global_blend_state *global_blend_state; + struct gen8_blend_state_rt *blend_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->blend_state_offset; + + global_blend_state = (struct gen8_global_blend_state*) cc_ptr; + + memset(global_blend_state, 0, render_state->blend_state_size); + /* Global blend state + blend_state for Render Target */ + blend_state = (struct gen8_blend_state_rt *)(global_blend_state + 1); + blend_state->blend1.logic_op_enable = 1; + blend_state->blend1.logic_op_func = 0xc; + blend_state->blend1.pre_blend_clamp_enable = 1; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + + +static void +gen8_render_cc_viewport(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_cc_viewport *cc_viewport; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->cc_viewport_offset; + + cc_viewport = (struct i965_cc_viewport *) cc_ptr; + + memset(cc_viewport, 0, sizeof(*cc_viewport)); + + cc_viewport->min_depth = -1.e35; + cc_viewport->max_depth = 1.e35; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen8_render_color_calc_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_color_calc_state *color_calc_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->cc_state_offset; + + color_calc_state = (struct gen6_color_calc_state *) cc_ptr; + + memset(color_calc_state, 0, sizeof(*color_calc_state)); + color_calc_state->constant_r = 1.0; + color_calc_state->constant_g = 0.0; + color_calc_state->constant_b = 1.0; + color_calc_state->constant_a = 1.0; + dri_bo_unmap(render_state->dynamic_state.bo); +} + +#define PI 3.1415926 + +static void +gen8_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + unsigned short *constant_buffer; + unsigned char *cc_ptr; + float *color_balance_base; + float contrast = (float)i965->contrast_attrib->value / DEFAULT_CONTRAST; + float brightness = (float)i965->brightness_attrib->value / 255; /* YUV is float in the shader */ + float hue = (float)i965->hue_attrib->value / 180 * PI; + float saturation = (float)i965->saturation_attrib->value / DEFAULT_SATURATION; + float *yuv_to_rgb; + unsigned int color_flag; + const float* yuv_coefs; + size_t coefs_length; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->curbe_offset; + + constant_buffer = (unsigned short *) cc_ptr; + + if (obj_surface->subsampling == SUBSAMPLE_YUV400) { + assert(obj_surface->fourcc == VA_FOURCC_Y800); + + *constant_buffer = 2; + } else { + if (obj_surface->fourcc == VA_FOURCC_NV12) + *constant_buffer = 1; + else + *constant_buffer = 0; + } + + if (i965->contrast_attrib->value == DEFAULT_CONTRAST && + i965->brightness_attrib->value == DEFAULT_BRIGHTNESS && + i965->hue_attrib->value == DEFAULT_HUE && + i965->saturation_attrib->value == DEFAULT_SATURATION) + constant_buffer[1] = 1; /* skip color balance transformation */ + else + constant_buffer[1] = 0; + + color_balance_base = (float *)constant_buffer + 4; + *color_balance_base++ = contrast; + *color_balance_base++ = brightness; + *color_balance_base++ = cos(hue) * contrast * saturation; + *color_balance_base++ = sin(hue) * contrast * saturation; + + color_flag = flags & VA_SRC_COLOR_MASK; + yuv_to_rgb = (float *)constant_buffer + 8; + + yuv_coefs = i915_color_standard_to_coefs(i915_filter_to_color_standard(color_flag), + &coefs_length); + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen8_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + gen8_render_dest_surface_state(ctx, 0); + gen8_render_src_surfaces_state(ctx, obj_surface, flags); + gen8_render_sampler(ctx); + gen8_render_cc_viewport(ctx); + gen8_render_color_calc_state(ctx); + gen8_render_blend_state(ctx); + gen8_render_upload_constants(ctx, obj_surface, flags); + i965_render_upload_vertex(ctx, obj_surface, src_rect, dst_rect); +} + +static void +gen8_emit_state_base_address(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 16); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (16 - 2)); + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state base address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /*DW4 */ + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, 0); + + /*DW6*/ + /* Dynamic state base address */ + OUT_RELOC(batch, render_state->dynamic_state.bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /*DW8*/ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object base address */ + OUT_BATCH(batch, 0); + + /*DW10 */ + /* Instruction base address */ + OUT_RELOC(batch, render_state->instruction_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /*DW12 */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* General state upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Dynamic state upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Indirect object upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Instruction access upper bound */ + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_cc_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_CC_STATE_POINTERS | (2 - 2)); + OUT_BATCH(batch, (render_state->cc_state_offset + 1)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BLEND_STATE_POINTERS | (2 - 2)); + OUT_BATCH(batch, (render_state->blend_state_offset + 1)); + ADVANCE_BATCH(batch); + +} + +static void +gen8_emit_vertices(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_VERTEX_BUFFERS | (5 - 2)); + OUT_BATCH(batch, + (0 << GEN8_VB0_BUFFER_INDEX_SHIFT) | + (0 << GEN8_VB0_MOCS_SHIFT) | + GEN7_VB0_ADDRESS_MODIFYENABLE | + ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 12 * 4); + ADVANCE_BATCH(batch); + + /* Topology in 3D primitive is overrided by VF_TOPOLOGY command */ + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_VF_TOPOLOGY | (2 - 2)); + OUT_BATCH(batch, + _3DPRIM_RECTLIST); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, CMD_3DPRIMITIVE | (7 - 2)); + OUT_BATCH(batch, + GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL); + OUT_BATCH(batch, 3); /* vertex count per instance */ + OUT_BATCH(batch, 0); /* start vertex offset */ + OUT_BATCH(batch, 1); /* single instance */ + OUT_BATCH(batch, 0); /* start instance location */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_vertex_element_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + int i; + + /* + * The VUE layout + * dword 0-3: pad (0, 0, 0. 0) + * dword 4-7: position (x, y, 1.0, 1.0), + * dword 8-11: texture coordinate 0 (u0, v0, 1.0, 1.0) + */ + + /* Set up our vertex elements, sourced from the single vertex buffer. */ + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | (7 - 2)); + + /* Element state 0. These are 4 dwords of 0 required for the VUE format. + * We don't really know or care what they do. + */ + + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_3_SHIFT)); + + /* offset 8: X, Y -> {x, y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + + /* offset 0: u,v -> {U, V, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + + /* Disable instancing for all vertex elements. */ + for (i = 0; i < 3; i++) { + OUT_BATCH(batch, GEN8_3DSTATE_VF_INSTANCING | (3 - 2)); + OUT_BATCH(batch, i); + OUT_BATCH(batch, 0); + } + + /* Disable system-generated values. */ + OUT_BATCH(batch, GEN8_3DSTATE_VF_SGVS | (2 - 2)); + OUT_BATCH(batch, 0); +} + +static void +gen8_emit_vs_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* disable VS constant buffer */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_VS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 0 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 1 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 2 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 3 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN6_3DSTATE_VS | (9 - 2)); + OUT_BATCH(batch, 0); /* without VS kernel */ + OUT_BATCH(batch, 0); + /* VS shader dispatch flag */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6. VS shader GRF and URB buffer definition */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + +} + +/* + * URB layout on GEN8 + * ---------------------------------------- + * | PS Push Constants (8KB) | VS entries | + * ---------------------------------------- + */ +static void +gen8_emit_urb(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int num_urb_entries = 64; + + /* The minimum urb entries is 64 */ + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Size is 8Kbs and base address is 0Kb */ + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS | (2 - 2)); + /* Size is 8Kbs and base address is 0Kb */ + OUT_BATCH(batch, + (0 << GEN8_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT) | + (8 << GEN8_PUSH_CONSTANT_BUFFER_SIZE_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_VS | (2 - 2)); + OUT_BATCH(batch, + (num_urb_entries << GEN7_URB_ENTRY_NUMBER_SHIFT) | + (4 - 1) << GEN7_URB_ENTRY_SIZE_SHIFT | + (4 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_GS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (5 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_HS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (6 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_DS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (7 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_bypass_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* bypass GS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_GS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 10); + OUT_BATCH(batch, GEN6_3DSTATE_GS | (10 - 2)); + /* GS shader address */ + OUT_BATCH(batch, 0); /* without GS kernel */ + OUT_BATCH(batch, 0); + /* DW3. GS shader dispatch flag */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6. GS shader GRF and URB offset/length */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* disable HS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_HS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN7_3DSTATE_HS | (9 - 2)); + OUT_BATCH(batch, 0); + /*DW2. HS pass-through */ + OUT_BATCH(batch, 0); + /*DW3. HS shader address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /*DW5. HS shader flag. URB offset/length and so on */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable TE */ + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN7_3DSTATE_TE | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable DS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_DS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN7_3DSTATE_DS | (9 - 2)); + /* DW1. DS shader pointer */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW3-5. DS shader dispatch flag.*/ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6-7. DS shader pass-through, GRF,URB offset/Length,Thread Number*/ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW8. DS shader output URB */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable STREAMOUT */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_STREAMOUT | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_invarient_states(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_3D); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_MULTISAMPLE | (2 - 2)); + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER | + GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1); /* 1 sample/pixel */ + ADVANCE_BATCH(batch); + + /* Update 3D Multisample pattern */ + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN8_3DSTATE_SAMPLE_PATTERN | (9 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_SAMPLE_MASK | (2 - 2)); + OUT_BATCH(batch, 1); + ADVANCE_BATCH(batch); + + /* Set system instruction pointer */ + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_STATE_SIP | 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_clip_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_CLIP | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); +} + +static void +gen8_emit_sf_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN8_3DSTATE_RASTER | (5 - 2)); + OUT_BATCH(batch, GEN8_3DSTATE_RASTER_CULL_NONE); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN7_3DSTATE_SBE | (4 - 2)); + OUT_BATCH(batch, + (GEN8_SBE_FORCE_URB_ENTRY_READ_LENGTH) | + (GEN8_SBE_FORCE_URB_ENTRY_READ_OFFSET) | + (1 << GEN7_SBE_NUM_OUTPUTS_SHIFT) | + (1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT) | + (1 << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* SBE for backend setup */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN8_3DSTATE_SBE_SWIZ | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN6_3DSTATE_SF | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_wm_state(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + unsigned int num_samples = 0; + unsigned int max_threads; + + max_threads = i965->intel.device_info->max_wm_threads - 2; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSEXTRA | (2 - 2)); + OUT_BATCH(batch, + (GEN8_PSX_PIXEL_SHADER_VALID | GEN8_PSX_ATTRIBUTE_ENABLE)); + ADVANCE_BATCH(batch); + + if (kernel == PS_KERNEL) { + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSBLEND | (2 - 2)); + OUT_BATCH(batch, + GEN8_PS_BLEND_HAS_WRITEABLE_RT); + ADVANCE_BATCH(batch); + } else if (kernel == PS_SUBPIC_KERNEL) { + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSBLEND | (2 - 2)); + OUT_BATCH(batch, + (GEN8_PS_BLEND_HAS_WRITEABLE_RT | + GEN8_PS_BLEND_COLOR_BUFFER_BLEND_ENABLE | + (I965_BLENDFACTOR_SRC_ALPHA << GEN8_PS_BLEND_SRC_ALPHA_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_INV_SRC_ALPHA << GEN8_PS_BLEND_DST_ALPHA_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_SRC_ALPHA << GEN8_PS_BLEND_SRC_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_INV_SRC_ALPHA << GEN8_PS_BLEND_DST_BLEND_FACTOR_SHIFT))); + ADVANCE_BATCH(batch); + } + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_WM | (2 - 2)); + OUT_BATCH(batch, + GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_PS | (11 - 2)); + OUT_BATCH(batch, URB_CS_ENTRY_SIZE); + OUT_BATCH(batch, 0); + /*DW3-4. Constant buffer 0 */ + OUT_BATCH(batch, render_state->curbe_offset); + OUT_BATCH(batch, 0); + + /*DW5-10. Constant buffer 1-3 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 12); + OUT_BATCH(batch, GEN7_3DSTATE_PS | (12 - 2)); + /* PS shader address */ + OUT_BATCH(batch, render_state->render_kernels[kernel].kernel_offset); + + OUT_BATCH(batch, 0); + /* DW3. PS shader flag .Binding table cnt/sample cnt */ + OUT_BATCH(batch, + (1 << GEN7_PS_SAMPLER_COUNT_SHIFT) | + (5 << GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT) | + GEN7_PS_VECTOR_MASK_ENABLE); + /* DW4-5. Scatch space */ + OUT_BATCH(batch, 0); /* scratch space base offset */ + OUT_BATCH(batch, 0); + /* DW6. PS shader threads. */ + OUT_BATCH(batch, + ((max_threads - 1) << GEN8_PS_MAX_THREADS_SHIFT) | num_samples | + GEN7_PS_PUSH_CONSTANT_ENABLE | + GEN7_PS_16_DISPATCH_ENABLE); + /* DW7. PS shader GRF */ + OUT_BATCH(batch, + (6 << GEN7_PS_DISPATCH_START_GRF_SHIFT_0)); + OUT_BATCH(batch, 0); /* kernel 1 pointer */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* kernel 2 pointer */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS | (2 - 2)); + OUT_BATCH(batch, BINDING_TABLE_OFFSET); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_depth_buffer_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, GEN7_3DSTATE_DEPTH_BUFFER | (8 - 2)); + OUT_BATCH(batch, + (I965_DEPTHFORMAT_D32_FLOAT << 18) | + (I965_SURFACE_NULL << 29)); + /* DW2-3. Depth Buffer Address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW4-7. Surface structure */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Update the Hier Depth buffer */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_HIER_DEPTH_BUFFER | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Update the stencil buffer */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_STENCIL_BUFFER | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN7_3DSTATE_CLEAR_PARAMS | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_depth_stencil_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN8_3DSTATE_WM_DEPTH_STENCIL | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_wm_hz_op(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN8_3DSTATE_WM_HZ_OP | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_viewport_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC | (2 - 2)); + OUT_BATCH(batch, render_state->cc_viewport_offset); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen8_emit_sampler_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS | (2 - 2)); + OUT_BATCH(batch, render_state->sampler_offset); + ADVANCE_BATCH(batch); +} + + +static void +gen7_emit_drawing_rectangle(VADriverContextP ctx) +{ + i965_render_drawing_rectangle(ctx); +} + +static void +gen8_render_emit_states(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen8_emit_invarient_states(ctx); + gen8_emit_state_base_address(ctx); + gen8_emit_viewport_state_pointers(ctx); + gen8_emit_urb(ctx); + gen8_emit_cc_state_pointers(ctx); + gen8_emit_sampler_state_pointers(ctx); + gen8_emit_wm_hz_op(ctx); + gen8_emit_bypass_state(ctx); + gen8_emit_vs_state(ctx); + gen8_emit_clip_state(ctx); + gen8_emit_sf_state(ctx); + gen8_emit_depth_stencil_state(ctx); + gen8_emit_wm_state(ctx, kernel); + gen8_emit_depth_buffer_state(ctx); + gen7_emit_drawing_rectangle(ctx); + gen8_emit_vertex_element_state(ctx); + gen8_emit_vertices(ctx); + intel_batchbuffer_end_atomic(batch); +} + +static void +gen8_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + gen8_render_initialize(ctx); + gen8_render_setup_states(ctx, obj_surface, src_rect, dst_rect, flags); + gen8_clear_dest_region(ctx); + gen8_render_emit_states(ctx, PS_KERNEL); + intel_batchbuffer_flush(batch); +} + +static void +gen8_subpicture_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_global_blend_state *global_blend_state; + struct gen8_blend_state_rt *blend_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->blend_state_offset; + + global_blend_state = (struct gen8_global_blend_state*) cc_ptr; + + memset(global_blend_state, 0, render_state->blend_state_size); + /* Global blend state + blend_state for Render Target */ + blend_state = (struct gen8_blend_state_rt *)(global_blend_state + 1); + blend_state->blend0.color_blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.src_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.alpha_blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.ia_dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.ia_src_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.colorbuf_blend = 1; + blend_state->blend1.post_blend_clamp_enable = 1; + blend_state->blend1.pre_blend_clamp_enable = 1; + blend_state->blend1.clamp_range = 0; /* clamp range [0, 1] */ + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen8_subpic_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + float *constant_buffer; + float global_alpha = 1.0; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + unsigned char *cc_ptr; + + if (obj_subpic->flags & VA_SUBPICTURE_GLOBAL_ALPHA) { + global_alpha = obj_subpic->global_alpha; + } + + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->curbe_offset; + + constant_buffer = (float *) cc_ptr; + *constant_buffer = global_alpha; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen8_subpicture_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + gen8_render_dest_surface_state(ctx, 0); + gen8_subpic_render_src_surfaces_state(ctx, obj_surface); + gen8_render_sampler(ctx); + gen8_render_cc_viewport(ctx); + gen8_render_color_calc_state(ctx); + gen8_subpicture_render_blend_state(ctx); + gen8_subpic_render_upload_constants(ctx, obj_surface); + i965_subpic_render_upload_vertex(ctx, obj_surface, dst_rect); +} + +static void +gen8_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + assert(obj_subpic); + gen8_render_initialize(ctx); + gen8_subpicture_render_setup_states(ctx, obj_surface, src_rect, dst_rect); + gen8_render_emit_states(ctx, PS_SUBPIC_KERNEL); + i965_render_upload_image_palette(ctx, obj_subpic->obj_image, 0xff); + intel_batchbuffer_flush(batch); +} + +static void +gen8_render_terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + + dri_bo_unreference(render_state->vb.vertex_buffer); + render_state->vb.vertex_buffer = NULL; + + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + render_state->wm.surface_state_binding_table_bo = NULL; + + if (render_state->instruction_state.bo) { + dri_bo_unreference(render_state->instruction_state.bo); + render_state->instruction_state.bo = NULL; + } + + if (render_state->dynamic_state.bo) { + dri_bo_unreference(render_state->dynamic_state.bo); + render_state->dynamic_state.bo = NULL; + } + + if (render_state->indirect_state.bo) { + dri_bo_unreference(render_state->indirect_state.bo); + render_state->indirect_state.bo = NULL; + } + + if (render_state->draw_region) { + dri_bo_unreference(render_state->draw_region->bo); + free(render_state->draw_region); + render_state->draw_region = NULL; + } +} + +bool +gen8_render_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + int i, kernel_size; + unsigned int kernel_offset, end_offset; + unsigned char *kernel_ptr; + struct i965_kernel *kernel; + + render_state->render_put_surface = gen8_render_put_surface; + render_state->render_put_subpicture = gen8_render_put_subpicture; + render_state->render_terminate = gen8_render_terminate; + + memcpy(render_state->render_kernels, render_kernels_gen8, + sizeof(render_state->render_kernels)); + + kernel_size = 4096; + + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + kernel = &render_state->render_kernels[i]; + + if (!kernel->size) + continue; + + kernel_size += kernel->size; + } + + render_state->instruction_state.bo = dri_bo_alloc(i965->intel.bufmgr, + "kernel shader", + kernel_size, + 0x1000); + if (render_state->instruction_state.bo == NULL) { + WARN_ONCE("failure to allocate the buffer space for kernel shader\n"); + return false; + } + + assert(render_state->instruction_state.bo); + + render_state->instruction_state.bo_size = kernel_size; + render_state->instruction_state.end_offset = 0; + end_offset = 0; + + dri_bo_map(render_state->instruction_state.bo, 1); + kernel_ptr = (unsigned char *)(render_state->instruction_state.bo->virtual); + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + kernel = &render_state->render_kernels[i]; + kernel_offset = end_offset; + kernel->kernel_offset = kernel_offset; + + if (!kernel->size) + continue; + + memcpy(kernel_ptr + kernel_offset, kernel->bin, kernel->size); + + end_offset += ALIGN(kernel->size, ALIGNMENT); + } + + render_state->instruction_state.end_offset = end_offset; + + dri_bo_unmap(render_state->instruction_state.bo); + + return true; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_vme.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_vme.c new file mode 100644 index 000000000..edf6060c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen8_vme.c @@ -0,0 +1,1374 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" + +#ifdef SURFACE_STATE_PADDED_SIZE +#undef SURFACE_STATE_PADDED_SIZE +#endif + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define VME_INTRA_SHADER 0 +#define VME_INTER_SHADER 1 +#define VME_BINTER_SHADER 2 + +#define CURBE_ALLOCATION_SIZE 37 /* in 256-bit */ +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) /* in byte, it should be less than or equal to CURBE_ALLOCATION_SIZE * 32 */ +#define CURBE_URB_ENTRY_LENGTH 4 /* in 256-bit, it should be less than or equal to CURBE_TOTAL_DATA_LENGTH / 32 */ + +#define VME_MSG_LENGTH 32 + +static const uint32_t gen8_vme_intra_frame[][4] = { +#include "shaders/vme/intra_frame_gen8.g8b" +}; + +static const uint32_t gen8_vme_inter_frame[][4] = { +#include "shaders/vme/inter_frame_gen8.g8b" +}; + +static const uint32_t gen8_vme_inter_bframe[][4] = { +#include "shaders/vme/inter_bframe_gen8.g8b" +}; + +static struct i965_kernel gen8_vme_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen8_vme_intra_frame, + sizeof(gen8_vme_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen8_vme_inter_frame, + sizeof(gen8_vme_inter_frame), + NULL + }, + { + "VME inter BFrame", + VME_BINTER_SHADER, + gen8_vme_inter_bframe, + sizeof(gen8_vme_inter_bframe), + NULL + } +}; + +static const uint32_t gen8_vme_mpeg2_intra_frame[][4] = { +#include "shaders/vme/intra_frame_gen8.g8b" +}; + +static const uint32_t gen8_vme_mpeg2_inter_frame[][4] = { +#include "shaders/vme/mpeg2_inter_gen8.g8b" +}; + +static struct i965_kernel gen8_vme_mpeg2_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen8_vme_mpeg2_intra_frame, + sizeof(gen8_vme_mpeg2_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen8_vme_mpeg2_inter_frame, + sizeof(gen8_vme_mpeg2_inter_frame), + NULL + }, +}; + +static const uint32_t gen8_vme_vp8_intra_frame[][4] = { +#include "shaders/vme/vp8_intra_frame_gen8.g8b" +}; + +static const uint32_t gen8_vme_vp8_inter_frame[][4] = { +#include "shaders/vme/vp8_inter_frame_gen8.g8b" +}; + +static struct i965_kernel gen8_vme_vp8_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen8_vme_vp8_intra_frame, + sizeof(gen8_vme_vp8_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen8_vme_vp8_inter_frame, + sizeof(gen8_vme_vp8_inter_frame), + NULL + }, +}; + +/* only used for VME source surface state */ +static void +gen8_vme_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_surface2_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen8_vme_media_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_rw_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen8_vme_media_chroma_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_chroma_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen8_vme_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context, + int is_intra, + int width_in_mbs, + int height_in_mbs) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 2; + else + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 24; + /* + * Inter MV . 32-byte Intra search + 16 IME info + 128 IME MV + 32 IME Ref + * + 16 FBR Info + 128 FBR MV + 32 FBR Ref. + * 16 * (2 + 2 * (1 + 8 + 2))= 16 * 24. + */ + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen8_vme_avc_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + gen8_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); + +} + +static void +gen8_vme_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context, + int width_in_mbs, + int height_in_mbs) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 64; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen8_vme_avc_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + gen8_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + +static VAStatus +gen8_vme_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen8_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen8_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen8_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); + + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen8_vme_source_surface_state); + + if (slice_type == SLICE_TYPE_B) + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen8_vme_source_surface_state); + } + + /* VME output */ + gen8_vme_avc_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen8_vme_avc_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen8_vme_interface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen8_interface_descriptor_data *desc; + int i; + dri_bo *bo; + unsigned char *desc_ptr; + + bo = vme_context->gpe_context.dynamic_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset; + + desc = (struct gen8_interface_descriptor_data *)desc_ptr; + + for (i = 0; i < vme_context->vme_kernel_sum; i++) { + struct i965_kernel *kernel; + kernel = &vme_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = kernel->kernel_offset >> 6; + desc->desc3.sampler_count = 0; /* FIXME: */ + desc->desc3.sampler_state_pointer = 0; + desc->desc4.binding_table_entry_count = 1; /* FIXME: */ + desc->desc4.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc5.constant_urb_entry_read_offset = 0; + desc->desc5.constant_urb_entry_read_length = CURBE_URB_ENTRY_LENGTH; + + + desc++; + } + + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen8_vme_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned char *constant_buffer; + unsigned int *vme_state_message; + int mv_num = 32; + + vme_state_message = (unsigned int *)vme_context->vme_state_message; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + if (vme_context->h264_level >= 30) { + mv_num = 16; + + if (vme_context->h264_level >= 31) + mv_num = 8; + } + } else if (encoder_context->codec == CODEC_MPEG2) { + mv_num = 2; + } + + vme_state_message[31] = mv_num; + + dri_bo_map(vme_context->gpe_context.dynamic_state.bo, 1); + assert(vme_context->gpe_context.dynamic_state.bo->virtual); + constant_buffer = (unsigned char *)vme_context->gpe_context.dynamic_state.bo->virtual + + vme_context->gpe_context.curbe_offset; + + /* VME MV/Mb cost table is passed by using const buffer */ + /* Now it uses the fixed search path. So it is constructed directly + * in the GPU shader. + */ + memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); + + dri_bo_unmap(vme_context->gpe_context.dynamic_state.bo); + + return VA_STATUS_SUCCESS; +} + +#define MB_SCOREBOARD_A (1 << 0) +#define MB_SCOREBOARD_B (1 << 1) +#define MB_SCOREBOARD_C (1 << 2) + +/* check whether the mb of (x_index, y_index) is out of bound */ +static inline int loop_in_bounds(int x_index, int y_index, int first_mb, int num_mb, int mb_width, int mb_height) +{ + int mb_index; + if (x_index < 0 || x_index >= mb_width) + return -1; + if (y_index < 0 || y_index >= mb_height) + return -1; + + mb_index = y_index * mb_width + x_index; + if (mb_index < first_mb || mb_index > (first_mb + num_mb)) + return -1; + return 0; +} + +static void +gen8wa_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_row; + int s; + unsigned int *command_ptr; + +#define USE_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int first_mb = pSliceParameter->macroblock_address; + int num_mb = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + + x_outer = first_mb % mb_width; + y_outer = first_mb / mb_width; + mb_row = y_outer; + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = first_mb / mb_width; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen8_vme_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s; + unsigned int *command_ptr; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->macroblock_address; + int slice_mb_number = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub; + int slice_mb_x = pSliceParameter->macroblock_address % mb_width; + for (i = 0; i < slice_mb_number; ) { + int mb_count = i + slice_mb_begin; + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ((encoder_context->quality_level << 24) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + i += 1; + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void gen8_vme_media_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + gen8_gpe_context_init(ctx, &vme_context->gpe_context); + + /* VME output buffer */ + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + /* VME state */ + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; +} + +static void gen8_vme_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + int kernel_shader; + bool allow_hwscore = true; + int s; + unsigned int is_low_quality = (encoder_context->quality_level == ENCODER_LOW_QUALITY); + + if (is_low_quality) + allow_hwscore = false; + else { + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + if ((pSliceParameter->macroblock_address % width_in_mbs)) { + allow_hwscore = false; + break; + } + } + } + + if ((pSliceParameter->slice_type == SLICE_TYPE_I) || + (pSliceParameter->slice_type == SLICE_TYPE_SI)) { + kernel_shader = VME_INTRA_SHADER; + } else if ((pSliceParameter->slice_type == SLICE_TYPE_P) || + (pSliceParameter->slice_type == SLICE_TYPE_SP)) { + kernel_shader = VME_INTER_SHADER; + } else { + kernel_shader = VME_BINTER_SHADER; + if (!allow_hwscore) + kernel_shader = VME_INTER_SHADER; + } + if (allow_hwscore) + gen8wa_vme_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + else + gen8_vme_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen8_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen8_vme_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if (!vme_context->h264_level || + (vme_context->h264_level != pSequenceParameter->level_idc)) { + vme_context->h264_level = pSequenceParameter->level_idc; + } + + intel_vme_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen8_vme_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen8_vme_interface_setup(ctx, encode_state, encoder_context); + //gen8_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context); + gen8_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen8_vme_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + +static VAStatus gen8_vme_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen8_vme_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen8_vme_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_vme_media_init(ctx, encoder_context); + gen8_vme_prepare(ctx, encode_state, encoder_context); + gen8_vme_run(ctx, encode_state, encoder_context); + gen8_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen8_vme_mpeg2_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + gen8_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); +} + +static void +gen8_vme_mpeg2_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + gen8_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + +static VAStatus +gen8_vme_mpeg2_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen8_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen8_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen8_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface->bo != NULL) + gen8_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo != NULL) + gen8_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen8_vme_mpeg2_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen8_vme_mpeg2_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen8wa_vme_mpeg2_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *command_ptr; + +#define MPEG2_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + { + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + int first_mb = 0; + int num_mb = mb_width * mb_height; + + x_outer = 0; + y_outer = 0; + + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = 0; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); + return; +} + +static void +gen8_vme_mpeg2_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s, j; + unsigned int *command_ptr; + + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + int slice_mb_begin = slice_param->macroblock_address; + int slice_mb_number = slice_param->num_macroblocks; + unsigned int mb_intra_ub; + + for (i = 0; i < slice_mb_number;) { + int mb_count = i + slice_mb_begin; + + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ( (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + i += 1; + } + + slice_param++; + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen8_vme_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + bool allow_hwscore = true; + int s; + int kernel_shader; + VAEncPictureParameterBufferMPEG2 *pic_param = NULL; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + int j; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + if (slice_param->macroblock_address % width_in_mbs) { + allow_hwscore = false; + break; + } + } + } + + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + if (pic_param->picture_type == VAEncPictureTypeIntra) { + allow_hwscore = false; + kernel_shader = VME_INTRA_SHADER; + } else { + kernel_shader = VME_INTER_SHADER; + } + + if (allow_hwscore) + gen8wa_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + encoder_context); + else + gen8_vme_mpeg2_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER, + 0, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen8_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen8_vme_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if ((!vme_context->mpeg2_level) || + (vme_context->mpeg2_level != (seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK))) { + vme_context->mpeg2_level = seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK; + } + + + /*Setup all the memory object*/ + gen8_vme_mpeg2_surface_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + gen8_vme_interface_setup(ctx, encode_state, encoder_context); + //gen8_vme_vme_state_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + intel_vme_mpeg2_state_setup(ctx, encode_state, encoder_context); + gen8_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen8_vme_mpeg2_pipeline_programing(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + + return vaStatus; +} + +static VAStatus +gen8_vme_mpeg2_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_vme_media_init(ctx, encoder_context); + gen8_vme_mpeg2_prepare(ctx, encode_state, encoder_context); + gen8_vme_run(ctx, encode_state, encoder_context); + gen8_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen8_vme_vp8_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + + gen8_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); +} + +static void +gen8_vme_vp8_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + + gen8_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + +static VAStatus +gen8_vme_vp8_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen8_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen8_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen8_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface->bo != NULL) + gen8_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo != NULL) + gen8_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen8_vme_vp8_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen8_vme_vp8_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen8_vme_vp8_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + int kernel_shader = (is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER); + + gen8wa_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen8_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen8_vme_vp8_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncPictureParameterBufferVP8 *pPicParameter = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + int is_intra = !pPicParameter->pic_flags.bits.frame_type; + + /* update vp8 mbmv cost */ + intel_vme_vp8_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen8_vme_vp8_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen8_vme_interface_setup(ctx, encode_state, encoder_context); + gen8_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen8_vme_vp8_pipeline_programing(ctx, encode_state, is_intra, encoder_context); + + return vaStatus; +} + +static VAStatus +gen8_vme_vp8_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen8_vme_media_init(ctx, encoder_context); + gen8_vme_vp8_prepare(ctx, encode_state, encoder_context); + gen8_vme_run(ctx, encode_state, encoder_context); + gen8_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen8_vme_context_destroy(void *context) +{ + struct gen6_vme_context *vme_context = context; + + gen8_gpe_context_destroy(&vme_context->gpe_context); + + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + if (vme_context->vme_state_message) { + free(vme_context->vme_state_message); + vme_context->vme_state_message = NULL; + } + + free(vme_context); +} + +Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = NULL; + struct i965_kernel *vme_kernel_list = NULL; + int i965_kernel_num; + + switch (encoder_context->codec) { + case CODEC_H264: + case CODEC_H264_MVC: + vme_kernel_list = gen8_vme_kernels; + encoder_context->vme_pipeline = gen8_vme_pipeline; + i965_kernel_num = sizeof(gen8_vme_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_MPEG2: + vme_kernel_list = gen8_vme_mpeg2_kernels; + encoder_context->vme_pipeline = gen8_vme_mpeg2_pipeline; + i965_kernel_num = sizeof(gen8_vme_mpeg2_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_JPEG: + //JPEG encode doesnt have vme. So, set the corresponding fields to NULL. + encoder_context->vme_context = NULL; + encoder_context->vme_pipeline = NULL; + encoder_context->vme_context_destroy = NULL; + break; + + case CODEC_VP8: + vme_kernel_list = gen8_vme_vp8_kernels; + encoder_context->vme_pipeline = gen8_vme_vp8_pipeline; + i965_kernel_num = sizeof(gen8_vme_vp8_kernels) / sizeof(struct i965_kernel); + break; + + default: + /* never get here */ + assert(0); + + break; + } + + //If the codec is JPEG, bypass VME + if(encoder_context->codec != CODEC_JPEG) { + vme_context = calloc(1, sizeof(struct gen6_vme_context)); + assert(vme_context); + vme_context->vme_kernel_sum = i965_kernel_num; + vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6; + vme_context->gpe_context.curbe_size = CURBE_TOTAL_DATA_LENGTH; + vme_context->gpe_context.sampler_size = 0; + + + vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + vme_context->gpe_context.vfe_state.num_urb_entries = 64; + vme_context->gpe_context.vfe_state.gpgpu_mode = 0; + vme_context->gpe_context.vfe_state.urb_entry_size = 16; + vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + gen7_vme_scoreboard_init(ctx, vme_context); + + gen8_gpe_load_kernels(ctx, + &vme_context->gpe_context, + vme_kernel_list, + i965_kernel_num); + vme_context->vme_surface2_setup = gen8_gpe_surface2_setup; + vme_context->vme_media_rw_surface_setup = gen8_gpe_media_rw_surface_setup; + vme_context->vme_buffer_suface_setup = gen8_gpe_buffer_suface_setup; + vme_context->vme_media_chroma_surface_setup = gen8_gpe_media_chroma_surface_setup; + + encoder_context->vme_context = vme_context; + encoder_context->vme_context_destroy = gen8_vme_context_destroy; + + vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int)); + } + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.c new file mode 100644 index 000000000..6cca579a5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.c @@ -0,0 +1,1754 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen6_mfc.h" +#include "gen6_vme.h" +#include "intel_media.h" + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define MFC_SOFTWARE_HASWELL 1 + +#define B0_STEP_REV 2 +#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV) + +static const uint32_t gen9_mfc_batchbuffer_avc_intra[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_intra.g9b" +}; + +static const uint32_t gen9_mfc_batchbuffer_avc_inter[][4] = { +#include "shaders/utils/mfc_batchbuffer_avc_inter.g9b" +}; + +static struct i965_kernel gen9_mfc_kernels[] = { + { + "MFC AVC INTRA BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTRA, + gen9_mfc_batchbuffer_avc_intra, + sizeof(gen9_mfc_batchbuffer_avc_intra), + NULL + }, + + { + "MFC AVC INTER BATCHBUFFER ", + MFC_BATCHBUFFER_AVC_INTER, + gen9_mfc_batchbuffer_avc_inter, + sizeof(gen9_mfc_batchbuffer_avc_inter), + NULL + }, +}; + +#define INTER_MODE_MASK 0x03 +#define INTER_8X8 0x03 +#define INTER_16X8 0x01 +#define INTER_8X16 0x02 +#define SUBMB_SHAPE_MASK 0x00FF00 +#define INTER_16X16 0x00 + +#define INTER_MV8 (4 << 20) +#define INTER_MV32 (6 << 20) + +static void +gen9_mfc_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(standard_select == MFX_FORMAT_MPEG2 || + standard_select == MFX_FORMAT_AVC || + standard_select == MFX_FORMAT_VP8); + + BEGIN_BCS_BATCH(batch, 5); + + OUT_BCS_BATCH(batch, MFX_PIPE_MODE_SELECT | (5 - 2)); + OUT_BCS_BATCH(batch, + (MFX_LONG_MODE << 17) | /* Must be long format for encoder */ + (MFD_MODE_VLD << 15) | /* VLD mode */ + (0 << 10) | /* Stream-Out Enable */ + ((!!mfc_context->post_deblocking_output.bo) << 9) | /* Post Deblocking Output */ + ((!!mfc_context->pre_deblocking_output.bo) << 8) | /* Pre Deblocking Output */ + (0 << 6) | /* frame statistics stream-out enable*/ + (0 << 5) | /* not in stitch mode */ + (1 << 4) | /* encoding mode */ + (standard_select << 0)); /* standard select: avc or mpeg2 */ + OUT_BCS_BATCH(batch, + (0 << 7) | /* expand NOA bus flag */ + (0 << 6) | /* disable slice-level clock gating */ + (0 << 5) | /* disable clock gating for NOA */ + (0 << 4) | /* terminate if AVC motion and POC table error occurs */ + (0 << 3) | /* terminate if AVC mbdata error occurs */ + (0 << 2) | /* terminate if AVC CABAC/CAVLC decode error occurs */ + (0 << 1) | + (0 << 0)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_surface_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 6); + + OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + ((mfc_context->surface_state.height - 1) << 18) | + ((mfc_context->surface_state.width - 1) << 4)); + OUT_BCS_BATCH(batch, + (MFX_SURFACE_PLANAR_420_8 << 28) | /* 420 planar YUV surface */ + (1 << 27) | /* must be 1 for interleave U/V, hardware requirement */ + (0 << 22) | /* surface object control state, FIXME??? */ + ((mfc_context->surface_state.w_pitch - 1) << 3) | /* pitch */ + (0 << 2) | /* must be 0 for interleave U/V */ + (1 << 1) | /* must be tiled */ + (I965_TILEWALK_YMAJOR << 0)); /* tile walk, TILEWALK_YMAJOR */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* must be 0 for interleave U/V */ + (mfc_context->surface_state.h_pitch)); /* y offset for U(cb) */ + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_ind_obj_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int vme_size; + + BEGIN_BCS_BATCH(batch, 26); + + OUT_BCS_BATCH(batch, MFX_IND_OBJ_BASE_ADDR_STATE | (26 - 2)); + /* the DW1-3 is for the MFX indirect bistream offset */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + vme_size = vme_context->vme_output.size_block * vme_context->vme_output.num_blocks; + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW6-10 is for MFX Indirect MV Object Base Address */ + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_RELOC(batch, vme_context->vme_output.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, vme_size); + OUT_BCS_BATCH(batch, 0); + + /* the DW11-15 is for MFX IT-COFF. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-20 is for MFX indirect DBLK. Not used on encoder */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW21-25 is for MFC Indirect PAK-BSE Object Base Address for Encoder*/ + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_RELOC(batch, + mfc_context->mfc_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->mfc_indirect_pak_bse_object.end_offset); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_avc_img_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + + BEGIN_BCS_BATCH(batch, 16); + + OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2)); + /*DW1. MB setting of frame */ + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs - 1) & 0xFFFF)); + OUT_BCS_BATCH(batch, + ((height_in_mbs - 1) << 16) | + ((width_in_mbs - 1) << 0)); + /* DW3 QP setting */ + OUT_BCS_BATCH(batch, + (0 << 24) | /* Second Chroma QP Offset */ + (0 << 16) | /* Chroma QP Offset */ + (0 << 14) | /* Max-bit conformance Intra flag */ + (0 << 13) | /* Max Macroblock size conformance Inter flag */ + (pPicParameter->pic_fields.bits.weighted_pred_flag << 12) | /*Weighted_Pred_Flag */ + (pPicParameter->pic_fields.bits.weighted_bipred_idc << 10) | /* Weighted_BiPred_Idc */ + (0 << 8) | /* FIXME: Image Structure */ + (0 << 0) ); /* Current Decoed Image Frame Store ID, reserved in Encode mode */ + OUT_BCS_BATCH(batch, + (0 << 16) | /* Mininum Frame size */ + (0 << 15) | /* Disable reading of Macroblock Status Buffer */ + (0 << 14) | /* Load BitStream Pointer only once, 1 slic 1 frame */ + (0 << 13) | /* CABAC 0 word insertion test enable */ + (1 << 12) | /* MVUnpackedEnable,compliant to DXVA */ + (1 << 10) | /* Chroma Format IDC, 4:2:0 */ + (0 << 8) | /* FIXME: MbMvFormatFlag */ + (pPicParameter->pic_fields.bits.entropy_coding_mode_flag << 7) | /*0:CAVLC encoding mode,1:CABAC*/ + (0 << 6) | /* Only valid for VLD decoding mode */ + (0 << 5) | /* Constrained Intra Predition Flag, from PPS */ + (0 << 4) | /* Direct 8x8 inference flag */ + (pPicParameter->pic_fields.bits.transform_8x8_mode_flag << 3) | /*8x8 or 4x4 IDCT Transform Mode Flag*/ + (1 << 2) | /* Frame MB only flag */ + (0 << 1) | /* MBAFF mode is in active */ + (0 << 0)); /* Field picture flag */ + /* DW5 Trellis quantization */ + OUT_BCS_BATCH(batch, 0); /* Mainly about MB rate control and debug, just ignoring */ + OUT_BCS_BATCH(batch, /* Inter and Intra Conformance Max size limit */ + (0xBB8 << 16) | /* InterMbMaxSz */ + (0xEE8) ); /* IntraMbMaxSz */ + OUT_BCS_BATCH(batch, 0); /* Reserved */ + /* DW8. QP delta */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + OUT_BCS_BATCH(batch, 0); /* Slice QP Delta for bitrate control */ + /* DW10. Bit setting for MB */ + OUT_BCS_BATCH(batch, 0x8C000000); + OUT_BCS_BATCH(batch, 0x00010000); + /* DW12. */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0x02010100); + /* DW14. For short format */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_qm_state(VADriverContextP ctx, + int qm_type, + unsigned int *qm, + int qm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16); + assert(sizeof(*qm) == 4); + memcpy(qm_buffer, qm, qm_length * 4); + + BEGIN_BCS_BATCH(batch, 18); + OUT_BCS_BATCH(batch, MFX_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, qm_type << 0); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_avc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[16] = { + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010 + }; + + gen9_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 12, encoder_context); + gen9_mfc_qm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 12, encoder_context); + gen9_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 16, encoder_context); + gen9_mfc_qm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 16, encoder_context); +} + +static void +gen9_mfc_fqm_state(VADriverContextP ctx, + int fqm_type, + unsigned int *fqm, + int fqm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int fqm_buffer[32]; + + assert(fqm_length <= 32); + assert(sizeof(*fqm) == 4); + memcpy(fqm_buffer, fqm, fqm_length * 4); + + BEGIN_BCS_BATCH(batch, 34); + OUT_BCS_BATCH(batch, MFX_FQM_STATE | (34 - 2)); + OUT_BCS_BATCH(batch, fqm_type << 0); + intel_batchbuffer_data(batch, fqm_buffer, 32 * 4); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_avc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[32] = { + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000 + }; + + gen9_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTRA_MATRIX, qm, 24, encoder_context); + gen9_mfc_fqm_state(ctx, MFX_QM_AVC_4X4_INTER_MATRIX, qm, 24, encoder_context); + gen9_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTRA_MATRIX, qm, 32, encoder_context); + gen9_mfc_fqm_state(ctx, MFX_QM_AVC_8x8_INTER_MATRIX, qm, 32, encoder_context); +} + +static void +gen9_mfc_avc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + if (data_bits_in_last_dw == 0) + data_bits_in_last_dw = 32; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, MFX_INSERT_OBJECT | (lenght_in_dws + 2 - 2)); + OUT_BCS_BATCH(batch, + (0 << 16) | /* always start at offset 0 */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* FIXME: ??? */ + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen9_mfc_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + dri_bo *bo; + int i; + int width_in_mbs = 0; + int height_in_mbs = 0; + int slice_batchbuffer_size; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + width_in_mbs = pSequenceParameter->picture_width_in_mbs; + height_in_mbs = pSequenceParameter->picture_height_in_mbs; + } else { + VAEncSequenceParameterBufferMPEG2 *pSequenceParameter = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + + assert(encoder_context->codec == CODEC_MPEG2); + + width_in_mbs = ALIGN(pSequenceParameter->picture_width, 16) / 16; + height_in_mbs = ALIGN(pSequenceParameter->picture_height, 16) / 16; + } + + slice_batchbuffer_size = 64 * width_in_mbs * height_in_mbs + 4096 + + (SLICE_HEADER + SLICE_TAIL) * encode_state->num_slice_params_ext; + + /*Encode common setup for MFC*/ + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + if (mfc_context->direct_mv_buffers[i].bo != NULL) + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * 64, + 64); + assert(bo); + mfc_context->intra_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + width_in_mbs * height_in_mbs * 16, + 64); + assert(bo); + mfc_context->macroblock_status_buffer.bo = bo; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 4 * width_in_mbs * 64, /* 4 * width_in_mbs * 64 */ + 64); + assert(bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + 2 * width_in_mbs * 64, /* 2 * width_in_mbs * 64 */ + 0x1000); + assert(bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = bo; + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; + + i965_gpe_context_init(ctx, &mfc_context->gpe_context); +} + +static void +gen9_mfc_pipe_buf_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int i; + + BEGIN_BCS_BATCH(batch, 61); + + OUT_BCS_BATCH(batch, MFX_PIPE_BUF_ADDR_STATE | (61 - 2)); + + /* the DW1-3 is for pre_deblocking */ + if (mfc_context->pre_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->pre_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); /* pre output addr */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + /* the DW4-6 is for the post_deblocking */ + + /* post output addr */ + if (mfc_context->post_deblocking_output.bo) + OUT_BCS_RELOC(batch, mfc_context->post_deblocking_output.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for the uncompressed_picture */ + OUT_BCS_RELOC(batch, mfc_context->uncompressed_picture_source.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* uncompressed data */ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW10-12 is for the mb status */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); /* StreamOut data*/ + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW13-15 is for the intra_row_store_scratch */ + OUT_BCS_RELOC(batch, mfc_context->intra_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW16-18 is for the deblocking filter */ + OUT_BCS_RELOC(batch, mfc_context->deblocking_filter_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 19-50 is for Reference pictures*/ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + if ( mfc_context->reference_surfaces[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->reference_surfaces[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + } + + OUT_BCS_BATCH(batch, 0); + + /* The DW 52-54 is for the MB status buffer */ + OUT_BCS_RELOC(batch, mfc_context->macroblock_status_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 55-57 is the ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW 58-60 is the second ILDB buffer */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_mfc_avc_directmode_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + int i; + + BEGIN_BCS_BATCH(batch, 71); + + OUT_BCS_BATCH(batch, MFX_AVC_DIRECTMODE_STATE | (71 - 2)); + + /* Reference frames and Current frames */ + /* the DW1-32 is for the direct MV for reference */ + for(i = 0; i < NUM_MFC_DMV_BUFFERS - 2; i += 2) { + if ( mfc_context->direct_mv_buffers[i].bo != NULL) { + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[i].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, 0); + + /* the DW34-36 is the MV for the current reference */ + OUT_BCS_RELOC(batch, mfc_context->direct_mv_buffers[NUM_MFC_DMV_BUFFERS - 2].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* POL list */ + for(i = 0; i < 32; i++) { + OUT_BCS_BATCH(batch, i/2); + } + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen9_mfc_bsp_buf_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + BEGIN_BCS_BATCH(batch, 10); + + OUT_BCS_BATCH(batch, MFX_BSP_BUF_BASE_ADDR_STATE | (10 - 2)); + OUT_BCS_RELOC(batch, mfc_context->bsd_mpc_row_store_scratch_buffer.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW4-6 is for MPR Row Store Scratch Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + /* the DW7-9 is for Bitplane Read Buffer Base Address */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +static void gen9_mfc_avc_pipeline_picture_programing( VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, MFX_FORMAT_AVC, encoder_context); + mfc_context->set_surface_state(ctx, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + gen9_mfc_pipe_buf_addr_state(ctx, encoder_context); + gen9_mfc_bsp_buf_base_addr_state(ctx, encoder_context); + mfc_context->avc_img_state(ctx, encode_state, encoder_context); + mfc_context->avc_qm_state(ctx, encoder_context); + mfc_context->avc_fqm_state(ctx, encoder_context); + gen9_mfc_avc_directmode_state(ctx, encoder_context); + intel_mfc_avc_ref_idx_state(ctx, encode_state, encoder_context); +} + + +static VAStatus gen9_mfc_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); //run the pipeline + + return VA_STATUS_SUCCESS; +} + + +static VAStatus +gen9_mfc_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size) +{ + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VACodedBufferSegment *coded_buffer_segment; + + vaStatus = i965_MapBuffer(ctx, pPicParameter->coded_buf, (void **)&coded_buffer_segment); + assert(vaStatus == VA_STATUS_SUCCESS); + *encoded_bits_size = coded_buffer_segment->size * 8; + i965_UnmapBuffer(ctx, pPicParameter->coded_buf); + + return VA_STATUS_SUCCESS; +} + + +static void +gen9_mfc_avc_slice_state(VADriverContextP ctx, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int rate_control_enable, + int qp, + struct intel_batchbuffer *batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int beginmb = slice_param->macroblock_address; + int endmb = beginmb + slice_param->num_macroblocks; + int beginx = beginmb % width_in_mbs; + int beginy = beginmb / width_in_mbs; + int nextx = endmb % width_in_mbs; + int nexty = endmb / width_in_mbs; + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + int last_slice = (endmb == (width_in_mbs * height_in_mbs)); + int maxQpN, maxQpP; + unsigned char correct[6], grow, shrink; + int i; + int weighted_pred_idc = 0; + unsigned int luma_log2_weight_denom = slice_param->luma_log2_weight_denom; + unsigned int chroma_log2_weight_denom = slice_param->chroma_log2_weight_denom; + int num_ref_l0 = 0, num_ref_l1 = 0; + + if (batch == NULL) + batch = encoder_context->base.batch; + + if (slice_type == SLICE_TYPE_I) { + luma_log2_weight_denom = 0; + chroma_log2_weight_denom = 0; + } else if (slice_type == SLICE_TYPE_P) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + } else if (slice_type == SLICE_TYPE_B) { + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + num_ref_l0 = pic_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = pic_param->num_ref_idx_l1_active_minus1 + 1; + + if (slice_param->num_ref_idx_active_override_flag) { + num_ref_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (weighted_pred_idc == 2) { + /* 8.4.3 - Derivation process for prediction weights (8-279) */ + luma_log2_weight_denom = 5; + chroma_log2_weight_denom = 5; + } + } + + maxQpN = mfc_context->bit_rate_control_context[slice_type].MaxQpNegModifier; + maxQpP = mfc_context->bit_rate_control_context[slice_type].MaxQpPosModifier; + + for (i = 0; i < 6; i++) + correct[i] = mfc_context->bit_rate_control_context[slice_type].Correct[i]; + + grow = mfc_context->bit_rate_control_context[slice_type].GrowInit + + (mfc_context->bit_rate_control_context[slice_type].GrowResistance << 4); + shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit + + (mfc_context->bit_rate_control_context[slice_type].ShrinkResistance << 4); + + BEGIN_BCS_BATCH(batch, 11);; + + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2) ); + OUT_BCS_BATCH(batch, slice_type); /*Slice Type: I:P:B Slice*/ + + OUT_BCS_BATCH(batch, + (num_ref_l0 << 16) | + (num_ref_l1 << 24) | + (chroma_log2_weight_denom << 8) | + (luma_log2_weight_denom << 0)); + + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag<<29) | /*Direct Prediction Type*/ + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + (qp<<16) | /*Slice Quantization Parameter*/ + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (beginy << 24) | /*First MB X&Y , the begin postion of current slice*/ + (beginx << 16) | + slice_param->macroblock_address ); + OUT_BCS_BATCH(batch, (nexty << 16) | nextx); /*Next slice first MB X&Y*/ + OUT_BCS_BATCH(batch, + (0/*rate_control_enable*/ << 31) | /*in CBR mode RateControlCounterEnable = enable*/ + (1 << 30) | /*ResetRateControlCounter*/ + (0 << 28) | /*RC Triggle Mode = Always Rate Control*/ + (4 << 24) | /*RC Stable Tolerance, middle level*/ + (0/*rate_control_enable*/ << 23) | /*RC Panic Enable*/ + (0 << 22) | /*QP mode, don't modfiy CBP*/ + (0 << 21) | /*MB Type Direct Conversion Enabled*/ + (0 << 20) | /*MB Type Skip Conversion Enabled*/ + (last_slice << 19) | /*IsLastSlice*/ + (0 << 18) | /*BitstreamOutputFlag Compressed BitStream Output Disable Flag 0:enable 1:disable*/ + (1 << 17) | /*HeaderPresentFlag*/ + (1 << 16) | /*SliceData PresentFlag*/ + (1 << 15) | /*TailPresentFlag*/ + (1 << 13) | /*RBSP NAL TYPE*/ + (0 << 12) ); /*CabacZeroWordInsertionEnable*/ + OUT_BCS_BATCH(batch, mfc_context->mfc_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, + (maxQpN << 24) | /*Target QP - 24 is lowest QP*/ + (maxQpP << 16) | /*Target QP + 20 is highest QP*/ + (shrink << 8) | + (grow << 0)); + OUT_BCS_BATCH(batch, + (correct[5] << 20) | + (correct[4] << 16) | + (correct[3] << 12) | + (correct[2] << 8) | + (correct[1] << 4) | + (correct[0] << 0)); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + + +#ifdef MFC_SOFTWARE_HASWELL + +static int +gen9_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y, int end_mb, + int qp,unsigned int *msg, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size, unsigned char max_mb_size, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 12; + unsigned int intra_msg; +#define INTRA_MSG_FLAG (1 << 13) +#define INTRA_MBTYPE_MASK (0x1F0000) + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + intra_msg = msg[0] & 0xC0FF; + intra_msg |= INTRA_MSG_FLAG; + intra_msg |= ((msg[0] & INTRA_MBTYPE_MASK) >> 8); + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + (0 << 24) | /* PackedMvNum, Debug*/ + (0 << 20) | /* No motion vector */ + (1 << 19) | /* CbpDcY */ + (1 << 18) | /* CbpDcU */ + (1 << 17) | /* CbpDcV */ + intra_msg); + + OUT_BCS_BATCH(batch, (0xFFFF << 16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ + + OUT_BCS_BATCH(batch, (0 << 27) | (end_mb << 26) | qp); /* Last MB */ + + /*Stuff for Intra MB*/ + OUT_BCS_BATCH(batch, msg[1]); /* We using Intra16x16 no 4x4 predmode*/ + OUT_BCS_BATCH(batch, msg[2]); + OUT_BCS_BATCH(batch, msg[3]&0xFF); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +static int +gen9_mfc_avc_pak_object_inter(VADriverContextP ctx, int x, int y, int end_mb, int qp, + unsigned int *msg, unsigned int offset, + struct intel_encoder_context *encoder_context, + unsigned char target_mb_size,unsigned char max_mb_size, int slice_type, + struct intel_batchbuffer *batch) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int len_in_dwords = 12; + unsigned int inter_msg = 0; + if (batch == NULL) + batch = encoder_context->base.batch; + { +#define MSG_MV_OFFSET 4 + unsigned int *mv_ptr; + mv_ptr = msg + MSG_MV_OFFSET; + /* MV of VME output is based on 16 sub-blocks. So it is necessary + * to convert them to be compatible with the format of AVC_PAK + * command. + */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X16) { + /* MV[0] and MV[2] are replicated */ + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[6] = mv_ptr[8]; + mv_ptr[7] = mv_ptr[9]; + } else if ((msg[0] & INTER_MODE_MASK) == INTER_16X8) { + /* MV[0] and MV[1] are replicated */ + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } else if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + !(msg[1] & SUBMB_SHAPE_MASK)) { + /* Don't touch MV[0] or MV[1] */ + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + } + } + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, MFC_AVC_PAK_OBJECT | (len_in_dwords - 2)); + + inter_msg = 32; + /* MV quantity */ + if ((msg[0] & INTER_MODE_MASK) == INTER_8X8) { + if (msg[1] & SUBMB_SHAPE_MASK) + inter_msg = 128; + } + OUT_BCS_BATCH(batch, inter_msg); /* 32 MV*/ + OUT_BCS_BATCH(batch, offset); + inter_msg = msg[0] & (0x1F00FFFF); + inter_msg |= INTER_MV8; + inter_msg |= ((1 << 19) | (1 << 18) | (1 << 17)); + if (((msg[0] & INTER_MODE_MASK) == INTER_8X8) && + (msg[1] & SUBMB_SHAPE_MASK)) { + inter_msg |= INTER_MV32; + } + + OUT_BCS_BATCH(batch, inter_msg); + + OUT_BCS_BATCH(batch, (0xFFFF<<16) | (y << 8) | x); /* Code Block Pattern for Y*/ + OUT_BCS_BATCH(batch, 0x000F000F); /* Code Block Pattern */ +#if 0 + if ( slice_type == SLICE_TYPE_B) { + OUT_BCS_BATCH(batch, (0xF<<28) | (end_mb << 26) | qp); /* Last MB */ + } else { + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ + } +#else + OUT_BCS_BATCH(batch, (end_mb << 26) | qp); /* Last MB */ +#endif + + inter_msg = msg[1] >> 8; + /*Stuff for Inter MB*/ + OUT_BCS_BATCH(batch, inter_msg); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]); + OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]); + + /*MaxSizeInWord and TargetSzieInWord*/ + OUT_BCS_BATCH(batch, (max_mb_size << 24) | + (target_mb_size << 16) ); + + OUT_BCS_BATCH(batch, 0x0); + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +#define AVC_INTRA_RDO_OFFSET 4 +#define AVC_INTER_RDO_OFFSET 10 +#define AVC_INTER_MSG_OFFSET 8 +#define AVC_INTER_MV_OFFSET 48 +#define AVC_RDO_MASK 0xFFFF + +static void +gen9_mfc_avc_pipeline_slice_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + unsigned int *msg = NULL, offset = 0; + unsigned char *msg_ptr = NULL; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int i,x,y; + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int is_intra = slice_type == SLICE_TYPE_I; + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + gen9_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, encoder_context, + (rate_control_mode == VA_RC_CBR), qp_slice, slice_batch); + + if ( slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + dri_bo_map(vme_context->vme_output.bo , 1); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + + if (is_intra) { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } else { + msg = (unsigned int *) (msg_ptr + pSliceParameter->macroblock_address * vme_context->vme_output.size_block); + } + + for (i = pSliceParameter->macroblock_address; + i < pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks; i++) { + int last_mb = (i == (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks - 1) ); + x = i % width_in_mbs; + y = i / width_in_mbs; + msg = (unsigned int *) (msg_ptr + i * vme_context->vme_output.size_block); + + if (is_intra) { + assert(msg); + gen9_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + int inter_rdo, intra_rdo; + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + offset = i * vme_context->vme_output.size_block + AVC_INTER_MV_OFFSET; + if (intra_rdo < inter_rdo) { + gen9_mfc_avc_pak_object_intra(ctx, x, y, last_mb, qp, msg, encoder_context, 0, 0, slice_batch); + } else { + msg += AVC_INTER_MSG_OFFSET; + gen9_mfc_avc_pak_object_inter(ctx, x, y, last_mb, qp, msg, offset, encoder_context, 0, 0, pSliceParameter->slice_type, slice_batch); + } + } + } + + dri_bo_unmap(vme_context->vme_output.bo); + + if ( last_slice ) { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 2, 8, + 2, 1, 1, 0, slice_batch); + } else { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 1, 8, + 1, 1, 1, 0, slice_batch); + } + + +} + +static dri_bo * +gen9_mfc_avc_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + gen9_mfc_avc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +#else + +static void +gen9_mfc_batchbuffer_surfaces_input(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + assert(vme_context->vme_output.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(BIND_IDX_VME_OUTPUT), + SURFACE_STATE_OFFSET(BIND_IDX_VME_OUTPUT)); + assert(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->aux_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_SLICE_HEADER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_SLICE_HEADER)); +} + +static void +gen9_mfc_batchbuffer_surfaces_output(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + mfc_context->mfc_batchbuffer_surface.num_blocks = width_in_mbs * height_in_mbs + encode_state->num_slice_params_ext * 8 + 1; + mfc_context->mfc_batchbuffer_surface.size_block = 16 * CMD_LEN_IN_OWORD; /* 3 OWORDs */ + mfc_context->mfc_batchbuffer_surface.pitch = 16; + mfc_context->mfc_batchbuffer_surface.bo = dri_bo_alloc(i965->intel.bufmgr, + "MFC batchbuffer", + mfc_context->mfc_batchbuffer_surface.num_blocks * mfc_context->mfc_batchbuffer_surface.size_block, + 0x1000); + mfc_context->buffer_suface_setup(ctx, + &mfc_context->gpe_context, + &mfc_context->mfc_batchbuffer_surface, + BINDING_TABLE_OFFSET(BIND_IDX_MFC_BATCHBUFFER), + SURFACE_STATE_OFFSET(BIND_IDX_MFC_BATCHBUFFER)); +} + +static void +gen9_mfc_batchbuffer_surfaces_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_mfc_batchbuffer_surfaces_input(ctx, encode_state, encoder_context); + gen9_mfc_batchbuffer_surfaces_output(ctx, encode_state, encoder_context); +} + +static void +gen9_mfc_batchbuffer_idrt_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_interface_descriptor_data *desc; + int i; + dri_bo *bo; + + bo = mfc_context->gpe_context.idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < mfc_context->gpe_context.num_kernels; i++) { + struct i965_kernel *kernel; + + kernel = &mfc_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = (kernel->bo->offset >> 6); + desc->desc2.sampler_count = 0; + desc->desc2.sampler_state_pointer = 0; + desc->desc3.binding_table_entry_count = 2; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + desc->desc4.constant_urb_entry_read_length = 4; + + /*kernel start*/ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*desc) + offsetof(struct gen6_interface_descriptor_data, desc0), + kernel->bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +gen9_mfc_batchbuffer_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + (void)mfc_context; +} + +static void +gen9_mfc_batchbuffer_emit_object_command(struct intel_batchbuffer *batch, + int index, + int head_offset, + int batchbuffer_offset, + int head_size, + int tail_size, + int number_mb_cmds, + int first_object, + int last_object, + int last_slice, + int mb_x, + int mb_y, + int width_in_mbs, + int qp) +{ + BEGIN_BATCH(batch, 12); + + OUT_BATCH(batch, CMD_MEDIA_OBJECT | (12 - 2)); + OUT_BATCH(batch, index); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*inline data */ + OUT_BATCH(batch, head_offset); + OUT_BATCH(batch, batchbuffer_offset); + OUT_BATCH(batch, + head_size << 16 | + tail_size); + OUT_BATCH(batch, + number_mb_cmds << 16 | + first_object << 2 | + last_object << 1 | + last_slice); + OUT_BATCH(batch, + mb_y << 8 | + mb_x); + OUT_BATCH(batch, + qp << 16 | + width_in_mbs); + + ADVANCE_BATCH(batch); +} + +static void +gen9_mfc_avc_batchbuffer_slice_command(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + VAEncSliceParameterBufferH264 *slice_param, + int head_offset, + unsigned short head_size, + unsigned short tail_size, + int batchbuffer_offset, + int qp, + int last_slice) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int total_mbs = slice_param->num_macroblocks; + int number_mb_cmds = 128; + int starting_mb = 0; + int last_object = 0; + int first_object = 1; + int i; + int mb_x, mb_y; + int index = (slice_param->slice_type == SLICE_TYPE_I) ? MFC_BATCHBUFFER_AVC_INTRA : MFC_BATCHBUFFER_AVC_INTER; + + for (i = 0; i < total_mbs / number_mb_cmds; i++) { + last_object = (total_mbs - starting_mb) == number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + + starting_mb += number_mb_cmds; + + gen9_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp); + + if (first_object) { + head_offset += head_size; + batchbuffer_offset += head_size; + } + + if (last_object) { + head_offset += tail_size; + batchbuffer_offset += tail_size; + } + + batchbuffer_offset += number_mb_cmds * CMD_LEN_IN_OWORD; + + first_object = 0; + } + + if (!last_object) { + last_object = 1; + number_mb_cmds = total_mbs % number_mb_cmds; + mb_x = (slice_param->macroblock_address + starting_mb) % width_in_mbs; + mb_y = (slice_param->macroblock_address + starting_mb) / width_in_mbs; + assert(mb_x <= 255 && mb_y <= 255); + starting_mb += number_mb_cmds; + + gen9_mfc_batchbuffer_emit_object_command(batch, + index, + head_offset, + batchbuffer_offset, + head_size, + tail_size, + number_mb_cmds, + first_object, + last_object, + last_slice, + mb_x, + mb_y, + width_in_mbs, + qp); + } +} + +/* + * return size in Owords (16bytes) + */ +static int +gen9_mfc_avc_batchbuffer_slice(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + int batchbuffer_offset) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *slice_batch = mfc_context->aux_batchbuffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[slice_index]->buffer; + int width_in_mbs = (mfc_context->surface_state.width + 15) / 16; + int height_in_mbs = (mfc_context->surface_state.height + 15) / 16; + int last_slice = (pSliceParameter->macroblock_address + pSliceParameter->num_macroblocks) == (width_in_mbs * height_in_mbs); + int qp = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + unsigned int tail_data[] = { 0x0, 0x0 }; + long head_offset; + int old_used = intel_batchbuffer_used_size(slice_batch), used; + unsigned short head_size, tail_size; + int slice_type = intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type); + int qp_slice; + + qp_slice = qp; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + qp_slice = qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + head_offset = old_used / 16; + gen9_mfc_avc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, + encoder_context, + (rate_control_mode == VA_RC_CBR), + qp_slice, + slice_batch); + + if (slice_index == 0) + intel_mfc_avc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + + intel_avc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + head_size = (used - old_used) / 16; + old_used = used; + + /* tail */ + if (last_slice) { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 2, + 8, + 2, + 1, + 1, + 0, + slice_batch); + } else { + mfc_context->insert_object(ctx, + encoder_context, + tail_data, + 1, + 8, + 1, + 1, + 1, + 0, + slice_batch); + } + + intel_batchbuffer_align(slice_batch, 16); /* aligned by an Oword */ + used = intel_batchbuffer_used_size(slice_batch); + tail_size = (used - old_used) / 16; + + gen9_mfc_avc_batchbuffer_slice_command(ctx, + encoder_context, + pSliceParameter, + head_offset, + head_size, + tail_size, + batchbuffer_offset, + qp, + last_slice); + + return head_size + tail_size + pSliceParameter->num_macroblocks * CMD_LEN_IN_OWORD; +} + +static void +gen9_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + int i, size, offset = 0; + + intel_batchbuffer_start_atomic(batch, 0x4000); + gen6_gpe_pipeline_setup(ctx, &mfc_context->gpe_context, batch); + + for ( i = 0; i < encode_state->num_slice_params_ext; i++) { + size = gen9_mfc_avc_batchbuffer_slice(ctx, encode_state, encoder_context, i, offset); + offset += size; + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +static void +gen9_mfc_build_avc_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_mfc_batchbuffer_surfaces_setup(ctx, encode_state, encoder_context); + gen9_mfc_batchbuffer_idrt_setup(ctx, encode_state, encoder_context); + gen9_mfc_batchbuffer_constant_setup(ctx, encode_state, encoder_context); + gen9_mfc_avc_batchbuffer_pipeline(ctx, encode_state, encoder_context); +} + +static dri_bo * +gen9_mfc_avc_hardware_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + + gen9_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context); + dri_bo_reference(mfc_context->mfc_batchbuffer_surface.bo); + + return mfc_context->mfc_batchbuffer_surface.bo; +} + +#endif + +static void +gen9_mfc_avc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + + if ( intel_mfc_interlace_check(ctx, encode_state, encoder_context) ) { + fprintf(stderr, "Current VA driver don't support interlace mode!\n"); + assert(0); + return; + } + +#ifdef MFC_SOFTWARE_HASWELL + slice_batch_bo = gen9_mfc_avc_software_batchbuffer(ctx, encode_state, encoder_context); +#else + slice_batch_bo = gen9_mfc_avc_hardware_batchbuffer(ctx, encode_state, encoder_context); +#endif + + // begin programing + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen9_mfc_avc_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + + +static VAStatus +gen9_mfc_avc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + for (;;) { + gen9_mfc_init(ctx, encode_state, encoder_context); + intel_mfc_avc_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen9_mfc_avc_pipeline_programing(ctx, encode_state, encoder_context); //filling the pipeline + gen9_mfc_run(ctx, encode_state, encoder_context); + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + gen9_mfc_stop(ctx, encode_state, encoder_context, ¤t_frame_bits_size); + sts = intel_mfc_brc_postpack(encode_state, mfc_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + intel_mfc_hrd_context_update(encode_state, mfc_context); + break; + } + else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!mfc_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP)? "overflow": "underflow"); + mfc_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } else { + break; + } + } + + return VA_STATUS_SUCCESS; +} + +static void +gen9_mfc_context_destroy(void *context) +{ + struct gen6_mfc_context *mfc_context = context; + int i; + + dri_bo_unreference(mfc_context->post_deblocking_output.bo); + mfc_context->post_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->pre_deblocking_output.bo); + mfc_context->pre_deblocking_output.bo = NULL; + + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(mfc_context->mfc_indirect_pak_bse_object.bo); + mfc_context->mfc_indirect_pak_bse_object.bo = NULL; + + for (i = 0; i < NUM_MFC_DMV_BUFFERS; i++){ + dri_bo_unreference(mfc_context->direct_mv_buffers[i].bo); + mfc_context->direct_mv_buffers[i].bo = NULL; + } + + dri_bo_unreference(mfc_context->intra_row_store_scratch_buffer.bo); + mfc_context->intra_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->macroblock_status_buffer.bo); + mfc_context->macroblock_status_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_row_store_scratch_buffer.bo); + mfc_context->deblocking_filter_row_store_scratch_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->bsd_mpc_row_store_scratch_buffer.bo); + mfc_context->bsd_mpc_row_store_scratch_buffer.bo = NULL; + + + for (i = 0; i < MAX_MFC_REFERENCE_SURFACES; i++){ + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + i965_gpe_context_destroy(&mfc_context->gpe_context); + + dri_bo_unreference(mfc_context->mfc_batchbuffer_surface.bo); + mfc_context->mfc_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = NULL; + + free(mfc_context); +} + +static VAStatus gen9_mfc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + vaStatus = gen9_mfc_avc_encode_picture(ctx, encode_state, encoder_context); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +Bool gen9_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = NULL; + +#if MFC_SOFTWARE_HASWELL + if ((encoder_context->codec == CODEC_H264) || + (encoder_context->codec == CODEC_H264_MVC)) { + return gen8_mfc_context_init(ctx, encoder_context); + } +#endif + + if ((encoder_context->codec == CODEC_VP8) || + (encoder_context->codec == CODEC_MPEG2)) + return gen8_mfc_context_init(ctx, encoder_context); + + mfc_context = calloc(1, sizeof(struct gen6_mfc_context)); + assert(mfc_context); + mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + mfc_context->gpe_context.idrt.max_entries = MAX_GPE_KERNELS; + mfc_context->gpe_context.idrt.entry_size = sizeof(struct gen6_interface_descriptor_data); + + mfc_context->gpe_context.curbe.length = 32 * 4; + + mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + mfc_context->gpe_context.vfe_state.num_urb_entries = 16; + mfc_context->gpe_context.vfe_state.gpgpu_mode = 0; + mfc_context->gpe_context.vfe_state.urb_entry_size = 59 - 1; + mfc_context->gpe_context.vfe_state.curbe_allocation_size = 37 - 1; + + i965_gpe_load_kernels(ctx, + &mfc_context->gpe_context, + gen9_mfc_kernels, + NUM_MFC_KERNEL); + + mfc_context->pipe_mode_select = gen9_mfc_pipe_mode_select; + mfc_context->set_surface_state = gen9_mfc_surface_state; + mfc_context->ind_obj_base_addr_state = gen9_mfc_ind_obj_base_addr_state; + mfc_context->avc_img_state = gen9_mfc_avc_img_state; + mfc_context->avc_qm_state = gen9_mfc_avc_qm_state; + mfc_context->avc_fqm_state = gen9_mfc_avc_fqm_state; + mfc_context->insert_object = gen9_mfc_avc_insert_object; + mfc_context->buffer_suface_setup = gen8_gpe_buffer_suface_setup; + + encoder_context->mfc_context = mfc_context; + encoder_context->mfc_context_destroy = gen9_mfc_context_destroy; + encoder_context->mfc_pipeline = gen9_mfc_pipeline; + encoder_context->mfc_brc_prepare = intel_mfc_brc_prepare; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.h new file mode 100644 index 000000000..f7dc57249 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc.h @@ -0,0 +1,288 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Qu Pengfei + * + */ + +#ifndef GEN9_MFC_H +#define GEN9_MFC_H + +#include +#include +#include + +#include "i965_gpe_utils.h" + +struct encode_state; + +#define MAX_HCP_REFERENCE_SURFACES 8 +#define NUM_HCP_CURRENT_COLLOCATED_MV_TEMPORAL_BUFFERS 9 + +#define INTRA_MB_FLAG_MASK 0x00002000 + +/* The space required for slice header SLICE_STATE + header. + * Is it enough? */ +#define SLICE_HEADER 80 + +/* the space required for slice tail. */ +#define SLICE_TAIL 16 + +#define __SOFTWARE__ 0 + +#define HCP_BATCHBUFFER_HEVC_INTRA 0 +#define HCP_BATCHBUFFER_HEVC_INTER 1 +#define NUM_HCP_KERNEL 2 + +#define BIND_IDX_VME_OUTPUT 0 +#define BIND_IDX_HCP_SLICE_HEADER 1 +#define BIND_IDX_HCP_BATCHBUFFER 2 + +#define CMD_LEN_IN_OWORD 4 + +struct gen9_hcpe_context { + struct { + unsigned int width; + unsigned int height; + unsigned int w_pitch; + unsigned int h_pitch; + } surface_state; + + //HCP_PIPE_BUF_ADDR_STATE + + struct { + dri_bo *bo; + } deblocking_filter_line_buffer; //OUTPUT: reconstructed picture with deblocked + + struct { + dri_bo *bo; + } deblocking_filter_tile_line_buffer; //OUTPUT: reconstructed picture with deblocked + + struct { + dri_bo *bo; + } deblocking_filter_tile_column_buffer; //OUTPUT: reconstructed picture with deblocked + + struct { + dri_bo *bo; + } uncompressed_picture_source; //INPUT: original compressed image + + struct { + dri_bo *bo; + } metadata_line_buffer; //INTERNAL:metadata + + struct { + dri_bo *bo; + } metadata_tile_line_buffer; //INTERNAL:metadata + + struct { + dri_bo *bo; + } metadata_tile_column_buffer; //INTERNAL:metadata + + struct { + dri_bo *bo; + } sao_line_buffer; //INTERNAL:SAO not used in skylake + + struct { + dri_bo *bo; + } sao_tile_line_buffer; //INTERNAL:SAO not used in skylake + + struct { + dri_bo *bo; + } sao_tile_column_buffer; //INTERNAL:SAO not used in skylake + + struct { + dri_bo *bo; + } current_collocated_mv_temporal_buffer[NUM_HCP_CURRENT_COLLOCATED_MV_TEMPORAL_BUFFERS]; // + + struct { + dri_bo *bo; + } reference_surfaces[MAX_HCP_REFERENCE_SURFACES]; //INTERNAL: refrence surfaces + + //HCP_IND_OBJ_BASE_ADDR_STATE + struct { + dri_bo *bo; + } hcp_indirect_cu_object; //INPUT: the cu' mv info + + struct { + dri_bo *bo; + int offset; + int end_offset; + } hcp_indirect_pak_bse_object; //OUTPUT: the compressed bitstream + + //Bit rate tracking context + struct { + unsigned int QpPrimeY; + unsigned int MaxQpNegModifier; + unsigned int MaxQpPosModifier; + unsigned char MaxSizeInWord; + unsigned char TargetSizeInWord; + unsigned char Correct[6]; + unsigned char GrowInit; + unsigned char GrowResistance; + unsigned char ShrinkInit; + unsigned char ShrinkResistance; + + unsigned int target_mb_size; + unsigned int target_frame_size; + } bit_rate_control_context[3]; //INTERNAL: for I, P, B frames + + struct { + int mode; + int gop_nums[3]; + int target_frame_size[3]; // I,P,B + double bits_per_frame; + double qpf_rounding_accumulator; + + double saved_bps; + double saved_fps; + int saved_intra_period; + int saved_ip_period; + int saved_idr_period; + } brc; + + struct { + double current_buffer_fullness; + double target_buffer_fullness; + double buffer_capacity; + unsigned int buffer_size; + unsigned int violation_noted; + } hrd; + + //HRD control context + struct { + int i_bit_rate_value; // scale? + int i_cpb_size_value; // scale? + + int i_initial_cpb_removal_delay; + int i_cpb_removal_delay; + + int i_frame_number; + + int i_initial_cpb_removal_delay_length; + int i_cpb_removal_delay_length; + int i_dpb_output_delay_length; + } vui_hrd; + + // picture width and height + struct { + uint16_t picture_width_in_samples; + uint16_t picture_height_in_samples; + uint16_t picture_width_in_ctbs; + uint16_t picture_height_in_ctbs; + uint16_t picture_width_in_min_cb_minus1; + uint16_t picture_height_in_min_cb_minus1; + uint16_t picture_width_in_mbs; /* to use on skylake */ + uint16_t picture_height_in_mbs;/* to sue on skylake */ + uint8_t ctb_size; + uint8_t min_cb_size; + } pic_size; + + VAQMatrixBufferHEVC iq_matrix_hevc; + + struct i965_gpe_context gpe_context; + struct i965_buffer_surface hcp_batchbuffer_surface; + struct intel_batchbuffer *aux_batchbuffer; + struct i965_buffer_surface aux_batchbuffer_surface; + + void (*pipe_mode_select)(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context); + void (*set_surface_state)(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + void (*ind_obj_base_addr_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*fqm_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*qm_state)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context); + void (*pic_state)(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + void (*insert_object)(VADriverContextP ctx, + struct intel_encoder_context *encoder_context, + unsigned int *insert_data, + int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, + int is_last_header, int is_end_of_slice, + int emulation_flag, + struct intel_batchbuffer *batch); + void (*buffer_suface_setup)(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +}; + +VAStatus gen9_hcpe_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +/* HEVC BRC */ +extern int intel_hcpe_update_hrd(struct encode_state *encode_state, + struct gen9_hcpe_context *hcpe_context, + int frame_bits); + +extern int intel_hcpe_brc_postpack(struct encode_state *encode_state, + struct gen9_hcpe_context *hcpe_context, + int frame_bits); + +extern void intel_hcpe_hrd_context_update(struct encode_state *encode_state, + struct gen9_hcpe_context *hcpe_context); + +extern int intel_hcpe_interlace_check(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void intel_hcpe_brc_prepare(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +/* HEVC HCP pipeline */ +extern void intel_hcpe_hevc_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch); + +extern VAStatus intel_hcpe_hevc_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void +intel_hcpe_hevc_ref_idx_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + +extern void +intel_hevc_slice_insert_packed_data(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch); + +extern +Bool gen9_hcpe_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +void gen9_hcpe_context_destroy(void *context); + +#endif /* GEN9_MFC_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc_hevc.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc_hevc.c new file mode 100644 index 000000000..ba154588e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfc_hevc.c @@ -0,0 +1,2637 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Qu Pengfei + * + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "i965_encoder_utils.h" +#include "gen9_mfc.h" +#include "gen6_vme.h" +#include "intel_media.h" + +typedef enum _gen6_brc_status { + BRC_NO_HRD_VIOLATION = 0, + BRC_UNDERFLOW = 1, + BRC_OVERFLOW = 2, + BRC_UNDERFLOW_WITH_MAX_QP = 3, + BRC_OVERFLOW_WITH_MIN_QP = 4, +} gen6_brc_status; + +/* BRC define */ +#define BRC_CLIP(x, min, max) \ + { \ + x = ((x > (max)) ? (max) : ((x < (min)) ? (min) : x)); \ + } + +#define BRC_P_B_QP_DIFF 4 +#define BRC_I_P_QP_DIFF 2 +#define BRC_I_B_QP_DIFF (BRC_I_P_QP_DIFF + BRC_P_B_QP_DIFF) + +#define BRC_PWEIGHT 0.6 /* weight if P slice with comparison to I slice */ +#define BRC_BWEIGHT 0.25 /* weight if B slice with comparison to I slice */ + +#define BRC_QP_MAX_CHANGE 5 /* maximum qp modification */ +#define BRC_CY 0.1 /* weight for */ +#define BRC_CX_UNDERFLOW 5. +#define BRC_CX_OVERFLOW -4. + +#define BRC_PI_0_5 1.5707963267948966192313216916398 + +/* intel buffer write */ +#define ALLOC_ENCODER_BUFFER(gen_buffer, string, size) do { \ + dri_bo_unreference(gen_buffer->bo); \ + gen_buffer->bo = dri_bo_alloc(i965->intel.bufmgr, \ + string, \ + size, \ + 0x1000); \ + assert(gen_buffer->bo); \ + } while (0); + + +#define OUT_BUFFER_X(buf_bo, is_target, ma) do { \ + if (buf_bo) { \ + OUT_BCS_RELOC(batch, \ + buf_bo, \ + I915_GEM_DOMAIN_INSTRUCTION, \ + is_target ? I915_GEM_DOMAIN_INSTRUCTION : 0, \ + 0); \ + } else { \ + OUT_BCS_BATCH(batch, 0); \ + } \ + OUT_BCS_BATCH(batch, 0); \ + if (ma) \ + OUT_BCS_BATCH(batch, 0); \ + } while (0) + +#define OUT_BUFFER_MA_TARGET(buf_bo) OUT_BUFFER_X(buf_bo, 1, 1) +#define OUT_BUFFER_MA_REFERENCE(buf_bo) OUT_BUFFER_X(buf_bo, 0, 1) +#define OUT_BUFFER_NMA_TARGET(buf_bo) OUT_BUFFER_X(buf_bo, 1, 0) +#define OUT_BUFFER_NMA_REFERENCE(buf_bo) OUT_BUFFER_X(buf_bo, 0, 0) + + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define HCP_SOFTWARE_SKYLAKE 1 + +#define NUM_HCPE_KERNEL 2 + +#define INTER_MODE_MASK 0x03 +#define INTER_8X8 0x03 +#define INTER_16X8 0x01 +#define INTER_8X16 0x02 +#define SUBMB_SHAPE_MASK 0x00FF00 + +#define INTER_MV8 (4 << 20) +#define INTER_MV32 (6 << 20) + + +/* HEVC */ + +/* utils */ +static void +hevc_gen_default_iq_matrix_encoder(VAQMatrixBufferHEVC *iq_matrix) +{ + /* Flat_4x4_16 */ + memset(&iq_matrix->scaling_lists_4x4, 16, sizeof(iq_matrix->scaling_lists_4x4)); + + /* Flat_8x8_16 */ + memset(&iq_matrix->scaling_lists_8x8, 16, sizeof(iq_matrix->scaling_lists_8x8)); + + /* Flat_16x16_16 */ + memset(&iq_matrix->scaling_lists_16x16, 16, sizeof(iq_matrix->scaling_lists_16x16)); + + /* Flat_32x32_16 */ + memset(&iq_matrix->scaling_lists_32x32, 16, sizeof(iq_matrix->scaling_lists_32x32)); + + /* Flat_16x16_dc_16 */ + memset(&iq_matrix->scaling_list_dc_16x16, 16, sizeof(iq_matrix->scaling_list_dc_16x16)); + + /* Flat_32x32_dc_16 */ + memset(&iq_matrix->scaling_list_dc_32x32, 16, sizeof(iq_matrix->scaling_list_dc_32x32)); +} + +/* HEVC picture and slice state related */ + +static void +gen9_hcpe_pipe_mode_select(VADriverContextP ctx, + int standard_select, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + assert(standard_select == HCP_CODEC_HEVC); + + BEGIN_BCS_BATCH(batch, 4); + + OUT_BCS_BATCH(batch, HCP_PIPE_MODE_SELECT | (4 - 2)); + OUT_BCS_BATCH(batch, + (standard_select << 5) | + (0 << 3) | /* disable Pic Status / Error Report */ + HCP_CODEC_SELECT_ENCODE); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpe_surface_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct object_surface *obj_surface = encode_state->reconstructed_object; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + + /* to do */ + unsigned int y_cb_offset; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (1 << 28) | /* surface id */ + (mfc_context->surface_state.w_pitch - 1)); /* pitch - 1 */ + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + y_cb_offset); + ADVANCE_BCS_BATCH(batch); + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (0 << 28) | /* surface id */ + (mfc_context->surface_state.w_pitch - 1)); /* pitch - 1 */ + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + y_cb_offset); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpe_pipe_buf_addr_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + GenHevcSurface *hcpe_hevc_surface; + dri_bo *bo; + unsigned int i; + + BEGIN_BCS_BATCH(batch, 95); + + OUT_BCS_BATCH(batch, HCP_PIPE_BUF_ADDR_STATE | (95 - 2)); + + obj_surface = encode_state->reconstructed_object; + assert(obj_surface && obj_surface->bo); + hcpe_hevc_surface = obj_surface->private_data; + assert(hcpe_hevc_surface && hcpe_hevc_surface->motion_vector_temporal_bo); + + OUT_BUFFER_MA_TARGET(obj_surface->bo); /* DW 1..3 */ + OUT_BUFFER_MA_TARGET(mfc_context->deblocking_filter_line_buffer.bo);/* DW 4..6 */ + OUT_BUFFER_MA_TARGET(mfc_context->deblocking_filter_tile_line_buffer.bo); /* DW 7..9 */ + OUT_BUFFER_MA_TARGET(mfc_context->deblocking_filter_tile_column_buffer.bo); /* DW 10..12 */ + OUT_BUFFER_MA_TARGET(mfc_context->metadata_line_buffer.bo); /* DW 13..15 */ + OUT_BUFFER_MA_TARGET(mfc_context->metadata_tile_line_buffer.bo); /* DW 16..18 */ + OUT_BUFFER_MA_TARGET(mfc_context->metadata_tile_column_buffer.bo); /* DW 19..21 */ + OUT_BUFFER_MA_TARGET(mfc_context->sao_line_buffer.bo); /* DW 22..24 */ + OUT_BUFFER_MA_TARGET(mfc_context->sao_tile_line_buffer.bo); /* DW 25..27 */ + OUT_BUFFER_MA_TARGET(mfc_context->sao_tile_column_buffer.bo); /* DW 28..30 */ + OUT_BUFFER_MA_TARGET(hcpe_hevc_surface->motion_vector_temporal_bo); /* DW 31..33 */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 34..36, reserved */ + + /* here only max 8 reference allowed */ + for (i = 0; i < ARRAY_ELEMS(mfc_context->reference_surfaces); i++) { + bo = mfc_context->reference_surfaces[i].bo; + + if (bo) { + OUT_BUFFER_NMA_REFERENCE(bo); + } else + OUT_BUFFER_NMA_REFERENCE(NULL); + } + OUT_BCS_BATCH(batch, 0); /* DW 53, memory address attributes */ + + OUT_BUFFER_MA_TARGET(mfc_context->uncompressed_picture_source.bo); /* DW 54..56, uncompressed picture source */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 57..59, ignore */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 60..62, ignore */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 63..65, ignore */ + + for (i = 0; i < ARRAY_ELEMS(mfc_context->current_collocated_mv_temporal_buffer) - 1; i++) { + bo = mfc_context->current_collocated_mv_temporal_buffer[i].bo; + + if (bo) { + OUT_BUFFER_NMA_REFERENCE(bo); + } else + OUT_BUFFER_NMA_REFERENCE(NULL); + } + OUT_BCS_BATCH(batch, 0); /* DW 82, memory address attributes */ + + OUT_BUFFER_MA_TARGET(NULL); /* DW 83..85, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 86..88, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 89..91, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 92..94, ignore for HEVC */ + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpe_ind_obj_base_addr_state(VADriverContextP ctx, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + + /* to do */ + BEGIN_BCS_BATCH(batch, 14); + + OUT_BCS_BATCH(batch, HCP_IND_OBJ_BASE_ADDR_STATE | (14 - 2)); + OUT_BUFFER_MA_REFERENCE(NULL); /* DW 1..3 igonre for encoder*/ + OUT_BUFFER_NMA_REFERENCE(NULL); /* DW 4..5, Upper Bound */ + OUT_BUFFER_MA_TARGET(mfc_context->hcp_indirect_cu_object.bo); /* DW 6..8, CU */ + /* DW 9..11, PAK-BSE */ + OUT_BCS_RELOC(batch, + mfc_context->hcp_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->hcp_indirect_pak_bse_object.offset); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_RELOC(batch, + mfc_context->hcp_indirect_pak_bse_object.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + mfc_context->hcp_indirect_pak_bse_object.end_offset); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpe_fqm_state(VADriverContextP ctx, + int size_id, + int color_component, + int pred_type, + int dc, + unsigned int *fqm, + int fqm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int fqm_buffer[32]; + + assert(fqm_length <= 32); + assert(sizeof(*fqm) == 4); + memset(fqm_buffer, 0, sizeof(fqm_buffer)); + memcpy(fqm_buffer, fqm, fqm_length * 4); + + BEGIN_BCS_BATCH(batch, 34); + + OUT_BCS_BATCH(batch, HCP_FQM_STATE | (34 - 2)); + OUT_BCS_BATCH(batch, + dc << 16 | + color_component << 3 | + size_id << 1 | + pred_type); + intel_batchbuffer_data(batch, fqm_buffer, 32 * 4); + + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen9_hcpe_hevc_fqm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + unsigned int qm[32] = { + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000, + 0x10001000, 0x10001000, 0x10001000, 0x10001000 + }; + + gen9_hcpe_fqm_state(ctx, + 0, 0, 0, 0, + qm, 8, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 0, 0, 1, 0, + qm, 8, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 1, 0, 0, 0, + qm, 32, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 1, 0, 1, 0, + qm, 32, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 2, 0, 0, 0x1000, + qm, 0, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 2, 0, 1, 0x1000, + qm, 0, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 3, 0, 0, 0x1000, + qm, 0, + encoder_context); + gen9_hcpe_fqm_state(ctx, + 3, 0, 1, 0x1000, + qm, 0, + encoder_context); +} + +static void +gen9_hcpe_qm_state(VADriverContextP ctx, + int size_id, + int color_component, + int pred_type, + int dc, + unsigned int *qm, + int qm_length, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + unsigned int qm_buffer[16]; + + assert(qm_length <= 16); + assert(sizeof(*qm) == 4); + memset(qm_buffer, 0, sizeof(qm_buffer)); + memcpy(qm_buffer, qm, qm_length * 4); + + BEGIN_BCS_BATCH(batch, 18); + + OUT_BCS_BATCH(batch, HCP_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, + dc << 5 | + color_component << 3 | + size_id << 1 | + pred_type); + intel_batchbuffer_data(batch, qm_buffer, 16 * 4); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpe_hevc_qm_state(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + + int i; + + unsigned int qm[16] = { + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010, + 0x10101010, 0x10101010, 0x10101010, 0x10101010 + }; + + for (i = 0; i < 6; i++) { + gen9_hcpe_qm_state(ctx, + 0, i % 3, i / 3, 0, + qm, 4, + encoder_context); + } + + for (i = 0; i < 6; i++) { + gen9_hcpe_qm_state(ctx, + 1, i % 3, i / 3, 0, + qm, 16, + encoder_context); + } + + for (i = 0; i < 6; i++) { + gen9_hcpe_qm_state(ctx, + 2, i % 3, i / 3, 16, + qm, 16, + encoder_context); + } + + for (i = 0; i < 2; i++) { + gen9_hcpe_qm_state(ctx, + 3, 0, i % 2, 16, + qm, 16, + encoder_context); + } +} + +static void +gen9_hcpe_hevc_pic_state(VADriverContextP ctx, struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + VAEncPictureParameterBufferHEVC *pic_param ; + VAEncSequenceParameterBufferHEVC *seq_param ; + + int max_pcm_size_minus3 = 0, min_pcm_size_minus3 = 0; + int pcm_sample_bit_depth_luma_minus1 = 7, pcm_sample_bit_depth_chroma_minus1 = 7; + /* + * 7.4.3.1 + * + * When not present, the value of loop_filter_across_tiles_enabled_flag + * is inferred to be equal to 1. + */ + int loop_filter_across_tiles_enabled_flag = 0; + pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + seq_param = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + + int log2_cu_size = seq_param->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = seq_param->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + double rawctubits = 8 * 3 * ctb_size * ctb_size / 2.0; + int maxctubits = (int)(5 * rawctubits / 3) ; + double bitrate = seq_param->bits_per_second * 1.0; + double framebitrate = bitrate / 32 / 8; //32 byte unit + int minframebitrate = 0;//(int) (framebitrate * 3 / 10); + int maxframebitrate = (int)(framebitrate * 10 / 10); + int maxdeltaframebitrate = 0x1c5c; //(int) (framebitrate * 1/ 10); + int mindeltaframebitrate = 0; //(int) (framebitrate * 1/ 10); + int minframesize = 0;//(int)(rawframebits * 1/50); + + if (seq_param->seq_fields.bits.pcm_enabled_flag) { + max_pcm_size_minus3 = seq_param->log2_max_pcm_luma_coding_block_size_minus3; + min_pcm_size_minus3 = seq_param->log2_min_pcm_luma_coding_block_size_minus3; + pcm_sample_bit_depth_luma_minus1 = (seq_param->pcm_sample_bit_depth_luma_minus1 & 0x0f); + pcm_sample_bit_depth_chroma_minus1 = (seq_param->pcm_sample_bit_depth_chroma_minus1 & 0x0f); + } else { + max_pcm_size_minus3 = MIN(seq_param->log2_min_luma_coding_block_size_minus3 + seq_param->log2_diff_max_min_luma_coding_block_size, 2); + } + + if (pic_param->pic_fields.bits.tiles_enabled_flag) + loop_filter_across_tiles_enabled_flag = pic_param->pic_fields.bits.loop_filter_across_tiles_enabled_flag; + + /* set zero for encoder */ + loop_filter_across_tiles_enabled_flag = 0; + + BEGIN_BCS_BATCH(batch, 19); + + OUT_BCS_BATCH(batch, HCP_PIC_STATE | (19 - 2)); + + OUT_BCS_BATCH(batch, + mfc_context->pic_size.picture_height_in_min_cb_minus1 << 16 | + 0 << 14 | + mfc_context->pic_size.picture_width_in_min_cb_minus1); + OUT_BCS_BATCH(batch, + max_pcm_size_minus3 << 10 | + min_pcm_size_minus3 << 8 | + (seq_param->log2_min_transform_block_size_minus2 + + seq_param->log2_diff_max_min_transform_block_size) << 6 | + seq_param->log2_min_transform_block_size_minus2 << 4 | + (seq_param->log2_min_luma_coding_block_size_minus3 + + seq_param->log2_diff_max_min_luma_coding_block_size) << 2 | + seq_param->log2_min_luma_coding_block_size_minus3); + OUT_BCS_BATCH(batch, 0); /* DW 3, ignored */ + OUT_BCS_BATCH(batch, + 0 << 27 | /* CU packet structure is 0 for SKL */ + seq_param->seq_fields.bits.strong_intra_smoothing_enabled_flag << 26 | + pic_param->pic_fields.bits.transquant_bypass_enabled_flag << 25 | + seq_param->seq_fields.bits.amp_enabled_flag << 23 | + pic_param->pic_fields.bits.transform_skip_enabled_flag << 22 | + 0 << 21 | /* 0 for encoder !(pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_BOTTOM_FIELD)*/ + 0 << 20 | /* 0 for encoder !!(pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_FIELD_PIC)*/ + pic_param->pic_fields.bits.weighted_pred_flag << 19 | + pic_param->pic_fields.bits.weighted_bipred_flag << 18 | + pic_param->pic_fields.bits.tiles_enabled_flag << 17 | /* 0 for encoder */ + pic_param->pic_fields.bits.entropy_coding_sync_enabled_flag << 16 | + loop_filter_across_tiles_enabled_flag << 15 | + pic_param->pic_fields.bits.sign_data_hiding_enabled_flag << 13 | /* 0 for encoder */ + pic_param->log2_parallel_merge_level_minus2 << 10 | /* 0 for encoder */ + pic_param->pic_fields.bits.constrained_intra_pred_flag << 9 | /* 0 for encoder */ + seq_param->seq_fields.bits.pcm_loop_filter_disabled_flag << 8 | + (pic_param->diff_cu_qp_delta_depth & 0x03) << 6 | /* 0 for encoder */ + pic_param->pic_fields.bits.cu_qp_delta_enabled_flag << 5 | /* 0 for encoder */ + seq_param->seq_fields.bits.pcm_enabled_flag << 4 | + seq_param->seq_fields.bits.sample_adaptive_offset_enabled_flag << 3 | /* 0 for encoder */ + 0); + OUT_BCS_BATCH(batch, + 0 << 27 | /* 8 bit only for encoder */ + 0 << 24 | /* 8 bit only for encoder */ + pcm_sample_bit_depth_luma_minus1 << 20 | + pcm_sample_bit_depth_chroma_minus1 << 16 | + seq_param->max_transform_hierarchy_depth_inter << 13 | /* for encoder */ + seq_param->max_transform_hierarchy_depth_intra << 10 | /* for encoder */ + (pic_param->pps_cr_qp_offset & 0x1f) << 5 | + (pic_param->pps_cb_qp_offset & 0x1f)); + OUT_BCS_BATCH(batch, + 0 << 29 | /* must be 0 for encoder */ + maxctubits); /* DW 6, max LCU bit size allowed for encoder */ + OUT_BCS_BATCH(batch, + 0 << 31 | /* frame bitrate max unit */ + maxframebitrate); /* DW 7, frame bitrate max 0:13 */ + OUT_BCS_BATCH(batch, + 0 << 31 | /* frame bitrate min unit */ + minframebitrate); /* DW 8, frame bitrate min 0:13 */ + OUT_BCS_BATCH(batch, + maxdeltaframebitrate << 16 | /* frame bitrate max delta ,help to select deltaQP of slice*/ + mindeltaframebitrate); /* DW 9,(0,14) frame bitrate min delta ,help to select deltaQP of slice*/ + OUT_BCS_BATCH(batch, 0x07050402); /* DW 10, frame delta qp max */ + OUT_BCS_BATCH(batch, 0x0d0b0908); + OUT_BCS_BATCH(batch, 0); /* DW 12, frame delta qp min */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0x04030200); /* DW 14, frame delta qp max range */ + OUT_BCS_BATCH(batch, 0x100c0806); /* DW 15 */ + OUT_BCS_BATCH(batch, 0x04030200); /* DW 16, frame delta qp min range */ + OUT_BCS_BATCH(batch, 0x100c0806); + OUT_BCS_BATCH(batch, + 0 << 30 | + minframesize); /* DW 18, min frame size units */ + + ADVANCE_BCS_BATCH(batch); +} + + +static void +gen9_hcpe_hevc_insert_object(VADriverContextP ctx, struct intel_encoder_context *encoder_context, + unsigned int *insert_data, int lenght_in_dws, int data_bits_in_last_dw, + int skip_emul_byte_count, int is_last_header, int is_end_of_slice, int emulation_flag, + struct intel_batchbuffer *batch) +{ + if (batch == NULL) + batch = encoder_context->base.batch; + + if (data_bits_in_last_dw == 0) + data_bits_in_last_dw = 32; + + BEGIN_BCS_BATCH(batch, lenght_in_dws + 2); + + OUT_BCS_BATCH(batch, HCP_INSERT_PAK_OBJECT | (lenght_in_dws + 2 - 2)); + OUT_BCS_BATCH(batch, + (0 << 31) | /* inline payload */ + (0 << 16) | /* always start at offset 0 */ + (0 << 15) | /* HeaderLengthExcludeFrmSize */ + (data_bits_in_last_dw << 8) | + (skip_emul_byte_count << 4) | + (!!emulation_flag << 3) | + ((!!is_last_header) << 2) | + ((!!is_end_of_slice) << 1) | + (0 << 0)); /* Reserved */ + intel_batchbuffer_data(batch, insert_data, lenght_in_dws * 4); + + ADVANCE_BCS_BATCH(batch); +} +/* +// To be do: future +static uint8_t +intel_get_ref_idx_state_1(VAPictureHEVC *va_pic, unsigned int frame_store_id) +{ + unsigned int is_long_term = + !!(va_pic->flags & VA_PICTURE_HEVC_LONG_TERM_REFERENCE); + unsigned int is_top_field = + !!!(va_pic->flags & VA_PICTURE_HEVC_BOTTOM_FIELD); + unsigned int is_bottom_field = + !!(va_pic->flags & VA_PICTURE_HEVC_BOTTOM_FIELD); + + return ((is_long_term << 6) | + ((is_top_field ^ is_bottom_field ^ 1) << 5) | + (frame_store_id << 1) | + ((is_top_field ^ 1) & is_bottom_field)); +} +*/ +static void +gen9_hcpe_ref_idx_state_1(struct intel_batchbuffer *batch, + int list, + struct intel_encoder_context *encoder_context, + struct encode_state *encode_state) +{ + int i; + VAEncPictureParameterBufferHEVC *pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + uint8_t num_ref_minus1 = (list ? slice_param->num_ref_idx_l1_active_minus1 : slice_param->num_ref_idx_l0_active_minus1); + VAPictureHEVC *ref_list = (list ? slice_param->ref_pic_list1 : slice_param->ref_pic_list0); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct object_surface *obj_surface; + int frame_index; + + int ref_idx_l0 = (vme_context->ref_index_in_mb[list] & 0xff); + + if (ref_idx_l0 > 3) { + WARN_ONCE("ref_idx_l0 is out of range\n"); + ref_idx_l0 = 0; + } + + obj_surface = vme_context->used_reference_objects[list]; + frame_index = -1; + for (i = 0; i < 16; i++) { + if (obj_surface && + obj_surface == encode_state->reference_objects[i]) { + frame_index = i; + break; + } + } + if (frame_index == -1) { + WARN_ONCE("RefPicList 0 or 1 is not found in DPB!\n"); + } + + if(num_ref_minus1 == 0 && frame_index == 1 && list == 0){ + WARN_ONCE("Input ref list is Wrong !\n"); + } + + BEGIN_BCS_BATCH(batch, 18); + + OUT_BCS_BATCH(batch, HCP_REF_IDX_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, + num_ref_minus1 << 1 | + list); + + for (i = 0; i < 16; i++) { + if (i < MIN((num_ref_minus1 + 1), 15)) { + VAPictureHEVC *ref_pic = &ref_list[i]; + VAPictureHEVC *curr_pic = &pic_param->decoded_curr_pic; + + OUT_BCS_BATCH(batch, + 1 << 15 | /* bottom_field_flag 0 */ + 0 << 14 | /* field_pic_flag 0 */ + !!(ref_pic->flags & VA_PICTURE_HEVC_LONG_TERM_REFERENCE) << 13 | /* short term is 1 */ + 0 << 12 | /* disable WP */ + 0 << 11 | /* disable WP */ + frame_index << 8 | + (CLAMP(-128, 127, curr_pic->pic_order_cnt - ref_pic->pic_order_cnt) & 0xff)); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + ADVANCE_BCS_BATCH(batch); +} + +void +intel_hcpe_hevc_ref_idx_state(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context + ) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + + if (slice_param->slice_type == HEVC_SLICE_I) + return; + + gen9_hcpe_ref_idx_state_1(batch, 0, encoder_context, encode_state); + + if (slice_param->slice_type == HEVC_SLICE_P) + return; + + gen9_hcpe_ref_idx_state_1(batch, 1, encoder_context, encode_state); +} + +static void +gen9_hcpe_hevc_slice_state(VADriverContextP ctx, + VAEncPictureParameterBufferHEVC *pic_param, + VAEncSliceParameterBufferHEVC *slice_param, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *batch) +{ + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int slice_type = slice_param->slice_type; + + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + int width_in_ctb = (pSequenceParameter->pic_width_in_luma_samples + ctb_size - 1) / ctb_size; + int height_in_ctb = (pSequenceParameter->pic_height_in_luma_samples + ctb_size - 1) / ctb_size; + int last_slice = (((slice_param->slice_segment_address + slice_param->num_ctu_in_slice) == (width_in_ctb * height_in_ctb)) ? 1 : 0); + + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + + slice_hor_pos = slice_param->slice_segment_address % width_in_ctb; + slice_ver_pos = slice_param->slice_segment_address / width_in_ctb; + + next_slice_hor_pos = (slice_param->slice_segment_address + slice_param->num_ctu_in_slice) % width_in_ctb; + next_slice_ver_pos = (slice_param->slice_segment_address + slice_param->num_ctu_in_slice) / width_in_ctb; + + /* only support multi slice begin from row start address */ + assert((slice_param->slice_segment_address % width_in_ctb) == 0); + + if (last_slice == 1) { + if (slice_param->slice_segment_address == 0) { + next_slice_hor_pos = 0; + next_slice_ver_pos = height_in_ctb; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = 0; + } + } + + BEGIN_BCS_BATCH(batch, 9); + + OUT_BCS_BATCH(batch, HCP_SLICE_STATE | (9 - 2)); + + OUT_BCS_BATCH(batch, + slice_ver_pos << 16 | + slice_hor_pos); + OUT_BCS_BATCH(batch, + next_slice_ver_pos << 16 | + next_slice_hor_pos); + OUT_BCS_BATCH(batch, + (slice_param->slice_cr_qp_offset & 0x1f) << 17 | + (slice_param->slice_cb_qp_offset & 0x1f) << 12 | + (pic_param->pic_init_qp + slice_param->slice_qp_delta) << 6 | + slice_param->slice_fields.bits.slice_temporal_mvp_enabled_flag << 5 | + slice_param->slice_fields.bits.dependent_slice_segment_flag << 4 | + last_slice << 2 | + slice_type); + OUT_BCS_BATCH(batch, + 0 << 26 | + (slice_param->max_num_merge_cand - 1) << 23 | + slice_param->slice_fields.bits.cabac_init_flag << 22 | + slice_param->luma_log2_weight_denom << 19 | + (slice_param->luma_log2_weight_denom + slice_param->delta_chroma_log2_weight_denom) << 16 | + slice_param->slice_fields.bits.collocated_from_l0_flag << 15 | + (slice_type != HEVC_SLICE_B) << 14 | + slice_param->slice_fields.bits.mvd_l1_zero_flag << 13 | + slice_param->slice_fields.bits.slice_sao_luma_flag << 12 | + slice_param->slice_fields.bits.slice_sao_chroma_flag << 11 | + slice_param->slice_fields.bits.slice_loop_filter_across_slices_enabled_flag << 10 | + (slice_param->slice_beta_offset_div2 & 0xf) << 5 | + (slice_param->slice_tc_offset_div2 & 0xf) << 1 | + slice_param->slice_fields.bits.slice_deblocking_filter_disabled_flag); + OUT_BCS_BATCH(batch, 0); /* DW 5 ,ignore for encoder.*/ + OUT_BCS_BATCH(batch, + 4 << 26 | + 4 << 20 | + 0); + OUT_BCS_BATCH(batch, + 1 << 10 | /* header insertion enable */ + 1 << 9 | /* slice data enable */ + 1 << 8 | /* tail insertion enable, must at end of frame, not slice */ + 1 << 2 | /* RBSP or EBSP, EmulationByteSliceInsertEnable */ + 1 << 1 | /* cabacZeroWordInsertionEnable */ + 0); /* Ignored for decoding */ + OUT_BCS_BATCH(batch, 0); /* PAK-BSE data start offset */ + + ADVANCE_BCS_BATCH(batch); +} + +/* HEVC pipe line related */ +static void gen9_hcpe_hevc_pipeline_picture_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + + mfc_context->pipe_mode_select(ctx, HCP_CODEC_HEVC, encoder_context); + mfc_context->set_surface_state(ctx, encode_state, encoder_context); + gen9_hcpe_pipe_buf_addr_state(ctx, encode_state, encoder_context); + mfc_context->ind_obj_base_addr_state(ctx, encoder_context); + + mfc_context->qm_state(ctx, encoder_context); + mfc_context->fqm_state(ctx, encoder_context); + mfc_context->pic_state(ctx, encode_state, encoder_context); + intel_hcpe_hevc_ref_idx_state(ctx, encode_state, encoder_context); +} + +static void gen9_hcpe_init(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + /* to do */ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + dri_bo *bo; + int i, size = 0; + int slice_batchbuffer_size; + int slice_type = slice_param->slice_type; + int is_inter = (slice_type != HEVC_SLICE_I); + + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + int cu_size = 1 << log2_cu_size; + + int width_in_ctb = ALIGN(pSequenceParameter->pic_width_in_luma_samples , ctb_size) / ctb_size; + int height_in_ctb = ALIGN(pSequenceParameter->pic_height_in_luma_samples, ctb_size) / ctb_size; + int width_in_cu = ALIGN(pSequenceParameter->pic_width_in_luma_samples , cu_size) / cu_size; + int height_in_cu = ALIGN(pSequenceParameter->pic_height_in_luma_samples, cu_size) / cu_size; + int width_in_mb = ALIGN(pSequenceParameter->pic_width_in_luma_samples , 16) / 16; + int height_in_mb = ALIGN(pSequenceParameter->pic_height_in_luma_samples, 16) / 16; + + int num_cu_record = 64; + + if (log2_ctb_size == 5) num_cu_record = 16; + else if (log2_ctb_size == 4) num_cu_record = 4; + else if (log2_ctb_size == 6) num_cu_record = 64; + + /* frame size in samples, cu,ctu, mb */ + mfc_context->pic_size.picture_width_in_samples = pSequenceParameter->pic_width_in_luma_samples; + mfc_context->pic_size.picture_height_in_samples = pSequenceParameter->pic_height_in_luma_samples; + mfc_context->pic_size.ctb_size = ctb_size; + mfc_context->pic_size.picture_width_in_ctbs = width_in_ctb; + mfc_context->pic_size.picture_height_in_ctbs = height_in_ctb; + mfc_context->pic_size.min_cb_size = cu_size; + mfc_context->pic_size.picture_width_in_min_cb_minus1 = width_in_cu - 1; + mfc_context->pic_size.picture_height_in_min_cb_minus1 = height_in_cu - 1; + mfc_context->pic_size.picture_width_in_mbs = width_in_mb; + mfc_context->pic_size.picture_height_in_mbs = height_in_mb; + + slice_batchbuffer_size = 64 * width_in_ctb * width_in_ctb + 4096 + + (SLICE_HEADER + SLICE_TAIL) * encode_state->num_slice_params_ext; + + /*Encode common setup for HCP*/ + /*deblocking */ + dri_bo_unreference(mfc_context->deblocking_filter_line_buffer.bo); + mfc_context->deblocking_filter_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_tile_line_buffer.bo); + mfc_context->deblocking_filter_tile_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->deblocking_filter_tile_column_buffer.bo); + mfc_context->deblocking_filter_tile_column_buffer.bo = NULL; + + /* input source */ + dri_bo_unreference(mfc_context->uncompressed_picture_source.bo); + mfc_context->uncompressed_picture_source.bo = NULL; + + /* metadata */ + dri_bo_unreference(mfc_context->metadata_line_buffer.bo); + mfc_context->metadata_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->metadata_tile_line_buffer.bo); + mfc_context->metadata_tile_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->metadata_tile_column_buffer.bo); + mfc_context->metadata_tile_column_buffer.bo = NULL; + + /* sao */ + dri_bo_unreference(mfc_context->sao_line_buffer.bo); + mfc_context->sao_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->sao_tile_line_buffer.bo); + mfc_context->sao_tile_line_buffer.bo = NULL; + + dri_bo_unreference(mfc_context->sao_tile_column_buffer.bo); + mfc_context->sao_tile_column_buffer.bo = NULL; + + /* mv temporal buffer */ + for (i = 0; i < NUM_HCP_CURRENT_COLLOCATED_MV_TEMPORAL_BUFFERS; i++) { + if (mfc_context->current_collocated_mv_temporal_buffer[i].bo != NULL) + dri_bo_unreference(mfc_context->current_collocated_mv_temporal_buffer[i].bo); + mfc_context->current_collocated_mv_temporal_buffer[i].bo = NULL; + } + + /* reference */ + for (i = 0; i < MAX_HCP_REFERENCE_SURFACES; i++) { + if (mfc_context->reference_surfaces[i].bo != NULL) + dri_bo_unreference(mfc_context->reference_surfaces[i].bo); + mfc_context->reference_surfaces[i].bo = NULL; + } + + /* indirect data CU recording */ + dri_bo_unreference(mfc_context->hcp_indirect_cu_object.bo); + mfc_context->hcp_indirect_cu_object.bo = NULL; + + dri_bo_unreference(mfc_context->hcp_indirect_pak_bse_object.bo); + mfc_context->hcp_indirect_pak_bse_object.bo = NULL; + + /* Current internal buffer for HCP */ + + size = ALIGN(pSequenceParameter->pic_width_in_luma_samples, 32) >> 3; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->deblocking_filter_line_buffer), "line buffer", size); + ALLOC_ENCODER_BUFFER((&mfc_context->deblocking_filter_tile_line_buffer), "tile line buffer", size); + + size = ALIGN(pSequenceParameter->pic_height_in_luma_samples + 6 * width_in_ctb, 32) >> 3; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->deblocking_filter_tile_column_buffer), "tile column buffer", size); + + if (is_inter) { + size = (((pSequenceParameter->pic_width_in_luma_samples + 15) >> 4) * 188 + 9 * width_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_line_buffer), "metadata line buffer", size); + + size = (((pSequenceParameter->pic_width_in_luma_samples + 15) >> 4) * 172 + 9 * width_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_tile_line_buffer), "metadata tile line buffer", size); + + size = (((pSequenceParameter->pic_height_in_luma_samples + 15) >> 4) * 176 + 89 * width_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_tile_column_buffer), "metadata tile column buffer", size); + } else { + size = (pSequenceParameter->pic_width_in_luma_samples + 8 * width_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_line_buffer), "metadata line buffer", size); + + size = (pSequenceParameter->pic_width_in_luma_samples + 16 * width_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_tile_line_buffer), "metadata tile line buffer", size); + + size = (pSequenceParameter->pic_height_in_luma_samples + 8 * height_in_ctb + 1023) >> 9; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->metadata_tile_column_buffer), "metadata tile column buffer", size); + } + + size = ALIGN(((pSequenceParameter->pic_width_in_luma_samples >> 1) + 3 * width_in_ctb), 16) >> 3; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->sao_line_buffer), "sao line buffer", size); + + size = ALIGN(((pSequenceParameter->pic_width_in_luma_samples >> 1) + 6 * width_in_ctb), 16) >> 3; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->sao_tile_line_buffer), "sao tile line buffer", size); + + size = ALIGN(((pSequenceParameter->pic_height_in_luma_samples >> 1) + 6 * height_in_ctb), 16) >> 3; + size <<= 6; + ALLOC_ENCODER_BUFFER((&mfc_context->sao_tile_column_buffer), "sao tile column buffer", size); + + ///////////////////// + dri_bo_unreference(mfc_context->hcp_indirect_cu_object.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "Indirect data CU Buffer", + width_in_ctb * height_in_ctb * num_cu_record * 16 * 4, + 0x1000); + assert(bo); + mfc_context->hcp_indirect_cu_object.bo = bo; + + /* to do pak bse object buffer */ + /* to do current collocated mv temporal buffer */ + + dri_bo_unreference(mfc_context->hcp_batchbuffer_surface.bo); + mfc_context->hcp_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.bo = NULL; + + if (mfc_context->aux_batchbuffer) + intel_batchbuffer_free(mfc_context->aux_batchbuffer); + + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, slice_batchbuffer_size); + mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; + dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); + mfc_context->aux_batchbuffer_surface.pitch = 16; + mfc_context->aux_batchbuffer_surface.num_blocks = mfc_context->aux_batchbuffer->size / 16; + mfc_context->aux_batchbuffer_surface.size_block = 16; +} + +static VAStatus gen9_hcpe_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); //run the pipeline + + return VA_STATUS_SUCCESS; +} + + +static VAStatus +gen9_hcpe_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int *encoded_bits_size) +{ + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + VAEncPictureParameterBufferHEVC *pPicParameter = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VACodedBufferSegment *coded_buffer_segment; + + vaStatus = i965_MapBuffer(ctx, pPicParameter->coded_buf, (void **)&coded_buffer_segment); + assert(vaStatus == VA_STATUS_SUCCESS); + *encoded_bits_size = coded_buffer_segment->size * 8; + i965_UnmapBuffer(ctx, pPicParameter->coded_buf); + + return VA_STATUS_SUCCESS; +} + + +int intel_hevc_find_skipemulcnt(unsigned char *buf, int bits_length) +{ + /* to do */ + int i, found; + int leading_zero_cnt, byte_length, zero_byte; + int nal_unit_type; + int skip_cnt = 0; + +#define NAL_UNIT_TYPE_MASK 0x7e +#define HW_MAX_SKIP_LENGTH 15 + + byte_length = ALIGN(bits_length, 32) >> 3; + + + leading_zero_cnt = 0; + found = 0; + for (i = 0; i < byte_length - 4; i++) { + if (((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 1)) || + ((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 0) && (buf[i + 3] == 1))) { + found = 1; + break; + } + leading_zero_cnt++; + } + if (!found) { + /* warning message is complained. But anyway it will be inserted. */ + WARN_ONCE("Invalid packed header data. " + "Can't find the 000001 start_prefix code\n"); + return 0; + } + i = leading_zero_cnt; + + zero_byte = 0; + if (!((buf[i] == 0) && (buf[i + 1] == 0) && (buf[i + 2] == 1))) + zero_byte = 1; + + skip_cnt = leading_zero_cnt + zero_byte + 3; + + /* the unit header byte is accounted */ + nal_unit_type = (buf[skip_cnt]) & NAL_UNIT_TYPE_MASK; + skip_cnt += 1; + skip_cnt += 1; /* two bytes length of nal headers in hevc */ + + if (nal_unit_type == 14 || nal_unit_type == 20 || nal_unit_type == 21) { + /* more unit header bytes are accounted for MVC/SVC */ + //skip_cnt += 3; + } + if (skip_cnt > HW_MAX_SKIP_LENGTH) { + WARN_ONCE("Too many leading zeros are padded for packed data. " + "It is beyond the HW range.!!!\n"); + } + return skip_cnt; +} + +#ifdef HCP_SOFTWARE_SKYLAKE + +static int +gen9_hcpe_hevc_pak_object(VADriverContextP ctx, int lcu_x, int lcu_y, int isLast_ctb, + struct intel_encoder_context *encoder_context, + int cu_count_in_lcu, unsigned int split_coding_unit_flag, + struct intel_batchbuffer *batch) +{ + int len_in_dwords = 3; + + if (batch == NULL) + batch = encoder_context->base.batch; + + BEGIN_BCS_BATCH(batch, len_in_dwords); + + OUT_BCS_BATCH(batch, HCP_PAK_OBJECT | (len_in_dwords - 2)); + OUT_BCS_BATCH(batch, + (((isLast_ctb > 0) ? 1 : 0) << 31) | /* last ctb?*/ + ((cu_count_in_lcu - 1) << 24) | /* No motion vector */ + split_coding_unit_flag); + + OUT_BCS_BATCH(batch, (lcu_y << 16) | lcu_x); /* LCU for Y*/ + + ADVANCE_BCS_BATCH(batch); + + return len_in_dwords; +} + +#define AVC_INTRA_RDO_OFFSET 4 +#define AVC_INTER_RDO_OFFSET 10 +#define AVC_INTER_MSG_OFFSET 8 +#define AVC_INTER_MV_OFFSET 48 +#define AVC_RDO_MASK 0xFFFF + +#define AVC_INTRA_MODE_MASK 0x30 +#define AVC_INTRA_16X16 0x00 +#define AVC_INTRA_8X8 0x01 +#define AVC_INTRA_4X4 0x02 + +#define AVC_INTER_MODE_MASK 0x03 +#define AVC_INTER_8X8 0x03 +#define AVC_INTER_8X16 0x02 +#define AVC_INTER_16X8 0x01 +#define AVC_INTER_16X16 0x00 +#define AVC_SUBMB_SHAPE_MASK 0x00FF00 + +/* VME output message, write back message */ +#define AVC_INTER_SUBMB_PRE_MODE_MASK 0x00ff0000 +#define AVC_SUBMB_SHAPE_MASK 0x00FF00 + +/* here 1 MB = 1CU = 16x16 */ +static void +gen9_hcpe_hevc_fill_indirect_cu_intra(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int qp, unsigned int *msg, + int ctb_x, int ctb_y, + int mb_x, int mb_y, + int ctb_width_in_mb, int width_in_ctb, int num_cu_record, int slice_type,int cu_index,int index) +{ + /* here cu == mb, so we use mb address as the cu address */ + /* to fill the indirect cu by the vme out */ + static int intra_mode_8x8_avc2hevc[9] = {26, 10, 1, 34, 18, 24, 13, 28, 8}; + static int intra_mode_16x16_avc2hevc[4] = {26, 10, 1, 34}; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + unsigned char * cu_record_ptr = NULL; + unsigned int * cu_msg = NULL; + int ctb_address = (ctb_y * width_in_ctb + ctb_x) * num_cu_record; + int mb_address_in_ctb = 0; + int cu_address = (ctb_address + mb_address_in_ctb + cu_index) * 16 * 4; + int zero = 0; + int is_inter = 0; + int intraMbMode = 0; + int cu_part_mode = 0; + int intraMode[4]; + int inerpred_idc = 0; + int intra_chroma_mode = 5; + int cu_size = 1; + int tu_size = 0x55; + int tu_count = 4; + + if (!is_inter) inerpred_idc = 0xff; + + intraMbMode = (msg[0] & AVC_INTRA_MODE_MASK) >> 4; + + + if (intraMbMode == AVC_INTRA_16X16) { + cu_part_mode = 0; //2Nx2N + intra_chroma_mode = 5; + cu_size = 1; + tu_size = 0x55; + tu_count = 4; + intraMode[0] = intra_mode_16x16_avc2hevc[msg[1] & 0xf]; + intraMode[1] = intra_mode_16x16_avc2hevc[msg[1] & 0xf]; + intraMode[2] = intra_mode_16x16_avc2hevc[msg[1] & 0xf]; + intraMode[3] = intra_mode_16x16_avc2hevc[msg[1] & 0xf]; + } else if (intraMbMode == AVC_INTRA_8X8) { + cu_part_mode = 0; //2Nx2N + intra_chroma_mode = 5; + cu_size = 0; + tu_size = 0; + tu_count = 4; + intraMode[0] = intra_mode_8x8_avc2hevc[msg[1] >> (index << 2) & 0xf]; + intraMode[1] = intra_mode_8x8_avc2hevc[msg[1] >> (index << 2) & 0xf]; + intraMode[2] = intra_mode_8x8_avc2hevc[msg[1] >> (index << 2) & 0xf]; + intraMode[3] = intra_mode_8x8_avc2hevc[msg[1] >> (index << 2) & 0xf]; + + } else { // for 4x4 to use 8x8 replace + cu_part_mode = 3; //NxN + intra_chroma_mode = 0; + cu_size = 0; + tu_size = 0; + tu_count = 4; + intraMode[0] = intra_mode_8x8_avc2hevc[msg[1] >> ((index << 4) + 0) & 0xf]; + intraMode[1] = intra_mode_8x8_avc2hevc[msg[1] >> ((index << 4) + 4) & 0xf]; + intraMode[2] = intra_mode_8x8_avc2hevc[msg[1] >> ((index << 4) + 8) & 0xf]; + intraMode[3] = intra_mode_8x8_avc2hevc[msg[1] >> ((index << 4) + 12) & 0xf]; + + } + + cu_record_ptr = (unsigned char *)mfc_context->hcp_indirect_cu_object.bo->virtual; + /* get the mb info from the vme out */ + cu_msg = (unsigned int *)(cu_record_ptr + cu_address); + + cu_msg[0] = (inerpred_idc << 24 | /* interpred_idc[3:0][1:0] */ + zero << 23 | /* reserved */ + qp << 16 | /* CU_qp */ + zero << 11 | /* reserved */ + intra_chroma_mode << 8 | /* intra_chroma_mode */ + zero << 7 | /* IPCM_enable , reserved for SKL*/ + cu_part_mode << 4 | /* cu_part_mode */ + zero << 3 | /* cu_transquant_bypass_flag */ + is_inter << 2 | /* cu_pred_mode :intra 1,inter 1*/ + cu_size /* cu_size */ + ); + cu_msg[1] = (zero << 30 | /* reserved */ + intraMode[3] << 24 | /* intra_mode */ + zero << 22 | /* reserved */ + intraMode[2] << 16 | /* intra_mode */ + zero << 14 | /* reserved */ + intraMode[1] << 8 | /* intra_mode */ + zero << 6 | /* reserved */ + intraMode[0] /* intra_mode */ + ); + /* l0: 4 MV (x,y); l1ï¼› 4 MV (x,y) */ + cu_msg[2] = (zero << 16 | /* mvx_l0[1] */ + zero /* mvx_l0[0] */ + ); + cu_msg[3] = (zero << 16 | /* mvx_l0[3] */ + zero /* mvx_l0[2] */ + ); + cu_msg[4] = (zero << 16 | /* mvy_l0[1] */ + zero /* mvy_l0[0] */ + ); + cu_msg[5] = (zero << 16 | /* mvy_l0[3] */ + zero /* mvy_l0[2] */ + ); + + cu_msg[6] = (zero << 16 | /* mvx_l1[1] */ + zero /* mvx_l1[0] */ + ); + cu_msg[7] = (zero << 16 | /* mvx_l1[3] */ + zero /* mvx_l1[2] */ + ); + cu_msg[8] = (zero << 16 | /* mvy_l1[1] */ + zero /* mvy_l1[0] */ + ); + cu_msg[9] = (zero << 16 | /* mvy_l1[3] */ + zero /* mvy_l1[2] */ + ); + + cu_msg[10] = (zero << 28 | /* ref_idx_l1[3] */ + zero << 24 | /* ref_idx_l1[2] */ + zero << 20 | /* ref_idx_l1[1] */ + zero << 16 | /* ref_idx_l1[0] */ + zero << 12 | /* ref_idx_l0[3] */ + zero << 8 | /* ref_idx_l0[2] */ + zero << 4 | /* ref_idx_l0[1] */ + zero /* ref_idx_l0[0] */ + ); + + cu_msg[11] = tu_size; /* tu_size 00000000 00000000 00000000 10101010 or 0x0*/ + cu_msg[12] = ((tu_count - 1) << 28 | /* tu count - 1 */ + zero << 16 | /* reserved */ + zero /* tu_xform_Yskip[15:0] */ + ); + cu_msg[13] = (zero << 16 | /* tu_xform_Vskip[15:0] */ + zero /* tu_xform_Uskip[15:0] */ + ); + cu_msg[14] = zero ; + cu_msg[15] = zero ; +} + +/* here 1 MB = 1CU = 16x16 */ +static void +gen9_hcpe_hevc_fill_indirect_cu_inter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int qp, unsigned int *msg, + int ctb_x, int ctb_y, + int mb_x, int mb_y, + int ctb_width_in_mb, int width_in_ctb, int num_cu_record, int slice_type, int cu_index,int index) +{ + /* here cu == mb, so we use mb address as the cu address */ + /* to fill the indirect cu by the vme out */ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned char * cu_record_ptr = NULL; + unsigned int * cu_msg = NULL; + int ctb_address = (ctb_y * width_in_ctb + ctb_x) * num_cu_record; + int mb_address_in_ctb = 0; + int cu_address = (ctb_address + mb_address_in_ctb + cu_index) * 16 * 4; + int zero = 0; + int cu_part_mode = 0; + int submb_pre_mode = 0; + int is_inter = 1; + int cu_size = 1; + int tu_size = 0x55; + int tu_count = 4; + int inter_mode = 0; + + unsigned int *mv_ptr; + { + inter_mode = (msg[0] & AVC_INTER_MODE_MASK); + submb_pre_mode = (msg[1] & AVC_INTER_SUBMB_PRE_MODE_MASK) >> 16; +#define MSG_MV_OFFSET 4 + mv_ptr = msg + MSG_MV_OFFSET; + /* MV of VME output is based on 16 sub-blocks. So it is necessary + * to convert them to be compatible with the format of AVC_PAK + * command. + */ + /* 0/2/4/6/8... : l0, 1/3/5/7...: l1 ; now it only support 16x16,16x8,8x16,8x8*/ + + if (inter_mode == AVC_INTER_16X16) { + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[6] = mv_ptr[0]; + mv_ptr[7] = mv_ptr[1]; + cu_part_mode = 0; + cu_size = 1; + tu_size = 0x55; + tu_count = 4; + } else if (inter_mode == AVC_INTER_8X16) { + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[8]; + mv_ptr[3] = mv_ptr[9]; + mv_ptr[6] = mv_ptr[8]; + mv_ptr[7] = mv_ptr[9]; + cu_part_mode = 1; + cu_size = 1; + tu_size = 0x55; + tu_count = 4; + } else if (inter_mode == AVC_INTER_16X8) { + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[4] = mv_ptr[16]; + mv_ptr[5] = mv_ptr[17]; + mv_ptr[6] = mv_ptr[24]; + mv_ptr[7] = mv_ptr[25]; + cu_part_mode = 2; + cu_size = 1; + tu_size = 0x55; + tu_count = 4; + }else if(inter_mode == AVC_INTER_8X8) { + mv_ptr[0] = mv_ptr[index * 8 + 0 ]; + mv_ptr[1] = mv_ptr[index * 8 + 1 ]; + mv_ptr[2] = mv_ptr[index * 8 + 0 ]; + mv_ptr[3] = mv_ptr[index * 8 + 1 ]; + mv_ptr[4] = mv_ptr[index * 8 + 0 ]; + mv_ptr[5] = mv_ptr[index * 8 + 1 ]; + mv_ptr[6] = mv_ptr[index * 8 + 0 ]; + mv_ptr[7] = mv_ptr[index * 8 + 1 ]; + cu_part_mode = 0; + cu_size = 0; + tu_size = 0x0; + tu_count = 4; + + }else + { + mv_ptr[4] = mv_ptr[0]; + mv_ptr[5] = mv_ptr[1]; + mv_ptr[2] = mv_ptr[0]; + mv_ptr[3] = mv_ptr[1]; + mv_ptr[6] = mv_ptr[0]; + mv_ptr[7] = mv_ptr[1]; + cu_part_mode = 0; + cu_size = 1; + tu_size = 0x55; + tu_count = 4; + + } + } + + cu_record_ptr = (unsigned char *)mfc_context->hcp_indirect_cu_object.bo->virtual; + /* get the mb info from the vme out */ + cu_msg = (unsigned int *)(cu_record_ptr + cu_address); + + cu_msg[0] = (submb_pre_mode << 24 | /* interpred_idc[3:0][1:0] */ + zero << 23 | /* reserved */ + qp << 16 | /* CU_qp */ + zero << 11 | /* reserved */ + 5 << 8 | /* intra_chroma_mode */ + zero << 7 | /* IPCM_enable , reserved for SKL*/ + cu_part_mode << 4 | /* cu_part_mode */ + zero << 3 | /* cu_transquant_bypass_flag */ + is_inter << 2 | /* cu_pred_mode :intra 1,inter 1*/ + cu_size /* cu_size */ + ); + cu_msg[1] = (zero << 30 | /* reserved */ + zero << 24 | /* intra_mode */ + zero << 22 | /* reserved */ + zero << 16 | /* intra_mode */ + zero << 14 | /* reserved */ + zero << 8 | /* intra_mode */ + zero << 6 | /* reserved */ + zero /* intra_mode */ + ); + /* l0: 4 MV (x,y); l1ï¼› 4 MV (x,y) */ + cu_msg[2] = ((mv_ptr[2] & 0xffff) << 16 | /* mvx_l0[1] */ + (mv_ptr[0] & 0xffff) /* mvx_l0[0] */ + ); + cu_msg[3] = ((mv_ptr[6] & 0xffff) << 16 | /* mvx_l0[3] */ + (mv_ptr[4] & 0xffff) /* mvx_l0[2] */ + ); + cu_msg[4] = ((mv_ptr[2] & 0xffff0000) | /* mvy_l0[1] */ + (mv_ptr[0] & 0xffff0000) >> 16 /* mvy_l0[0] */ + ); + cu_msg[5] = ((mv_ptr[6] & 0xffff0000) | /* mvy_l0[3] */ + (mv_ptr[4] & 0xffff0000) >> 16 /* mvy_l0[2] */ + ); + + cu_msg[6] = ((mv_ptr[3] & 0xffff) << 16 | /* mvx_l1[1] */ + (mv_ptr[1] & 0xffff) /* mvx_l1[0] */ + ); + cu_msg[7] = ((mv_ptr[7] & 0xffff) << 16 | /* mvx_l1[3] */ + (mv_ptr[5] & 0xffff) /* mvx_l1[2] */ + ); + cu_msg[8] = ((mv_ptr[3] & 0xffff0000) | /* mvy_l1[1] */ + (mv_ptr[1] & 0xffff0000) >> 16 /* mvy_l1[0] */ + ); + cu_msg[9] = ((mv_ptr[7] & 0xffff0000) | /* mvy_l1[3] */ + (mv_ptr[5] & 0xffff0000) >> 16 /* mvy_l1[2] */ + ); + + cu_msg[10] = (((vme_context->ref_index_in_mb[1] >> 24) & 0xf) << 28 | /* ref_idx_l1[3] */ + ((vme_context->ref_index_in_mb[1] >> 16) & 0xf) << 24 | /* ref_idx_l1[2] */ + ((vme_context->ref_index_in_mb[1] >> 8) & 0xf) << 20 | /* ref_idx_l1[1] */ + ((vme_context->ref_index_in_mb[1] >> 0) & 0xf) << 16 | /* ref_idx_l1[0] */ + ((vme_context->ref_index_in_mb[0] >> 24) & 0xf) << 12 | /* ref_idx_l0[3] */ + ((vme_context->ref_index_in_mb[0] >> 16) & 0xf) << 8 | /* ref_idx_l0[2] */ + ((vme_context->ref_index_in_mb[0] >> 8) & 0xf) << 4 | /* ref_idx_l0[1] */ + ((vme_context->ref_index_in_mb[0] >> 0) & 0xf) /* ref_idx_l0[0] */ + ); + + cu_msg[11] = tu_size; /* tu_size 00000000 00000000 00000000 10101010 or 0x0*/ + cu_msg[12] = ((tu_count - 1) << 28 | /* tu count - 1 */ + zero << 16 | /* reserved */ + zero /* tu_xform_Yskip[15:0] */ + ); + cu_msg[13] = (zero << 16 | /* tu_xform_Vskip[15:0] */ + zero /* tu_xform_Uskip[15:0] */ + ); + cu_msg[14] = zero ; + cu_msg[15] = zero ; +} + +#define HEVC_SPLIT_CU_FLAG_64_64 ((0x1<<20)|(0xf<<16)|(0x0<<12)|(0x0<<8)|(0x0<<4)|(0x0)) +#define HEVC_SPLIT_CU_FLAG_32_32 ((0x1<<20)|(0x0<<16)|(0x0<<12)|(0x0<<8)|(0x0<<4)|(0x0)) +#define HEVC_SPLIT_CU_FLAG_16_16 ((0x0<<20)|(0x0<<16)|(0x0<<12)|(0x0<<8)|(0x0<<4)|(0x0)) +#define HEVC_SPLIT_CU_FLAG_8_8 ((0x1<<20)|(0x0<<16)|(0x0<<12)|(0x0<<8)|(0x0<<4)|(0x0)) + + +void +intel_hevc_slice_insert_packed_data(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + int count, i, start_index; + unsigned int length_in_bits; + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = NULL; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + int slice_header_index; + + if (encode_state->slice_header_index[slice_index] == 0) + slice_header_index = -1; + else + slice_header_index = (encode_state->slice_header_index[slice_index] & SLICE_PACKED_DATA_INDEX_MASK); + + count = encode_state->slice_rawdata_count[slice_index]; + start_index = (encode_state->slice_rawdata_index[slice_index] & SLICE_PACKED_DATA_INDEX_MASK); + + for (i = 0; i < count; i++) { + unsigned int skip_emul_byte_cnt; + + header_data = (unsigned int *)encode_state->packed_header_data_ext[start_index + i]->buffer; + + param = (VAEncPackedHeaderParameterBuffer *) + (encode_state->packed_header_params_ext[start_index + i]->buffer); + + /* skip the slice header packed data type as it is lastly inserted */ + if (param->type == VAEncPackedHeaderSlice) + continue; + + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + /* as the slice header is still required, the last header flag is set to + * zero. + */ + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + if (slice_header_index == -1) { + unsigned char *slice_header = NULL; + int slice_header_length_in_bits = 0; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferHEVC *pPicParameter = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[slice_index]->buffer; + + /* For the Normal HEVC */ + slice_header_length_in_bits = build_hevc_slice_header(pSequenceParameter, + pPicParameter, + pSliceParameter, + &slice_header, + 0); + mfc_context->insert_object(ctx, encoder_context, + (unsigned int *)slice_header, + ALIGN(slice_header_length_in_bits, 32) >> 5, + slice_header_length_in_bits & 0x1f, + 5, /* first 6 bytes are start code + nal unit type */ + 1, 0, 1, slice_batch); + free(slice_header); + } else { + unsigned int skip_emul_byte_cnt; + + header_data = (unsigned int *)encode_state->packed_header_data_ext[slice_header_index]->buffer; + + param = (VAEncPackedHeaderParameterBuffer *) + (encode_state->packed_header_params_ext[slice_header_index]->buffer); + length_in_bits = param->bit_length; + + /* as the slice header is the last header data for one slice, + * the last header flag is set to one. + */ + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 1, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + return; +} + +static void +gen9_hcpe_hevc_pipeline_slice_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + int slice_index, + struct intel_batchbuffer *slice_batch) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncPictureParameterBufferHEVC *pPicParameter = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[slice_index]->buffer; + int qp_slice = pPicParameter->pic_init_qp + pSliceParameter->slice_qp_delta; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + //unsigned char *slice_header = NULL; // for future use + //int slice_header_length_in_bits = 0; + unsigned int tail_data[] = { 0x0, 0x0 }; + int slice_type = pSliceParameter->slice_type; + + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + int width_in_ctb = (pSequenceParameter->pic_width_in_luma_samples + ctb_size - 1) / ctb_size; + int height_in_ctb = (pSequenceParameter->pic_height_in_luma_samples + ctb_size - 1) / ctb_size; + int last_slice = (pSliceParameter->slice_segment_address + pSliceParameter->num_ctu_in_slice) == (width_in_ctb * height_in_ctb); + int ctb_width_in_mb = (ctb_size + 15) / 16; + int i_ctb, ctb_x, ctb_y; + unsigned int split_coding_unit_flag = 0; + int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + 15) / 16; + int row_pad_flag = (pSequenceParameter->pic_height_in_luma_samples % ctb_size)> 0 ? 1:0; + int col_pad_flag = (pSequenceParameter->pic_width_in_luma_samples % ctb_size)> 0 ? 1:0; + + int is_intra = (slice_type == HEVC_SLICE_I); + unsigned int *msg = NULL; + unsigned char *msg_ptr = NULL; + int macroblock_address = 0; + int num_cu_record = 64; + int cu_count = 1; + int tmp_mb_mode = 0; + int mb_x = 0, mb_y = 0; + int mb_addr = 0; + int cu_index = 0; + int inter_rdo, intra_rdo; + int qp; + + if (log2_ctb_size == 5) num_cu_record = 16; + else if (log2_ctb_size == 4) num_cu_record = 4; + else if (log2_ctb_size == 6) num_cu_record = 64; + + qp = qp_slice; + if (rate_control_mode == VA_RC_CBR) { + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + if(slice_type == HEVC_SLICE_B) { + if(pSequenceParameter->ip_period == 1) + { + qp = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + + }else if(mfc_context->vui_hrd.i_frame_number % pSequenceParameter->ip_period == 1){ + qp = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + } + } + if (encode_state->slice_header_index[slice_index] == 0) { + pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp; + } + } + + /* only support for 8-bit pixel bit-depth */ + assert(pSequenceParameter->seq_fields.bits.bit_depth_luma_minus8 == 0); + assert(pSequenceParameter->seq_fields.bits.bit_depth_chroma_minus8 == 0); + assert(pPicParameter->pic_init_qp >= 0 && pPicParameter->pic_init_qp < 52); + assert(qp >= 0 && qp < 52); + + { + gen9_hcpe_hevc_slice_state(ctx, + pPicParameter, + pSliceParameter, + encode_state, encoder_context, + slice_batch); + + if (slice_index == 0) + intel_hcpe_hevc_pipeline_header_programing(ctx, encode_state, encoder_context, slice_batch); + + intel_hevc_slice_insert_packed_data(ctx, encode_state, encoder_context, slice_index, slice_batch); + + /* + slice_header_length_in_bits = build_hevc_slice_header(pSequenceParameter, pPicParameter, pSliceParameter, &slice_header, slice_index); + int skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)slice_header, slice_header_length_in_bits); + + mfc_context->insert_object(ctx, encoder_context, + (unsigned int *)slice_header, ALIGN(slice_header_length_in_bits, 32) >> 5, slice_header_length_in_bits & 0x1f, + skip_emul_byte_cnt, + 1, 0, 1, slice_batch); + free(slice_header); + */ + } + + + + split_coding_unit_flag = (ctb_width_in_mb == 4) ? HEVC_SPLIT_CU_FLAG_64_64 : ((ctb_width_in_mb == 2) ? HEVC_SPLIT_CU_FLAG_32_32 : HEVC_SPLIT_CU_FLAG_16_16); + + dri_bo_map(vme_context->vme_output.bo , 1); + msg_ptr = (unsigned char *)vme_context->vme_output.bo->virtual; + dri_bo_map(mfc_context->hcp_indirect_cu_object.bo , 1); + + for (i_ctb = pSliceParameter->slice_segment_address;i_ctb < pSliceParameter->slice_segment_address + pSliceParameter->num_ctu_in_slice; i_ctb++) { + int last_ctb = (i_ctb == (pSliceParameter->slice_segment_address + pSliceParameter->num_ctu_in_slice - 1)); + int ctb_height_in_mb_internal = ctb_width_in_mb; + int ctb_width_in_mb_internal = ctb_width_in_mb; + ctb_x = i_ctb % width_in_ctb; + ctb_y = i_ctb / width_in_ctb; + if(ctb_y == (height_in_ctb - 1) && row_pad_flag) ctb_height_in_mb_internal = 1; + if(ctb_x == (width_in_ctb - 1) && col_pad_flag) ctb_width_in_mb_internal = 1; + + mb_x = 0; + mb_y = 0; + macroblock_address = ctb_y * width_in_mbs * ctb_width_in_mb + ctb_x * ctb_width_in_mb; + split_coding_unit_flag = ((ctb_width_in_mb == 2) ? HEVC_SPLIT_CU_FLAG_32_32 : HEVC_SPLIT_CU_FLAG_16_16); + cu_count = 1; + cu_index = 0; + mb_addr = 0; + msg = NULL; + for (mb_y = 0; mb_y < ctb_height_in_mb_internal; mb_y++) + { + mb_addr = macroblock_address + mb_y * width_in_mbs ; + for (mb_x = 0; mb_x < ctb_width_in_mb_internal; mb_x++) + { + /* get the mb info from the vme out */ + msg = (unsigned int *)(msg_ptr + mb_addr * vme_context->vme_output.size_block); + + inter_rdo = msg[AVC_INTER_RDO_OFFSET] & AVC_RDO_MASK; + intra_rdo = msg[AVC_INTRA_RDO_OFFSET] & AVC_RDO_MASK; + /*fill to indirect cu */ + /*to do */ + if (is_intra || intra_rdo < inter_rdo) { + /* fill intra cu */ + tmp_mb_mode = (msg[0] & AVC_INTRA_MODE_MASK) >> 4; + if (tmp_mb_mode == AVC_INTRA_16X16) { + gen9_hcpe_hevc_fill_indirect_cu_intra(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,0); + } else { // for 4x4 to use 8x8 replace + gen9_hcpe_hevc_fill_indirect_cu_intra(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,0); + gen9_hcpe_hevc_fill_indirect_cu_intra(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,1); + gen9_hcpe_hevc_fill_indirect_cu_intra(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,2); + gen9_hcpe_hevc_fill_indirect_cu_intra(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,3); + if(ctb_width_in_mb == 2) + split_coding_unit_flag |= 0x1 << (mb_x + mb_y * ctb_width_in_mb + 16); + else if(ctb_width_in_mb == 1) + split_coding_unit_flag |= 0x1 << 20; + } + } else { + msg += AVC_INTER_MSG_OFFSET; + /* fill inter cu */ + tmp_mb_mode = msg[0] & AVC_INTER_MODE_MASK; + if (tmp_mb_mode == AVC_INTER_8X8){ + gen9_hcpe_hevc_fill_indirect_cu_inter(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,0); + gen9_hcpe_hevc_fill_indirect_cu_inter(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,1); + gen9_hcpe_hevc_fill_indirect_cu_inter(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,2); + gen9_hcpe_hevc_fill_indirect_cu_inter(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,3); + if(ctb_width_in_mb == 2) + split_coding_unit_flag |= 0x1 << (mb_x + mb_y * ctb_width_in_mb + 16); + else if(ctb_width_in_mb == 1) + split_coding_unit_flag |= 0x1 << 20; + + }else if(tmp_mb_mode == AVC_INTER_16X16 || + tmp_mb_mode == AVC_INTER_8X16 || + tmp_mb_mode == AVC_INTER_16X8) { + gen9_hcpe_hevc_fill_indirect_cu_inter(ctx, encode_state, encoder_context, qp, msg, ctb_x, ctb_y, mb_x, mb_y, ctb_width_in_mb, width_in_ctb, num_cu_record, slice_type,cu_index++,0); + } + } + mb_addr++; + } + } + + cu_count = cu_index; + // PAK object fill accordingly. + gen9_hcpe_hevc_pak_object(ctx, ctb_x, ctb_y, last_ctb, encoder_context, cu_count, split_coding_unit_flag, slice_batch); + } + + dri_bo_unmap(mfc_context->hcp_indirect_cu_object.bo); + dri_bo_unmap(vme_context->vme_output.bo); + + if (last_slice) { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 2, 8, + 2, 1, 1, 0, slice_batch); + } else { + mfc_context->insert_object(ctx, encoder_context, + tail_data, 1, 8, + 1, 1, 1, 0, slice_batch); + } +} + +static dri_bo * +gen9_hcpe_hevc_software_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; + int i; + + batch = mfc_context->aux_batchbuffer; + batch_bo = batch->buffer; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + gen9_hcpe_hevc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); + } + + intel_batchbuffer_align(batch, 8); + + BEGIN_BCS_BATCH(batch, 2); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_END); + ADVANCE_BCS_BATCH(batch); + + dri_bo_reference(batch_bo); + intel_batchbuffer_free(batch); + mfc_context->aux_batchbuffer = NULL; + + return batch_bo; +} + +#else + +#endif + +static void +gen9_hcpe_hevc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = encoder_context->base.batch; + dri_bo *slice_batch_bo; + +#ifdef HCP_SOFTWARE_SKYLAKE + slice_batch_bo = gen9_hcpe_hevc_software_batchbuffer(ctx, encode_state, encoder_context); +#else + slice_batch_bo = gen9_hcpe_hevc_hardware_batchbuffer(ctx, encode_state, encoder_context); +#endif + + // begin programing + if (i965->intel.has_bsd2) + intel_batchbuffer_start_atomic_bcs_override(batch, 0x4000, BSD_RING0); + else + intel_batchbuffer_start_atomic_bcs(batch, 0x4000); + intel_batchbuffer_emit_mi_flush(batch); + + // picture level programing + gen9_hcpe_hevc_pipeline_picture_programing(ctx, encode_state, encoder_context); + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_BCS_RELOC(batch, + slice_batch_bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + + // end programing + intel_batchbuffer_end_atomic(batch); + + dri_bo_unreference(slice_batch_bo); +} + +void intel_hcpe_hevc_pipeline_header_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context, + struct intel_batchbuffer *slice_batch) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + int idx = va_enc_packed_type_to_idx(VAEncPackedHeaderHEVC_VPS); + unsigned int skip_emul_byte_cnt; + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderHEVC_VPS) + 1; // index to SPS + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderHEVC_PPS); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } + + idx = va_enc_packed_type_to_idx(VAEncPackedHeaderHEVC_SEI); + + if (encode_state->packed_header_data[idx]) { + VAEncPackedHeaderParameterBuffer *param = NULL; + unsigned int *header_data = (unsigned int *)encode_state->packed_header_data[idx]->buffer; + unsigned int length_in_bits; + + assert(encode_state->packed_header_param[idx]); + param = (VAEncPackedHeaderParameterBuffer *)encode_state->packed_header_param[idx]->buffer; + length_in_bits = param->bit_length; + + skip_emul_byte_cnt = intel_hevc_find_skipemulcnt((unsigned char *)header_data, length_in_bits); + mfc_context->insert_object(ctx, + encoder_context, + header_data, + ALIGN(length_in_bits, 32) >> 5, + length_in_bits & 0x1f, + skip_emul_byte_cnt, + 0, + 0, + !param->has_emulation_bytes, + slice_batch); + } +} + +VAStatus intel_hcpe_hevc_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + GenHevcSurface *hevc_encoder_surface; + dri_bo *bo; + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + struct i965_coded_buffer_segment *coded_buffer_segment; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + + /*Setup all the input&output object*/ + + /* Setup current frame and current direct mv buffer*/ + obj_surface = encode_state->reconstructed_object; + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + if (obj_surface->private_data == NULL) { + uint32_t size; + + if (mfc_context->pic_size.ctb_size == 16) + size = ((pSequenceParameter->pic_width_in_luma_samples + 63) >> 6) * + ((pSequenceParameter->pic_height_in_luma_samples + 15) >> 4); + else + size = ((pSequenceParameter->pic_width_in_luma_samples + 31) >> 5) * + ((pSequenceParameter->pic_height_in_luma_samples + 31) >> 5); + size <<= 6; /* in unit of 64bytes */ + + hevc_encoder_surface = calloc(sizeof(GenHevcSurface), 1); + + assert(hevc_encoder_surface); + hevc_encoder_surface->motion_vector_temporal_bo = + dri_bo_alloc(i965->intel.bufmgr, + "motion vector temporal buffer", + size, + 0x1000); + assert(hevc_encoder_surface->motion_vector_temporal_bo); + + obj_surface->private_data = (void *)hevc_encoder_surface; + obj_surface->free_private_data = (void *)gen_free_hevc_surface; + } + hevc_encoder_surface = (GenHevcSurface *) obj_surface->private_data; + + if (hevc_encoder_surface) { + hevc_encoder_surface->base.frame_store_id = -1; + mfc_context->current_collocated_mv_temporal_buffer[NUM_HCP_CURRENT_COLLOCATED_MV_TEMPORAL_BUFFERS - 1].bo = hevc_encoder_surface->motion_vector_temporal_bo; + + dri_bo_reference(hevc_encoder_surface->motion_vector_temporal_bo); + } + + mfc_context->surface_state.width = obj_surface->orig_width; + mfc_context->surface_state.height = obj_surface->orig_height; + mfc_context->surface_state.w_pitch = obj_surface->width; + mfc_context->surface_state.h_pitch = obj_surface->height; + + /* Setup reference frames and direct mv buffers*/ + for (i = 0; i < MAX_HCP_REFERENCE_SURFACES; i++) { + obj_surface = encode_state->reference_objects[i]; + + if (obj_surface && obj_surface->bo) { + mfc_context->reference_surfaces[i].bo = obj_surface->bo; + dri_bo_reference(obj_surface->bo); + + /* Check MV temporal buffer */ + if (obj_surface->private_data == NULL) { + uint32_t size; + + if (mfc_context->pic_size.ctb_size == 16) + size = ((pSequenceParameter->pic_width_in_luma_samples + 63) >> 6) * + ((pSequenceParameter->pic_height_in_luma_samples + 15) >> 4); + else + size = ((pSequenceParameter->pic_width_in_luma_samples + 31) >> 5) * + ((pSequenceParameter->pic_height_in_luma_samples + 31) >> 5); + size <<= 6; /* in unit of 64bytes */ + + hevc_encoder_surface = calloc(sizeof(GenHevcSurface), 1); + + if (hevc_encoder_surface) { + hevc_encoder_surface->motion_vector_temporal_bo = + dri_bo_alloc(i965->intel.bufmgr, + "motion vector temporal buffer", + size, + 0x1000); + assert(hevc_encoder_surface->motion_vector_temporal_bo); + } + + obj_surface->private_data = (void *)hevc_encoder_surface; + obj_surface->free_private_data = (void *)gen_free_hevc_surface; + } + + hevc_encoder_surface = (GenHevcSurface *) obj_surface->private_data; + + if (hevc_encoder_surface) { + hevc_encoder_surface->base.frame_store_id = -1; + /* Setup MV temporal buffer */ + mfc_context->current_collocated_mv_temporal_buffer[i].bo = hevc_encoder_surface->motion_vector_temporal_bo; + dri_bo_reference(hevc_encoder_surface->motion_vector_temporal_bo); + } + } else { + break; + } + } + + mfc_context->uncompressed_picture_source.bo = encode_state->input_yuv_object->bo; + dri_bo_reference(mfc_context->uncompressed_picture_source.bo); + + obj_buffer = encode_state->coded_buf_object; + bo = obj_buffer->buffer_store->bo; + mfc_context->hcp_indirect_pak_bse_object.bo = bo; + mfc_context->hcp_indirect_pak_bse_object.offset = I965_CODEDBUFFER_HEADER_SIZE; + mfc_context->hcp_indirect_pak_bse_object.end_offset = ALIGN(obj_buffer->size_element - 0x1000, 0x1000); + dri_bo_reference(mfc_context->hcp_indirect_pak_bse_object.bo); + + dri_bo_map(bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)(bo->virtual); + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = encoder_context->codec; + dri_bo_unmap(bo); + + return vaStatus; +} + +/* HEVC BRC related */ + +static void +intel_hcpe_bit_rate_control_context_init(struct encode_state *encode_state, + struct gen9_hcpe_context *mfc_context) +{ + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int ctb_size = 16; + int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + ctb_size - 1) / ctb_size; + int height_in_mbs = (pSequenceParameter->pic_height_in_luma_samples + ctb_size - 1) / ctb_size; + + float fps = pSequenceParameter->vui_time_scale * 0.5 / pSequenceParameter->vui_num_units_in_tick ; + double bitrate = pSequenceParameter->bits_per_second * 1.0; + int inter_mb_size = bitrate * 1.0 / (fps + 4.0) / width_in_mbs / height_in_mbs; + int intra_mb_size = inter_mb_size * 5.0; + int i; + + mfc_context->bit_rate_control_context[HEVC_SLICE_I].target_mb_size = intra_mb_size; + mfc_context->bit_rate_control_context[HEVC_SLICE_I].target_frame_size = intra_mb_size * width_in_mbs * height_in_mbs; + mfc_context->bit_rate_control_context[HEVC_SLICE_P].target_mb_size = inter_mb_size; + mfc_context->bit_rate_control_context[HEVC_SLICE_P].target_frame_size = inter_mb_size * width_in_mbs * height_in_mbs; + mfc_context->bit_rate_control_context[HEVC_SLICE_B].target_mb_size = inter_mb_size; + mfc_context->bit_rate_control_context[HEVC_SLICE_B].target_frame_size = inter_mb_size * width_in_mbs * height_in_mbs; + + for (i = 0 ; i < 3; i++) { + mfc_context->bit_rate_control_context[i].QpPrimeY = 26; + mfc_context->bit_rate_control_context[i].MaxQpNegModifier = 6; + mfc_context->bit_rate_control_context[i].MaxQpPosModifier = 6; + mfc_context->bit_rate_control_context[i].GrowInit = 6; + mfc_context->bit_rate_control_context[i].GrowResistance = 4; + mfc_context->bit_rate_control_context[i].ShrinkInit = 6; + mfc_context->bit_rate_control_context[i].ShrinkResistance = 4; + + mfc_context->bit_rate_control_context[i].Correct[0] = 8; + mfc_context->bit_rate_control_context[i].Correct[1] = 4; + mfc_context->bit_rate_control_context[i].Correct[2] = 2; + mfc_context->bit_rate_control_context[i].Correct[3] = 2; + mfc_context->bit_rate_control_context[i].Correct[4] = 4; + mfc_context->bit_rate_control_context[i].Correct[5] = 8; + } + + mfc_context->bit_rate_control_context[HEVC_SLICE_I].TargetSizeInWord = (intra_mb_size + 16) / 16; + mfc_context->bit_rate_control_context[HEVC_SLICE_P].TargetSizeInWord = (inter_mb_size + 16) / 16; + mfc_context->bit_rate_control_context[HEVC_SLICE_B].TargetSizeInWord = (inter_mb_size + 16) / 16; + + mfc_context->bit_rate_control_context[HEVC_SLICE_I].MaxSizeInWord = mfc_context->bit_rate_control_context[HEVC_SLICE_I].TargetSizeInWord * 1.5; + mfc_context->bit_rate_control_context[HEVC_SLICE_P].MaxSizeInWord = mfc_context->bit_rate_control_context[HEVC_SLICE_P].TargetSizeInWord * 1.5; + mfc_context->bit_rate_control_context[HEVC_SLICE_B].MaxSizeInWord = mfc_context->bit_rate_control_context[HEVC_SLICE_B].TargetSizeInWord * 1.5; +} + +static void intel_hcpe_brc_init(struct encode_state *encode_state, + struct intel_encoder_context* encoder_context) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncMiscParameterHRD* pParameterHRD = NULL; + VAEncMiscParameterBuffer* pMiscParamHRD = NULL; + + double bitrate = pSequenceParameter->bits_per_second * 1.0; + double framerate = (double)pSequenceParameter->vui_time_scale / (2 * (double)pSequenceParameter->vui_num_units_in_tick); + int inum = 1, pnum = 0, bnum = 0; /* Gop structure: number of I, P, B frames in the Gop. */ + int intra_period = pSequenceParameter->intra_period; + int ip_period = pSequenceParameter->ip_period; + double qp1_size = 0.1 * 8 * 3 * pSequenceParameter->pic_width_in_luma_samples * pSequenceParameter->pic_height_in_luma_samples / 2; + double qp51_size = 0.001 * 8 * 3 * pSequenceParameter->pic_width_in_luma_samples * pSequenceParameter->pic_height_in_luma_samples / 2; + double bpf; + int ratio_min = 1; + int ratio_max = 32; + int ratio = 8; + double buffer_size = 0; + + if (!encode_state->misc_param[VAEncMiscParameterTypeHRD] || !encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer) + return; + + pMiscParamHRD = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + pParameterHRD = (VAEncMiscParameterHRD*)pMiscParamHRD->data; + + if (pSequenceParameter->ip_period) { + pnum = (intra_period + ip_period - 1) / ip_period - 1; + bnum = intra_period - inum - pnum; + } + + mfc_context->brc.mode = encoder_context->rate_control_mode; + + mfc_context->brc.target_frame_size[HEVC_SLICE_I] = (int)((double)((bitrate * intra_period) / framerate) / + (double)(inum + BRC_PWEIGHT * pnum + BRC_BWEIGHT * bnum)); + mfc_context->brc.target_frame_size[HEVC_SLICE_P] = BRC_PWEIGHT * mfc_context->brc.target_frame_size[HEVC_SLICE_I]; + mfc_context->brc.target_frame_size[HEVC_SLICE_B] = BRC_BWEIGHT * mfc_context->brc.target_frame_size[HEVC_SLICE_I]; + + mfc_context->brc.gop_nums[HEVC_SLICE_I] = inum; + mfc_context->brc.gop_nums[HEVC_SLICE_P] = pnum; + mfc_context->brc.gop_nums[HEVC_SLICE_B] = bnum; + + bpf = mfc_context->brc.bits_per_frame = bitrate / framerate; + + if (!pParameterHRD || pParameterHRD->buffer_size <= 0) + { + mfc_context->hrd.buffer_size = bitrate * ratio; + mfc_context->hrd.current_buffer_fullness = + (double)(bitrate * ratio/2 < mfc_context->hrd.buffer_size) ? + bitrate * ratio/2 : mfc_context->hrd.buffer_size / 2.; + }else + { + buffer_size = (double)pParameterHRD->buffer_size ; + if(buffer_size < bitrate * ratio_min) + { + buffer_size = bitrate * ratio_min; + }else if (buffer_size > bitrate * ratio_max) + { + buffer_size = bitrate * ratio_max ; + } + mfc_context->hrd.buffer_size =buffer_size; + if(pParameterHRD->initial_buffer_fullness > 0) + { + mfc_context->hrd.current_buffer_fullness = + (double)(pParameterHRD->initial_buffer_fullness < mfc_context->hrd.buffer_size) ? + pParameterHRD->initial_buffer_fullness : mfc_context->hrd.buffer_size / 2.; + }else + { + mfc_context->hrd.current_buffer_fullness = mfc_context->hrd.buffer_size / 2.; + + } + } + + mfc_context->hrd.target_buffer_fullness = (double)mfc_context->hrd.buffer_size / 2.; + mfc_context->hrd.buffer_capacity = (double)mfc_context->hrd.buffer_size / qp1_size; + mfc_context->hrd.violation_noted = 0; + + if ((bpf > qp51_size) && (bpf < qp1_size)) { + mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY = 51 - 50 * (bpf - qp51_size) / (qp1_size - qp51_size); + } else if (bpf >= qp1_size) + mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY = 1; + else if (bpf <= qp51_size) + mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY = 51; + + mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY = mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY; + + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY, 1, 51); +} + +int intel_hcpe_update_hrd(struct encode_state *encode_state, + struct gen9_hcpe_context *mfc_context, + int frame_bits) +{ + double prev_bf = mfc_context->hrd.current_buffer_fullness; + + mfc_context->hrd.current_buffer_fullness -= frame_bits; + + if (mfc_context->hrd.buffer_size > 0 && mfc_context->hrd.current_buffer_fullness <= 0.) { + mfc_context->hrd.current_buffer_fullness = prev_bf; + return BRC_UNDERFLOW; + } + + mfc_context->hrd.current_buffer_fullness += mfc_context->brc.bits_per_frame; + if (mfc_context->hrd.buffer_size > 0 && mfc_context->hrd.current_buffer_fullness > mfc_context->hrd.buffer_size) { + if (mfc_context->brc.mode == VA_RC_VBR) + mfc_context->hrd.current_buffer_fullness = mfc_context->hrd.buffer_size; + else { + mfc_context->hrd.current_buffer_fullness = prev_bf; + return BRC_OVERFLOW; + } + } + return BRC_NO_HRD_VIOLATION; +} + +int intel_hcpe_brc_postpack(struct encode_state *encode_state, + struct gen9_hcpe_context *mfc_context, + int frame_bits) +{ + gen6_brc_status sts = BRC_NO_HRD_VIOLATION; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + int slicetype = pSliceParameter->slice_type; + int qpi = mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY; + int qpp = mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY; + int qpb = mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY; + int qp; // quantizer of previously encoded slice of current type + int qpn; // predicted quantizer for next frame of current type in integer format + double qpf; // predicted quantizer for next frame of current type in float format + double delta_qp; // QP correction + int target_frame_size, frame_size_next; + /* Notes: + * x - how far we are from HRD buffer borders + * y - how far we are from target HRD buffer fullness + */ + double x, y; + double frame_size_alpha; + + if(slicetype == HEVC_SLICE_B) { + if(pSequenceParameter->ip_period == 1) + { + slicetype = HEVC_SLICE_P; + }else if(mfc_context->vui_hrd.i_frame_number % pSequenceParameter->ip_period == 1){ + slicetype = HEVC_SLICE_P; + } + } + + qp = mfc_context->bit_rate_control_context[slicetype].QpPrimeY; + + target_frame_size = mfc_context->brc.target_frame_size[slicetype]; + if (mfc_context->hrd.buffer_capacity < 5) + frame_size_alpha = 0; + else + frame_size_alpha = (double)mfc_context->brc.gop_nums[slicetype]; + if (frame_size_alpha > 30) frame_size_alpha = 30; + frame_size_next = target_frame_size + (double)(target_frame_size - frame_bits) / + (double)(frame_size_alpha + 1.); + + /* frame_size_next: avoiding negative number and too small value */ + if ((double)frame_size_next < (double)(target_frame_size * 0.25)) + frame_size_next = (int)((double)target_frame_size * 0.25); + + qpf = (double)qp * target_frame_size / frame_size_next; + qpn = (int)(qpf + 0.5); + + if (qpn == qp) { + /* setting qpn we round qpf making mistakes: now we are trying to compensate this */ + mfc_context->brc.qpf_rounding_accumulator += qpf - qpn; + if (mfc_context->brc.qpf_rounding_accumulator > 1.0) { + qpn++; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } else if (mfc_context->brc.qpf_rounding_accumulator < -1.0) { + qpn--; + mfc_context->brc.qpf_rounding_accumulator = 0.; + } + } + /* making sure that QP is not changing too fast */ + if ((qpn - qp) > BRC_QP_MAX_CHANGE) qpn = qp + BRC_QP_MAX_CHANGE; + else if ((qpn - qp) < -BRC_QP_MAX_CHANGE) qpn = qp - BRC_QP_MAX_CHANGE; + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, 1, 51); + + /* checking wthether HRD compliance is still met */ + sts = intel_hcpe_update_hrd(encode_state, mfc_context, frame_bits); + + /* calculating QP delta as some function*/ + x = mfc_context->hrd.target_buffer_fullness - mfc_context->hrd.current_buffer_fullness; + if (x > 0) { + x /= mfc_context->hrd.target_buffer_fullness; + y = mfc_context->hrd.current_buffer_fullness; + } else { + x /= (mfc_context->hrd.buffer_size - mfc_context->hrd.target_buffer_fullness); + y = mfc_context->hrd.buffer_size - mfc_context->hrd.current_buffer_fullness; + } + if (y < 0.01) y = 0.01; + if (x > 1) x = 1; + else if (x < -1) x = -1; + + delta_qp = BRC_QP_MAX_CHANGE * exp(-1 / y) * sin(BRC_PI_0_5 * x); + qpn = (int)(qpn + delta_qp + 0.5); + + /* making sure that with QP predictions we did do not leave QPs range */ + BRC_CLIP(qpn, 1, 51); + + if (sts == BRC_NO_HRD_VIOLATION) { // no HRD violation + /* correcting QPs of slices of other types */ + if (slicetype == HEVC_SLICE_P) { + if (abs(qpn + BRC_P_B_QP_DIFF - qpb) > 2) + mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY += (qpn + BRC_P_B_QP_DIFF - qpb) >> 1; + if (abs(qpn - BRC_I_P_QP_DIFF - qpi) > 2) + mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY += (qpn - BRC_I_P_QP_DIFF - qpi) >> 1; + } else if (slicetype == HEVC_SLICE_I) { + if (abs(qpn + BRC_I_B_QP_DIFF - qpb) > 4) + mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY += (qpn + BRC_I_B_QP_DIFF - qpb) >> 2; + if (abs(qpn + BRC_I_P_QP_DIFF - qpp) > 2) + mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY += (qpn + BRC_I_P_QP_DIFF - qpp) >> 2; + } else { // HEVC_SLICE_B + if (abs(qpn - BRC_P_B_QP_DIFF - qpp) > 2) + mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY += (qpn - BRC_P_B_QP_DIFF - qpp) >> 1; + if (abs(qpn - BRC_I_B_QP_DIFF - qpi) > 4) + mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY += (qpn - BRC_I_B_QP_DIFF - qpi) >> 2; + } + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_I].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_P].QpPrimeY, 1, 51); + BRC_CLIP(mfc_context->bit_rate_control_context[HEVC_SLICE_B].QpPrimeY, 1, 51); + } else if (sts == BRC_UNDERFLOW) { // underflow + if (qpn <= qp) qpn = qp + 1; + if (qpn > 51) { + qpn = 51; + sts = BRC_UNDERFLOW_WITH_MAX_QP; //underflow with maxQP + } + } else if (sts == BRC_OVERFLOW) { + if (qpn >= qp) qpn = qp - 1; + if (qpn < 1) { // < 0 (?) overflow with minQP + qpn = 1; + sts = BRC_OVERFLOW_WITH_MIN_QP; // bit stuffing to be done + } + } + + mfc_context->bit_rate_control_context[slicetype].QpPrimeY = qpn; + + return sts; +} + +static void intel_hcpe_hrd_context_init(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int target_bit_rate = pSequenceParameter->bits_per_second; + + // current we only support CBR mode. + if (rate_control_mode == VA_RC_CBR) { + mfc_context->vui_hrd.i_bit_rate_value = target_bit_rate >> 10; + mfc_context->vui_hrd.i_cpb_size_value = (target_bit_rate * 8) >> 10; + mfc_context->vui_hrd.i_initial_cpb_removal_delay = mfc_context->vui_hrd.i_cpb_size_value * 0.5 * 1024 / target_bit_rate * 90000; + mfc_context->vui_hrd.i_cpb_removal_delay = 2; + mfc_context->vui_hrd.i_frame_number = 0; + + mfc_context->vui_hrd.i_initial_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_cpb_removal_delay_length = 24; + mfc_context->vui_hrd.i_dpb_output_delay_length = 24; + } + +} + +void +intel_hcpe_hrd_context_update(struct encode_state *encode_state, + struct gen9_hcpe_context *mfc_context) +{ + mfc_context->vui_hrd.i_frame_number++; +} + +int intel_hcpe_interlace_check(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAEncSliceParameterBufferHEVC *pSliceParameter; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + int width_in_ctb = (pSequenceParameter->pic_width_in_luma_samples + ctb_size - 1) / ctb_size; + int height_in_ctb = (pSequenceParameter->pic_height_in_luma_samples + ctb_size - 1) / ctb_size; + int i; + int ctbCount = 0; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[i]->buffer; + ctbCount += pSliceParameter->num_ctu_in_slice; + } + + if (ctbCount == (width_in_ctb * height_in_ctb)) + return 0; + + return 1; +} + +/* + * Check whether the parameters related with CBR are updated and decide whether + * it needs to reinitialize the configuration related with CBR. + * Currently it will check the following parameters: + * bits_per_second + * frame_rate + * gop_configuration(intra_period, ip_period, intra_idr_period) + */ +static bool intel_hcpe_brc_updated_check(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + /* to do */ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + double cur_fps, cur_bitrate; + VAEncSequenceParameterBufferHEVC *pSequenceParameter; + + + if (rate_control_mode != VA_RC_CBR) { + return false; + } + + pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + + cur_bitrate = pSequenceParameter->bits_per_second; + cur_fps = (double)pSequenceParameter->vui_time_scale / + (2 * (double)pSequenceParameter->vui_num_units_in_tick); + + if ((cur_bitrate == mfc_context->brc.saved_bps) && + (cur_fps == mfc_context->brc.saved_fps) && + (pSequenceParameter->intra_period == mfc_context->brc.saved_intra_period) && + (pSequenceParameter->intra_idr_period == mfc_context->brc.saved_idr_period) && + (pSequenceParameter->intra_period == mfc_context->brc.saved_intra_period)) { + /* the parameters related with CBR are not updaetd */ + return false; + } + + mfc_context->brc.saved_ip_period = pSequenceParameter->ip_period; + mfc_context->brc.saved_intra_period = pSequenceParameter->intra_period; + mfc_context->brc.saved_idr_period = pSequenceParameter->intra_idr_period; + mfc_context->brc.saved_fps = cur_fps; + mfc_context->brc.saved_bps = cur_bitrate; + return true; +} + +void intel_hcpe_brc_prepare(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + unsigned int rate_control_mode = encoder_context->rate_control_mode; + struct gen9_hcpe_context *mfc_context = encoder_context->mfc_context; + + if (rate_control_mode == VA_RC_CBR) { + bool brc_updated; + assert(encoder_context->codec != CODEC_MPEG2); + + brc_updated = intel_hcpe_brc_updated_check(encode_state, encoder_context); + + /*Programing bit rate control */ + if ((mfc_context->bit_rate_control_context[HEVC_SLICE_I].MaxSizeInWord == 0) || + brc_updated) { + intel_hcpe_bit_rate_control_context_init(encode_state, mfc_context); + intel_hcpe_brc_init(encode_state, encoder_context); + } + + /*Programing HRD control */ + if ((mfc_context->vui_hrd.i_cpb_size_value == 0) || brc_updated) + intel_hcpe_hrd_context_init(encode_state, encoder_context); + } +} + +/* HEVC interface API for encoder */ + +static VAStatus +gen9_hcpe_hevc_encode_picture(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *hcpe_context = encoder_context->mfc_context; + unsigned int rate_control_mode = encoder_context->rate_control_mode; + int current_frame_bits_size; + int sts; + + for (;;) { + gen9_hcpe_init(ctx, encode_state, encoder_context); + intel_hcpe_hevc_prepare(ctx, encode_state, encoder_context); + /*Programing bcs pipeline*/ + gen9_hcpe_hevc_pipeline_programing(ctx, encode_state, encoder_context); //filling the pipeline + gen9_hcpe_run(ctx, encode_state, encoder_context); + if (rate_control_mode == VA_RC_CBR /*|| rate_control_mode == VA_RC_VBR*/) { + gen9_hcpe_stop(ctx, encode_state, encoder_context, ¤t_frame_bits_size); + sts = intel_hcpe_brc_postpack(encode_state, hcpe_context, current_frame_bits_size); + if (sts == BRC_NO_HRD_VIOLATION) { + intel_hcpe_hrd_context_update(encode_state, hcpe_context); + break; + } else if (sts == BRC_OVERFLOW_WITH_MIN_QP || sts == BRC_UNDERFLOW_WITH_MAX_QP) { + if (!hcpe_context->hrd.violation_noted) { + fprintf(stderr, "Unrepairable %s!\n", (sts == BRC_OVERFLOW_WITH_MIN_QP) ? "overflow" : "underflow"); + hcpe_context->hrd.violation_noted = 1; + } + return VA_STATUS_SUCCESS; + } + } else { + break; + } + } + + return VA_STATUS_SUCCESS; +} + +void +gen9_hcpe_context_destroy(void *context) +{ + struct gen9_hcpe_context *hcpe_context = context; + int i; + + dri_bo_unreference(hcpe_context->deblocking_filter_line_buffer.bo); + hcpe_context->deblocking_filter_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->deblocking_filter_tile_line_buffer.bo); + hcpe_context->deblocking_filter_tile_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->deblocking_filter_tile_column_buffer.bo); + hcpe_context->deblocking_filter_tile_column_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->uncompressed_picture_source.bo); + hcpe_context->uncompressed_picture_source.bo = NULL; + + dri_bo_unreference(hcpe_context->metadata_line_buffer.bo); + hcpe_context->metadata_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->metadata_tile_line_buffer.bo); + hcpe_context->metadata_tile_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->metadata_tile_column_buffer.bo); + hcpe_context->metadata_tile_column_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->sao_line_buffer.bo); + hcpe_context->sao_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->sao_tile_line_buffer.bo); + hcpe_context->sao_tile_line_buffer.bo = NULL; + + dri_bo_unreference(hcpe_context->sao_tile_column_buffer.bo); + hcpe_context->sao_tile_column_buffer.bo = NULL; + + /* mv temporal buffer */ + for (i = 0; i < NUM_HCP_CURRENT_COLLOCATED_MV_TEMPORAL_BUFFERS; i++) { + if (hcpe_context->current_collocated_mv_temporal_buffer[i].bo != NULL) + dri_bo_unreference(hcpe_context->current_collocated_mv_temporal_buffer[i].bo); + hcpe_context->current_collocated_mv_temporal_buffer[i].bo = NULL; + } + + for (i = 0; i < MAX_HCP_REFERENCE_SURFACES; i++) { + dri_bo_unreference(hcpe_context->reference_surfaces[i].bo); + hcpe_context->reference_surfaces[i].bo = NULL; + } + + dri_bo_unreference(hcpe_context->hcp_indirect_cu_object.bo); + hcpe_context->hcp_indirect_cu_object.bo = NULL; + + dri_bo_unreference(hcpe_context->hcp_indirect_pak_bse_object.bo); + hcpe_context->hcp_indirect_pak_bse_object.bo = NULL; + + dri_bo_unreference(hcpe_context->hcp_batchbuffer_surface.bo); + hcpe_context->hcp_batchbuffer_surface.bo = NULL; + + dri_bo_unreference(hcpe_context->aux_batchbuffer_surface.bo); + hcpe_context->aux_batchbuffer_surface.bo = NULL; + + if (hcpe_context->aux_batchbuffer) + intel_batchbuffer_free(hcpe_context->aux_batchbuffer); + + hcpe_context->aux_batchbuffer = NULL; + + free(hcpe_context); +} + +VAStatus gen9_hcpe_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileHEVCMain: + vaStatus = gen9_hcpe_hevc_encode_picture(ctx, encode_state, encoder_context); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + return vaStatus; +} + +Bool gen9_hcpe_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen9_hcpe_context *hcpe_context = calloc(1, sizeof(struct gen9_hcpe_context)); + + assert(hcpe_context); + hcpe_context->pipe_mode_select = gen9_hcpe_pipe_mode_select; + hcpe_context->set_surface_state = gen9_hcpe_surface_state; + hcpe_context->ind_obj_base_addr_state = gen9_hcpe_ind_obj_base_addr_state; + hcpe_context->pic_state = gen9_hcpe_hevc_pic_state; + hcpe_context->qm_state = gen9_hcpe_hevc_qm_state; + hcpe_context->fqm_state = gen9_hcpe_hevc_fqm_state; + hcpe_context->insert_object = gen9_hcpe_hevc_insert_object; + hcpe_context->buffer_suface_setup = gen8_gpe_buffer_suface_setup; + + encoder_context->mfc_context = hcpe_context; + encoder_context->mfc_context_destroy = gen9_hcpe_context_destroy; + encoder_context->mfc_pipeline = gen9_hcpe_pipeline; + encoder_context->mfc_brc_prepare = intel_hcpe_brc_prepare; + + hevc_gen_default_iq_matrix_encoder(&hcpe_context->iq_matrix_hevc); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.c new file mode 100644 index 000000000..d9ca3bea5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.c @@ -0,0 +1,1999 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include "sysdeps.h" + +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" + +#include "gen9_mfd.h" +#include "intel_media.h" +#include "vp9_probs.h" + +#define OUT_BUFFER(buf_bo, is_target, ma) do { \ + if (buf_bo) { \ + OUT_BCS_RELOC(batch, \ + buf_bo, \ + I915_GEM_DOMAIN_RENDER, \ + is_target ? I915_GEM_DOMAIN_RENDER : 0, \ + 0); \ + } else { \ + OUT_BCS_BATCH(batch, 0); \ + } \ + OUT_BCS_BATCH(batch, 0); \ + if (ma) \ + OUT_BCS_BATCH(batch, 0); \ + } while (0) + +#define OUT_BUFFER_MA_TARGET(buf_bo) OUT_BUFFER(buf_bo, 1, 1) +#define OUT_BUFFER_MA_REFERENCE(buf_bo) OUT_BUFFER(buf_bo, 0, 1) +#define OUT_BUFFER_NMA_TARGET(buf_bo) OUT_BUFFER(buf_bo, 1, 0) +#define OUT_BUFFER_NMA_REFERENCE(buf_bo) OUT_BUFFER(buf_bo, 0, 0) + +static void +gen9_hcpd_init_hevc_surface(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + struct object_surface *obj_surface, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenHevcSurface *gen9_hevc_surface; + + if (!obj_surface) + return; + + obj_surface->free_private_data = gen_free_hevc_surface; + gen9_hevc_surface = obj_surface->private_data; + + if (!gen9_hevc_surface) { + gen9_hevc_surface = calloc(sizeof(GenHevcSurface), 1); + assert(gen9_hevc_surface); + gen9_hevc_surface->base.frame_store_id = -1; + obj_surface->private_data = gen9_hevc_surface; + } + + if (gen9_hevc_surface->motion_vector_temporal_bo == NULL) { + uint32_t size; + + if (gen9_hcpd_context->ctb_size == 16) + size = ((gen9_hcpd_context->picture_width_in_pixels + 63) >> 6) * + ((gen9_hcpd_context->picture_height_in_pixels + 15) >> 4); + else + size = ((gen9_hcpd_context->picture_width_in_pixels + 31) >> 5) * + ((gen9_hcpd_context->picture_height_in_pixels + 31) >> 5); + + size <<= 6; /* in unit of 64bytes */ + gen9_hevc_surface->motion_vector_temporal_bo = dri_bo_alloc(i965->intel.bufmgr, + "motion vector temporal buffer", + size, + 0x1000); + } +} + +static VAStatus +gen9_hcpd_hevc_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferHEVC *pic_param; + struct object_surface *obj_surface; + uint32_t size; + int size_shift = 3; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + intel_update_hevc_frame_store_index(ctx, + decode_state, + pic_param, + gen9_hcpd_context->reference_surfaces, + &gen9_hcpd_context->fs_ctx); + + gen9_hcpd_context->picture_width_in_pixels = pic_param->pic_width_in_luma_samples; + gen9_hcpd_context->picture_height_in_pixels = pic_param->pic_height_in_luma_samples; + gen9_hcpd_context->ctb_size = (1 << (pic_param->log2_min_luma_coding_block_size_minus3 + + 3 + + pic_param->log2_diff_max_min_luma_coding_block_size)); + gen9_hcpd_context->picture_width_in_ctbs = ALIGN(gen9_hcpd_context->picture_width_in_pixels, gen9_hcpd_context->ctb_size) / gen9_hcpd_context->ctb_size; + gen9_hcpd_context->picture_height_in_ctbs = ALIGN(gen9_hcpd_context->picture_height_in_pixels, gen9_hcpd_context->ctb_size) / gen9_hcpd_context->ctb_size; + gen9_hcpd_context->min_cb_size = (1 << (pic_param->log2_min_luma_coding_block_size_minus3 + 3)); + gen9_hcpd_context->picture_width_in_min_cb_minus1 = gen9_hcpd_context->picture_width_in_pixels / gen9_hcpd_context->min_cb_size - 1; + gen9_hcpd_context->picture_height_in_min_cb_minus1 = gen9_hcpd_context->picture_height_in_pixels / gen9_hcpd_context->min_cb_size - 1; + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + hevc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + gen9_hcpd_init_hevc_surface(ctx, pic_param, obj_surface, gen9_hcpd_context); + + if((pic_param->bit_depth_luma_minus8 > 0) + || (pic_param->bit_depth_chroma_minus8 > 0)) + size_shift = 2; + + size = ALIGN(gen9_hcpd_context->picture_width_in_pixels, 32) >> size_shift; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_line_buffer), "line buffer", size); + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_line_buffer), "tile line buffer", size); + + size = ALIGN(gen9_hcpd_context->picture_height_in_pixels + 6 * gen9_hcpd_context->picture_height_in_ctbs, 32) >> size_shift; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_column_buffer), "tile column buffer", size); + + size = (((gen9_hcpd_context->picture_width_in_pixels + 15) >> 4) * 188 + 9 * gen9_hcpd_context->picture_width_in_ctbs + 1023) >> 9; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_line_buffer), "metadata line buffer", size); + + size = (((gen9_hcpd_context->picture_width_in_pixels + 15) >> 4) * 172 + 9 * gen9_hcpd_context->picture_width_in_ctbs + 1023) >> 9; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_line_buffer), "metadata tile line buffer", size); + + if (IS_CHERRYVIEW(i965->intel.device_info)) + size = (((gen9_hcpd_context->picture_height_in_pixels + 15) >> 4) * 256 + 9 * gen9_hcpd_context->picture_height_in_ctbs + 1023) >> 9; + else + size = (((gen9_hcpd_context->picture_height_in_pixels + 15) >> 4) * 176 + 89 * gen9_hcpd_context->picture_height_in_ctbs + 1023) >> 9; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_column_buffer), "metadata tile column buffer", size); + + size = ALIGN(((gen9_hcpd_context->picture_width_in_pixels >> 1) + 3 * gen9_hcpd_context->picture_width_in_ctbs), 16) >> size_shift; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->sao_line_buffer), "sao line buffer", size); + + size = ALIGN(((gen9_hcpd_context->picture_width_in_pixels >> 1) + 6 * gen9_hcpd_context->picture_width_in_ctbs), 16) >> size_shift; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->sao_tile_line_buffer), "sao tile line buffer", size); + + size = ALIGN(((gen9_hcpd_context->picture_height_in_pixels >> 1) + 6 * gen9_hcpd_context->picture_height_in_ctbs), 16) >> size_shift; + size <<= 6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->sao_tile_column_buffer), "sao tile column buffer", size); + + gen9_hcpd_context->first_inter_slice_collocated_ref_idx = 0; + gen9_hcpd_context->first_inter_slice_collocated_from_l0_flag = 0; + gen9_hcpd_context->first_inter_slice_valid = 0; + + return VA_STATUS_SUCCESS; +} + +static void +gen9_hcpd_pipe_mode_select(VADriverContextP ctx, + struct decode_state *decode_state, + int codec, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + assert((codec == HCP_CODEC_HEVC) || (codec == HCP_CODEC_VP9)); + + BEGIN_BCS_BATCH(batch, 4); + + OUT_BCS_BATCH(batch, HCP_PIPE_MODE_SELECT | (4 - 2)); + OUT_BCS_BATCH(batch, + (codec << 5) | + (0 << 3) | /* disable Pic Status / Error Report */ + HCP_CODEC_SELECT_DECODE); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + unsigned int y_cb_offset; + VAPictureParameterBufferHEVC *pic_param; + + assert(obj_surface); + + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + y_cb_offset = obj_surface->y_cb_offset; + + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (0 << 28) | /* surface id */ + (obj_surface->width - 1)); /* pitch - 1 */ + if((pic_param->bit_depth_luma_minus8 > 0) + || (pic_param->bit_depth_chroma_minus8 > 0)) + { + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_P010 << 28) | + y_cb_offset); + } + else + { + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + y_cb_offset); + } + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + struct object_surface *obj_surface; + GenHevcSurface *gen9_hevc_surface; + int i; + + BEGIN_BCS_BATCH(batch, 95); + + OUT_BCS_BATCH(batch, HCP_PIPE_BUF_ADDR_STATE | (95 - 2)); + + obj_surface = decode_state->render_object; + assert(obj_surface && obj_surface->bo); + gen9_hevc_surface = obj_surface->private_data; + assert(gen9_hevc_surface && gen9_hevc_surface->motion_vector_temporal_bo); + + OUT_BUFFER_MA_TARGET(obj_surface->bo); /* DW 1..3 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_line_buffer.bo);/* DW 4..6 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_tile_line_buffer.bo); /* DW 7..9 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_tile_column_buffer.bo); /* DW 10..12 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_line_buffer.bo); /* DW 13..15 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_tile_line_buffer.bo); /* DW 16..18 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_tile_column_buffer.bo); /* DW 19..21 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->sao_line_buffer.bo); /* DW 22..24 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->sao_tile_line_buffer.bo); /* DW 25..27 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->sao_tile_column_buffer.bo); /* DW 28..30 */ + OUT_BUFFER_MA_TARGET(gen9_hevc_surface->motion_vector_temporal_bo); /* DW 31..33 */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 34..36, reserved */ + + for (i = 0; i < ARRAY_ELEMS(gen9_hcpd_context->reference_surfaces); i++) { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + + if (obj_surface) + OUT_BUFFER_NMA_REFERENCE(obj_surface->bo); + else + OUT_BUFFER_NMA_REFERENCE(NULL); + } + OUT_BCS_BATCH(batch, 0); /* DW 53, memory address attributes */ + + OUT_BUFFER_MA_REFERENCE(NULL); /* DW 54..56, ignore for decoding mode */ + OUT_BUFFER_MA_TARGET(NULL); + OUT_BUFFER_MA_TARGET(NULL); + OUT_BUFFER_MA_TARGET(NULL); + + for (i = 0; i < ARRAY_ELEMS(gen9_hcpd_context->reference_surfaces); i++) { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + gen9_hevc_surface = NULL; + + if (obj_surface && obj_surface->private_data) + gen9_hevc_surface = obj_surface->private_data; + + if (gen9_hevc_surface) + OUT_BUFFER_NMA_REFERENCE(gen9_hevc_surface->motion_vector_temporal_bo); + else + OUT_BUFFER_NMA_REFERENCE(NULL); + } + OUT_BCS_BATCH(batch, 0); /* DW 82, memory address attributes */ + + OUT_BUFFER_MA_TARGET(NULL); /* DW 83..85, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 86..88, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 89..91, ignore for HEVC */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 92..94, ignore for HEVC */ + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_ind_obj_base_addr_state(VADriverContextP ctx, + dri_bo *slice_data_bo, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 14); + + OUT_BCS_BATCH(batch, HCP_IND_OBJ_BASE_ADDR_STATE | (14 - 2)); + OUT_BUFFER_MA_REFERENCE(slice_data_bo); /* DW 1..3 */ + OUT_BUFFER_NMA_REFERENCE(NULL); /* DW 4..5, Upper Bound */ + OUT_BUFFER_MA_REFERENCE(NULL); /* DW 6..8, CU, ignored */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 9..11, PAK-BSE, ignored */ + OUT_BUFFER_NMA_TARGET(NULL); /* DW 12..13, Upper Bound */ + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_qm_state(VADriverContextP ctx, + int size_id, + int color_component, + int pred_type, + int dc, + unsigned char *qm, + int qm_length, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + unsigned char qm_buffer[64]; + + assert(qm_length <= 64); + memset(qm_buffer, 0, sizeof(qm_buffer)); + memcpy(qm_buffer, qm, qm_length); + + BEGIN_BCS_BATCH(batch, 18); + + OUT_BCS_BATCH(batch, HCP_QM_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, + dc << 5 | + color_component << 3 | + size_id << 1 | + pred_type); + intel_batchbuffer_data(batch, qm_buffer, 64); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_hevc_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + VAIQMatrixBufferHEVC *iq_matrix; + VAPictureParameterBufferHEVC *pic_param; + int i; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + iq_matrix = (VAIQMatrixBufferHEVC *)decode_state->iq_matrix->buffer; + else + iq_matrix = &gen9_hcpd_context->iq_matrix_hevc; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + + if (!pic_param->pic_fields.bits.scaling_list_enabled_flag) + iq_matrix = &gen9_hcpd_context->iq_matrix_hevc; + + for (i = 0; i < 6; i++) { + gen9_hcpd_qm_state(ctx, + 0, i % 3, i / 3, 0, + iq_matrix->ScalingList4x4[i], 16, + gen9_hcpd_context); + } + + for (i = 0; i < 6; i++) { + gen9_hcpd_qm_state(ctx, + 1, i % 3, i / 3, 0, + iq_matrix->ScalingList8x8[i], 64, + gen9_hcpd_context); + } + + for (i = 0; i < 6; i++) { + gen9_hcpd_qm_state(ctx, + 2, i % 3, i / 3, iq_matrix->ScalingListDC16x16[i], + iq_matrix->ScalingList16x16[i], 64, + gen9_hcpd_context); + } + + for (i = 0; i < 2; i++) { + gen9_hcpd_qm_state(ctx, + 3, 0, i % 2, iq_matrix->ScalingListDC32x32[i], + iq_matrix->ScalingList32x32[i], 64, + gen9_hcpd_context); + } +} + +static void +gen9_hcpd_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + VAPictureParameterBufferHEVC *pic_param; + int max_pcm_size_minus3 = 0, min_pcm_size_minus3 = 0; + int pcm_sample_bit_depth_luma_minus1 = 7, pcm_sample_bit_depth_chroma_minus1 = 7; + /* + * 7.4.3.1 + * + * When not present, the value of loop_filter_across_tiles_enabled_flag + * is inferred to be equal to 1. + */ + int loop_filter_across_tiles_enabled_flag = 1; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + + if (pic_param->pic_fields.bits.pcm_enabled_flag) { + max_pcm_size_minus3 = pic_param->log2_min_pcm_luma_coding_block_size_minus3 + + pic_param->log2_diff_max_min_pcm_luma_coding_block_size; + min_pcm_size_minus3 = pic_param->log2_min_pcm_luma_coding_block_size_minus3; + pcm_sample_bit_depth_luma_minus1 = (pic_param->pcm_sample_bit_depth_luma_minus1 & 0x0f); + pcm_sample_bit_depth_chroma_minus1 = (pic_param->pcm_sample_bit_depth_chroma_minus1 & 0x0f); + } else { + max_pcm_size_minus3 = MIN(pic_param->log2_min_luma_coding_block_size_minus3 + pic_param->log2_diff_max_min_luma_coding_block_size, 2); + } + + if (pic_param->pic_fields.bits.tiles_enabled_flag) + loop_filter_across_tiles_enabled_flag = pic_param->pic_fields.bits.loop_filter_across_tiles_enabled_flag; + + BEGIN_BCS_BATCH(batch, 19); + + OUT_BCS_BATCH(batch, HCP_PIC_STATE | (19 - 2)); + + OUT_BCS_BATCH(batch, + gen9_hcpd_context->picture_height_in_min_cb_minus1 << 16 | + gen9_hcpd_context->picture_width_in_min_cb_minus1); + OUT_BCS_BATCH(batch, + max_pcm_size_minus3 << 10 | + min_pcm_size_minus3 << 8 | + (pic_param->log2_min_transform_block_size_minus2 + + pic_param->log2_diff_max_min_transform_block_size) << 6 | + pic_param->log2_min_transform_block_size_minus2 << 4 | + (pic_param->log2_min_luma_coding_block_size_minus3 + + pic_param->log2_diff_max_min_luma_coding_block_size) << 2 | + pic_param->log2_min_luma_coding_block_size_minus3); + OUT_BCS_BATCH(batch, 0); /* DW 3, ignored */ + OUT_BCS_BATCH(batch, + 0 << 27 | + pic_param->pic_fields.bits.strong_intra_smoothing_enabled_flag << 26 | + pic_param->pic_fields.bits.transquant_bypass_enabled_flag << 25 | + pic_param->pic_fields.bits.amp_enabled_flag << 23 | + pic_param->pic_fields.bits.transform_skip_enabled_flag << 22 | + !(pic_param->CurrPic.flags & VA_PICTURE_HEVC_BOTTOM_FIELD) << 21 | + !!(pic_param->CurrPic.flags & VA_PICTURE_HEVC_FIELD_PIC) << 20 | + pic_param->pic_fields.bits.weighted_pred_flag << 19 | + pic_param->pic_fields.bits.weighted_bipred_flag << 18 | + pic_param->pic_fields.bits.tiles_enabled_flag << 17 | + pic_param->pic_fields.bits.entropy_coding_sync_enabled_flag << 16 | + loop_filter_across_tiles_enabled_flag << 15 | + pic_param->pic_fields.bits.sign_data_hiding_enabled_flag << 13 | + pic_param->log2_parallel_merge_level_minus2 << 10 | + pic_param->pic_fields.bits.constrained_intra_pred_flag << 9 | + pic_param->pic_fields.bits.pcm_loop_filter_disabled_flag << 8 | + (pic_param->diff_cu_qp_delta_depth & 0x03) << 6 | + pic_param->pic_fields.bits.cu_qp_delta_enabled_flag << 5 | + pic_param->pic_fields.bits.pcm_enabled_flag << 4 | + pic_param->slice_parsing_fields.bits.sample_adaptive_offset_enabled_flag << 3 | + 0); + OUT_BCS_BATCH(batch, + pic_param->bit_depth_luma_minus8 << 27 | + pic_param->bit_depth_chroma_minus8 << 24 | + pcm_sample_bit_depth_luma_minus1 << 20 | + pcm_sample_bit_depth_chroma_minus1 << 16 | + pic_param->max_transform_hierarchy_depth_inter << 13 | + pic_param->max_transform_hierarchy_depth_intra << 10 | + (pic_param->pps_cr_qp_offset & 0x1f) << 5 | + (pic_param->pps_cb_qp_offset & 0x1f)); + OUT_BCS_BATCH(batch, + 0 << 29 | + 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* DW 10 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); /* DW 15 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_tile_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + VAPictureParameterBufferHEVC *pic_param; + uint8_t pos_col[20], pos_row[24]; + int i; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + + memset(pos_col, 0, sizeof(pos_col)); + memset(pos_row, 0, sizeof(pos_row)); + + for (i = 0; i <= MIN(pic_param->num_tile_columns_minus1, 18); i++) + pos_col[i + 1] = pos_col[i] + pic_param->column_width_minus1[i] + 1; + + for (i = 0; i <= MIN(pic_param->num_tile_rows_minus1, 20); i++) + pos_row[i + 1] = pos_row[i] + pic_param->row_height_minus1[i] + 1; + + BEGIN_BCS_BATCH(batch, 13); + + OUT_BCS_BATCH(batch, HCP_TILE_STATE | (13 - 2)); + + OUT_BCS_BATCH(batch, + pic_param->num_tile_columns_minus1 << 5 | + pic_param->num_tile_rows_minus1); + intel_batchbuffer_data(batch, pos_col, 20); + intel_batchbuffer_data(batch, pos_row, 24); + + ADVANCE_BCS_BATCH(batch); +} + +static int +gen9_hcpd_get_reference_picture_frame_id(VAPictureHEVC *ref_pic, + GenFrameStore frame_store[MAX_GEN_HCP_REFERENCE_FRAMES]) +{ + int i; + + if (ref_pic->picture_id == VA_INVALID_ID || + (ref_pic->flags & VA_PICTURE_HEVC_INVALID)) + return 0; + + for (i = 0; i < MAX_GEN_HCP_REFERENCE_FRAMES; i++) { + if (ref_pic->picture_id == frame_store[i].surface_id) { + assert(frame_store[i].frame_store_id < MAX_GEN_HCP_REFERENCE_FRAMES); + return frame_store[i].frame_store_id; + } + } + + /* Should never get here !!! */ + assert(0); + return 0; +} + +static void +gen9_hcpd_ref_idx_state_1(struct intel_batchbuffer *batch, + int list, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param, + GenFrameStore frame_store[MAX_GEN_HCP_REFERENCE_FRAMES]) +{ + int i; + uint8_t num_ref_minus1 = (list ? slice_param->num_ref_idx_l1_active_minus1 : slice_param->num_ref_idx_l0_active_minus1); + uint8_t *ref_list = slice_param->RefPicList[list]; + + BEGIN_BCS_BATCH(batch, 18); + + OUT_BCS_BATCH(batch, HCP_REF_IDX_STATE | (18 - 2)); + OUT_BCS_BATCH(batch, + num_ref_minus1 << 1 | + list); + + for (i = 0; i < 16; i++) { + if (i < MIN((num_ref_minus1 + 1), 15)) { + VAPictureHEVC *ref_pic = &pic_param->ReferenceFrames[ref_list[i]]; + VAPictureHEVC *curr_pic = &pic_param->CurrPic; + + OUT_BCS_BATCH(batch, + !(ref_pic->flags & VA_PICTURE_HEVC_BOTTOM_FIELD) << 15 | + !!(ref_pic->flags & VA_PICTURE_HEVC_FIELD_PIC) << 14 | + !!(ref_pic->flags & VA_PICTURE_HEVC_LONG_TERM_REFERENCE) << 13 | + 0 << 12 | + 0 << 11 | + gen9_hcpd_get_reference_picture_frame_id(ref_pic, frame_store) << 8 | + (CLAMP(-128, 127, curr_pic->pic_order_cnt - ref_pic->pic_order_cnt) & 0xff)); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_ref_idx_state(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_I) + return; + + gen9_hcpd_ref_idx_state_1(batch, 0, pic_param, slice_param, gen9_hcpd_context->reference_surfaces); + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_P) + return; + + gen9_hcpd_ref_idx_state_1(batch, 1, pic_param, slice_param, gen9_hcpd_context->reference_surfaces); +} + +static void +gen9_hcpd_weightoffset_state_1(struct intel_batchbuffer *batch, + int list, + VASliceParameterBufferHEVC *slice_param) +{ + int i; + uint8_t num_ref_minus1 = (list == 1) ? slice_param->num_ref_idx_l1_active_minus1 : slice_param->num_ref_idx_l0_active_minus1; + int8_t *luma_offset = (list == 1) ? slice_param->luma_offset_l1 : slice_param->luma_offset_l0; + int8_t *delta_luma_weight = (list == 1) ? slice_param->delta_luma_weight_l1 : slice_param->delta_luma_weight_l0; + int8_t (* chroma_offset)[2] = (list == 1) ? slice_param->ChromaOffsetL1 : slice_param->ChromaOffsetL0; + int8_t (* delta_chroma_weight)[2] = (list == 1) ? slice_param->delta_chroma_weight_l1 : slice_param->delta_chroma_weight_l0; + + BEGIN_BCS_BATCH(batch, 34); + + OUT_BCS_BATCH(batch, HCP_WEIGHTOFFSET | (34 - 2)); + OUT_BCS_BATCH(batch, list); + + for (i = 0; i < 16; i++) { + if (i < MIN((num_ref_minus1 + 1), 15)) { + OUT_BCS_BATCH(batch, + (luma_offset[i] & 0xff) << 8 | + (delta_luma_weight[i] & 0xff)); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + for (i = 0; i < 16; i++) { + if (i < MIN((num_ref_minus1 + 1), 15)) { + OUT_BCS_BATCH(batch, + (chroma_offset[i][1] & 0xff) << 24 | + (delta_chroma_weight[i][1] & 0xff) << 16 | + (chroma_offset[i][0] & 0xff) << 8 | + (delta_chroma_weight[i][0] & 0xff)); + } else { + OUT_BCS_BATCH(batch, 0); + } + } + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_weightoffset_state(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_I) + return; + + if ((slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_P && + !pic_param->pic_fields.bits.weighted_pred_flag) || + (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_B && + !pic_param->pic_fields.bits.weighted_bipred_flag)) + return; + + gen9_hcpd_weightoffset_state_1(batch, 0, slice_param); + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_P) + return; + + gen9_hcpd_weightoffset_state_1(batch, 1, slice_param); +} + +static int +gen9_hcpd_get_collocated_ref_idx(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + uint8_t *ref_list; + VAPictureHEVC *ref_pic; + + if (slice_param->collocated_ref_idx > 14) + return 0; + + if (!slice_param->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag) + return 0; + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_I) + return 0; + + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_P || + (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_B && + slice_param->LongSliceFlags.fields.collocated_from_l0_flag)) + ref_list = slice_param->RefPicList[0]; + else { + assert(slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_B); + ref_list = slice_param->RefPicList[1]; + } + + ref_pic = &pic_param->ReferenceFrames[ref_list[slice_param->collocated_ref_idx]]; + + return gen9_hcpd_get_reference_picture_frame_id(ref_pic, gen9_hcpd_context->reference_surfaces); +} + +static int +gen9_hcpd_is_list_low_delay(uint8_t ref_list_count, + uint8_t ref_list[15], + VAPictureHEVC *curr_pic, + VAPictureHEVC ref_surfaces[15]) +{ + int i; + + for (i = 0; i < MIN(ref_list_count, 15); i++) { + VAPictureHEVC *ref_pic; + + if (ref_list[i] > 14) + continue; + + ref_pic = &ref_surfaces[ref_list[i]]; + + if (ref_pic->pic_order_cnt > curr_pic->pic_order_cnt) + return 0; + } + + return 1; +} + +static int +gen9_hcpd_is_low_delay(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param) +{ + if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_I) + return 0; + else if (slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_P) + return gen9_hcpd_is_list_low_delay(slice_param->num_ref_idx_l0_active_minus1 + 1, + slice_param->RefPicList[0], + &pic_param->CurrPic, + pic_param->ReferenceFrames); + else + return gen9_hcpd_is_list_low_delay(slice_param->num_ref_idx_l0_active_minus1 + 1, + slice_param->RefPicList[0], + &pic_param->CurrPic, + pic_param->ReferenceFrames) && + gen9_hcpd_is_list_low_delay(slice_param->num_ref_idx_l1_active_minus1 + 1, + slice_param->RefPicList[1], + &pic_param->CurrPic, + pic_param->ReferenceFrames); +} + +static void +gen9_hcpd_slice_state(VADriverContextP ctx, + VAPictureParameterBufferHEVC *pic_param, + VASliceParameterBufferHEVC *slice_param, + VASliceParameterBufferHEVC *next_slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, next_slice_ver_pos; + unsigned short collocated_ref_idx, collocated_from_l0_flag; + int sliceqp_sign_flag = 0, sliceqp = 0; + + slice_hor_pos = slice_param->slice_segment_address % gen9_hcpd_context->picture_width_in_ctbs; + slice_ver_pos = slice_param->slice_segment_address / gen9_hcpd_context->picture_width_in_ctbs; + + if (next_slice_param) { + next_slice_hor_pos = next_slice_param->slice_segment_address % gen9_hcpd_context->picture_width_in_ctbs; + next_slice_ver_pos = next_slice_param->slice_segment_address / gen9_hcpd_context->picture_width_in_ctbs; + } else { + next_slice_hor_pos = 0; + next_slice_ver_pos = 0; + } + + collocated_ref_idx = gen9_hcpd_get_collocated_ref_idx(ctx, pic_param, slice_param, gen9_hcpd_context); + collocated_from_l0_flag = slice_param->LongSliceFlags.fields.collocated_from_l0_flag; + + if ((!gen9_hcpd_context->first_inter_slice_valid) && + (slice_param->LongSliceFlags.fields.slice_type != HEVC_SLICE_I) && + slice_param->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag) { + gen9_hcpd_context->first_inter_slice_collocated_ref_idx = collocated_ref_idx; + gen9_hcpd_context->first_inter_slice_collocated_from_l0_flag = collocated_from_l0_flag; + gen9_hcpd_context->first_inter_slice_valid = 1; + } + + /* HW requirement */ + if (gen9_hcpd_context->first_inter_slice_valid && + ((slice_param->LongSliceFlags.fields.slice_type == HEVC_SLICE_I) || + (!slice_param->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag))) { + collocated_ref_idx = gen9_hcpd_context->first_inter_slice_collocated_ref_idx; + collocated_from_l0_flag = gen9_hcpd_context->first_inter_slice_collocated_from_l0_flag; + } + + sliceqp = pic_param->init_qp_minus26 + 26 + slice_param->slice_qp_delta; + if((pic_param->bit_depth_luma_minus8 > 0) + || (pic_param->bit_depth_chroma_minus8 > 0)) + { + if(sliceqp < 0) + { + sliceqp_sign_flag = 1; + sliceqp = -sliceqp; + } + } + + BEGIN_BCS_BATCH(batch, 9); + + OUT_BCS_BATCH(batch, HCP_SLICE_STATE | (9 - 2)); + + OUT_BCS_BATCH(batch, + slice_ver_pos << 16 | + slice_hor_pos); + OUT_BCS_BATCH(batch, + next_slice_ver_pos << 16 | + next_slice_hor_pos); + OUT_BCS_BATCH(batch, + (slice_param->slice_cr_qp_offset & 0x1f) << 17 | + (slice_param->slice_cb_qp_offset & 0x1f) << 12 | + sliceqp << 6 | + slice_param->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag << 5 | + slice_param->LongSliceFlags.fields.dependent_slice_segment_flag << 4 | + sliceqp_sign_flag << 3 | + !next_slice_param << 2 | + slice_param->LongSliceFlags.fields.slice_type); + OUT_BCS_BATCH(batch, + collocated_ref_idx << 26 | + (5 - slice_param->five_minus_max_num_merge_cand - 1) << 23 | + slice_param->LongSliceFlags.fields.cabac_init_flag << 22 | + slice_param->luma_log2_weight_denom << 19 | + ((slice_param->luma_log2_weight_denom + slice_param->delta_chroma_log2_weight_denom) & 0x7) << 16 | + collocated_from_l0_flag << 15 | + gen9_hcpd_is_low_delay(ctx, pic_param, slice_param) << 14 | + slice_param->LongSliceFlags.fields.mvd_l1_zero_flag << 13 | + slice_param->LongSliceFlags.fields.slice_sao_luma_flag << 12 | + slice_param->LongSliceFlags.fields.slice_sao_chroma_flag << 11 | + slice_param->LongSliceFlags.fields.slice_loop_filter_across_slices_enabled_flag << 10 | + (slice_param->slice_beta_offset_div2 & 0xf) << 5 | + (slice_param->slice_tc_offset_div2 & 0xf) << 1 | + slice_param->LongSliceFlags.fields.slice_deblocking_filter_disabled_flag); + OUT_BCS_BATCH(batch, + slice_param->slice_data_byte_offset); /* DW 5 */ + OUT_BCS_BATCH(batch, + 0 << 26 | + 0 << 20 | + 0); + OUT_BCS_BATCH(batch, 0); /* Ignored for decoding */ + OUT_BCS_BATCH(batch, 0); /* Ignored for decoding */ + + ADVANCE_BCS_BATCH(batch); +} + +static void +gen9_hcpd_bsd_object(VADriverContextP ctx, + VASliceParameterBufferHEVC *slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_BSD_OBJECT | (3 - 2)); + + OUT_BCS_BATCH(batch, slice_param->slice_data_size); + OUT_BCS_BATCH(batch, slice_param->slice_data_offset); + + ADVANCE_BCS_BATCH(batch); +} + +static VAStatus +gen9_hcpd_hevc_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + VAStatus vaStatus; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + VAPictureParameterBufferHEVC *pic_param; + VASliceParameterBufferHEVC *slice_param, *next_slice_param, *next_slice_group_param; + dri_bo *slice_data_bo; + int i, j; + + vaStatus = gen9_hcpd_hevc_decode_init(ctx, decode_state, gen9_hcpd_context); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + + if (i965->intel.has_bsd2) + intel_batchbuffer_start_atomic_bcs_override(batch, 0x1000, BSD_RING0); + else + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + + gen9_hcpd_pipe_mode_select(ctx, decode_state, HCP_CODEC_HEVC, gen9_hcpd_context); + gen9_hcpd_surface_state(ctx, decode_state, gen9_hcpd_context); + gen9_hcpd_pipe_buf_addr_state(ctx, decode_state, gen9_hcpd_context); + gen9_hcpd_hevc_qm_state(ctx, decode_state, gen9_hcpd_context); + gen9_hcpd_pic_state(ctx, decode_state, gen9_hcpd_context); + + if (pic_param->pic_fields.bits.tiles_enabled_flag) + gen9_hcpd_tile_state(ctx, decode_state, gen9_hcpd_context); + + /* Need to double it works or not if the two slice groups have differenct slice data buffers */ + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferHEVC *)decode_state->slice_params[j]->buffer; + slice_data_bo = decode_state->slice_datas[j]->bo; + + gen9_hcpd_ind_obj_base_addr_state(ctx, slice_data_bo, gen9_hcpd_context); + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferHEVC *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + gen9_hcpd_slice_state(ctx, pic_param, slice_param, next_slice_param, gen9_hcpd_context); + gen9_hcpd_ref_idx_state(ctx, pic_param, slice_param, gen9_hcpd_context); + gen9_hcpd_weightoffset_state(ctx, pic_param, slice_param, gen9_hcpd_context); + gen9_hcpd_bsd_object(ctx, slice_param, gen9_hcpd_context); + slice_param++; + } + } + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); + +out: + return vaStatus; +} + +/*********************************************************/ +/* VP9 Code */ +/*********************************************************/ + + +#define VP9_PROB_BUFFER_FIRST_PART_SIZE 2010 +#define VP9_PROB_BUFFER_SECOND_PART_SIZE 10 +#define VP9_PROB_BUFFER_KEY_INTER_OFFSET 1667 +#define VP9_PROB_BUFFER_KEY_INTER_SIZE 343 + +#define VP9_PROB_BUFFER_UPDATE_NO 0 +#define VP9_PROB_BUFFER_UPDATE_SECNE_1 1 +#define VP9_PROB_BUFFER_UPDATE_SECNE_2 2 +#define VP9_PROB_BUFFER_UPDATE_SECNE_3 3 +#define VP9_PROB_BUFFER_UPDATE_SECNE_4 4 +#define VP9_PROB_BUFFER_UPDATE_SECNE_5 5 + +#define VP9_PROB_BUFFER_SAVED_NO 0 +#define VP9_PROB_BUFFER_SAVED_SECNE_1 1 +#define VP9_PROB_BUFFER_SAVED_SECNE_2 2 + +#define VP9_PROB_BUFFER_RESTORED_NO 0 +#define VP9_PROB_BUFFER_RESTORED_SECNE_1 1 +#define VP9_PROB_BUFFER_RESTORED_SECNE_2 2 +#define VP9_PROB_BUFFER_RESTORED_SECNE_MAX (VP9_PROB_BUFFER_RESTORED_SECNE_2 + 1) + +static void vp9_update_segmentId_buffer(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context, uint8_t isScaling) +{ + VADecPictureParameterBufferVP9 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + + int size = 0; + + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) || + pic_param->pic_fields.bits.error_resilient_mode || + pic_param->pic_fields.bits.intra_only || isScaling) { + + size = (gen9_hcpd_context->picture_width_in_min_cb_minus1+2)*(gen9_hcpd_context->picture_height_in_min_cb_minus1 + 2) * 1; + size<<=6; + //VP9 Segment ID buffer needs to be zero + dri_bo_map(gen9_hcpd_context->vp9_segment_id_buffer.bo,1); + memset((unsigned char *)gen9_hcpd_context->vp9_segment_id_buffer.bo->virtual,0, size); + dri_bo_unmap(gen9_hcpd_context->vp9_segment_id_buffer.bo); + } +} + +static void +vp9_gen_default_probabilities(VADriverContextP ctx, struct gen9_hcpd_context *gen9_hcpd_context) +{ + int i = 0; + uint32_t size = 0; + + size = sizeof(FRAME_CONTEXT); + memset(&gen9_hcpd_context->vp9_fc_key_default,0,size); + memset(&gen9_hcpd_context->vp9_fc_inter_default,0,size); + memset(&gen9_hcpd_context->vp9_frame_ctx,0,size*FRAME_CONTEXTS); + //more code to come here below + + //1. key default + gen9_hcpd_context->vp9_fc_key_default.tx_probs = default_tx_probs; + //dummy 52 + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.coeff_probs4x4, default_coef_probs_4x4); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.coeff_probs8x8, default_coef_probs_8x8); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.coeff_probs16x16, default_coef_probs_16x16); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.coeff_probs32x32, default_coef_probs_32x32); + //dummy 16 + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.skip_probs, default_skip_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.partition_prob, vp9_kf_partition_probs); + //dummy 47 + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.uv_mode_prob, vp9_kf_uv_mode_prob); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.seg_tree_probs, default_seg_tree_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_key_default.seg_pred_probs, default_seg_pred_probs); + + //2. inter default + gen9_hcpd_context->vp9_fc_inter_default.tx_probs = default_tx_probs; + //dummy 52 + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs4x4, default_coef_probs_4x4); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs8x8, default_coef_probs_8x8); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs16x16, default_coef_probs_16x16); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs32x32, default_coef_probs_32x32); + //dummy 16 + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.skip_probs, default_skip_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.inter_mode_probs, default_inter_mode_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.switchable_interp_prob, default_switchable_interp_prob); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.intra_inter_prob, default_intra_inter_p); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.comp_inter_prob, default_comp_inter_p); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.single_ref_prob, default_single_ref_p); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.comp_ref_prob, default_comp_ref_p); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.y_mode_prob, default_if_y_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.partition_prob, default_partition_probs); + gen9_hcpd_context->vp9_fc_inter_default.nmvc = default_nmv_context; + //dummy 47 + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.uv_mode_prob, default_if_uv_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.seg_tree_probs, default_seg_tree_probs); + vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.seg_pred_probs, default_seg_pred_probs); + + for(i = 0; i < FRAME_CONTEXTS; i++) + { + gen9_hcpd_context->vp9_frame_ctx[i] = gen9_hcpd_context->vp9_fc_inter_default; + } + gen9_hcpd_context->vp9_fc = gen9_hcpd_context->vp9_fc_inter_default; + +} + +static void +vp9_update_probabilities(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + VADecPictureParameterBufferVP9 *pic_param; + int i = 0; + uint8_t is_saved = VP9_PROB_BUFFER_SAVED_NO; + uint8_t is_restored = VP9_PROB_BUFFER_RESTORED_NO; + + uint8_t last_frame_type = gen9_hcpd_context->last_frame.frame_type; + uint8_t temp_frame_ctx_id; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + temp_frame_ctx_id = pic_param->pic_fields.bits.frame_context_idx; + + if(pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) + { + gen9_hcpd_context->vp9_fc = gen9_hcpd_context->vp9_fc_key_default; + gen9_hcpd_context->last_frame.prob_buffer_saved_flag = VP9_PROB_BUFFER_SAVED_NO; + gen9_hcpd_context->last_frame.prob_buffer_restored_flag = VP9_PROB_BUFFER_RESTORED_NO; + + }else + { + gen9_hcpd_context->vp9_fc = gen9_hcpd_context->vp9_fc_inter_default; + } + + // restore? + if(gen9_hcpd_context->last_frame.prob_buffer_saved_flag == VP9_PROB_BUFFER_SAVED_SECNE_1) + { + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME)) + { + //save the inter frame values for the 343 bytes + //Update the 343 bytes of the buffer with Intra values + is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_1; + } + }else if(gen9_hcpd_context->last_frame.prob_buffer_saved_flag == VP9_PROB_BUFFER_SAVED_SECNE_2) + { + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) ||pic_param->pic_fields.bits.intra_only|pic_param->pic_fields.bits.error_resilient_mode) + { + temp_frame_ctx_id = 0; + } + + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME) && + (temp_frame_ctx_id == 0)) + { + + is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_2; + } + } + + if(is_restored > VP9_PROB_BUFFER_RESTORED_NO && is_restored < VP9_PROB_BUFFER_RESTORED_SECNE_MAX) + { + memcpy(gen9_hcpd_context->vp9_frame_ctx[gen9_hcpd_context->last_frame.frame_context_idx].inter_mode_probs,gen9_hcpd_context->vp9_saved_fc.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + } + + if((gen9_hcpd_context->last_frame.prob_buffer_restored_flag == VP9_PROB_BUFFER_RESTORED_SECNE_MAX) || + (gen9_hcpd_context->last_frame.refresh_frame_context && last_frame_type == HCP_VP9_KEY_FRAME && (pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME))) + { + if(pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME) + { + memcpy(gen9_hcpd_context->vp9_frame_ctx[gen9_hcpd_context->last_frame.frame_context_idx].inter_mode_probs,gen9_hcpd_context->vp9_fc_inter_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + } + } + //first part buffer update: Case 1)Reset all 4 probablity buffers + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) ||pic_param->pic_fields.bits.intra_only|pic_param->pic_fields.bits.error_resilient_mode) + { + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) || + (pic_param->pic_fields.bits.reset_frame_context == 3)|| + pic_param->pic_fields.bits.error_resilient_mode) + { + //perform full buffer update + for(i = 0; i < FRAME_CONTEXTS; i++) + { + memcpy(&gen9_hcpd_context->vp9_frame_ctx[i],&gen9_hcpd_context->vp9_fc_inter_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); + } + }else if(pic_param->pic_fields.bits.reset_frame_context == 2&&pic_param->pic_fields.bits.intra_only) + { + memcpy(&gen9_hcpd_context->vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx],&gen9_hcpd_context->vp9_fc_inter_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); + } + pic_param->pic_fields.bits.frame_context_idx = 0; + } + + //Full buffer update: Case 2.2)Reset only segmentation prob buffer + if(pic_param->pic_fields.bits.segmentation_enabled && + pic_param->pic_fields.bits.segmentation_update_map) + { + for(i = 0; i < FRAME_CONTEXTS; i++) + { + //Reset only the segementation probability buffers + vp9_copy(gen9_hcpd_context->vp9_frame_ctx[i].seg_tree_probs, default_seg_tree_probs); + vp9_copy(gen9_hcpd_context->vp9_frame_ctx[i].seg_pred_probs, default_seg_pred_probs); + } + } + + //update vp9_fc according to frame_context_id + { + gen9_hcpd_context->vp9_fc = gen9_hcpd_context->vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx]; + } + //Partial Buffer Update + //Case 1) Update top 3 probabilities only + if(pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) + { + memcpy(gen9_hcpd_context->vp9_fc.inter_mode_probs,gen9_hcpd_context->vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + if((!pic_param->pic_fields.bits.segmentation_enabled || + !pic_param->pic_fields.bits.segmentation_update_map)) { + //Update with key frame default probability values for only + //tx_probs, coef_probs, and the next 343 bytes + memcpy(&gen9_hcpd_context->vp9_fc,&gen9_hcpd_context->vp9_fc_key_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); + } + } + //Case 2) Update 343 bytes for first inter following key frame + if( last_frame_type == HCP_VP9_KEY_FRAME && + (pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME)) { + //Update with inter frame default values for the 343 bytes + memcpy(gen9_hcpd_context->vp9_fc.inter_mode_probs,gen9_hcpd_context->vp9_fc_inter_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + } + //Case 2.1) Update 343 bytes for first intra-inly frame following key frame + if( last_frame_type == HCP_VP9_KEY_FRAME && + pic_param->pic_fields.bits.intra_only) { + //Update with inter frame default values for the 343 bytes + memcpy(gen9_hcpd_context->vp9_fc.inter_mode_probs,gen9_hcpd_context->vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + } + //Case 3) Update only segment probabilities + if((pic_param->pic_fields.bits.segmentation_enabled && + pic_param->pic_fields.bits.segmentation_update_map)) + { + //Update seg_tree_probs and seg_pred_probs accordingly + for (i=0; ivp9_fc.seg_tree_probs[i] = pic_param->mb_segment_tree_probs[i]; + } + for (i=0; ivp9_fc.seg_pred_probs[i] = pic_param->segment_pred_probs[i]; + } + } + + //Case 4) Considering Intra only frame in the middle of Inter frames + if((pic_param->pic_fields.bits.intra_only && + (pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME)&& + (pic_param->pic_fields.bits.reset_frame_context==0 || + pic_param->pic_fields.bits.reset_frame_context==1|| + pic_param->pic_fields.bits.reset_frame_context==2|| + pic_param->pic_fields.bits.reset_frame_context==3)) && + (last_frame_type == HCP_VP9_INTER_FRAME)) + { + //save the inter frame values for the 343 bytes + //Update the 343 bytes of the buffer with Intra values + is_saved = VP9_PROB_BUFFER_SAVED_SECNE_1; + } + //Case 5) Considering Intra only frame among 3 Inter frames + if((pic_param->pic_fields.bits.intra_only && + (pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME)&& + (pic_param->pic_fields.bits.reset_frame_context==2 || + pic_param->pic_fields.bits.frame_context_idx==1)) && + ((last_frame_type == HCP_VP9_INTER_FRAME) && + (gen9_hcpd_context->last_frame.frame_context_idx==0))) + { + //save the inter frame values for the 343 bytes + //Update the 343 bytes of the buffer with Intra values + is_saved = VP9_PROB_BUFFER_SAVED_SECNE_2; + } + + if(is_saved > VP9_PROB_BUFFER_SAVED_NO) + { + gen9_hcpd_context->vp9_saved_fc = gen9_hcpd_context->vp9_fc; + memcpy(gen9_hcpd_context->vp9_fc.inter_mode_probs,gen9_hcpd_context->vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); + }else if(pic_param->pic_fields.bits.intra_only) + { + is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_MAX; + + } + + // update after the restored + if(gen9_hcpd_context->last_frame.prob_buffer_restored_flag == VP9_PROB_BUFFER_RESTORED_SECNE_2) + { + if((pic_param->pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME) && + pic_param->pic_fields.bits.frame_context_idx==1) + { + memcpy(&gen9_hcpd_context->vp9_fc,&gen9_hcpd_context->vp9_fc_inter_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); + } + } + + { + dri_bo_map(gen9_hcpd_context->vp9_probability_buffer.bo,1); + memcpy((unsigned char *)gen9_hcpd_context->vp9_probability_buffer.bo->virtual,&gen9_hcpd_context->vp9_fc,2048); + dri_bo_unmap(gen9_hcpd_context->vp9_probability_buffer.bo); + } + // save the flag in order to restore or update prob buffer + gen9_hcpd_context->last_frame.prob_buffer_saved_flag = is_saved; + gen9_hcpd_context->last_frame.prob_buffer_restored_flag = is_restored; +} + +static void +gen9_hcpd_init_vp9_surface(VADriverContextP ctx, + VADecPictureParameterBufferVP9 *pic_param, + struct object_surface *obj_surface, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenVP9Surface *gen9_vp9_surface; + uint32_t size=0; + + if (!obj_surface) + return; + + obj_surface->free_private_data = gen_free_vp9_surface; + gen9_vp9_surface = obj_surface->private_data; + + if (!gen9_vp9_surface) { + gen9_vp9_surface = calloc(sizeof(GenVP9Surface), 1); + gen9_vp9_surface->base.frame_store_id = -1; + obj_surface->private_data = gen9_vp9_surface; + } + + //Super block size in VP9 is 64x64, size in SBs + size = gen9_hcpd_context->picture_width_in_ctbs * gen9_hcpd_context->picture_height_in_ctbs * 9 ; + size<<=6; //CL aligned + + if (gen9_vp9_surface->motion_vector_temporal_bo == NULL) { + gen9_vp9_surface->motion_vector_temporal_bo = dri_bo_alloc(i965->intel.bufmgr, + "current motion vector temporal buffer", + size, + 0x1000); + } + gen9_vp9_surface->frame_width = pic_param->frame_width; + gen9_vp9_surface->frame_height = pic_param->frame_height; + +} + +static VAStatus +gen9_hcpd_vp9_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VADecPictureParameterBufferVP9 *pic_param; + struct object_surface *obj_surface; + uint32_t size; + int width_in_mbs=0, height_in_mbs=0; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + + width_in_mbs = (pic_param->frame_width + 15) / 16; + height_in_mbs = (pic_param->frame_height + 15) / 16; + + //For BXT, we support only till 4K + assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */ + assert(height_in_mbs > 0 && height_in_mbs <= 256); + + //Update the frame store buffers with the reference frames information + intel_update_vp9_frame_store_index(ctx, + decode_state, + pic_param, + gen9_hcpd_context->reference_surfaces); + + /* Current decoded picture */ + obj_surface = decode_state->render_object; + //Ensure there is a tiled render surface in NV12 format. If not, create one. + vp9_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); + + + //Super block in VP9 is 64x64 + gen9_hcpd_context->ctb_size = 64; + gen9_hcpd_context->min_cb_size = 8; //Min block size is 4 or 8? + + //If picture width/height is not multiple of 64, needs to upsize it to the next 64 pixels + //before calculation below. + gen9_hcpd_context->picture_width_in_ctbs = ALIGN(pic_param->frame_width, gen9_hcpd_context->ctb_size) / gen9_hcpd_context->ctb_size; + gen9_hcpd_context->picture_height_in_ctbs = ALIGN(pic_param->frame_height, gen9_hcpd_context->ctb_size) / gen9_hcpd_context->ctb_size; + + gen9_hcpd_context->picture_width_in_min_cb_minus1 = ALIGN(pic_param->frame_width, gen9_hcpd_context->min_cb_size) / gen9_hcpd_context->min_cb_size - 1; + gen9_hcpd_context->picture_height_in_min_cb_minus1 = ALIGN(pic_param->frame_height, gen9_hcpd_context->min_cb_size) / gen9_hcpd_context->min_cb_size - 1; + + gen9_hcpd_context->picture_width_in_pixels = (gen9_hcpd_context->picture_width_in_min_cb_minus1 + 1) * gen9_hcpd_context->min_cb_size ; + gen9_hcpd_context->picture_height_in_pixels = (gen9_hcpd_context->picture_height_in_min_cb_minus1 + 1) * gen9_hcpd_context->min_cb_size ; + + gen9_hcpd_init_vp9_surface(ctx, pic_param, obj_surface, gen9_hcpd_context); + + size = gen9_hcpd_context->picture_width_in_ctbs*18; //num_width_in_SB * 18 + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_line_buffer), "line buffer", size); + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_line_buffer), "tile line buffer", size); + + size = gen9_hcpd_context->picture_height_in_ctbs*17; //num_height_in_SB * 17 + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_column_buffer), "tile column buffer", size); + + size = gen9_hcpd_context->picture_width_in_ctbs*5; //num_width_in_SB * 5 + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_line_buffer), "metadata line buffer", size); + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_line_buffer), "metadata tile line buffer", size); + + size = gen9_hcpd_context->picture_height_in_ctbs*5; //num_height_in_SB * 5 + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_column_buffer), "metadata tile column buffer", size); + + size =gen9_hcpd_context->picture_width_in_ctbs*1; //num_width_in_SB * 1 + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->hvd_line_rowstore_buffer), "hvd line rowstore buffer", size); + ALLOC_GEN_BUFFER((&gen9_hcpd_context->hvd_tile_rowstore_buffer), "hvd tile rowstore buffer", size); + + size = 32; + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->vp9_probability_buffer), "vp9 probability buffer", size); + + size = (gen9_hcpd_context->picture_width_in_min_cb_minus1+2)*(gen9_hcpd_context->picture_height_in_min_cb_minus1 + 2) * 1; + size<<=6; + ALLOC_GEN_BUFFER((&gen9_hcpd_context->vp9_segment_id_buffer), "vp9 segment id buffer", size); + + gen9_hcpd_context->first_inter_slice_collocated_ref_idx = 0; + gen9_hcpd_context->first_inter_slice_collocated_from_l0_flag = 0; + gen9_hcpd_context->first_inter_slice_valid = 0; + + return VA_STATUS_SUCCESS; +} + +static void +gen9_hcpd_vp9_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + struct object_surface *obj_surface = decode_state->render_object; + struct object_surface *tmp_obj_surface = NULL; + unsigned int y_cb_offset; + int i = 0; + + assert(obj_surface); + + y_cb_offset = obj_surface->y_cb_offset; + + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + (0 << 28) | /* surface id */ + (obj_surface->width - 1)); /* pitch - 1 */ + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + y_cb_offset); + ADVANCE_BCS_BATCH(batch); + + tmp_obj_surface = obj_surface; + + for(i = 0; i < 3; i++) + { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + if (obj_surface && obj_surface->private_data) + { + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + ((i + 2) << 28) | /* surface id */ + (obj_surface->width - 1)); /* pitch - 1 */ + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + obj_surface->y_cb_offset); + ADVANCE_BCS_BATCH(batch); + }else + { + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_SURFACE_STATE | (3 - 2)); + OUT_BCS_BATCH(batch, + ((i + 2) << 28) | /* surface id */ + (tmp_obj_surface->width - 1)); /* pitch - 1 */ + OUT_BCS_BATCH(batch, + (SURFACE_FORMAT_PLANAR_420_8 << 28) | + tmp_obj_surface->y_cb_offset); + ADVANCE_BCS_BATCH(batch); + } + } +} + +static void +gen9_hcpd_vp9_pipe_buf_addr_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + struct object_surface *obj_surface; + GenVP9Surface *gen9_vp9_surface; + int i=0; + + BEGIN_BCS_BATCH(batch, 95); + + OUT_BCS_BATCH(batch, HCP_PIPE_BUF_ADDR_STATE | (95 - 2)); + + obj_surface = decode_state->render_object; + assert(obj_surface && obj_surface->bo); + gen9_vp9_surface = obj_surface->private_data; + assert(gen9_vp9_surface && gen9_vp9_surface->motion_vector_temporal_bo); + + OUT_BUFFER_MA_TARGET(obj_surface->bo); /* DW 1..3 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_line_buffer.bo);/* DW 4..6 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_tile_line_buffer.bo); /* DW 7..9 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->deblocking_filter_tile_column_buffer.bo); /* DW 10..12 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_line_buffer.bo); /* DW 13..15 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_tile_line_buffer.bo); /* DW 16..18 */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->metadata_tile_column_buffer.bo); /* DW 19..21 */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 22..24, ignore for VP9 */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 25..27, ignore for VP9 */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 28..30, ignore for VP9 */ + OUT_BUFFER_MA_TARGET(gen9_vp9_surface->motion_vector_temporal_bo); /* DW 31..33 */ + + OUT_BUFFER_MA_TARGET(NULL); /* DW 34..36, reserved */ + + /* DW 37..52 - Reference picture address */ + for (i = 0; i < 3; i++) + { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + + if (obj_surface) + { + OUT_BUFFER_NMA_REFERENCE(obj_surface->bo); + } + else + OUT_BUFFER_NMA_REFERENCE(NULL); + } + for (; i < ARRAY_ELEMS(gen9_hcpd_context->reference_surfaces); i++) + { + OUT_BUFFER_NMA_REFERENCE(NULL); + } + OUT_BCS_BATCH(batch, 0); /* DW 53, memory address attributes */ + + OUT_BUFFER_MA_REFERENCE(NULL); /* DW 54..56, ignore for decoding mode */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 57..59, StreamOutEnable - used for transcoding */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 60..62, DecodedPictureStatusError, ignored */ + OUT_BUFFER_MA_TARGET(NULL); /* DW 63..65, Ignored */ + + /* DW 66..81 - for 8 Collocated motion vectors */ + for (i = 0; i < 1; i++) + { + OUT_BUFFER_NMA_REFERENCE(gen9_hcpd_context->last_frame.mv_temporal_buffer_bo); + } + for (; i < ARRAY_ELEMS(gen9_hcpd_context->reference_surfaces); i++) + { + OUT_BUFFER_NMA_REFERENCE(NULL); + } + + OUT_BCS_BATCH(batch, 0); /* DW 82, memory address attributes */ + + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->vp9_probability_buffer.bo); /* DW 83..85, VP9 Probability bufffer */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->vp9_segment_id_buffer.bo); /* DW 86..88, VP9 Segment ID buffer */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->hvd_line_rowstore_buffer.bo);/* DW 89..91, VP9 HVD Line Rowstore buffer */ + OUT_BUFFER_MA_TARGET(gen9_hcpd_context->hvd_tile_rowstore_buffer.bo);/* DW 92..94, VP9 HVD Tile Rowstore buffer */ + + ADVANCE_BCS_BATCH(batch); + gen9_hcpd_context->last_frame.mv_temporal_buffer_bo = gen9_vp9_surface->motion_vector_temporal_bo; +} + +static inline int +gen9_hcpd_vp9_valid_ref_frame_size(int ref_width, int ref_height, + int cur_width, int cur_height) { + return 2 * cur_width >= ref_width && + 2 * cur_height >= ref_height && + cur_width <= 16 * ref_width && + cur_height <= 16 * ref_height; +} +static void +gen9_hcpd_vp9_pic_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + VADecPictureParameterBufferVP9 *pic_param; + struct object_surface *obj_surface; + GenVP9Surface *gen9_vp9_surface; + uint16_t scale_h = 0; + uint16_t scale_w = 0; + uint16_t frame_width_in_pixel = 0; + uint16_t frame_height_in_pixel = 0; + uint16_t fwidth = 64; + uint16_t fheight = 64; + int i; +#define LEN_COMMAND_OWN 12 + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + + uint8_t segmentIDStreamInEnable = 0; + uint8_t segmentIDStreamOutEnable = (pic_param->pic_fields.bits.segmentation_enabled && pic_param->pic_fields.bits.segmentation_update_map); + + // For KEY_FRAME or INTRA_ONLY frame, this bit should be set to "0". + uint8_t segmentation_temporal_update = + ((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) || (pic_param->pic_fields.bits.intra_only)) ? 0 : pic_param->pic_fields.bits.segmentation_temporal_update; + + + if(pic_param->pic_fields.bits.intra_only || (pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME)) + { + segmentIDStreamInEnable = 1; + }else if(pic_param->pic_fields.bits.segmentation_enabled) + { + if(!pic_param->pic_fields.bits.segmentation_update_map) + { + segmentIDStreamInEnable = 1; + + }else if( pic_param->pic_fields.bits.segmentation_temporal_update) + { + segmentIDStreamInEnable = 1; + } + } + + if(pic_param->pic_fields.bits.error_resilient_mode) + { + segmentIDStreamInEnable = 1; + } + + //frame type of previous frame (Key or Non-Key Frame). + uint8_t last_frame_type = gen9_hcpd_context->last_frame.frame_type; + + uint8_t use_pre_frame_mvs = 0; + use_pre_frame_mvs = !((pic_param->pic_fields.bits.error_resilient_mode) || + (pic_param->frame_width != gen9_hcpd_context->last_frame.frame_width) || + (pic_param->frame_height != gen9_hcpd_context->last_frame.frame_height) || + (pic_param->pic_fields.bits.intra_only) || + (pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME)|| + (gen9_hcpd_context->last_frame.intra_only)|| + (last_frame_type == HCP_VP9_KEY_FRAME) || + (!gen9_hcpd_context->last_frame.show_frame)); + + uint8_t adapt_probabilities_flag = 0; + if((pic_param->pic_fields.bits.error_resilient_mode || pic_param->pic_fields.bits.frame_parallel_decoding_mode)) + adapt_probabilities_flag = 0; //0: Do not adapt (error resilient or frame_parallel_mode are set) + else if(!(pic_param->pic_fields.bits.error_resilient_mode) && !(pic_param->pic_fields.bits.frame_parallel_decoding_mode)) + adapt_probabilities_flag = 1; //1: Adapt (not error resilient and not frame_ parallel_mode) + + frame_width_in_pixel = (gen9_hcpd_context->picture_width_in_min_cb_minus1 + 1) * gen9_hcpd_context->min_cb_size ; + frame_height_in_pixel = (gen9_hcpd_context->picture_height_in_min_cb_minus1 + 1) * gen9_hcpd_context->min_cb_size ; + + fwidth = (fwidth > frame_width_in_pixel)?frame_width_in_pixel:fwidth; + fheight = (fheight > frame_height_in_pixel)?frame_height_in_pixel:fheight; + + BEGIN_BCS_BATCH(batch, LEN_COMMAND_OWN); + + OUT_BCS_BATCH(batch, HCP_VP9_PIC_STATE | (LEN_COMMAND_OWN - 2)); + + OUT_BCS_BATCH(batch, + (frame_height_in_pixel - 1) << 16 | + (frame_width_in_pixel - 1)); /* DW 1 */ + OUT_BCS_BATCH(batch, + segmentIDStreamInEnable << 31 | + segmentIDStreamOutEnable << 30 | + pic_param->pic_fields.bits.lossless_flag << 29 | + segmentation_temporal_update << 28 | + pic_param->pic_fields.bits.segmentation_update_map << 27 | + pic_param->pic_fields.bits.segmentation_enabled << 26 | + pic_param->sharpness_level << 23 | + pic_param->filter_level << 17 | + pic_param->pic_fields.bits.frame_parallel_decoding_mode << 16 | + pic_param->pic_fields.bits.error_resilient_mode << 15 | + pic_param->pic_fields.bits.refresh_frame_context << 14 | + last_frame_type << 13 | + 0 << 12 | /* tx select mode */ + 0 << 11 | /* Hybrid Prediction Mode */ + use_pre_frame_mvs << 10 | + pic_param->pic_fields.bits.alt_ref_frame_sign_bias << 9 | + pic_param->pic_fields.bits.golden_ref_frame_sign_bias << 8 | + pic_param->pic_fields.bits.last_ref_frame_sign_bias << 7 | + pic_param->pic_fields.bits.mcomp_filter_type << 4 | + pic_param->pic_fields.bits.allow_high_precision_mv << 3 | + pic_param->pic_fields.bits.intra_only <<2 | + adapt_probabilities_flag << 1 | + pic_param->pic_fields.bits.frame_type <<0); /* DW 2 */ + OUT_BCS_BATCH(batch, + HCP_VP9_PROFILE0 << 28 | /* Profile 0 only supports 8 bit 420 only */ + pic_param->log2_tile_rows << 8 | + pic_param->log2_tile_columns <<0); /* DW 3 */ + // resolution change case + + // DW4-DW6 + for(i = 0; i < 3; i++) + { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + gen9_vp9_surface = NULL; + scale_w = 0; + scale_h = 0; + if (obj_surface && obj_surface->private_data) + { + gen9_vp9_surface = obj_surface->private_data; + if(!gen9_hcpd_vp9_valid_ref_frame_size(gen9_vp9_surface->frame_width,gen9_vp9_surface->frame_height,pic_param->frame_width,pic_param->frame_height)) + { + scale_w = -1; + scale_h = -1; + }else + { + scale_w = (gen9_vp9_surface->frame_width << 14) /pic_param->frame_width ; + scale_h = (gen9_vp9_surface->frame_height << 14) /pic_param->frame_height ; + } + OUT_BCS_BATCH(batch, + scale_w<<16 | + scale_h); + }else + { + OUT_BCS_BATCH(batch, 0); + } + } + + // DW7-DW9 + for(i = 0; i < 3; i++) + { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + gen9_vp9_surface = NULL; + + if (obj_surface && obj_surface->private_data) + { + gen9_vp9_surface = obj_surface->private_data; + OUT_BCS_BATCH(batch, + ((gen9_vp9_surface->frame_height- 1)&0x3fff)<<16 | + ((gen9_vp9_surface->frame_width - 1)&0x3fff)); + }else + { + OUT_BCS_BATCH(batch, 0); + } + } + + OUT_BCS_BATCH(batch, + pic_param->first_partition_size << 16 | + pic_param->frame_header_length_in_bytes <<0); /* DW 10 */ + OUT_BCS_BATCH(batch, + (0 << 3) | + (0 << 2) | + (1 << 1) | + (0 << 0)); /* DW 11, ignored */ + //Rest of the DWs are not valid for BXT + for(i = 12; i < LEN_COMMAND_OWN; i++) + { + OUT_BCS_BATCH(batch, 0); + } + + ADVANCE_BCS_BATCH(batch); + +} + +static void +gen9_hcpd_vp9_segment_state(VADriverContextP ctx, + VADecPictureParameterBufferVP9 *pic_param, + VASegmentParameterVP9 *seg_param, uint8_t seg_id, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + + BEGIN_BCS_BATCH(batch, 7); + + OUT_BCS_BATCH(batch, HCP_VP9_SEGMENT_STATE | (7 - 2)); + OUT_BCS_BATCH(batch, seg_id << 0); /* DW 1 - SegmentID */ + OUT_BCS_BATCH(batch, + seg_param->segment_flags.fields.segment_reference_enabled << 3 | + seg_param->segment_flags.fields.segment_reference << 1 | + seg_param->segment_flags.fields.segment_reference_skipped <<0 ); /* DW 2 */ + OUT_BCS_BATCH(batch, + seg_param->filter_level[1][1] << 24 | //FilterLevelRef1Mode1 + seg_param->filter_level[1][0] << 16 | //FilterLevelRef1Mode0 + seg_param->filter_level[0][1] << 8 | //FilterLevelRef0Mode1 + seg_param->filter_level[0][0] << 0 ); //FilterLevelRef0Mode0 /* DW 3 */ + OUT_BCS_BATCH(batch, + seg_param->filter_level[3][1] << 24 | //FilterLevelRef3Mode1 + seg_param->filter_level[3][0] << 16 | //FilterLevelRef3Mode0 + seg_param->filter_level[2][1] << 8 | //FilterLevelRef2Mode1 + seg_param->filter_level[2][0] << 0 ); //FilterLevelRef2Mode0 /* DW 4 */ + OUT_BCS_BATCH(batch, + seg_param->luma_ac_quant_scale << 16 | + seg_param->luma_dc_quant_scale << 0 ); /* DW 5 */ + OUT_BCS_BATCH(batch, + seg_param->chroma_ac_quant_scale << 16 | + seg_param->chroma_dc_quant_scale << 0 ); /* DW 6 */ + + ADVANCE_BCS_BATCH(batch); + +} + +static void +gen9_hcpd_vp9_bsd_object(VADriverContextP ctx, + VADecPictureParameterBufferVP9 *pic_param, + VASliceParameterBufferVP9 *slice_param, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + int slice_data_size = slice_param->slice_data_size - pic_param->frame_header_length_in_bytes; + int slice_data_offset = slice_param->slice_data_offset + pic_param->frame_header_length_in_bytes; + + BEGIN_BCS_BATCH(batch, 3); + + OUT_BCS_BATCH(batch, HCP_BSD_OBJECT | (3 - 2)); + + OUT_BCS_BATCH(batch, slice_data_size ); + OUT_BCS_BATCH(batch, slice_data_offset); + + ADVANCE_BCS_BATCH(batch); + +} + +static VAStatus +gen9_hcpd_vp9_decode_picture(VADriverContextP ctx, + struct decode_state *decode_state, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + VAStatus vaStatus; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = gen9_hcpd_context->base.batch; + VADecPictureParameterBufferVP9 *pic_param; + VASliceParameterBufferVP9 *slice_param; + dri_bo *slice_data_bo; + int i = 0, num_segments=0, isScaling=0; + struct object_surface *obj_surface; + GenVP9Surface *gen9_vp9_surface; + vaStatus = gen9_hcpd_vp9_decode_init(ctx, decode_state, gen9_hcpd_context); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + + //****And set the isScaling value accordingly****** + isScaling = 0; + for(i = 0; i < 3; i++) + { + obj_surface = gen9_hcpd_context->reference_surfaces[i].obj_surface; + gen9_vp9_surface = NULL; + if (obj_surface && obj_surface->private_data) + { + gen9_vp9_surface = obj_surface->private_data; + isScaling |= (gen9_vp9_surface->frame_width == pic_param->frame_width && + gen9_vp9_surface->frame_height == pic_param->frame_height)? 0:1; + } + } + + //Update segment id buffer if needed + vp9_update_segmentId_buffer(ctx, decode_state, gen9_hcpd_context, isScaling); + //Update probability buffer if needed + vp9_update_probabilities(ctx, decode_state, gen9_hcpd_context); + + if (i965->intel.has_bsd2) + intel_batchbuffer_start_atomic_bcs_override(batch, 0x1000, BSD_RING0); + else + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + + gen9_hcpd_pipe_mode_select(ctx, decode_state, HCP_CODEC_VP9, gen9_hcpd_context); + //Not sure what the surface id value should be: Gold? ALtRef? PrevRef? or Just RefPic? + gen9_hcpd_vp9_surface_state(ctx, decode_state, gen9_hcpd_context); + + //Only one VASliceParameterBufferVP9 should be sent per frame + assert(decode_state->slice_params && decode_state->slice_params[0]->buffer); + slice_param = (VASliceParameterBufferVP9 *)decode_state->slice_params[0]->buffer; + slice_data_bo = decode_state->slice_datas[0]->bo; + + gen9_hcpd_ind_obj_base_addr_state(ctx, slice_data_bo, gen9_hcpd_context); + + gen9_hcpd_vp9_pipe_buf_addr_state(ctx, decode_state, gen9_hcpd_context); + //If segmentation is disabled, only SegParam[0] is valid, + //all others should be populated with 0 + if(!pic_param->pic_fields.bits.segmentation_enabled) + num_segments = 1; + else //If segmentation is enabled, all 8 entries should be valid. + num_segments = 8; + + for(i=0; iseg_param[i]; + gen9_hcpd_vp9_segment_state(ctx, pic_param, &seg_param, i, gen9_hcpd_context); + } + + gen9_hcpd_vp9_pic_state(ctx, decode_state, gen9_hcpd_context); + + gen9_hcpd_vp9_bsd_object(ctx, pic_param, slice_param, gen9_hcpd_context); + + // keep track of the last frame status + gen9_hcpd_context->last_frame.frame_width = pic_param->frame_width; + gen9_hcpd_context->last_frame.frame_height = pic_param->frame_height; + gen9_hcpd_context->last_frame.show_frame = pic_param->pic_fields.bits.show_frame; + gen9_hcpd_context->last_frame.frame_type = pic_param->pic_fields.bits.frame_type; + gen9_hcpd_context->last_frame.refresh_frame_context = pic_param->pic_fields.bits.refresh_frame_context; + gen9_hcpd_context->last_frame.frame_context_idx = pic_param->pic_fields.bits.frame_context_idx; + gen9_hcpd_context->last_frame.intra_only = pic_param->pic_fields.bits.intra_only; + + // update prob buffer to vp9_fc; + + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); + + //update vp9_frame_ctx according to frame_context_id + if (pic_param->pic_fields.bits.refresh_frame_context) + { + //update vp9_fc to frame_context + dri_bo_map(gen9_hcpd_context->vp9_probability_buffer.bo,1); + memcpy(&gen9_hcpd_context->vp9_fc,(unsigned char *)gen9_hcpd_context->vp9_probability_buffer.bo->virtual,2048); + dri_bo_unmap(gen9_hcpd_context->vp9_probability_buffer.bo); + gen9_hcpd_context->vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx] = gen9_hcpd_context->vp9_fc; + + } + +out: + return vaStatus; +} + + +static VAStatus +gen9_hcpd_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + struct gen9_hcpd_context *gen9_hcpd_context = (struct gen9_hcpd_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + assert(gen9_hcpd_context); + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + switch (profile) { + case VAProfileHEVCMain: + case VAProfileHEVCMain10: + vaStatus = gen9_hcpd_hevc_decode_picture(ctx, decode_state, gen9_hcpd_context); + break; + case VAProfileVP9Profile0: + vaStatus = gen9_hcpd_vp9_decode_picture(ctx, decode_state, gen9_hcpd_context); + break; + + default: + /* should never get here 1!! */ + assert(0); + break; + } + +out: + return vaStatus; +} + +static void +gen9_hcpd_context_destroy(void *hw_context) +{ + struct gen9_hcpd_context *gen9_hcpd_context = (struct gen9_hcpd_context *)hw_context; + + FREE_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->deblocking_filter_tile_column_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->metadata_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->metadata_tile_column_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->sao_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->sao_tile_line_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->sao_tile_column_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->hvd_line_rowstore_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->hvd_tile_rowstore_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->vp9_probability_buffer)); + FREE_GEN_BUFFER((&gen9_hcpd_context->vp9_segment_id_buffer)); + + intel_batchbuffer_free(gen9_hcpd_context->base.batch); + free(gen9_hcpd_context); +} + +static void +gen9_hcpd_hevc_context_init(VADriverContextP ctx, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + hevc_gen_default_iq_matrix(&gen9_hcpd_context->iq_matrix_hevc); +} + +static void +gen9_hcpd_vp9_context_init(VADriverContextP ctx, + struct gen9_hcpd_context *gen9_hcpd_context) +{ + int default_value = 255; + + gen9_hcpd_context->last_frame.frame_height = 0; + gen9_hcpd_context->last_frame.show_frame = 0; + gen9_hcpd_context->last_frame.frame_type = 0; + gen9_hcpd_context->last_frame.refresh_frame_context = default_value; + gen9_hcpd_context->last_frame.frame_context_idx = default_value; + gen9_hcpd_context->last_frame.intra_only = 0; + gen9_hcpd_context->last_frame.prob_buffer_saved_flag = 0; + gen9_hcpd_context->last_frame.prob_buffer_restored_flag = 0; + gen9_hcpd_context->last_frame.mv_temporal_buffer_bo = NULL; + + vp9_gen_default_probabilities(ctx, gen9_hcpd_context); +} + +static struct hw_context * +gen9_hcpd_context_init(VADriverContextP ctx, struct object_config *object_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct gen9_hcpd_context *gen9_hcpd_context = calloc(1, sizeof(struct gen9_hcpd_context)); + int i; + + if (!gen9_hcpd_context) + return NULL; + + gen9_hcpd_context->base.destroy = gen9_hcpd_context_destroy; + gen9_hcpd_context->base.run = gen9_hcpd_decode_picture; + gen9_hcpd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_VEBOX, 0); + + for (i = 0; i < ARRAY_ELEMS(gen9_hcpd_context->reference_surfaces); i++) { + gen9_hcpd_context->reference_surfaces[i].surface_id = VA_INVALID_ID; + gen9_hcpd_context->reference_surfaces[i].frame_store_id = -1; + gen9_hcpd_context->reference_surfaces[i].obj_surface = NULL; + } + + switch (object_config->profile) { + case VAProfileHEVCMain: + case VAProfileHEVCMain10: + gen9_hcpd_hevc_context_init(ctx, gen9_hcpd_context); + break; + case VAProfileVP9Profile0: + gen9_hcpd_vp9_context_init(ctx, gen9_hcpd_context); + break; + + default: + break; + } + + return (struct hw_context *)gen9_hcpd_context; +} + +struct hw_context * +gen9_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + if (obj_config->profile == VAProfileHEVCMain || + obj_config->profile == VAProfileHEVCMain10 || + obj_config->profile == VAProfileVP9Profile0) { + return gen9_hcpd_context_init(ctx, obj_config); + } else { + return gen8_dec_hw_context_init(ctx, obj_config); + } +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.h new file mode 100644 index 000000000..c266dd490 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_mfd.h @@ -0,0 +1,100 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef GEN9_MFD_H +#define GEN9_MFD_H + +#include +#include +#include +#include +#include "i965_decoder.h" +#include "vp9_probs.h" + +struct hw_context; + +typedef struct vp9_frame_status +{ + uint16_t frame_width; + uint16_t frame_height; + uint8_t frame_type; + uint8_t show_frame; + uint8_t refresh_frame_context; + uint8_t frame_context_idx; + uint8_t intra_only; + uint8_t prob_buffer_saved_flag; + uint8_t prob_buffer_restored_flag; + dri_bo * mv_temporal_buffer_bo; +}vp9_last_frame_status; + +struct gen9_hcpd_context +{ + struct hw_context base; + + GenFrameStoreContext fs_ctx; + + GenFrameStore reference_surfaces[MAX_GEN_HCP_REFERENCE_FRAMES]; + + VAIQMatrixBufferHEVC iq_matrix_hevc; + + uint16_t picture_width_in_pixels; + uint16_t picture_height_in_pixels; + uint16_t picture_width_in_ctbs; + uint16_t picture_height_in_ctbs; + uint16_t picture_width_in_min_cb_minus1; + uint16_t picture_height_in_min_cb_minus1; + uint8_t ctb_size; + uint8_t min_cb_size; + + GenBuffer deblocking_filter_line_buffer; + GenBuffer deblocking_filter_tile_line_buffer; + GenBuffer deblocking_filter_tile_column_buffer; + GenBuffer metadata_line_buffer; + GenBuffer metadata_tile_line_buffer; + GenBuffer metadata_tile_column_buffer; + GenBuffer sao_line_buffer; + GenBuffer sao_tile_line_buffer; + GenBuffer sao_tile_column_buffer; + GenBuffer hvd_line_rowstore_buffer; + GenBuffer hvd_tile_rowstore_buffer; + GenBuffer vp9_probability_buffer; + GenBuffer vp9_segment_id_buffer; + + unsigned short first_inter_slice_collocated_ref_idx; + unsigned short first_inter_slice_collocated_from_l0_flag; + int first_inter_slice_valid; + + vp9_last_frame_status last_frame; + FRAME_CONTEXT vp9_frame_ctx[FRAME_CONTEXTS]; + FRAME_CONTEXT vp9_fc_inter_default; + FRAME_CONTEXT vp9_fc_key_default; + FRAME_CONTEXT vp9_fc; + FRAME_CONTEXT vp9_saved_fc; +}; + +#endif /* GEN9_MFD_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_post_processing.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_post_processing.c new file mode 100644 index 000000000..46a156fad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_post_processing.c @@ -0,0 +1,452 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_post_processing.h" +#include "i965_render.h" +#include "intel_media.h" + +#include "gen8_post_processing.h" + +static const uint32_t pp_null_gen9[][4] = { +}; + +static const uint32_t pp_nv12_load_save_nv12_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_pl2.g9b" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_pl3.g9b" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen9[][4] = { +#include "shaders/post_processing/gen9/pl3_to_pl2.g9b" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen9[][4] = { +#include "shaders/post_processing/gen9/pl3_to_pl3.g9b" +}; + +static const uint32_t pp_nv12_scaling_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_pl2.g9b" +}; + +static const uint32_t pp_nv12_avs_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_pl2.g9b" +}; + +static const uint32_t pp_nv12_dndi_gen9[][4] = { +}; + +static const uint32_t pp_nv12_dn_gen9[][4] = { +}; + +static const uint32_t pp_nv12_load_save_pa_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_pa.g9b" +}; + +static const uint32_t pp_pl3_load_save_pa_gen9[][4] = { +#include "shaders/post_processing/gen9/pl3_to_pa.g9b" +}; + +static const uint32_t pp_pa_load_save_nv12_gen9[][4] = { +#include "shaders/post_processing/gen9/pa_to_pl2.g9b" +}; + +static const uint32_t pp_pa_load_save_pl3_gen9[][4] = { +#include "shaders/post_processing/gen9/pa_to_pl3.g9b" +}; + +static const uint32_t pp_pa_load_save_pa_gen9[][4] = { +#include "shaders/post_processing/gen9/pa_to_pa.g9b" +}; + +static const uint32_t pp_rgbx_load_save_nv12_gen9[][4] = { +#include "shaders/post_processing/gen9/rgbx_to_nv12.g9b" +}; + +static const uint32_t pp_nv12_load_save_rgbx_gen9[][4] = { +#include "shaders/post_processing/gen9/pl2_to_rgbx.g9b" +}; + +static const uint32_t pp_nv12_blending_gen9[][4] = { +}; + +static struct pp_module pp_modules_gen9[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen9, + sizeof(pp_null_gen9), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen9, + sizeof(pp_nv12_load_save_nv12_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen9, + sizeof(pp_nv12_load_save_pl3_gen9), + NULL, + }, + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen9, + sizeof(pp_pl3_load_save_nv12_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen9, + sizeof(pp_pl3_load_save_pl3_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen9, + sizeof(pp_nv12_scaling_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen9, + sizeof(pp_nv12_avs_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen9, + sizeof(pp_nv12_dndi_gen9), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen9, + sizeof(pp_nv12_dn_gen9), + NULL, + }, + + pp_null_initialize, + }, + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen9, + sizeof(pp_nv12_load_save_pa_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen9, + sizeof(pp_pl3_load_save_pa_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen9, + sizeof(pp_pa_load_save_nv12_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen9, + sizeof(pp_pa_load_save_pl3_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen9, + sizeof(pp_pa_load_save_pa_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen9, + sizeof(pp_rgbx_load_save_nv12_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen9, + sizeof(pp_nv12_load_save_rgbx_gen9), + NULL, + }, + + gen8_pp_plx_avs_initialize, + }, +}; + +static const AVSConfig gen9_avs_config = { + .coeff_frac_bits = 6, + .coeff_epsilon = 1.0f / (1U << 6), + .num_phases = 31, + .num_luma_coeffs = 8, + .num_chroma_coeffs = 4, + + .coeff_range = { + .lower_bound = { + .y_k_h = { -2, -2, -2, -2, -2, -2, -2, -2 }, + .y_k_v = { -2, -2, -2, -2, -2, -2, -2, -2 }, + .uv_k_h = { -2, -2, -2, -2 }, + .uv_k_v = { -2, -2, -2, -2 }, + }, + .upper_bound = { + .y_k_h = { 2, 2, 2, 2, 2, 2, 2, 2 }, + .y_k_v = { 2, 2, 2, 2, 2, 2, 2, 2 }, + .uv_k_h = { 2, 2, 2, 2 }, + .uv_k_v = { 2, 2, 2, 2 }, + }, + }, +}; + +static void +gen9_pp_pipeline_select(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, + CMD_PIPELINE_SELECT | + PIPELINE_SELECT_MEDIA | + GEN9_FORCE_MEDIA_AWAKE_ON | + GEN9_MEDIA_DOP_GATE_OFF | + GEN9_PIPELINE_SELECTION_MASK | + GEN9_MEDIA_DOP_GATE_MASK | + GEN9_FORCE_MEDIA_AWAKE_MASK); + ADVANCE_BATCH(batch); +} + +static void +gen9_pp_state_base_address(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 19); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (19 - 2)); + /* DW1 Generate state address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW4-5 Surface state address */ + OUT_RELOC64(batch, pp_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + /* DW6-7 Dynamic state address */ + OUT_RELOC64(batch, pp_context->dynamic_state.bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, 0 | BASE_ADDRESS_MODIFY); + + /* DW8. Indirect object address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /* DW10-11 Instruction base address */ + OUT_RELOC64(batch, pp_context->instruction_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); + + /* Bindless surface state base address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0xfffff000); + + ADVANCE_BATCH(batch); +} + +static void +gen9_pp_end_pipeline(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, + CMD_PIPELINE_SELECT | + PIPELINE_SELECT_MEDIA | + GEN9_FORCE_MEDIA_AWAKE_OFF | + GEN9_MEDIA_DOP_GATE_ON | + GEN9_PIPELINE_SELECTION_MASK | + GEN9_MEDIA_DOP_GATE_MASK | + GEN9_FORCE_MEDIA_AWAKE_MASK); + ADVANCE_BATCH(batch); +} + +static void +gen9_pp_pipeline_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen9_pp_pipeline_select(ctx, pp_context); + gen9_pp_state_base_address(ctx, pp_context); + gen8_pp_vfe_state(ctx, pp_context); + gen8_pp_curbe_load(ctx, pp_context); + gen8_interface_descriptor_load(ctx, pp_context); + gen8_pp_object_walker(ctx, pp_context); + gen9_pp_end_pipeline(ctx, pp_context); + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen9_post_processing(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void * filter_param) +{ + VAStatus va_status; + + va_status = gen8_pp_initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + pp_index, + filter_param); + + if (va_status == VA_STATUS_SUCCESS) { + gen8_pp_states_setup(ctx, pp_context); + gen9_pp_pipeline_setup(ctx, pp_context); + } + + return va_status; +} + +void +gen9_post_processing_context_init(VADriverContextP ctx, + void *data, + struct intel_batchbuffer *batch) +{ + struct i965_post_processing_context *pp_context = data; + + gen8_post_processing_context_common_init(ctx, data, pp_modules_gen9, ARRAY_ELEMS(pp_modules_gen9), batch); + avs_init_state(&pp_context->pp_avs_context.state, &gen9_avs_config); + + pp_context->intel_post_processing = gen9_post_processing; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_render.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_render.c new file mode 100644 index 000000000..4c244433a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_render.c @@ -0,0 +1,1842 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Eric Anholt + * Keith Packard + * Xiang Haihao + * Zhao Yakui + * + */ + +/* + * Most of rendering codes are ported from xf86-video-intel/src/i965_video.c + */ + +#include +#include +#include +#include +#include + +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_structs.h" +#include "i965_yuv_coefs.h" + +#include "i965_render.h" + +/* Programs for Gen8 */ +static const uint32_t sf_kernel_static_gen9[][4] ={ + +}; +static const uint32_t ps_kernel_static_gen9[][4] = { +#include "shaders/render/exa_wm_src_affine.g9b" +#include "shaders/render/exa_wm_src_sample_planar.g9b" +#include "shaders/render/exa_wm_yuv_color_balance.g9b" +#include "shaders/render/exa_wm_yuv_rgb.g9b" +#include "shaders/render/exa_wm_write.g9b" +}; + +static const uint32_t ps_subpic_kernel_static_gen9[][4] = { +#include "shaders/render/exa_wm_src_affine.g9b" +#include "shaders/render/exa_wm_src_sample_argb.g9b" +#include "shaders/render/exa_wm_write.g9b" +}; + + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 + +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET SURFACE_STATE_OFFSET(MAX_RENDER_SURFACES) + +enum { + SF_KERNEL = 0, + PS_KERNEL, + PS_SUBPIC_KERNEL +}; + +static struct i965_kernel render_kernels_gen9[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen9, + sizeof(sf_kernel_static_gen9), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen9, + sizeof(ps_kernel_static_gen9), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen9, + sizeof(ps_subpic_kernel_static_gen9), + NULL + } +}; + +#define URB_VS_ENTRIES 8 +#define URB_VS_ENTRY_SIZE 1 + +#define URB_GS_ENTRIES 0 +#define URB_GS_ENTRY_SIZE 0 + +#define URB_CLIP_ENTRIES 0 +#define URB_CLIP_ENTRY_SIZE 0 + +#define URB_SF_ENTRIES 1 +#define URB_SF_ENTRY_SIZE 2 + +#define URB_CS_ENTRIES 4 +#define URB_CS_ENTRY_SIZE 4 + +static void +gen9_render_set_surface_tiling(struct gen8_surface_state *ss, uint32_t tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +/* Set "Shader Channel Select" for GEN9+ */ +static void +gen9_render_set_surface_scs(struct gen8_surface_state *ss) +{ + ss->ss7.shader_chanel_select_r = HSW_SCS_RED; + ss->ss7.shader_chanel_select_g = HSW_SCS_GREEN; + ss->ss7.shader_chanel_select_b = HSW_SCS_BLUE; + ss->ss7.shader_chanel_select_a = HSW_SCS_ALPHA; +} + +static void +gen9_render_set_surface_state( + struct gen8_surface_state *ss, + dri_bo *bo, + unsigned long offset, + int width, + int height, + int pitch, + int format, + unsigned int flags +) +{ + unsigned int tiling; + unsigned int swizzle; + + memset(ss, 0, sizeof(*ss)); + + switch (flags & (VA_TOP_FIELD|VA_BOTTOM_FIELD)) { + case VA_BOTTOM_FIELD: + ss->ss0.vert_line_stride_ofs = 1; + /* fall-through */ + case VA_TOP_FIELD: + ss->ss0.vert_line_stride = 1; + height /= 2; + break; + } + + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + + ss->ss8.base_addr = bo->offset + offset; + + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + + ss->ss3.pitch = pitch - 1; + + /* Always set 1(align 4 mode) per B-spec */ + ss->ss0.vertical_alignment = 1; + ss->ss0.horizontal_alignment = 1; + + dri_bo_get_tiling(bo, &tiling, &swizzle); + gen9_render_set_surface_tiling(ss, tiling); +} + +static void +gen9_render_src_surface_state( + VADriverContextP ctx, + int index, + dri_bo *region, + unsigned long offset, + int w, + int h, + int pitch, + int format, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + + assert(index < MAX_RENDER_SURFACES); + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + gen9_render_set_surface_state(ss, + region, offset, + w, h, + pitch, format, flags); + gen9_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_SAMPLER, 0, + offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state, ss8), + region); + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); + render_state->wm.sampler_count++; +} + +static void +gen9_render_src_surfaces_state( + VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags +) +{ + int region_pitch; + int rw, rh; + dri_bo *region; + + region_pitch = obj_surface->width; + rw = obj_surface->orig_width; + rh = obj_surface->orig_height; + region = obj_surface->bo; + + if (obj_surface->fourcc == VA_FOURCC('P', '0', '1', '0')) { + gen9_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R16_UNORM, flags); /* Y */ + gen9_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R16_UNORM, flags); + gen9_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R16G16_UNORM, flags); /* UV */ + gen9_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R16G16_UNORM, flags); + } else { + gen9_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); /* Y */ + gen9_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); + + if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2')) { + gen9_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); /* UV */ + gen9_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); + } else { + gen9_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* U */ + gen9_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + gen9_render_src_surface_state(ctx, 5, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* V */ + gen9_render_src_surface_state(ctx, 6, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + } + } +} + +static void +gen9_subpic_render_src_surfaces_state(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + dri_bo *subpic_region; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + struct object_image *obj_image = obj_subpic->obj_image; + + assert(obj_surface); + assert(obj_surface->bo); + subpic_region = obj_image->bo; + /*subpicture surface*/ + gen9_render_src_surface_state(ctx, 1, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); + gen9_render_src_surface_state(ctx, 2, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); +} + +static void +gen9_render_dest_surface_state(VADriverContextP ctx, int index) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + int format; + assert(index < MAX_RENDER_SURFACES); + + if (dest_region->cpp == 2) { + format = I965_SURFACEFORMAT_B5G6R5_UNORM; + } else { + format = I965_SURFACEFORMAT_B8G8R8A8_UNORM; + } + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + gen9_render_set_surface_state(ss, + dest_region->bo, 0, + dest_region->width, dest_region->height, + dest_region->pitch, format, 0); + gen9_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen8_surface_state, ss8), + dest_region->bo); + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + +static void +i965_fill_vertex_buffer( + VADriverContextP ctx, + float tex_coords[4], /* [(u1,v1);(u2,v2)] */ + float vid_coords[4] /* [(x1,y1);(x2,y2)] */ +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + float vb[12]; + + enum { X1, Y1, X2, Y2 }; + + static const unsigned int g_rotation_indices[][6] = { + [VA_ROTATION_NONE] = { X2, Y2, X1, Y2, X1, Y1 }, + [VA_ROTATION_90] = { X2, Y1, X2, Y2, X1, Y2 }, + [VA_ROTATION_180] = { X1, Y1, X2, Y1, X2, Y2 }, + [VA_ROTATION_270] = { X1, Y2, X1, Y1, X2, Y1 }, + }; + + const unsigned int * const rotation_indices = + g_rotation_indices[i965->rotation_attrib->value]; + + vb[0] = tex_coords[rotation_indices[0]]; /* bottom-right corner */ + vb[1] = tex_coords[rotation_indices[1]]; + vb[2] = vid_coords[X2]; + vb[3] = vid_coords[Y2]; + + vb[4] = tex_coords[rotation_indices[2]]; /* bottom-left corner */ + vb[5] = tex_coords[rotation_indices[3]]; + vb[6] = vid_coords[X1]; + vb[7] = vid_coords[Y2]; + + vb[8] = tex_coords[rotation_indices[4]]; /* top-left corner */ + vb[9] = tex_coords[rotation_indices[5]]; + vb[10] = vid_coords[X1]; + vb[11] = vid_coords[Y1]; + + dri_bo_subdata(i965->render_state.vb.vertex_buffer, 0, sizeof(vb), vb); +} + +static void +i965_subpic_render_upload_vertex(VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *output_rect) +{ + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + float tex_coords[4], vid_coords[4]; + VARectangle dst_rect; + + if (obj_subpic->flags & VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD) + dst_rect = obj_subpic->dst_rect; + else { + const float sx = (float)output_rect->width / obj_surface->orig_width; + const float sy = (float)output_rect->height / obj_surface->orig_height; + dst_rect.x = output_rect->x + sx * obj_subpic->dst_rect.x; + dst_rect.y = output_rect->y + sy * obj_subpic->dst_rect.y; + dst_rect.width = sx * obj_subpic->dst_rect.width; + dst_rect.height = sy * obj_subpic->dst_rect.height; + } + + tex_coords[0] = (float)obj_subpic->src_rect.x / obj_subpic->width; + tex_coords[1] = (float)obj_subpic->src_rect.y / obj_subpic->height; + tex_coords[2] = (float)(obj_subpic->src_rect.x + obj_subpic->src_rect.width) / obj_subpic->width; + tex_coords[3] = (float)(obj_subpic->src_rect.y + obj_subpic->src_rect.height) / obj_subpic->height; + + vid_coords[0] = dst_rect.x; + vid_coords[1] = dst_rect.y; + vid_coords[2] = (float)(dst_rect.x + dst_rect.width); + vid_coords[3] = (float)(dst_rect.y + dst_rect.height); + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +static void +i965_render_upload_vertex( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + float tex_coords[4], vid_coords[4]; + int width, height; + + width = obj_surface->orig_width; + height = obj_surface->orig_height; + + tex_coords[0] = (float)src_rect->x / width; + tex_coords[1] = (float)src_rect->y / height; + tex_coords[2] = (float)(src_rect->x + src_rect->width) / width; + tex_coords[3] = (float)(src_rect->y + src_rect->height) / height; + + vid_coords[0] = dest_region->x + dst_rect->x; + vid_coords[1] = dest_region->y + dst_rect->y; + vid_coords[2] = vid_coords[0] + dst_rect->width; + vid_coords[3] = vid_coords[1] + dst_rect->height; + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +static void +i965_render_drawing_rectangle(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_DRAWING_RECTANGLE | 2); + OUT_BATCH(batch, 0x00000000); + OUT_BATCH(batch, (dest_region->width - 1) | (dest_region->height - 1) << 16); + OUT_BATCH(batch, 0x00000000); + ADVANCE_BATCH(batch); +} + +static void +i965_render_upload_image_palette( + VADriverContextP ctx, + struct object_image *obj_image, + unsigned int alpha +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int i; + + assert(obj_image); + + if (!obj_image) + return; + + if (obj_image->image.num_palette_entries == 0) + return; + + BEGIN_BATCH(batch, 1 + obj_image->image.num_palette_entries); + OUT_BATCH(batch, CMD_SAMPLER_PALETTE_LOAD | (obj_image->image.num_palette_entries - 1)); + /*fill palette*/ + //int32_t out[16]; //0-23:color 23-31:alpha + for (i = 0; i < obj_image->image.num_palette_entries; i++) + OUT_BATCH(batch, (alpha << 24) | obj_image->palette[i]); + ADVANCE_BATCH(batch); +} + +static void +gen9_clear_dest_region(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + unsigned int blt_cmd, br13; + int pitch; + + blt_cmd = GEN8_XY_COLOR_BLT_CMD; + br13 = 0xf0 << 16; + pitch = dest_region->pitch; + + if (dest_region->cpp == 4) { + br13 |= BR13_8888; + blt_cmd |= (XY_COLOR_BLT_WRITE_RGB | XY_COLOR_BLT_WRITE_ALPHA); + } else { + assert(dest_region->cpp == 2); + br13 |= BR13_565; + } + + if (dest_region->tiling != I915_TILING_NONE) { + blt_cmd |= XY_COLOR_BLT_DST_TILED; + pitch /= 4; + } + + br13 |= pitch; + + intel_batchbuffer_start_atomic_blt(batch, 24); + BEGIN_BLT_BATCH(batch, 7); + + OUT_BATCH(batch, blt_cmd); + OUT_BATCH(batch, br13); + OUT_BATCH(batch, (dest_region->y << 16) | (dest_region->x)); + OUT_BATCH(batch, ((dest_region->y + dest_region->height) << 16) | + (dest_region->x + dest_region->width)); + OUT_RELOC(batch, dest_region->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0); + OUT_BATCH(batch, 0x0); + OUT_BATCH(batch, 0x0); + ADVANCE_BATCH(batch); + intel_batchbuffer_end_atomic(batch); +} + + +/* + * for GEN8 + */ +#define ALIGNMENT 64 + +static void +gen9_render_initialize(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + dri_bo *bo; + int size; + unsigned int end_offset; + + /* VERTEX BUFFER */ + dri_bo_unreference(render_state->vb.vertex_buffer); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vertex buffer", + 4096, + 4096); + assert(bo); + render_state->vb.vertex_buffer = bo; + + /* WM */ + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_RENDER_SURFACES, + 4096); + assert(bo); + render_state->wm.surface_state_binding_table_bo = bo; + + render_state->curbe_size = 256; + + render_state->wm.sampler_count = 0; + + render_state->sampler_size = MAX_SAMPLERS * sizeof(struct gen8_sampler_state); + + render_state->cc_state_size = sizeof(struct gen6_color_calc_state); + + render_state->cc_viewport_size = sizeof(struct i965_cc_viewport); + + render_state->blend_state_size = sizeof(struct gen8_global_blend_state) + + 16 * sizeof(struct gen8_blend_state_rt); + + render_state->sf_clip_size = 1024; + + render_state->scissor_size = 1024; + + size = ALIGN(render_state->curbe_size, ALIGNMENT) + + ALIGN(render_state->sampler_size, ALIGNMENT) + + ALIGN(render_state->cc_viewport_size, ALIGNMENT) + + ALIGN(render_state->cc_state_size, ALIGNMENT) + + ALIGN(render_state->blend_state_size, ALIGNMENT) + + ALIGN(render_state->sf_clip_size, ALIGNMENT) + + ALIGN(render_state->scissor_size, ALIGNMENT); + + dri_bo_unreference(render_state->dynamic_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "dynamic_state", + size, + 4096); + + render_state->dynamic_state.bo = bo; + + end_offset = 0; + render_state->dynamic_state.end_offset = 0; + + /* Constant buffer offset */ + render_state->curbe_offset = end_offset; + end_offset += ALIGN(render_state->curbe_size, ALIGNMENT); + + /* Sampler_state */ + render_state->sampler_offset = end_offset; + end_offset += ALIGN(render_state->sampler_size, ALIGNMENT); + + /* CC_VIEWPORT_state */ + render_state->cc_viewport_offset = end_offset; + end_offset += ALIGN(render_state->cc_viewport_size, ALIGNMENT); + + /* CC_STATE_state */ + render_state->cc_state_offset = end_offset; + end_offset += ALIGN(render_state->cc_state_size, ALIGNMENT); + + /* Blend_state */ + render_state->blend_state_offset = end_offset; + end_offset += ALIGN(render_state->blend_state_size, ALIGNMENT); + + /* SF_CLIP_state */ + render_state->sf_clip_offset = end_offset; + end_offset += ALIGN(render_state->sf_clip_size, ALIGNMENT); + + /* SCISSOR_state */ + render_state->scissor_offset = end_offset; + end_offset += ALIGN(render_state->scissor_size, ALIGNMENT); + + /* update the end offset of dynamic_state */ + render_state->dynamic_state.end_offset = end_offset; + +} + +static void +gen9_render_sampler(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_sampler_state *sampler_state; + int i; + unsigned char *cc_ptr; + + assert(render_state->wm.sampler_count > 0); + assert(render_state->wm.sampler_count <= MAX_SAMPLERS); + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->sampler_offset; + + sampler_state = (struct gen8_sampler_state *) cc_ptr; + + for (i = 0; i < render_state->wm.sampler_count; i++) { + memset(sampler_state, 0, sizeof(*sampler_state)); + sampler_state->ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss3.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state++; + } + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen9_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_global_blend_state *global_blend_state; + struct gen8_blend_state_rt *blend_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->blend_state_offset; + + global_blend_state = (struct gen8_global_blend_state*) cc_ptr; + + memset(global_blend_state, 0, render_state->blend_state_size); + /* Global blend state + blend_state for Render Target */ + blend_state = (struct gen8_blend_state_rt *)(global_blend_state + 1); + blend_state->blend1.logic_op_enable = 1; + blend_state->blend1.logic_op_func = 0xc; + blend_state->blend1.pre_blend_clamp_enable = 1; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + + +static void +gen9_render_cc_viewport(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_cc_viewport *cc_viewport; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->cc_viewport_offset; + + cc_viewport = (struct i965_cc_viewport *) cc_ptr; + + memset(cc_viewport, 0, sizeof(*cc_viewport)); + + cc_viewport->min_depth = -1.e35; + cc_viewport->max_depth = 1.e35; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen9_render_color_calc_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_color_calc_state *color_calc_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->cc_state_offset; + + color_calc_state = (struct gen6_color_calc_state *) cc_ptr; + + memset(color_calc_state, 0, sizeof(*color_calc_state)); + color_calc_state->constant_r = 1.0; + color_calc_state->constant_g = 0.0; + color_calc_state->constant_b = 1.0; + color_calc_state->constant_a = 1.0; + dri_bo_unmap(render_state->dynamic_state.bo); +} + +#define PI 3.1415926 + +static void +gen9_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + unsigned short *constant_buffer; + unsigned char *cc_ptr; + float *color_balance_base; + float contrast = (float)i965->contrast_attrib->value / DEFAULT_CONTRAST; + float brightness = (float)i965->brightness_attrib->value / 255; /* YUV is float in the shader */ + float hue = (float)i965->hue_attrib->value / 180 * PI; + float saturation = (float)i965->saturation_attrib->value / DEFAULT_SATURATION; + float *yuv_to_rgb; + unsigned int color_flag; + const float* yuv_coefs; + size_t coefs_length; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->curbe_offset; + + constant_buffer = (unsigned short *) cc_ptr; + + if (obj_surface->subsampling == SUBSAMPLE_YUV400) { + assert(obj_surface->fourcc == VA_FOURCC('Y', '8', '0', '0')); + + *constant_buffer = 2; + } else { + if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2') || + obj_surface->fourcc == VA_FOURCC('P', '0', '1', '0')) + *constant_buffer = 1; + else + *constant_buffer = 0; + } + + if (i965->contrast_attrib->value == DEFAULT_CONTRAST && + i965->brightness_attrib->value == DEFAULT_BRIGHTNESS && + i965->hue_attrib->value == DEFAULT_HUE && + i965->saturation_attrib->value == DEFAULT_SATURATION) + constant_buffer[1] = 1; /* skip color balance transformation */ + else + constant_buffer[1] = 0; + + color_balance_base = (float *)constant_buffer + 4; + *color_balance_base++ = contrast; + *color_balance_base++ = brightness; + *color_balance_base++ = cos(hue) * contrast * saturation; + *color_balance_base++ = sin(hue) * contrast * saturation; + + color_flag = flags & VA_SRC_COLOR_MASK; + yuv_to_rgb = (float *)constant_buffer + 8; + + yuv_coefs = i915_color_standard_to_coefs(i915_filter_to_color_standard(color_flag), + &coefs_length); + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen9_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + gen9_render_dest_surface_state(ctx, 0); + gen9_render_src_surfaces_state(ctx, obj_surface, flags); + gen9_render_sampler(ctx); + gen9_render_cc_viewport(ctx); + gen9_render_color_calc_state(ctx); + gen9_render_blend_state(ctx); + gen9_render_upload_constants(ctx, obj_surface, flags); + i965_render_upload_vertex(ctx, obj_surface, src_rect, dst_rect); +} + +static void +gen9_emit_state_base_address(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 19); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (19 - 2)); + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state base address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /*DW4 */ + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, 0); + + /*DW6*/ + /* Dynamic state base address */ + OUT_RELOC(batch, render_state->dynamic_state.bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /*DW8*/ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object base address */ + OUT_BATCH(batch, 0); + + /*DW10 */ + /* Instruction base address */ + OUT_RELOC(batch, render_state->instruction_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + + /*DW12 */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* General state upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Dynamic state upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Indirect object upper bound */ + OUT_BATCH(batch, 0xFFFF0000 | BASE_ADDRESS_MODIFY); /* Instruction access upper bound */ + + /* the bindless surface state address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0xFFFF0000); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_cc_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_CC_STATE_POINTERS | (2 - 2)); + OUT_BATCH(batch, (render_state->cc_state_offset + 1)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BLEND_STATE_POINTERS | (2 - 2)); + OUT_BATCH(batch, (render_state->blend_state_offset + 1)); + ADVANCE_BATCH(batch); + +} + +static void +gen9_emit_vertices(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_VERTEX_BUFFERS | (5 - 2)); + OUT_BATCH(batch, + (0 << GEN8_VB0_BUFFER_INDEX_SHIFT) | + (0 << GEN8_VB0_MOCS_SHIFT) | + GEN7_VB0_ADDRESS_MODIFYENABLE | + ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 12 * 4); + ADVANCE_BATCH(batch); + + /* Topology in 3D primitive is overrided by VF_TOPOLOGY command */ + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_VF_TOPOLOGY | (2 - 2)); + OUT_BATCH(batch, + _3DPRIM_RECTLIST); + ADVANCE_BATCH(batch); + + OUT_BATCH(batch, GEN7_3DSTATE_VF | (2 - 2)); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN8_3DSTATE_VF_INSTANCING | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN8_3DSTATE_VF_SGVS | (2 - 2)); + OUT_BATCH(batch, 0); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, CMD_3DPRIMITIVE | (7 - 2)); + OUT_BATCH(batch, + GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL); + OUT_BATCH(batch, 3); /* vertex count per instance */ + OUT_BATCH(batch, 0); /* start vertex offset */ + OUT_BATCH(batch, 1); /* single instance */ + OUT_BATCH(batch, 0); /* start instance location */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_vertex_element_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + int i; + + /* + * The VUE layout + * dword 0-3: pad (0, 0, 0. 0) + * dword 4-7: position (x, y, 1.0, 1.0), + * dword 8-11: texture coordinate 0 (u0, v0, 1.0, 1.0) + */ + + /* Set up our vertex elements, sourced from the single vertex buffer. */ + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | (7 - 2)); + + /* Element state 0. These are 4 dwords of 0 required for the VUE format. + * We don't really know or care what they do. + */ + + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_0 << VE1_VFCOMPONENT_3_SHIFT)); + + /* offset 8: X, Y -> {x, y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + + /* offset 0: u,v -> {U, V, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN8_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + + /* Disable instancing for all vertex elements. */ + for (i = 0; i < 3; i++) { + OUT_BATCH(batch, GEN8_3DSTATE_VF_INSTANCING | (3 - 2)); + OUT_BATCH(batch, i); + OUT_BATCH(batch, 0); + } +} + +static void +gen9_emit_vs_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* disable VS constant buffer */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_VS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 0 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 1 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 2 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* CS Buffer 3 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN6_3DSTATE_VS | (9 - 2)); + OUT_BATCH(batch, 0); /* without VS kernel */ + OUT_BATCH(batch, 0); + /* VS shader dispatch flag */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6. VS shader GRF and URB buffer definition */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + +} + +/* + * URB layout on GEN8 + * ---------------------------------------- + * | PS Push Constants (8KB) | VS entries | + * ---------------------------------------- + */ +static void +gen9_emit_urb(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int num_urb_entries = 64; + + /* The minimum urb entries is 64 */ + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Size is 8Kbs and base address is 0Kb */ + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS | (2 - 2)); + /* Size is 8Kbs and base address is 0Kb */ + OUT_BATCH(batch, + (0 << GEN8_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT) | + (8 << GEN8_PUSH_CONSTANT_BUFFER_SIZE_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_VS | (2 - 2)); + OUT_BATCH(batch, + (num_urb_entries << GEN7_URB_ENTRY_NUMBER_SHIFT) | + (4 - 1) << GEN7_URB_ENTRY_SIZE_SHIFT | + (4 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_GS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (5 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_HS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (6 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_DS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (7 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_bypass_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* bypass GS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_GS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 10); + OUT_BATCH(batch, GEN6_3DSTATE_GS | (10 - 2)); + /* GS shader address */ + OUT_BATCH(batch, 0); /* without GS kernel */ + OUT_BATCH(batch, 0); + /* DW3. GS shader dispatch flag */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6. GS shader GRF and URB offset/length */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* disable HS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_HS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN7_3DSTATE_HS | (9 - 2)); + OUT_BATCH(batch, 0); + /*DW2. HS pass-through */ + OUT_BATCH(batch, 0); + /*DW3. HS shader address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /*DW5. HS shader flag. URB offset/length and so on */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable TE */ + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN7_3DSTATE_TE | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable DS */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_DS | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN7_3DSTATE_DS | (11 - 2)); + /* DW1. DS shader pointer */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW3-5. DS shader dispatch flag.*/ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW6-7. DS shader pass-through, GRF,URB offset/Length,Thread Number*/ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW8. DS shader output URB */ + OUT_BATCH(batch, 0); + + /* Dual-patch kernel start pointer */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable STREAMOUT */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_STREAMOUT | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_invarient_states(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_3D | + GEN9_PIPELINE_SELECTION_MASK); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_MULTISAMPLE | (2 - 2)); + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER | + GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1); /* 1 sample/pixel */ + ADVANCE_BATCH(batch); + + /* Update 3D Multisample pattern */ + BEGIN_BATCH(batch, 9); + OUT_BATCH(batch, GEN8_3DSTATE_SAMPLE_PATTERN | (9 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_SAMPLE_MASK | (2 - 2)); + OUT_BATCH(batch, 1); + ADVANCE_BATCH(batch); + + /* Set system instruction pointer */ + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_STATE_SIP | 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_clip_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_CLIP | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); +} + +static void +gen9_emit_sf_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN8_3DSTATE_RASTER | (5 - 2)); + OUT_BATCH(batch, GEN8_3DSTATE_RASTER_CULL_NONE); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, GEN7_3DSTATE_SBE | (6 - 2)); + OUT_BATCH(batch, + (GEN8_SBE_FORCE_URB_ENTRY_READ_LENGTH) | + (GEN8_SBE_FORCE_URB_ENTRY_READ_OFFSET) | + (1 << GEN7_SBE_NUM_OUTPUTS_SHIFT) | + (1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT) | + (1 << GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, GEN9_SBE_ACTIVE_COMPONENT_XYZW); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* SBE for backend setup */ + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN8_3DSTATE_SBE_SWIZ | (11 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN6_3DSTATE_SF | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_wm_state(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + unsigned int num_samples = 0; + unsigned int max_threads; + + max_threads = i965->intel.device_info->max_wm_threads - 2; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSEXTRA | (2 - 2)); + OUT_BATCH(batch, + (GEN8_PSX_PIXEL_SHADER_VALID | GEN8_PSX_ATTRIBUTE_ENABLE)); + ADVANCE_BATCH(batch); + + if (kernel == PS_KERNEL) { + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSBLEND | (2 - 2)); + OUT_BATCH(batch, + GEN8_PS_BLEND_HAS_WRITEABLE_RT); + ADVANCE_BATCH(batch); + } else if (kernel == PS_SUBPIC_KERNEL) { + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN8_3DSTATE_PSBLEND | (2 - 2)); + OUT_BATCH(batch, + (GEN8_PS_BLEND_HAS_WRITEABLE_RT | + GEN8_PS_BLEND_COLOR_BUFFER_BLEND_ENABLE | + (I965_BLENDFACTOR_SRC_ALPHA << GEN8_PS_BLEND_SRC_ALPHA_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_INV_SRC_ALPHA << GEN8_PS_BLEND_DST_ALPHA_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_SRC_ALPHA << GEN8_PS_BLEND_SRC_BLEND_FACTOR_SHIFT) | + (I965_BLENDFACTOR_INV_SRC_ALPHA << GEN8_PS_BLEND_DST_BLEND_FACTOR_SHIFT))); + ADVANCE_BATCH(batch); + } + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_WM | (2 - 2)); + OUT_BATCH(batch, + GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_PS | (11 - 2)); + OUT_BATCH(batch, URB_CS_ENTRY_SIZE); + OUT_BATCH(batch, 0); + /*DW3-4. Constant buffer 0 */ + OUT_BATCH(batch, render_state->curbe_offset); + OUT_BATCH(batch, 0); + + /*DW5-10. Constant buffer 1-3 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 12); + OUT_BATCH(batch, GEN7_3DSTATE_PS | (12 - 2)); + /* PS shader address */ + OUT_BATCH(batch, render_state->render_kernels[kernel].kernel_offset); + + OUT_BATCH(batch, 0); + /* DW3. PS shader flag .Binding table cnt/sample cnt */ + OUT_BATCH(batch, + (1 << GEN7_PS_SAMPLER_COUNT_SHIFT) | + (5 << GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT) | + GEN7_PS_VECTOR_MASK_ENABLE); + /* DW4-5. Scatch space */ + OUT_BATCH(batch, 0); /* scratch space base offset */ + OUT_BATCH(batch, 0); + /* DW6. PS shader threads. */ + OUT_BATCH(batch, + ((max_threads - 1) << GEN8_PS_MAX_THREADS_SHIFT) | num_samples | + GEN7_PS_PUSH_CONSTANT_ENABLE | + GEN7_PS_16_DISPATCH_ENABLE); + /* DW7. PS shader GRF */ + OUT_BATCH(batch, + (6 << GEN7_PS_DISPATCH_START_GRF_SHIFT_0)); + OUT_BATCH(batch, 0); /* kernel 1 pointer */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* kernel 2 pointer */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS | (2 - 2)); + OUT_BATCH(batch, BINDING_TABLE_OFFSET); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_depth_buffer_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, GEN7_3DSTATE_DEPTH_BUFFER | (8 - 2)); + OUT_BATCH(batch, + (I965_DEPTHFORMAT_D32_FLOAT << 18) | + (I965_SURFACE_NULL << 29)); + /* DW2-3. Depth Buffer Address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + /* DW4-7. Surface structure */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Update the Hier Depth buffer */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_HIER_DEPTH_BUFFER | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Update the stencil buffer */ + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN7_3DSTATE_STENCIL_BUFFER | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN7_3DSTATE_CLEAR_PARAMS | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_depth_stencil_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN8_3DSTATE_WM_DEPTH_STENCIL | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_wm_hz_op(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, GEN8_3DSTATE_WM_HZ_OP | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_viewport_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC | (2 - 2)); + OUT_BATCH(batch, render_state->cc_viewport_offset); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen9_emit_sampler_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS | (2 - 2)); + OUT_BATCH(batch, render_state->sampler_offset); + ADVANCE_BATCH(batch); +} + + +static void +gen9_emit_drawing_rectangle(VADriverContextP ctx) +{ + i965_render_drawing_rectangle(ctx); +} + +static void +gen9_render_emit_states(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen9_emit_invarient_states(ctx); + gen9_emit_state_base_address(ctx); + gen9_emit_viewport_state_pointers(ctx); + gen9_emit_urb(ctx); + gen9_emit_cc_state_pointers(ctx); + gen9_emit_sampler_state_pointers(ctx); + gen9_emit_wm_hz_op(ctx); + gen9_emit_bypass_state(ctx); + gen9_emit_vs_state(ctx); + gen9_emit_clip_state(ctx); + gen9_emit_sf_state(ctx); + gen9_emit_depth_stencil_state(ctx); + gen9_emit_wm_state(ctx, kernel); + gen9_emit_depth_buffer_state(ctx); + gen9_emit_drawing_rectangle(ctx); + gen9_emit_vertex_element_state(ctx); + gen9_emit_vertices(ctx); + intel_batchbuffer_end_atomic(batch); +} + +static void +gen9_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + gen9_render_initialize(ctx); + gen9_render_setup_states(ctx, obj_surface, src_rect, dst_rect, flags); + gen9_clear_dest_region(ctx); + gen9_render_emit_states(ctx, PS_KERNEL); + intel_batchbuffer_flush(batch); +} + +static void +gen9_subpicture_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen8_global_blend_state *global_blend_state; + struct gen8_blend_state_rt *blend_state; + unsigned char *cc_ptr; + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->blend_state_offset; + + global_blend_state = (struct gen8_global_blend_state*) cc_ptr; + + memset(global_blend_state, 0, render_state->blend_state_size); + /* Global blend state + blend_state for Render Target */ + blend_state = (struct gen8_blend_state_rt *)(global_blend_state + 1); + blend_state->blend0.color_blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.src_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.alpha_blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.ia_dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.ia_src_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.colorbuf_blend = 1; + blend_state->blend1.post_blend_clamp_enable = 1; + blend_state->blend1.pre_blend_clamp_enable = 1; + blend_state->blend1.clamp_range = 0; /* clamp range [0, 1] */ + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen9_subpic_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + float *constant_buffer; + float global_alpha = 1.0; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + unsigned char *cc_ptr; + + if (obj_subpic->flags & VA_SUBPICTURE_GLOBAL_ALPHA) { + global_alpha = obj_subpic->global_alpha; + } + + + dri_bo_map(render_state->dynamic_state.bo, 1); + assert(render_state->dynamic_state.bo->virtual); + + cc_ptr = (unsigned char *) render_state->dynamic_state.bo->virtual + + render_state->curbe_offset; + + constant_buffer = (float *) cc_ptr; + *constant_buffer = global_alpha; + + dri_bo_unmap(render_state->dynamic_state.bo); +} + +static void +gen9_subpicture_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + gen9_render_dest_surface_state(ctx, 0); + gen9_subpic_render_src_surfaces_state(ctx, obj_surface); + gen9_render_sampler(ctx); + gen9_render_cc_viewport(ctx); + gen9_render_color_calc_state(ctx); + gen9_subpicture_render_blend_state(ctx); + gen9_subpic_render_upload_constants(ctx, obj_surface); + i965_subpic_render_upload_vertex(ctx, obj_surface, dst_rect); +} + +static void +gen9_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + assert(obj_subpic); + gen9_render_initialize(ctx); + gen9_subpicture_render_setup_states(ctx, obj_surface, src_rect, dst_rect); + gen9_render_emit_states(ctx, PS_SUBPIC_KERNEL); + i965_render_upload_image_palette(ctx, obj_subpic->obj_image, 0xff); + intel_batchbuffer_flush(batch); +} + +static void +gen9_render_terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + + dri_bo_unreference(render_state->vb.vertex_buffer); + render_state->vb.vertex_buffer = NULL; + + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + render_state->wm.surface_state_binding_table_bo = NULL; + + if (render_state->instruction_state.bo) { + dri_bo_unreference(render_state->instruction_state.bo); + render_state->instruction_state.bo = NULL; + } + + if (render_state->dynamic_state.bo) { + dri_bo_unreference(render_state->dynamic_state.bo); + render_state->dynamic_state.bo = NULL; + } + + if (render_state->indirect_state.bo) { + dri_bo_unreference(render_state->indirect_state.bo); + render_state->indirect_state.bo = NULL; + } + + if (render_state->draw_region) { + dri_bo_unreference(render_state->draw_region->bo); + free(render_state->draw_region); + render_state->draw_region = NULL; + } +} + +bool +gen9_render_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + int i, kernel_size; + unsigned int kernel_offset, end_offset; + unsigned char *kernel_ptr; + struct i965_kernel *kernel; + + render_state->render_put_surface = gen9_render_put_surface; + render_state->render_put_subpicture = gen9_render_put_subpicture; + render_state->render_terminate = gen9_render_terminate; + + memcpy(render_state->render_kernels, render_kernels_gen9, + sizeof(render_state->render_kernels)); + + kernel_size = 4096; + + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + kernel = &render_state->render_kernels[i]; + + if (!kernel->size) + continue; + + kernel_size += ALIGN(kernel->size, ALIGNMENT); + } + + render_state->instruction_state.bo = dri_bo_alloc(i965->intel.bufmgr, + "kernel shader", + kernel_size, + 0x1000); + if (render_state->instruction_state.bo == NULL) { + WARN_ONCE("failure to allocate the buffer space for kernel shader\n"); + return false; + } + + assert(render_state->instruction_state.bo); + + render_state->instruction_state.bo_size = kernel_size; + render_state->instruction_state.end_offset = 0; + end_offset = 0; + + dri_bo_map(render_state->instruction_state.bo, 1); + kernel_ptr = (unsigned char *)(render_state->instruction_state.bo->virtual); + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + kernel = &render_state->render_kernels[i]; + kernel_offset = end_offset; + kernel->kernel_offset = kernel_offset; + + if (!kernel->size) + continue; + + memcpy(kernel_ptr + kernel_offset, kernel->bin, kernel->size); + + end_offset += ALIGN(kernel->size, ALIGNMENT); + } + + render_state->instruction_state.end_offset = end_offset; + + dri_bo_unmap(render_state->instruction_state.bo); + + return true; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_vme.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_vme.c new file mode 100644 index 000000000..5f9b796bf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/gen9_vme.c @@ -0,0 +1,1853 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + */ + +#include +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" + +#ifdef SURFACE_STATE_PADDED_SIZE +#undef SURFACE_STATE_PADDED_SIZE +#endif + +#define SURFACE_STATE_PADDED_SIZE SURFACE_STATE_PADDED_SIZE_GEN8 +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index) + +#define VME_INTRA_SHADER 0 +#define VME_INTER_SHADER 1 +#define VME_BINTER_SHADER 2 + +#define CURBE_ALLOCATION_SIZE 37 /* in 256-bit */ +#define CURBE_TOTAL_DATA_LENGTH (4 * 32) /* in byte, it should be less than or equal to CURBE_ALLOCATION_SIZE * 32 */ +#define CURBE_URB_ENTRY_LENGTH 4 /* in 256-bit, it should be less than or equal to CURBE_TOTAL_DATA_LENGTH / 32 */ + +#define VME_MSG_LENGTH 32 + +static const uint32_t gen9_vme_intra_frame[][4] = { +#include "shaders/vme/intra_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_inter_frame[][4] = { +#include "shaders/vme/inter_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_inter_bframe[][4] = { +#include "shaders/vme/inter_bframe_gen9.g9b" +}; + +static struct i965_kernel gen9_vme_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen9_vme_intra_frame, + sizeof(gen9_vme_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen9_vme_inter_frame, + sizeof(gen9_vme_inter_frame), + NULL + }, + { + "VME inter BFrame", + VME_BINTER_SHADER, + gen9_vme_inter_bframe, + sizeof(gen9_vme_inter_bframe), + NULL + } +}; + +static const uint32_t gen9_vme_mpeg2_intra_frame[][4] = { +#include "shaders/vme/intra_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_mpeg2_inter_frame[][4] = { +#include "shaders/vme/mpeg2_inter_gen9.g9b" +}; + +static struct i965_kernel gen9_vme_mpeg2_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen9_vme_mpeg2_intra_frame, + sizeof(gen9_vme_mpeg2_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen9_vme_mpeg2_inter_frame, + sizeof(gen9_vme_mpeg2_inter_frame), + NULL + }, +}; + +static const uint32_t gen9_vme_vp8_intra_frame[][4] = { +#include "shaders/vme/vp8_intra_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_vp8_inter_frame[][4] = { +#include "shaders/vme/vp8_inter_frame_gen9.g9b" +}; + +static struct i965_kernel gen9_vme_vp8_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen9_vme_vp8_intra_frame, + sizeof(gen9_vme_vp8_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen9_vme_vp8_inter_frame, + sizeof(gen9_vme_vp8_inter_frame), + NULL + }, +}; + +/* HEVC */ + +static const uint32_t gen9_vme_hevc_intra_frame[][4] = { +#include "shaders/vme/intra_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_hevc_inter_frame[][4] = { +#include "shaders/vme/inter_frame_gen9.g9b" +}; + +static const uint32_t gen9_vme_hevc_inter_bframe[][4] = { +#include "shaders/vme/inter_bframe_gen9.g9b" +}; + +static struct i965_kernel gen9_vme_hevc_kernels[] = { + { + "VME Intra Frame", + VME_INTRA_SHADER, /*index*/ + gen9_vme_hevc_intra_frame, + sizeof(gen9_vme_hevc_intra_frame), + NULL + }, + { + "VME inter Frame", + VME_INTER_SHADER, + gen9_vme_hevc_inter_frame, + sizeof(gen9_vme_hevc_inter_frame), + NULL + }, + { + "VME inter BFrame", + VME_BINTER_SHADER, + gen9_vme_hevc_inter_bframe, + sizeof(gen9_vme_hevc_inter_bframe), + NULL + } +}; +/* only used for VME source surface state */ +static void +gen9_vme_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_surface2_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_media_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_rw_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_media_chroma_source_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_media_chroma_surface_setup(ctx, + &vme_context->gpe_context, + obj_surface, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context, + int is_intra, + int width_in_mbs, + int height_in_mbs) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 2; + else + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 24; + /* + * Inter MV . 32-byte Intra search + 16 IME info + 128 IME MV + 32 IME Ref + * + 16 FBR Info + 128 FBR MV + 32 FBR Ref. + * 16 * (2 + 2 * (1 + 8 + 2))= 16 * 24. + */ + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_avc_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + gen9_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); + +} + +static void +gen9_vme_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context, + int width_in_mbs, + int height_in_mbs) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 64; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_batchbuffer, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_avc_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + + gen9_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + + +static VAStatus +gen9_vme_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen9_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen9_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen9_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); + + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen9_vme_source_surface_state); + + if (slice_type == SLICE_TYPE_B) + intel_avc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen9_vme_source_surface_state); + } + + /* VME output */ + gen9_vme_avc_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen9_vme_avc_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen9_vme_interface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct gen8_interface_descriptor_data *desc; + int i; + dri_bo *bo; + unsigned char *desc_ptr; + + bo = vme_context->gpe_context.dynamic_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset; + + desc = (struct gen8_interface_descriptor_data *)desc_ptr; + + for (i = 0; i < vme_context->vme_kernel_sum; i++) { + struct i965_kernel *kernel; + kernel = &vme_context->gpe_context.kernels[i]; + assert(sizeof(*desc) == 32); + /*Setup the descritor table*/ + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = kernel->kernel_offset >> 6; + desc->desc3.sampler_count = 0; /* FIXME: */ + desc->desc3.sampler_state_pointer = 0; + desc->desc4.binding_table_entry_count = 1; /* FIXME: */ + desc->desc4.binding_table_pointer = (BINDING_TABLE_OFFSET(0) >> 5); + desc->desc5.constant_urb_entry_read_offset = 0; + desc->desc5.constant_urb_entry_read_length = CURBE_URB_ENTRY_LENGTH; + + desc++; + } + + dri_bo_unmap(bo); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen9_vme_constant_setup(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned char *constant_buffer; + unsigned int *vme_state_message; + int mv_num = 32; + + vme_state_message = (unsigned int *)vme_context->vme_state_message; + + if (encoder_context->codec == CODEC_H264 || + encoder_context->codec == CODEC_H264_MVC) { + if (vme_context->h264_level >= 30) { + mv_num = 16; + + if (vme_context->h264_level >= 31) + mv_num = 8; + } + } else if (encoder_context->codec == CODEC_MPEG2) { + mv_num = 2; + }else if (encoder_context->codec == CODEC_HEVC) { + if (vme_context->hevc_level >= 30*3) { + mv_num = 16; + + if (vme_context->hevc_level >= 31*3) + mv_num = 8; + }/* use the avc level setting */ + } + + vme_state_message[31] = mv_num; + + dri_bo_map(vme_context->gpe_context.dynamic_state.bo, 1); + assert(vme_context->gpe_context.dynamic_state.bo->virtual); + constant_buffer = (unsigned char *)vme_context->gpe_context.dynamic_state.bo->virtual + + vme_context->gpe_context.curbe_offset; + + /* VME MV/Mb cost table is passed by using const buffer */ + /* Now it uses the fixed search path. So it is constructed directly + * in the GPU shader. + */ + memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); + + dri_bo_unmap(vme_context->gpe_context.dynamic_state.bo); + + return VA_STATUS_SUCCESS; +} + +#define MB_SCOREBOARD_A (1 << 0) +#define MB_SCOREBOARD_B (1 << 1) +#define MB_SCOREBOARD_C (1 << 2) + +/* check whether the mb of (x_index, y_index) is out of bound */ +static inline int loop_in_bounds(int x_index, int y_index, int first_mb, int num_mb, int mb_width, int mb_height) +{ + int mb_index; + if (x_index < 0 || x_index >= mb_width) + return -1; + if (y_index < 0 || y_index >= mb_height) + return -1; + + mb_index = y_index * mb_width + x_index; + if (mb_index < first_mb || mb_index > (first_mb + num_mb)) + return -1; + return 0; +} + +static void +gen9wa_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_row; + int s; + unsigned int *command_ptr; + +#define USE_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int first_mb = pSliceParameter->macroblock_address; + int num_mb = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + + x_outer = first_mb % mb_width; + y_outer = first_mb / mb_width; + mb_row = y_outer; + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = first_mb / mb_width; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen9_vme_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s; + unsigned int *command_ptr; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->macroblock_address; + int slice_mb_number = pSliceParameter->num_macroblocks; + unsigned int mb_intra_ub; + int slice_mb_x = pSliceParameter->macroblock_address % mb_width; + for (i = 0; i < slice_mb_number; ) { + int mb_count = i + slice_mb_begin; + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ((encoder_context->quality_level << 24) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + i += 1; + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void gen9_vme_media_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + gen8_gpe_context_init(ctx, &vme_context->gpe_context); + + /* VME output buffer */ + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + /* VME state */ + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; +} + +static void gen9_vme_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + int kernel_shader; + bool allow_hwscore = true; + int s; + unsigned int is_low_quality = (encoder_context->quality_level == ENCODER_LOW_QUALITY); + + if (is_low_quality) + allow_hwscore = false; + else { + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[s]->buffer; + if ((pSliceParameter->macroblock_address % width_in_mbs)) { + allow_hwscore = false; + break; + } + } + } + + if ((pSliceParameter->slice_type == SLICE_TYPE_I) || + (pSliceParameter->slice_type == SLICE_TYPE_SI)) { + kernel_shader = VME_INTRA_SHADER; + } else if ((pSliceParameter->slice_type == SLICE_TYPE_P) || + (pSliceParameter->slice_type == SLICE_TYPE_SP)) { + kernel_shader = VME_INTER_SHADER; + } else { + kernel_shader = VME_BINTER_SHADER; + if (!allow_hwscore) + kernel_shader = VME_INTER_SHADER; + } + if (allow_hwscore) + gen9wa_vme_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + else + gen9_vme_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + pPicParameter->pic_fields.bits.transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen9_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + gen9_gpe_pipeline_end(ctx, &vme_context->gpe_context, batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen9_vme_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if (!vme_context->h264_level || + (vme_context->h264_level != pSequenceParameter->level_idc)) { + vme_context->h264_level = pSequenceParameter->level_idc; + } + + intel_vme_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen9_vme_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen9_vme_interface_setup(ctx, encode_state, encoder_context); + //gen9_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context); + gen9_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen9_vme_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + +static VAStatus gen9_vme_run(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct intel_batchbuffer *batch = encoder_context->base.batch; + + intel_batchbuffer_flush(batch); + + return VA_STATUS_SUCCESS; +} + +static VAStatus gen9_vme_stop(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen9_vme_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_vme_media_init(ctx, encoder_context); + gen9_vme_prepare(ctx, encode_state, encoder_context); + gen9_vme_run(ctx, encode_state, encoder_context); + gen9_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen9_vme_mpeg2_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) + +{ + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + gen9_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); +} + +static void +gen9_vme_mpeg2_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + + gen9_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + +static VAStatus +gen9_vme_mpeg2_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen9_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen9_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen9_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface->bo != NULL) + gen9_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo != NULL) + gen9_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen9_vme_mpeg2_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen9_vme_mpeg2_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen9wa_vme_mpeg2_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + unsigned int *command_ptr; + +#define MPEG2_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + { + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + int first_mb = 0; + int num_mb = mb_width * mb_height; + + x_outer = 0; + y_outer = 0; + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = 0; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = MPEG2_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); + return; +} + +static void +gen9_vme_mpeg2_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s, j; + unsigned int *command_ptr; + + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + int slice_mb_begin = slice_param->macroblock_address; + int slice_mb_number = slice_param->num_macroblocks; + unsigned int mb_intra_ub; + + for (i = 0; i < slice_mb_number;) { + int mb_count = i + slice_mb_begin; + + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ( (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + i += 1; + } + + slice_param++; + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen9_vme_mpeg2_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->picture_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->picture_height, 16) / 16; + bool allow_hwscore = true; + int s; + int kernel_shader; + VAEncPictureParameterBufferMPEG2 *pic_param = NULL; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + int j; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[s]->buffer; + + for (j = 0; j < encode_state->slice_params_ext[s]->num_elements; j++) { + if (slice_param->macroblock_address % width_in_mbs) { + allow_hwscore = false; + break; + } + } + } + + pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + if (pic_param->picture_type == VAEncPictureTypeIntra) { + allow_hwscore = false; + kernel_shader = VME_INTRA_SHADER; + } else { + kernel_shader = VME_INTER_SHADER; + } + + if (allow_hwscore) + gen9wa_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + encoder_context); + else + gen9_vme_mpeg2_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER, + 0, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen9_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + gen9_gpe_pipeline_end(ctx, &vme_context->gpe_context, batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen9_vme_mpeg2_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferMPEG2 *slice_param = (VAEncSliceParameterBufferMPEG2 *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + if ((!vme_context->mpeg2_level) || + (vme_context->mpeg2_level != (seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK))) { + vme_context->mpeg2_level = seq_param->sequence_extension.bits.profile_and_level_indication & MPEG2_LEVEL_MASK; + } + + /*Setup all the memory object*/ + gen9_vme_mpeg2_surface_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + gen9_vme_interface_setup(ctx, encode_state, encoder_context); + //gen9_vme_vme_state_setup(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + intel_vme_mpeg2_state_setup(ctx, encode_state, encoder_context); + gen9_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen9_vme_mpeg2_pipeline_programing(ctx, encode_state, slice_param->is_intra_slice, encoder_context); + + return vaStatus; +} + +static VAStatus +gen9_vme_mpeg2_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_vme_media_init(ctx, encoder_context); + gen9_vme_mpeg2_prepare(ctx, encode_state, encoder_context); + gen9_vme_run(ctx, encode_state, encoder_context); + gen9_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen9_vme_vp8_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + + gen9_vme_output_buffer_setup(ctx, encode_state, index, encoder_context, is_intra, width_in_mbs, height_in_mbs); +} + +static void +gen9_vme_vp8_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) +{ + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + + gen9_vme_output_vme_batchbuffer_setup(ctx, encode_state, index, encoder_context, width_in_mbs, height_in_mbs); +} + +static VAStatus +gen9_vme_vp8_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen9_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen9_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen9_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + /* reference 0 */ + obj_surface = encode_state->reference_objects[0]; + + if (obj_surface->bo != NULL) + gen9_vme_source_surface_state(ctx, 1, obj_surface, encoder_context); + + /* reference 1 */ + obj_surface = encode_state->reference_objects[1]; + + if (obj_surface && obj_surface->bo != NULL) + gen9_vme_source_surface_state(ctx, 2, obj_surface, encoder_context); + } + + /* VME output */ + gen9_vme_vp8_output_buffer_setup(ctx, encode_state, 3, is_intra, encoder_context); + gen9_vme_vp8_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} + +static void +gen9_vme_vp8_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; + int height_in_mbs = ALIGN(seq_param->frame_height, 16) / 16; + int kernel_shader = (is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER); + + gen9wa_vme_mpeg2_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen9_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + gen9_gpe_pipeline_end(ctx, &vme_context->gpe_context, batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen9_vme_vp8_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncPictureParameterBufferVP8 *pPicParameter = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + int is_intra = !pPicParameter->pic_flags.bits.frame_type; + + /* update vp8 mbmv cost */ + intel_vme_vp8_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen9_vme_vp8_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen9_vme_interface_setup(ctx, encode_state, encoder_context); + gen9_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen9_vme_vp8_pipeline_programing(ctx, encode_state, is_intra, encoder_context); + + return vaStatus; +} + +static VAStatus +gen9_vme_vp8_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_vme_media_init(ctx, encoder_context); + gen9_vme_vp8_prepare(ctx, encode_state, encoder_context); + gen9_vme_run(ctx, encode_state, encoder_context); + gen9_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + +/* HEVC */ + +static void +gen9_vme_hevc_output_buffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == HEVC_SLICE_I; + int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + 15)/16; + int height_in_mbs = (pSequenceParameter->pic_height_in_luma_samples + 15)/16; + + + vme_context->vme_output.num_blocks = width_in_mbs * height_in_mbs; + vme_context->vme_output.pitch = 16; /* in bytes, always 16 */ + + if (is_intra) + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 2; + else + vme_context->vme_output.size_block = INTRA_VME_OUTPUT_IN_BYTES * 24; + /* + * Inter MV . 32-byte Intra search + 16 IME info + 128 IME MV + 32 IME Ref + * + 16 FBR Info + 128 FBR MV + 32 FBR Ref. + * 16 * (2 + 2 * (1 + 8 + 2))= 16 * 24. + */ + + vme_context->vme_output.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME output buffer", + vme_context->vme_output.num_blocks * vme_context->vme_output.size_block, + 0x1000); + assert(vme_context->vme_output.bo); + vme_context->vme_buffer_suface_setup(ctx, + &vme_context->gpe_context, + &vme_context->vme_output, + BINDING_TABLE_OFFSET(index), + SURFACE_STATE_OFFSET(index)); +} + +static void +gen9_vme_hevc_output_vme_batchbuffer_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int index, + struct intel_encoder_context *encoder_context) + +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + 15)/16; + int height_in_mbs = (pSequenceParameter->pic_height_in_luma_samples + 15)/16; + + vme_context->vme_batchbuffer.num_blocks = width_in_mbs * height_in_mbs + 1; + vme_context->vme_batchbuffer.size_block = 64; /* 4 OWORDs */ + vme_context->vme_batchbuffer.pitch = 16; + vme_context->vme_batchbuffer.bo = dri_bo_alloc(i965->intel.bufmgr, + "VME batchbuffer", + vme_context->vme_batchbuffer.num_blocks * vme_context->vme_batchbuffer.size_block, + 0x1000); +} +static VAStatus +gen9_vme_hevc_surface_setup(VADriverContextP ctx, + struct encode_state *encode_state, + int is_intra, + struct intel_encoder_context *encoder_context) +{ + struct object_surface *obj_surface; + + /*Setup surfaces state*/ + /* current picture for encoding */ + obj_surface = encode_state->input_yuv_object; + gen9_vme_source_surface_state(ctx, 0, obj_surface, encoder_context); + gen9_vme_media_source_surface_state(ctx, 4, obj_surface, encoder_context); + gen9_vme_media_chroma_source_surface_state(ctx, 6, obj_surface, encoder_context); + + if (!is_intra) { + VAEncSliceParameterBufferHEVC *slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + int slice_type; + + slice_type = slice_param->slice_type; + assert(slice_type != HEVC_SLICE_I); + + /* to do HEVC */ + intel_hevc_vme_reference_state(ctx, encode_state, encoder_context, 0, 1, gen9_vme_source_surface_state); + + if (slice_type == HEVC_SLICE_B) + intel_hevc_vme_reference_state(ctx, encode_state, encoder_context, 1, 2, gen9_vme_source_surface_state); + } + + /* VME output */ + gen9_vme_hevc_output_buffer_setup(ctx, encode_state, 3, encoder_context); + gen9_vme_hevc_output_vme_batchbuffer_setup(ctx, encode_state, 5, encoder_context); + + return VA_STATUS_SUCCESS; +} +static void +gen9wa_vme_hevc_walker_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_row; + int s; + unsigned int *command_ptr; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + int num_mb_in_ctb = (ctb_size + 15)/16; + num_mb_in_ctb = num_mb_in_ctb * num_mb_in_ctb; + +#define USE_SCOREBOARD (1 << 21) + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + /*slice_segment_address must picture_width_in_ctb alainment */ + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[s]->buffer; + int first_mb = pSliceParameter->slice_segment_address * num_mb_in_ctb; + int num_mb = pSliceParameter->num_ctu_in_slice * num_mb_in_ctb; + unsigned int mb_intra_ub, score_dep; + int x_outer, y_outer, x_inner, y_inner; + int xtemp_outer = 0; + + x_outer = first_mb % mb_width; + y_outer = first_mb / mb_width; + mb_row = y_outer; + + for (; x_outer < (mb_width -2 ) && !loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + x_inner = x_outer; + y_inner = y_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + + x_inner -= 2; + y_inner += 1; + } + x_outer += 1; + } + + xtemp_outer = mb_width - 2; + if (xtemp_outer < 0) + xtemp_outer = 0; + x_outer = xtemp_outer; + y_outer = first_mb / mb_width; + for (;!loop_in_bounds(x_outer, y_outer, first_mb, num_mb, mb_width, mb_height); ) { + y_inner = y_outer; + x_inner = x_outer; + for (; !loop_in_bounds(x_inner, y_inner, first_mb, num_mb, mb_width, mb_height);) { + mb_intra_ub = 0; + score_dep = 0; + if (x_inner != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + score_dep |= MB_SCOREBOARD_A; + } + if (y_inner != mb_row) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + score_dep |= MB_SCOREBOARD_B; + if (x_inner != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + + if (x_inner != (mb_width -1)) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + score_dep |= MB_SCOREBOARD_C; + } + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = USE_SCOREBOARD; + /* Indirect data */ + *command_ptr++ = 0; + /* the (X, Y) term of scoreboard */ + *command_ptr++ = ((y_inner << 16) | x_inner); + *command_ptr++ = score_dep; + /*inline data */ + *command_ptr++ = (mb_width << 16 | y_inner << 8 | x_inner); + *command_ptr++ = ((1 << 18) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + x_inner -= 2; + y_inner += 1; + } + x_outer++; + if (x_outer >= mb_width) { + y_outer += 1; + x_outer = xtemp_outer; + } + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void +gen9_vme_hevc_fill_vme_batchbuffer(VADriverContextP ctx, + struct encode_state *encode_state, + int mb_width, int mb_height, + int kernel, + int transform_8x8_mode_flag, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + int mb_x = 0, mb_y = 0; + int i, s; + unsigned int *command_ptr; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + + int ctb_size = 1 << log2_ctb_size; + int num_mb_in_ctb = (ctb_size + 15)/16; + num_mb_in_ctb = num_mb_in_ctb * num_mb_in_ctb; + + dri_bo_map(vme_context->vme_batchbuffer.bo, 1); + command_ptr = vme_context->vme_batchbuffer.bo->virtual; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->slice_segment_address * num_mb_in_ctb; + int slice_mb_number = pSliceParameter->num_ctu_in_slice * num_mb_in_ctb; + + unsigned int mb_intra_ub; + int slice_mb_x = slice_mb_begin % mb_width; + for (i = 0; i < slice_mb_number; ) { + int mb_count = i + slice_mb_begin; + mb_x = mb_count % mb_width; + mb_y = mb_count / mb_width; + mb_intra_ub = 0; + + if (mb_x != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_AE; + } + if (mb_y != 0) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_B; + if (mb_x != 0) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_D; + if (mb_x != (mb_width -1)) + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + if (i < mb_width) { + if (i == 0) + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_AE); + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_BCD_MASK); + if ((i == (mb_width - 1)) && slice_mb_x) { + mb_intra_ub |= INTRA_PRED_AVAIL_FLAG_C; + } + } + + if ((i == mb_width) && slice_mb_x) { + mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D); + } + + *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2)); + *command_ptr++ = kernel; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + + /*inline data */ + *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x); + *command_ptr++ = ( (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8)); + + *command_ptr++ = CMD_MEDIA_STATE_FLUSH; + *command_ptr++ = 0; + i += 1; + } + } + + *command_ptr++ = MI_BATCH_BUFFER_END; + *command_ptr++ = 0; + + dri_bo_unmap(vme_context->vme_batchbuffer.bo); +} + +static void gen9_vme_hevc_pipeline_programing(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = encoder_context->vme_context; + struct intel_batchbuffer *batch = encoder_context->base.batch; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + 15)/16; + int height_in_mbs = (pSequenceParameter->pic_height_in_luma_samples + 15)/16; + int kernel_shader; + bool allow_hwscore = true; + int s; + + int log2_cu_size = pSequenceParameter->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = pSequenceParameter->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + + int ctb_size = 1 << log2_ctb_size; + int num_mb_in_ctb = (ctb_size + 15)/16; + int transform_8x8_mode_flag = 1; + num_mb_in_ctb = num_mb_in_ctb * num_mb_in_ctb; + + for (s = 0; s < encode_state->num_slice_params_ext; s++) { + pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[s]->buffer; + int slice_mb_begin = pSliceParameter->slice_segment_address * num_mb_in_ctb; + if ((slice_mb_begin % width_in_mbs)) { + allow_hwscore = false; + break; + } + } + + if (pSliceParameter->slice_type == HEVC_SLICE_I) { + kernel_shader = VME_INTRA_SHADER; + } else if (pSliceParameter->slice_type == HEVC_SLICE_P) { + kernel_shader = VME_INTER_SHADER; + } else { + kernel_shader = VME_BINTER_SHADER; + if (!allow_hwscore) + kernel_shader = VME_INTER_SHADER; + } + if (allow_hwscore) + gen9wa_vme_hevc_walker_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + transform_8x8_mode_flag, + encoder_context); + else + gen9_vme_hevc_fill_vme_batchbuffer(ctx, + encode_state, + width_in_mbs, height_in_mbs, + kernel_shader, + transform_8x8_mode_flag, + encoder_context); + + intel_batchbuffer_start_atomic(batch, 0x1000); + gen9_gpe_pipeline_setup(ctx, &vme_context->gpe_context, batch); + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8) | (1 << 0)); + OUT_RELOC(batch, + vme_context->vme_batchbuffer.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + gen9_gpe_pipeline_end(ctx, &vme_context->gpe_context, batch); + + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus gen9_vme_hevc_prepare(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VAEncSliceParameterBufferHEVC *pSliceParameter = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; + int is_intra = pSliceParameter->slice_type == HEVC_SLICE_I; + VAEncSequenceParameterBufferHEVC *pSequenceParameter = (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + + /* here use the avc level for hevc vme */ + if (!vme_context->hevc_level || + (vme_context->hevc_level != pSequenceParameter->general_level_idc)) { + vme_context->hevc_level = pSequenceParameter->general_level_idc; + } + + intel_vme_hevc_update_mbmv_cost(ctx, encode_state, encoder_context); + + /*Setup all the memory object*/ + gen9_vme_hevc_surface_setup(ctx, encode_state, is_intra, encoder_context); + gen9_vme_interface_setup(ctx, encode_state, encoder_context); + //gen9_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context); + gen9_vme_constant_setup(ctx, encode_state, encoder_context); + + /*Programing media pipeline*/ + gen9_vme_hevc_pipeline_programing(ctx, encode_state, encoder_context); + + return vaStatus; +} + + +static VAStatus +gen9_vme_hevc_pipeline(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + gen9_vme_media_init(ctx, encoder_context); + gen9_vme_hevc_prepare(ctx, encode_state, encoder_context); + gen9_vme_run(ctx, encode_state, encoder_context); + gen9_vme_stop(ctx, encode_state, encoder_context); + + return VA_STATUS_SUCCESS; +} + + +static void +gen9_vme_context_destroy(void *context) +{ + struct gen6_vme_context *vme_context = context; + + gen8_gpe_context_destroy(&vme_context->gpe_context); + + dri_bo_unreference(vme_context->vme_output.bo); + vme_context->vme_output.bo = NULL; + + dri_bo_unreference(vme_context->vme_state.bo); + vme_context->vme_state.bo = NULL; + + dri_bo_unreference(vme_context->vme_batchbuffer.bo); + vme_context->vme_batchbuffer.bo = NULL; + + if (vme_context->vme_state_message) { + free(vme_context->vme_state_message); + vme_context->vme_state_message = NULL; + } + + free(vme_context); +} + +Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context) +{ + struct gen6_vme_context *vme_context = calloc(1, sizeof(struct gen6_vme_context)); + struct i965_kernel *vme_kernel_list = NULL; + int i965_kernel_num; + + switch (encoder_context->codec) { + case CODEC_H264: + case CODEC_H264_MVC: + vme_kernel_list = gen9_vme_kernels; + encoder_context->vme_pipeline = gen9_vme_pipeline; + i965_kernel_num = sizeof(gen9_vme_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_MPEG2: + vme_kernel_list = gen9_vme_mpeg2_kernels; + encoder_context->vme_pipeline = gen9_vme_mpeg2_pipeline; + i965_kernel_num = sizeof(gen9_vme_mpeg2_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_VP8: + vme_kernel_list = gen9_vme_vp8_kernels; + encoder_context->vme_pipeline = gen9_vme_vp8_pipeline; + i965_kernel_num = sizeof(gen9_vme_vp8_kernels) / sizeof(struct i965_kernel); + break; + + case CODEC_HEVC: + vme_kernel_list = gen9_vme_hevc_kernels; + encoder_context->vme_pipeline = gen9_vme_hevc_pipeline; + i965_kernel_num = sizeof(gen9_vme_hevc_kernels) / sizeof(struct i965_kernel); + break; + + default: + /* never get here */ + assert(0); + + break; + } + + assert(vme_context); + vme_context->vme_kernel_sum = i965_kernel_num; + vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; + + vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6; + vme_context->gpe_context.curbe_size = CURBE_TOTAL_DATA_LENGTH; + vme_context->gpe_context.sampler_size = 0; + + + vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1; + vme_context->gpe_context.vfe_state.num_urb_entries = 64; + vme_context->gpe_context.vfe_state.gpgpu_mode = 0; + vme_context->gpe_context.vfe_state.urb_entry_size = 16; + vme_context->gpe_context.vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1; + + gen7_vme_scoreboard_init(ctx, vme_context); + + gen8_gpe_load_kernels(ctx, + &vme_context->gpe_context, + vme_kernel_list, + i965_kernel_num); + vme_context->vme_surface2_setup = gen8_gpe_surface2_setup; + vme_context->vme_media_rw_surface_setup = gen8_gpe_media_rw_surface_setup; + vme_context->vme_buffer_suface_setup = gen8_gpe_buffer_suface_setup; + vme_context->vme_media_chroma_surface_setup = gen8_gpe_media_chroma_surface_setup; + + encoder_context->vme_context = vme_context; + encoder_context->vme_context_destroy = gen9_vme_context_destroy; + + vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int)); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.c new file mode 100644 index 000000000..157a1077c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.c @@ -0,0 +1,899 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ +#include "sysdeps.h" + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_avc_bsd.h" +#include "i965_media_h264.h" +#include "i965_media.h" +#include "i965_decoder_utils.h" +#include "intel_media.h" + +static void +i965_avc_bsd_init_avc_bsd_surface(VADriverContextP ctx, + struct object_surface *obj_surface, + VAPictureParameterBufferH264 *pic_param, + struct i965_h264_context *i965_h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + GenAvcSurface *avc_bsd_surface = obj_surface->private_data; + + obj_surface->free_private_data = gen_free_avc_surface; + + if (!avc_bsd_surface) { + avc_bsd_surface = calloc(sizeof(GenAvcSurface), 1); + assert(avc_bsd_surface); + avc_bsd_surface->base.frame_store_id = -1; + assert((obj_surface->size & 0x3f) == 0); + obj_surface->private_data = avc_bsd_surface; + } + + avc_bsd_surface->dmv_bottom_flag = (pic_param->pic_fields.bits.field_pic_flag && + !pic_param->seq_fields.bits.direct_8x8_inference_flag); + + if (avc_bsd_surface->dmv_top == NULL) { + avc_bsd_surface->dmv_top = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + DMV_SIZE, + 0x1000); + } + + if (avc_bsd_surface->dmv_bottom_flag && + avc_bsd_surface->dmv_bottom == NULL) { + avc_bsd_surface->dmv_bottom = dri_bo_alloc(i965->intel.bufmgr, + "direct mv w/r buffer", + DMV_SIZE, + 0x1000); + } +} + +static void +i965_bsd_ind_obj_base_address(VADriverContextP ctx, + struct decode_state *decode_state, + int slice, + struct i965_h264_context *i965_h264_context) + +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + dri_bo *ind_bo = decode_state->slice_datas[slice]->bo; + + BEGIN_BCS_BATCH(batch, 3); + OUT_BCS_BATCH(batch, CMD_BSD_IND_OBJ_BASE_ADDR | (3 - 2)); + OUT_BCS_RELOC(batch, ind_bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +i965_avc_bsd_img_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + int qm_present_flag; + int img_struct; + int mbaff_frame_flag; + unsigned int avc_it_command_header; + unsigned int width_in_mbs, height_in_mbs; + VAPictureParameterBufferH264 *pic_param; + + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) + qm_present_flag = 1; + else + qm_present_flag = 0; /* built-in QM matrices */ + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD) + img_struct = 1; + else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD) + img_struct = 3; + else + img_struct = 0; + + if ((img_struct & 0x1) == 0x1) { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x1); + } else { + assert(pic_param->pic_fields.bits.field_pic_flag == 0x0); + } + + if (pic_param->seq_fields.bits.frame_mbs_only_flag) { /* a frame containing only frame macroblocks */ + assert(pic_param->seq_fields.bits.mb_adaptive_frame_field_flag == 0); + assert(pic_param->pic_fields.bits.field_pic_flag == 0); + } else { + assert(pic_param->seq_fields.bits.direct_8x8_inference_flag == 1); /* see H.264 spec */ + } + + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff); + height_in_mbs = ((pic_param->picture_height_in_mbs_minus1 + 1) & 0xff); /* frame height */ + + assert(!((width_in_mbs * height_in_mbs) & 0x8000)); /* hardware requirement */ + + /* BSD unit doesn't support 4:2:2 and 4:4:4 picture */ + assert(pic_param->seq_fields.bits.chroma_format_idc == 0 || /* monochrome picture */ + pic_param->seq_fields.bits.chroma_format_idc == 1); /* 4:2:0 */ + assert(pic_param->seq_fields.bits.residual_colour_transform_flag == 0); /* only available for 4:4:4 */ + + avc_it_command_header = (CMD_MEDIA_OBJECT_EX | (12 - 2)); + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_IMG_STATE | (6 - 2)); + OUT_BCS_BATCH(batch, + ((width_in_mbs * height_in_mbs) & 0x7fff)); + OUT_BCS_BATCH(batch, + (height_in_mbs << 16) | + (width_in_mbs << 0)); + OUT_BCS_BATCH(batch, + ((pic_param->second_chroma_qp_index_offset & 0x1f) << 24) | + ((pic_param->chroma_qp_index_offset & 0x1f) << 16) | + (SCAN_RASTER_ORDER << 15) | /* AVC ILDB Data */ + (SCAN_SPECIAL_ORDER << 14) | /* AVC IT Command */ + (SCAN_RASTER_ORDER << 13) | /* AVC IT Data */ + (1 << 12) | /* always 1, hardware requirement */ + (qm_present_flag << 10) | + (img_struct << 8) | + (16 << 0)); /* FIXME: always support 16 reference frames ??? */ + OUT_BCS_BATCH(batch, + (RESIDUAL_DATA_OFFSET << 24) | /* residual data offset */ + (0 << 17) | /* don't overwrite SRT */ + (0 << 16) | /* Un-SRT (Unsynchronized Root Thread) */ + (0 << 12) | /* FIXME: no 16MV ??? */ + (pic_param->seq_fields.bits.chroma_format_idc << 10) | + (i965_h264_context->enable_avc_ildb << 8) | /* Enable ILDB writing output */ + (pic_param->pic_fields.bits.entropy_coding_mode_flag << 7) | + ((!pic_param->pic_fields.bits.reference_pic_flag) << 6) | + (pic_param->pic_fields.bits.constrained_intra_pred_flag << 5) | + (pic_param->seq_fields.bits.direct_8x8_inference_flag << 4) | + (pic_param->pic_fields.bits.transform_8x8_mode_flag << 3) | + (pic_param->seq_fields.bits.frame_mbs_only_flag << 2) | + (mbaff_frame_flag << 1) | + (pic_param->pic_fields.bits.field_pic_flag << 0)); + OUT_BCS_BATCH(batch, avc_it_command_header); + ADVANCE_BCS_BATCH(batch); +} + +static void +i965_avc_bsd_qm_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + int cmd_len; + VAIQMatrixBufferH264 *iq_matrix; + VAPictureParameterBufferH264 *pic_param; + + if (!decode_state->iq_matrix || !decode_state->iq_matrix->buffer) + return; + + iq_matrix = (VAIQMatrixBufferH264 *)decode_state->iq_matrix->buffer; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + cmd_len = 2 + 6 * 4; /* always load six 4x4 scaling matrices */ + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + cmd_len += 2 * 16; /* load two 8x8 scaling matrices */ + + BEGIN_BCS_BATCH(batch, cmd_len); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_QM_STATE | (cmd_len - 2)); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + OUT_BCS_BATCH(batch, + (0x0 << 8) | /* don't use default built-in matrices */ + (0xff << 0)); /* six 4x4 and two 8x8 scaling matrices */ + else + OUT_BCS_BATCH(batch, + (0x0 << 8) | /* don't use default built-in matrices */ + (0x3f << 0)); /* six 4x4 scaling matrices */ + + intel_batchbuffer_data(batch, &iq_matrix->ScalingList4x4[0][0], 6 * 4 * 4); + + if (pic_param->pic_fields.bits.transform_8x8_mode_flag) + intel_batchbuffer_data(batch, &iq_matrix->ScalingList8x8[0][0], 2 * 16 * 4); + + ADVANCE_BCS_BATCH(batch); +} + +static void +i965_avc_bsd_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + int present_flag, cmd_len, list, j; + uint8_t ref_idx_state[32]; + char weightoffsets[32 * 6]; + + /* don't issue SLICE_STATE for intra-prediction decoding */ + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) + return; + + cmd_len = 2; + + if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) { + present_flag = PRESENT_REF_LIST0; + cmd_len += 8; + } else { + present_flag = PRESENT_REF_LIST0 | PRESENT_REF_LIST1; + cmd_len += 16; + } + + if ((slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) && + (pic_param->pic_fields.bits.weighted_pred_flag == 1)) { + present_flag |= PRESENT_WEIGHT_OFFSET_L0; + cmd_len += 48; + } + + if ((slice_param->slice_type == SLICE_TYPE_B) && + (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) { + present_flag |= PRESENT_WEIGHT_OFFSET_L0 | PRESENT_WEIGHT_OFFSET_L1; + cmd_len += 96; + } + + BEGIN_BCS_BATCH(batch, cmd_len); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_SLICE_STATE | (cmd_len - 2)); + OUT_BCS_BATCH(batch, present_flag); + + for (list = 0; list < 2; list++) { + int flag, num_va_pics; + VAPictureH264 *va_pic; + + if (list == 0) { + flag = PRESENT_REF_LIST0; + va_pic = slice_param->RefPicList0; + num_va_pics = slice_param->num_ref_idx_l0_active_minus1 + 1; + } else { + flag = PRESENT_REF_LIST1; + va_pic = slice_param->RefPicList1; + num_va_pics = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (!(present_flag & flag)) + continue; + + gen5_fill_avc_ref_idx_state( + ref_idx_state, + va_pic, num_va_pics, + i965_h264_context->fsid_list + ); + intel_batchbuffer_data(batch, ref_idx_state, sizeof(ref_idx_state)); + } + + i965_h264_context->weight128_luma_l0 = 0; + i965_h264_context->weight128_luma_l1 = 0; + i965_h264_context->weight128_chroma_l0 = 0; + i965_h264_context->weight128_chroma_l1 = 0; + + i965_h264_context->weight128_offset0_flag = 0; + i965_h264_context->weight128_offset0 = 0; + + if (present_flag & PRESENT_WEIGHT_OFFSET_L0) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_offset_l0[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_weight_l0[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_offset_l0[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_weight_l0[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_offset_l0[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_weight_l0[j][1]; + + if (pic_param->pic_fields.bits.weighted_pred_flag == 1 || + pic_param->pic_fields.bits.weighted_bipred_idc == 1) { + if (i965_h264_context->use_hw_w128) { + if (slice_param->luma_weight_l0[j] == 128) + i965_h264_context->weight128_luma_l0 |= (1 << j); + + if (slice_param->chroma_weight_l0[j][0] == 128 || + slice_param->chroma_weight_l0[j][1] == 128) + i965_h264_context->weight128_chroma_l0 |= (1 << j); + } else { + /* FIXME: workaround for weight 128 */ + if (slice_param->luma_weight_l0[j] == 128 || + slice_param->chroma_weight_l0[j][0] == 128 || + slice_param->chroma_weight_l0[j][1] == 128) + i965_h264_context->weight128_offset0_flag = 1; + } + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + } + + if (present_flag & PRESENT_WEIGHT_OFFSET_L1) { + for (j = 0; j < 32; j++) { + weightoffsets[j * 6 + 0] = slice_param->luma_offset_l1[j]; + weightoffsets[j * 6 + 1] = slice_param->luma_weight_l1[j]; + weightoffsets[j * 6 + 2] = slice_param->chroma_offset_l1[j][0]; + weightoffsets[j * 6 + 3] = slice_param->chroma_weight_l1[j][0]; + weightoffsets[j * 6 + 4] = slice_param->chroma_offset_l1[j][1]; + weightoffsets[j * 6 + 5] = slice_param->chroma_weight_l1[j][1]; + + if (pic_param->pic_fields.bits.weighted_bipred_idc == 1) { + if (i965_h264_context->use_hw_w128) { + if (slice_param->luma_weight_l1[j] == 128) + i965_h264_context->weight128_luma_l1 |= (1 << j); + + if (slice_param->chroma_weight_l1[j][0] == 128 || + slice_param->chroma_weight_l1[j][1] == 128) + i965_h264_context->weight128_chroma_l1 |= (1 << j); + } else { + if (slice_param->luma_weight_l0[j] == 128 || + slice_param->chroma_weight_l0[j][0] == 128 || + slice_param->chroma_weight_l0[j][1] == 128) + i965_h264_context->weight128_offset0_flag = 1; + } + } + } + + intel_batchbuffer_data(batch, weightoffsets, sizeof(weightoffsets)); + } + + ADVANCE_BCS_BATCH(batch); +} + +static void +i965_avc_bsd_buf_base_state(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + struct i965_avc_bsd_context *i965_avc_bsd_context; + int i; + VAPictureH264 *va_pic; + struct object_surface *obj_surface; + GenAvcSurface *avc_bsd_surface; + + i965_avc_bsd_context = &i965_h264_context->i965_avc_bsd_context; + + BEGIN_BCS_BATCH(batch, 74); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_BUF_BASE_STATE | (74 - 2)); + OUT_BCS_RELOC(batch, i965_avc_bsd_context->bsd_raw_store.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, i965_avc_bsd_context->mpr_row_store.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BCS_RELOC(batch, i965_h264_context->avc_it_command_mb_info.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + i965_h264_context->avc_it_command_mb_info.mbs * i965_h264_context->use_avc_hw_scoreboard * MB_CMD_IN_BYTES); + OUT_BCS_RELOC(batch, i965_h264_context->avc_it_data.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + (i965_h264_context->avc_it_data.write_offset << 6)); + + if (i965_h264_context->enable_avc_ildb) + OUT_BCS_RELOC(batch, i965_h264_context->avc_ildb_data.bo, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_BATCH(batch, 0); + + for (i = 0; i < ARRAY_ELEMS(i965_h264_context->fsid_list); i++) { + obj_surface = i965_h264_context->fsid_list[i].obj_surface; + if (obj_surface && obj_surface->private_data) { + avc_bsd_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + + if (avc_bsd_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + else + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; + i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + /* initial uv component for YUV400 case */ + if (pic_param->seq_fields.bits.chroma_format_idc == 0) { + unsigned int uv_offset = obj_surface->width * obj_surface->height; + unsigned int uv_size = obj_surface->width * obj_surface->height / 2; + + dri_bo_map(obj_surface->bo, 1); + memset(obj_surface->bo->virtual + uv_offset, 0x80, uv_size); + dri_bo_unmap(obj_surface->bo); + } + + i965_avc_bsd_init_avc_bsd_surface(ctx, obj_surface, pic_param, i965_h264_context); + avc_bsd_surface = obj_surface->private_data; + + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + if (avc_bsd_surface->dmv_bottom_flag == 1) + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_bottom, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + else + OUT_BCS_RELOC(batch, avc_bsd_surface->dmv_top, + I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, + 0); + + /* POC List */ + for (i = 0; i < ARRAY_ELEMS(i965_h264_context->fsid_list); i++) { + obj_surface = i965_h264_context->fsid_list[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + } else { + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + } + } + + va_pic = &pic_param->CurrPic; + OUT_BCS_BATCH(batch, va_pic->TopFieldOrderCnt); + OUT_BCS_BATCH(batch, va_pic->BottomFieldOrderCnt); + + ADVANCE_BCS_BATCH(batch); +} + +static void +g4x_avc_bsd_object(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + int slice_index, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + if (slice_param) { + int encrypted, counter_value, cmd_len; + int slice_hor_pos, slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + unsigned int slice_data_bit_offset; + int weighted_pred_idc = 0; + int first_mb_in_slice = 0; + int slice_type; + + encrypted = 0; /* FIXME: which flag in VAAPI is used for encryption? */ + + if (encrypted) { + cmd_len = 9; + counter_value = 0; /* FIXME: ??? */ + } else + cmd_len = 8; + + + slice_data_bit_offset = avc_get_first_mb_bit_offset_with_epb( + decode_state->slice_datas[slice_index]->bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag + ); + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) + slice_type = SLICE_TYPE_I; + else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) + slice_type = SLICE_TYPE_P; + else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (slice_type == SLICE_TYPE_P) + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + else if (slice_type == SLICE_TYPE_B) + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + + first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + BEGIN_BCS_BATCH(batch, cmd_len); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_OBJECT | (cmd_len - 2)); + OUT_BCS_BATCH(batch, + (encrypted << 31) | + ((slice_param->slice_data_size - (slice_data_bit_offset >> 3)) << 0)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_offset + + (slice_data_bit_offset >> 3))); + OUT_BCS_BATCH(batch, + (0 << 31) | /* concealment mode: 0->intra 16x16 prediction, 1->inter P Copy */ + (0 << 14) | /* ignore BSDPrematureComplete Error handling */ + (0 << 13) | /* FIXME: ??? */ + (0 << 12) | /* ignore MPR Error handling */ + (0 << 10) | /* ignore Entropy Error handling */ + (0 << 8) | /* ignore MB Header Error handling */ + (slice_type << 0)); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (slice_param->chroma_log2_weight_denom << 8) | + (slice_param->luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (1 << 7) | + ((0x7 - (slice_data_bit_offset & 0x7)) << 0)); + + if (encrypted) { + OUT_BCS_BATCH(batch, counter_value); + } + + ADVANCE_BCS_BATCH(batch); + } else { + BEGIN_BCS_BATCH(batch, 8); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_OBJECT | (8 - 2)); + OUT_BCS_BATCH(batch, 0); /* indirect data length for phantom slice is 0 */ + OUT_BCS_BATCH(batch, 0); /* indirect data start address for phantom slice is 0 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, width_in_mbs * height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag)); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +ironlake_avc_bsd_object(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + int slice_index, + struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + + if (slice_param) { + int encrypted, counter_value; + int slice_hor_pos, slice_ver_pos; + int num_ref_idx_l0, num_ref_idx_l1; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + unsigned int slice_data_bit_offset; + int weighted_pred_idc = 0; + int first_mb_in_slice; + int slice_type; + + encrypted = 0; /* FIXME: which flag in VAAPI is used for encryption? */ + + if (encrypted) { + counter_value = 0; /* FIXME: ??? */ + } else + counter_value = 0; + + slice_data_bit_offset = avc_get_first_mb_bit_offset_with_epb( + decode_state->slice_datas[slice_index]->bo, + slice_param, + pic_param->pic_fields.bits.entropy_coding_mode_flag + ); + + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) + slice_type = SLICE_TYPE_I; + else if (slice_param->slice_type == SLICE_TYPE_P || + slice_param->slice_type == SLICE_TYPE_SP) + slice_type = SLICE_TYPE_P; + else { + assert(slice_param->slice_type == SLICE_TYPE_B); + slice_type = SLICE_TYPE_B; + } + + if (slice_type == SLICE_TYPE_I) { + assert(slice_param->num_ref_idx_l0_active_minus1 == 0); + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = 0; + num_ref_idx_l1 = 0; + } else if (slice_type == SLICE_TYPE_P) { + assert(slice_param->num_ref_idx_l1_active_minus1 == 0); + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = 0; + } else { + num_ref_idx_l0 = slice_param->num_ref_idx_l0_active_minus1 + 1; + num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1; + } + + if (slice_type == SLICE_TYPE_P) + weighted_pred_idc = pic_param->pic_fields.bits.weighted_pred_flag; + else if (slice_type == SLICE_TYPE_B) + weighted_pred_idc = pic_param->pic_fields.bits.weighted_bipred_idc; + + first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture; + slice_hor_pos = first_mb_in_slice % width_in_mbs; + slice_ver_pos = first_mb_in_slice / width_in_mbs; + + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_OBJECT | (16 - 2)); + OUT_BCS_BATCH(batch, + (encrypted << 31) | + (0 << 30) | /* FIXME: packet based bit stream */ + (0 << 29) | /* FIXME: packet format */ + ((slice_param->slice_data_size - (slice_data_bit_offset >> 3)) << 0)); + OUT_BCS_BATCH(batch, + (slice_param->slice_data_offset + + (slice_data_bit_offset >> 3))); + OUT_BCS_BATCH(batch, + (0 << 31) | /* concealment mode: 0->intra 16x16 prediction, 1->inter P Copy */ + (0 << 14) | /* ignore BSDPrematureComplete Error handling */ + (0 << 13) | /* FIXME: ??? */ + (0 << 12) | /* ignore MPR Error handling */ + (0 << 10) | /* ignore Entropy Error handling */ + (0 << 8) | /* ignore MB Header Error handling */ + (slice_type << 0)); + OUT_BCS_BATCH(batch, + (num_ref_idx_l1 << 24) | + (num_ref_idx_l0 << 16) | + (slice_param->chroma_log2_weight_denom << 8) | + (slice_param->luma_log2_weight_denom << 0)); + OUT_BCS_BATCH(batch, + (weighted_pred_idc << 30) | + (slice_param->direct_spatial_mv_pred_flag << 29) | + (slice_param->disable_deblocking_filter_idc << 27) | + (slice_param->cabac_init_idc << 24) | + ((pic_param->pic_init_qp_minus26 + 26 + slice_param->slice_qp_delta) << 16) | + ((slice_param->slice_beta_offset_div2 & 0xf) << 8) | + ((slice_param->slice_alpha_c0_offset_div2 & 0xf) << 0)); + OUT_BCS_BATCH(batch, + (slice_ver_pos << 24) | + (slice_hor_pos << 16) | + (first_mb_in_slice << 0)); + OUT_BCS_BATCH(batch, + (1 << 7) | + ((0x7 - (slice_data_bit_offset & 0x7)) << 0)); + OUT_BCS_BATCH(batch, counter_value); + + /* FIXME: dw9-dw11 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, i965_h264_context->weight128_luma_l0); + OUT_BCS_BATCH(batch, i965_h264_context->weight128_luma_l1); + OUT_BCS_BATCH(batch, i965_h264_context->weight128_chroma_l0); + OUT_BCS_BATCH(batch, i965_h264_context->weight128_chroma_l1); + + ADVANCE_BCS_BATCH(batch); + } else { + BEGIN_BCS_BATCH(batch, 16); + OUT_BCS_BATCH(batch, CMD_AVC_BSD_OBJECT | (16 - 2)); + OUT_BCS_BATCH(batch, 0); /* indirect data length for phantom slice is 0 */ + OUT_BCS_BATCH(batch, 0); /* indirect data start address for phantom slice is 0 */ + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, width_in_mbs * height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + } +} + +static void +i965_avc_bsd_object(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *slice_param, + int slice_index, + struct i965_h264_context *i965_h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (IS_IRONLAKE(i965->intel.device_info)) + ironlake_avc_bsd_object(ctx, decode_state, pic_param, slice_param, slice_index, i965_h264_context); + else + g4x_avc_bsd_object(ctx, decode_state, pic_param, slice_param, slice_index, i965_h264_context); +} + +static void +i965_avc_bsd_phantom_slice(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + struct i965_h264_context *i965_h264_context) +{ + i965_avc_bsd_object(ctx, decode_state, pic_param, NULL, 0, i965_h264_context); +} + +void +i965_avc_bsd_pipeline(VADriverContextP ctx, struct decode_state *decode_state, void *h264_context) +{ + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + VAPictureParameterBufferH264 *pic_param; + VASliceParameterBufferH264 *slice_param; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + intel_update_avc_frame_store_index(ctx, decode_state, pic_param, + i965_h264_context->fsid_list, &i965_h264_context->fs_ctx); + + i965_h264_context->enable_avc_ildb = 0; + i965_h264_context->picture.i_flag = 1; + + for (j = 0; j < decode_state->num_slice_params && i965_h264_context->enable_avc_ildb == 0; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (slice_param->disable_deblocking_filter_idc != 1) { + i965_h264_context->enable_avc_ildb = 1; + break; + } + + slice_param++; + } + } + + intel_batchbuffer_start_atomic_bcs(batch, 0x1000); + + i965_avc_bsd_img_state(ctx, decode_state, i965_h264_context); + i965_avc_bsd_qm_state(ctx, decode_state, i965_h264_context); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + i965_bsd_ind_obj_base_address(ctx, decode_state, j, i965_h264_context); + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + assert((slice_param->slice_type == SLICE_TYPE_I) || + (slice_param->slice_type == SLICE_TYPE_SI) || + (slice_param->slice_type == SLICE_TYPE_P) || + (slice_param->slice_type == SLICE_TYPE_SP) || + (slice_param->slice_type == SLICE_TYPE_B)); + + if (i965_h264_context->picture.i_flag && + (slice_param->slice_type != SLICE_TYPE_I || + slice_param->slice_type != SLICE_TYPE_SI)) + i965_h264_context->picture.i_flag = 0; + + i965_avc_bsd_slice_state(ctx, pic_param, slice_param, i965_h264_context); + i965_avc_bsd_buf_base_state(ctx, decode_state, pic_param, slice_param, i965_h264_context); + i965_avc_bsd_object(ctx, decode_state, pic_param, slice_param, j, i965_h264_context); + slice_param++; + } + } + + i965_avc_bsd_phantom_slice(ctx, decode_state, pic_param, i965_h264_context); + intel_batchbuffer_emit_mi_flush(batch); + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); +} + +void +i965_avc_bsd_decode_init(VADriverContextP ctx, void *h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + struct i965_avc_bsd_context *i965_avc_bsd_context; + dri_bo *bo; + + assert(i965_h264_context); + i965_avc_bsd_context = &i965_h264_context->i965_avc_bsd_context; + + dri_bo_unreference(i965_avc_bsd_context->bsd_raw_store.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "bsd raw store", + 0x3000, /* at least 11520 bytes to support 120 MBs per row */ + 64); + assert(bo); + i965_avc_bsd_context->bsd_raw_store.bo = bo; + + dri_bo_unreference(i965_avc_bsd_context->mpr_row_store.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "mpr row store", + 0x2000, /* at least 7680 bytes to support 120 MBs per row */ + 64); + assert(bo); + i965_avc_bsd_context->mpr_row_store.bo = bo; +} + +Bool +i965_avc_bsd_ternimate(struct i965_avc_bsd_context *i965_avc_bsd_context) +{ + dri_bo_unreference(i965_avc_bsd_context->bsd_raw_store.bo); + dri_bo_unreference(i965_avc_bsd_context->mpr_row_store.bo); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.h new file mode 100644 index 000000000..7f830073e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_bsd.h @@ -0,0 +1,50 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef __I965_AVC_BSD_H__ +#define __I965_AVC_BSD_H__ + +#define DMV_SIZE 0x88000 /* 557056 bytes for a frame */ + +struct i965_avc_bsd_context +{ + struct { + dri_bo *bo; + } bsd_raw_store; + + struct { + dri_bo *bo; + } mpr_row_store; +}; + +void i965_avc_bsd_pipeline(VADriverContextP, struct decode_state *, void *h264_context); +void i965_avc_bsd_decode_init(VADriverContextP, void *h264_context); +Bool i965_avc_bsd_ternimate(struct i965_avc_bsd_context *); + +#endif /* __I965_AVC_BSD_H__ */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.c new file mode 100644 index 000000000..f866599dc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.c @@ -0,0 +1,461 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_avc_hw_scoreboard.h" +#include "i965_media_h264.h" +#include "i965_media.h" + +/* On Ironlake */ +#include "shaders/h264/mc/export.inc.gen5" + +enum { + AVC_HW_SCOREBOARD = 0, + AVC_HW_SCOREBOARD_MBAFF +}; + +static unsigned long avc_hw_scoreboard_kernel_offset[] = { + SETHWSCOREBOARD_IP_GEN5 * INST_UNIT_GEN5, + SETHWSCOREBOARD_MBAFF_IP_GEN5 * INST_UNIT_GEN5 +}; + +static unsigned int avc_hw_scoreboard_constants[] = { + 0x08040201, + 0x00000010, + 0x08000210, + 0x00000000, + 0x08040201, + 0x08040210, + 0x01000010, + 0x08040200 +}; + +static void +i965_avc_hw_scoreboard_surface_state(struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct i965_surface_state *ss; + dri_bo *bo; + + bo = avc_hw_scoreboard_context->surface.ss_bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + ss = bo->virtual; + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_BUFFER; + ss->ss1.base_addr = avc_hw_scoreboard_context->surface.s_bo->offset; + ss->ss2.width = ((avc_hw_scoreboard_context->surface.total_mbs * MB_CMD_IN_OWS - 1) & 0x7f); + ss->ss2.height = (((avc_hw_scoreboard_context->surface.total_mbs * MB_CMD_IN_OWS - 1) >> 7) & 0x1fff); + ss->ss3.depth = (((avc_hw_scoreboard_context->surface.total_mbs * MB_CMD_IN_OWS - 1) >> 20) & 0x7f); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + offsetof(struct i965_surface_state, ss1), + avc_hw_scoreboard_context->surface.s_bo); + dri_bo_unmap(bo); +} + +static void +i965_avc_hw_scoreboard_interface_descriptor_table(struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct i965_interface_descriptor *desc; + dri_bo *bo; + + bo = avc_hw_scoreboard_context->idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + memset(desc, 0, sizeof(*desc)); + desc->desc0.grf_reg_blocks = 7; + desc->desc0.kernel_start_pointer = (avc_hw_scoreboard_context->hw_kernel.bo->offset + + avc_hw_scoreboard_context->hw_kernel.offset) >> 6; /* reloc */ + desc->desc1.const_urb_entry_read_offset = 0; + desc->desc1.const_urb_entry_read_len = 1; + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = + avc_hw_scoreboard_context->binding_table.bo->offset >> 5; /*reloc */ + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc0.grf_reg_blocks + avc_hw_scoreboard_context->hw_kernel.offset, + offsetof(struct i965_interface_descriptor, desc0), + avc_hw_scoreboard_context->hw_kernel.bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc3.binding_table_entry_count, + offsetof(struct i965_interface_descriptor, desc3), + avc_hw_scoreboard_context->binding_table.bo); + + dri_bo_unmap(bo); +} + +static void +i965_avc_hw_scoreboard_binding_table(struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + unsigned int *binding_table; + dri_bo *bo = avc_hw_scoreboard_context->binding_table.bo; + + dri_bo_map(bo, 1); + assert(bo->virtual); + binding_table = bo->virtual; + memset(binding_table, 0, bo->size); + binding_table[0] = avc_hw_scoreboard_context->surface.ss_bo->offset; + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + 0, + avc_hw_scoreboard_context->surface.ss_bo); + dri_bo_unmap(bo); +} + +static void +i965_avc_hw_scoreboard_vfe_state(struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct i965_vfe_state *vfe_state; + dri_bo *bo; + + bo = avc_hw_scoreboard_context->vfe_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + vfe_state = bo->virtual; + memset(vfe_state, 0, sizeof(*vfe_state)); + vfe_state->vfe1.max_threads = avc_hw_scoreboard_context->urb.num_vfe_entries - 1; + vfe_state->vfe1.urb_entry_alloc_size = avc_hw_scoreboard_context->urb.size_vfe_entry - 1; + vfe_state->vfe1.num_urb_entries = avc_hw_scoreboard_context->urb.num_vfe_entries; + vfe_state->vfe1.vfe_mode = VFE_GENERIC_MODE; + vfe_state->vfe1.children_present = 0; + vfe_state->vfe2.interface_descriptor_base = + avc_hw_scoreboard_context->idrt.bo->offset >> 4; /* reloc */ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_vfe_state, vfe2), + avc_hw_scoreboard_context->idrt.bo); + dri_bo_unmap(bo); +} + +static void +i965_avc_hw_scoreboard_upload_constants(struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + unsigned char *constant_buffer; + + if (avc_hw_scoreboard_context->curbe.upload) + return; + + dri_bo_map(avc_hw_scoreboard_context->curbe.bo, 1); + assert(avc_hw_scoreboard_context->curbe.bo->virtual); + constant_buffer = avc_hw_scoreboard_context->curbe.bo->virtual; + memcpy(constant_buffer, avc_hw_scoreboard_constants, sizeof(avc_hw_scoreboard_constants)); + dri_bo_unmap(avc_hw_scoreboard_context->curbe.bo); + avc_hw_scoreboard_context->curbe.upload = 1; +} + +static void +i965_avc_hw_scoreboard_states_setup(struct i965_h264_context *i965_h264_context) +{ + i965_avc_hw_scoreboard_surface_state(i965_h264_context); + i965_avc_hw_scoreboard_binding_table(i965_h264_context); + i965_avc_hw_scoreboard_interface_descriptor_table(i965_h264_context); + i965_avc_hw_scoreboard_vfe_state(i965_h264_context); + i965_avc_hw_scoreboard_upload_constants(i965_h264_context); +} + +static void +i965_avc_hw_scoreboard_pipeline_select(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_urb_layout(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965_h264_context->batch; + unsigned int vfe_fence, cs_fence; + + vfe_fence = avc_hw_scoreboard_context->urb.cs_start; + cs_fence = i965->intel.device_info->urb_size; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_URB_FENCE | UF0_VFE_REALLOC | UF0_CS_REALLOC | 1); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (vfe_fence << UF2_VFE_FENCE_SHIFT) | /* VFE_SIZE */ + (cs_fence << UF2_CS_FENCE_SHIFT)); /* CS_SIZE */ + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_state_base_address(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 6); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_state_pointers(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_MEDIA_STATE_POINTERS | 1); + OUT_BATCH(batch, 0); + OUT_RELOC(batch, avc_hw_scoreboard_context->vfe_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_cs_urb_layout(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CS_URB_STATE | 0); + OUT_BATCH(batch, + ((avc_hw_scoreboard_context->urb.size_cs_entry - 1) << 4) | /* URB Entry Allocation Size */ + (avc_hw_scoreboard_context->urb.num_cs_entries << 0)); /* Number of URB Entries */ + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_constant_buffer(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CONSTANT_BUFFER | (1 << 8) | (2 - 2)); + OUT_RELOC(batch, avc_hw_scoreboard_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + avc_hw_scoreboard_context->urb.size_cs_entry - 1); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_hw_scoreboard_objects(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + int number_mb_cmds = 512; + int starting_mb_number = avc_hw_scoreboard_context->inline_data.starting_mb_number; + int i; + + for (i = 0; i < avc_hw_scoreboard_context->inline_data.num_mb_cmds / 512; i++) { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_MEDIA_OBJECT | 4); + OUT_BATCH(batch, 0); /* interface descriptor offset: 0 */ + OUT_BATCH(batch, 0); /* no indirect data */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, ((number_mb_cmds << 16) | + (starting_mb_number << 0))); + OUT_BATCH(batch, avc_hw_scoreboard_context->inline_data.pic_width_in_mbs); + ADVANCE_BATCH(batch); + + starting_mb_number += 512; + } + + number_mb_cmds = avc_hw_scoreboard_context->inline_data.num_mb_cmds % 512; + + if (number_mb_cmds) { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_MEDIA_OBJECT | 4); + OUT_BATCH(batch, 0); /* interface descriptor offset: 0 */ + OUT_BATCH(batch, 0); /* no indirect data */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, ((number_mb_cmds << 16) | + (starting_mb_number << 0))); + OUT_BATCH(batch, avc_hw_scoreboard_context->inline_data.pic_width_in_mbs); + ADVANCE_BATCH(batch); + } +} + +static void +i965_avc_hw_scoreboard_pipeline_setup(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + i965_avc_hw_scoreboard_pipeline_select(ctx, i965_h264_context); + i965_avc_hw_scoreboard_state_base_address(ctx, i965_h264_context); + i965_avc_hw_scoreboard_state_pointers(ctx, i965_h264_context); + i965_avc_hw_scoreboard_urb_layout(ctx, i965_h264_context); + i965_avc_hw_scoreboard_cs_urb_layout(ctx, i965_h264_context); + i965_avc_hw_scoreboard_constant_buffer(ctx, i965_h264_context); + i965_avc_hw_scoreboard_objects(ctx, i965_h264_context); + intel_batchbuffer_end_atomic(batch); +} + +void +i965_avc_hw_scoreboard(VADriverContextP ctx, struct decode_state *decode_state, void *h264_context) +{ + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + + if (i965_h264_context->use_avc_hw_scoreboard) { + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + + avc_hw_scoreboard_context->inline_data.num_mb_cmds = i965_h264_context->avc_it_command_mb_info.mbs; + avc_hw_scoreboard_context->inline_data.starting_mb_number = i965_h264_context->avc_it_command_mb_info.mbs; + avc_hw_scoreboard_context->inline_data.pic_width_in_mbs = i965_h264_context->picture.width_in_mbs; + avc_hw_scoreboard_context->surface.total_mbs = i965_h264_context->avc_it_command_mb_info.mbs * 2; + + dri_bo_unreference(avc_hw_scoreboard_context->hw_kernel.bo); + avc_hw_scoreboard_context->hw_kernel.bo = i965_h264_context->avc_kernels[H264_AVC_COMBINED].bo; + assert(avc_hw_scoreboard_context->hw_kernel.bo != NULL); + dri_bo_reference(avc_hw_scoreboard_context->hw_kernel.bo); + + if (i965_h264_context->picture.mbaff_frame_flag) + avc_hw_scoreboard_context->hw_kernel.offset = avc_hw_scoreboard_kernel_offset[AVC_HW_SCOREBOARD_MBAFF]; + else + avc_hw_scoreboard_context->hw_kernel.offset = avc_hw_scoreboard_kernel_offset[AVC_HW_SCOREBOARD]; + + i965_avc_hw_scoreboard_states_setup(i965_h264_context); + i965_avc_hw_scoreboard_pipeline_setup(ctx, i965_h264_context); + } +} + +void +i965_avc_hw_scoreboard_decode_init(VADriverContextP ctx, void *h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + + if (i965_h264_context->use_avc_hw_scoreboard) { + struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context = &i965_h264_context->avc_hw_scoreboard_context; + dri_bo *bo; + + if (avc_hw_scoreboard_context->curbe.bo == NULL) { + bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, 64); + assert(bo); + avc_hw_scoreboard_context->curbe.bo = bo; + avc_hw_scoreboard_context->curbe.upload = 0; + } + + dri_bo_unreference(avc_hw_scoreboard_context->surface.s_bo); + avc_hw_scoreboard_context->surface.s_bo = i965_h264_context->avc_it_command_mb_info.bo; + assert(avc_hw_scoreboard_context->surface.s_bo != NULL); + dri_bo_reference(avc_hw_scoreboard_context->surface.s_bo); + + dri_bo_unreference(avc_hw_scoreboard_context->surface.ss_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state", + sizeof(struct i965_surface_state), 32); + assert(bo); + avc_hw_scoreboard_context->surface.ss_bo = bo; + + dri_bo_unreference(avc_hw_scoreboard_context->binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "binding table", + MAX_MEDIA_SURFACES * sizeof(unsigned int), 32); + assert(bo); + avc_hw_scoreboard_context->binding_table.bo = bo; + + dri_bo_unreference(avc_hw_scoreboard_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface discriptor", + MAX_INTERFACE_DESC * sizeof(struct i965_interface_descriptor), 16); + assert(bo); + avc_hw_scoreboard_context->idrt.bo = bo; + + dri_bo_unreference(avc_hw_scoreboard_context->vfe_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vfe state", + sizeof(struct i965_vfe_state), 32); + assert(bo); + avc_hw_scoreboard_context->vfe_state.bo = bo; + + avc_hw_scoreboard_context->urb.num_vfe_entries = 32; + avc_hw_scoreboard_context->urb.size_vfe_entry = 2; + avc_hw_scoreboard_context->urb.num_cs_entries = 1; + avc_hw_scoreboard_context->urb.size_cs_entry = 1; + avc_hw_scoreboard_context->urb.vfe_start = 0; + avc_hw_scoreboard_context->urb.cs_start = avc_hw_scoreboard_context->urb.vfe_start + + avc_hw_scoreboard_context->urb.num_vfe_entries * avc_hw_scoreboard_context->urb.size_vfe_entry; + assert(avc_hw_scoreboard_context->urb.cs_start + + avc_hw_scoreboard_context->urb.num_cs_entries * avc_hw_scoreboard_context->urb.size_cs_entry <= i965->intel.device_info->urb_size); + } +} + +Bool +i965_avc_hw_scoreboard_ternimate(struct i965_avc_hw_scoreboard_context *avc_hw_scoreboard_context) +{ + dri_bo_unreference(avc_hw_scoreboard_context->curbe.bo); + avc_hw_scoreboard_context->curbe.bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->surface.ss_bo); + avc_hw_scoreboard_context->surface.ss_bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->surface.s_bo); + avc_hw_scoreboard_context->surface.s_bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->binding_table.bo); + avc_hw_scoreboard_context->binding_table.bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->idrt.bo); + avc_hw_scoreboard_context->idrt.bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->vfe_state.bo); + avc_hw_scoreboard_context->vfe_state.bo = NULL; + + dri_bo_unreference(avc_hw_scoreboard_context->hw_kernel.bo); + avc_hw_scoreboard_context->hw_kernel.bo = NULL; + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.h new file mode 100644 index 000000000..bca88313f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_hw_scoreboard.h @@ -0,0 +1,85 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef __I965_AVC_HW_SCOREBOARD_H__ +#define __I965_AVC_HW_SCOREBOARD_H__ + +struct i965_avc_hw_scoreboard_context +{ + struct { + unsigned int num_mb_cmds; + unsigned int starting_mb_number; + unsigned int pic_width_in_mbs; + } inline_data; + + struct { + dri_bo *ss_bo; + dri_bo *s_bo; + unsigned int total_mbs; + } surface; + + struct { + dri_bo *bo; + } binding_table; + + struct { + dri_bo *bo; + } idrt; + + struct { + dri_bo *bo; + } vfe_state; + + struct { + dri_bo *bo; + int upload; + } curbe; + + struct { + dri_bo *bo; + unsigned long offset; + } hw_kernel; + + struct { + unsigned int vfe_start; + unsigned int cs_start; + + unsigned int num_vfe_entries; + unsigned int num_cs_entries; + + unsigned int size_vfe_entry; + unsigned int size_cs_entry; + } urb; +}; + +void i965_avc_hw_scoreboard(VADriverContextP, struct decode_state *, void *h264_context); +void i965_avc_hw_scoreboard_decode_init(VADriverContextP, void *h264_context); +Bool i965_avc_hw_scoreboard_ternimate(struct i965_avc_hw_scoreboard_context *); + +#endif /* __I965_AVC_HW_SCOREBOARD_H__ */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.c new file mode 100644 index 000000000..d414c906c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.c @@ -0,0 +1,650 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include +#include +#include + + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_avc_ildb.h" +#include "i965_media_h264.h" +#include "i965_media.h" + +/* On Cantiga */ +#include "shaders/h264/mc/export.inc" + +/* On Ironlake */ +#include "shaders/h264/mc/export.inc.gen5" + +#define PICTURE_FRAME 0 +#define PICTURE_FIELD 1 +#define PICTURE_MBAFF 2 + +enum { + AVC_ILDB_ROOT_Y_ILDB_FRAME, + AVC_ILDB_CHILD_Y_ILDB_FRAME, + AVC_ILDB_ROOT_UV_ILDB_FRAME, + AVC_ILDB_CHILD_UV_ILDB_FRAME, + AVC_ILDB_ROOT_Y_ILDB_FIELD, + AVC_ILDB_CHILD_Y_ILDB_FIELD, + AVC_ILDB_ROOT_UV_ILDB_FIELD, + AVC_ILDB_CHILD_UV_ILDB_FIELD, + AVC_ILDB_ROOT_Y_ILDB_MBAFF, + AVC_ILDB_CHILD_Y_ILDB_MBAFF, + AVC_ILDB_ROOT_UV_ILDB_MBAFF, + AVC_ILDB_CHILD_UV_ILDB_MBAFF +}; + +static unsigned long avc_ildb_kernel_offset_gen4[] = { + AVC_ILDB_ROOT_Y_ILDB_FRAME_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_Y_ILDB_FRAME_IP * INST_UNIT_GEN4, + AVC_ILDB_ROOT_UV_ILDB_FRAME_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_UV_ILDB_FRAME_IP * INST_UNIT_GEN4, + AVC_ILDB_ROOT_Y_ILDB_FIELD_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_Y_ILDB_FIELD_IP * INST_UNIT_GEN4, + AVC_ILDB_ROOT_UV_ILDB_FIELD_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_UV_ILDB_FIELD_IP * INST_UNIT_GEN4, + AVC_ILDB_ROOT_Y_ILDB_MBAFF_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_Y_ILDB_MBAFF_IP * INST_UNIT_GEN4, + AVC_ILDB_ROOT_UV_ILDB_MBAFF_IP * INST_UNIT_GEN4, + AVC_ILDB_CHILD_UV_ILDB_MBAFF_IP * INST_UNIT_GEN4 +}; + +static unsigned long avc_ildb_kernel_offset_gen5[] = { + AVC_ILDB_ROOT_Y_ILDB_FRAME_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_Y_ILDB_FRAME_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_ROOT_UV_ILDB_FRAME_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_UV_ILDB_FRAME_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_ROOT_Y_ILDB_FIELD_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_Y_ILDB_FIELD_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_ROOT_UV_ILDB_FIELD_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_UV_ILDB_FIELD_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_ROOT_Y_ILDB_MBAFF_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_Y_ILDB_MBAFF_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_ROOT_UV_ILDB_MBAFF_IP_GEN5 * INST_UNIT_GEN5, + AVC_ILDB_CHILD_UV_ILDB_MBAFF_IP_GEN5 * INST_UNIT_GEN5 +}; + +struct avc_ildb_root_input +{ + unsigned int blocks_per_row : 16; + unsigned int blocks_per_column : 16; + + unsigned int picture_type : 16; + unsigned int max_concurrent_threads : 16; + + unsigned int debug_field : 16; + unsigned int mbaff_frame_flag : 1; + unsigned int bottom_field_flag : 1; + unsigned int control_data_expansion_flag : 1; + unsigned int chroma_format : 1; + unsigned int pad0 : 12; + + unsigned int ramp_constant_0; + + unsigned int ramp_constant_1; + + int constant_0 : 8; + int constant_1 : 8; + int pad1 : 16; + + unsigned int pad2; + unsigned int pad3; +}; + +#define NUM_AVC_ILDB_INTERFACES ARRAY_ELEMS(avc_ildb_kernel_offset_gen4) +static unsigned long *avc_ildb_kernel_offset = NULL; + +static void +i965_avc_ildb_surface_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct i965_surface_state *ss; + struct object_surface *obj_surface; + VAPictureParameterBufferH264 *pic_param; + VAPictureH264 *va_pic; + dri_bo *bo; + int i; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].s_bo = i965_h264_context->avc_ildb_data.bo; + dri_bo_reference(avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].s_bo); + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].offset = 0; + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].surface_type = I965_SURFACE_BUFFER; + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].width = ((avc_ildb_context->mbs_per_picture * EDGE_CONTROL_DATA_IN_DWS - 1) & 0x7f); + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].height = (((avc_ildb_context->mbs_per_picture * EDGE_CONTROL_DATA_IN_DWS - 1) >> 7) & 0x1fff); + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].depth = (((avc_ildb_context->mbs_per_picture * EDGE_CONTROL_DATA_IN_DWS - 1) >> 20) & 0x7f); + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].pitch = EDGE_CONTROL_DATA_IN_BTYES - 1; + avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].is_target = 0; + + avc_ildb_context->surface[SURFACE_SRC_Y].s_bo = obj_surface->bo; + dri_bo_reference(avc_ildb_context->surface[SURFACE_SRC_Y].s_bo); + avc_ildb_context->surface[SURFACE_SRC_Y].offset = 0; + avc_ildb_context->surface[SURFACE_SRC_Y].surface_type = I965_SURFACE_2D; + avc_ildb_context->surface[SURFACE_SRC_Y].format = I965_SURFACEFORMAT_R8_SINT; + avc_ildb_context->surface[SURFACE_SRC_Y].width = obj_surface->width / 4 - 1; + avc_ildb_context->surface[SURFACE_SRC_Y].height = obj_surface->height - 1; + avc_ildb_context->surface[SURFACE_SRC_Y].depth = 0; + avc_ildb_context->surface[SURFACE_SRC_Y].pitch = obj_surface->width - 1; + avc_ildb_context->surface[SURFACE_SRC_Y].vert_line_stride = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + avc_ildb_context->surface[SURFACE_SRC_Y].vert_line_stride_ofs = !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + avc_ildb_context->surface[SURFACE_SRC_Y].is_target = 0; + + avc_ildb_context->surface[SURFACE_SRC_UV].s_bo = obj_surface->bo; + dri_bo_reference(avc_ildb_context->surface[SURFACE_SRC_UV].s_bo); + avc_ildb_context->surface[SURFACE_SRC_UV].offset = obj_surface->width * obj_surface->height; + avc_ildb_context->surface[SURFACE_SRC_UV].surface_type = I965_SURFACE_2D; + avc_ildb_context->surface[SURFACE_SRC_UV].format = I965_SURFACEFORMAT_R8G8_SINT; + avc_ildb_context->surface[SURFACE_SRC_UV].width = obj_surface->width / 4 - 1; + avc_ildb_context->surface[SURFACE_SRC_UV].height = obj_surface->height / 2 - 1; + avc_ildb_context->surface[SURFACE_SRC_UV].depth = 0; + avc_ildb_context->surface[SURFACE_SRC_UV].pitch = obj_surface->width - 1; + avc_ildb_context->surface[SURFACE_SRC_UV].vert_line_stride = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + avc_ildb_context->surface[SURFACE_SRC_UV].vert_line_stride_ofs = !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + avc_ildb_context->surface[SURFACE_SRC_UV].is_target = 0; + + avc_ildb_context->surface[SURFACE_DEST_Y].s_bo = obj_surface->bo; + dri_bo_reference(avc_ildb_context->surface[SURFACE_DEST_Y].s_bo); + avc_ildb_context->surface[SURFACE_DEST_Y].offset = 0; + avc_ildb_context->surface[SURFACE_DEST_Y].surface_type = I965_SURFACE_2D; + avc_ildb_context->surface[SURFACE_DEST_Y].format = I965_SURFACEFORMAT_R8_SINT; + avc_ildb_context->surface[SURFACE_DEST_Y].width = obj_surface->width / 4 - 1; + avc_ildb_context->surface[SURFACE_DEST_Y].height = obj_surface->height - 1; + avc_ildb_context->surface[SURFACE_DEST_Y].depth = 0; + avc_ildb_context->surface[SURFACE_DEST_Y].pitch = obj_surface->width - 1; + avc_ildb_context->surface[SURFACE_DEST_Y].vert_line_stride = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + avc_ildb_context->surface[SURFACE_DEST_Y].vert_line_stride_ofs = !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + avc_ildb_context->surface[SURFACE_DEST_Y].is_target = 1; + + avc_ildb_context->surface[SURFACE_DEST_UV].s_bo = obj_surface->bo; + dri_bo_reference(avc_ildb_context->surface[SURFACE_DEST_UV].s_bo); + avc_ildb_context->surface[SURFACE_DEST_UV].offset = obj_surface->width * obj_surface->height; + avc_ildb_context->surface[SURFACE_DEST_UV].surface_type = I965_SURFACE_2D; + avc_ildb_context->surface[SURFACE_DEST_UV].format = I965_SURFACEFORMAT_R8G8_SINT; + avc_ildb_context->surface[SURFACE_DEST_UV].width = obj_surface->width / 4 - 1; + avc_ildb_context->surface[SURFACE_DEST_UV].height = obj_surface->height / 2 - 1; + avc_ildb_context->surface[SURFACE_DEST_UV].depth = 0; + avc_ildb_context->surface[SURFACE_DEST_UV].pitch = obj_surface->width - 1; + avc_ildb_context->surface[SURFACE_DEST_UV].vert_line_stride = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + avc_ildb_context->surface[SURFACE_DEST_UV].vert_line_stride_ofs = !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + avc_ildb_context->surface[SURFACE_DEST_UV].is_target = 1; + + for (i = 0; i < NUM_AVC_ILDB_SURFACES; i++) { + bo = avc_ildb_context->surface[i].ss_bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + ss = bo->virtual; + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = avc_ildb_context->surface[i].surface_type; + ss->ss0.surface_format = avc_ildb_context->surface[i].format; + ss->ss0.vert_line_stride = avc_ildb_context->surface[i].vert_line_stride; + ss->ss0.vert_line_stride_ofs = avc_ildb_context->surface[i].vert_line_stride_ofs; + ss->ss1.base_addr = avc_ildb_context->surface[i].s_bo->offset + avc_ildb_context->surface[i].offset; + ss->ss2.width = avc_ildb_context->surface[i].width; + ss->ss2.height = avc_ildb_context->surface[i].height; + ss->ss3.depth = avc_ildb_context->surface[i].depth; + ss->ss3.pitch = avc_ildb_context->surface[i].pitch; + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, + avc_ildb_context->surface[i].is_target ? I915_GEM_DOMAIN_RENDER : 0, + avc_ildb_context->surface[i].offset, + offsetof(struct i965_surface_state, ss1), + avc_ildb_context->surface[i].s_bo); + dri_bo_unmap(bo); + } +} + +static void +i965_avc_ildb_binding_table(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + unsigned int *binding_table; + dri_bo *bo = avc_ildb_context->binding_table.bo; + int i; + + dri_bo_map(bo, 1); + assert(bo->virtual); + binding_table = bo->virtual; + memset(binding_table, 0, bo->size); + + for (i = 0; i < NUM_AVC_ILDB_SURFACES; i++) { + binding_table[i] = avc_ildb_context->surface[i].ss_bo->offset; + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*binding_table), + avc_ildb_context->surface[i].ss_bo); + } + + dri_bo_unmap(bo); +} + +static void +i965_avc_ildb_interface_descriptor_table(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct i965_interface_descriptor *desc; + dri_bo *bo; + int i; + + bo = avc_ildb_context->idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < NUM_AVC_ILDB_INTERFACES; i++) { + int kernel_offset = avc_ildb_kernel_offset[i]; + memset(desc, 0, sizeof(*desc)); + desc->desc0.grf_reg_blocks = 7; + desc->desc0.kernel_start_pointer = (i965_h264_context->avc_kernels[H264_AVC_COMBINED].bo->offset + kernel_offset) >> 6; /* reloc */ + desc->desc1.const_urb_entry_read_offset = 0; + desc->desc1.const_urb_entry_read_len = ((i == AVC_ILDB_ROOT_Y_ILDB_FRAME || + i == AVC_ILDB_ROOT_Y_ILDB_FIELD || + i == AVC_ILDB_ROOT_Y_ILDB_MBAFF) ? 1 : 0); + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = + avc_ildb_context->binding_table.bo->offset >> 5; /*reloc */ + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc0.grf_reg_blocks + kernel_offset, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc0), + i965_h264_context->avc_kernels[H264_AVC_COMBINED].bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc3.binding_table_entry_count, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc3), + avc_ildb_context->binding_table.bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +i965_avc_ildb_vfe_state(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct i965_vfe_state *vfe_state; + dri_bo *bo; + + bo = avc_ildb_context->vfe_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + vfe_state = bo->virtual; + memset(vfe_state, 0, sizeof(*vfe_state)); + vfe_state->vfe1.max_threads = 0; + vfe_state->vfe1.urb_entry_alloc_size = avc_ildb_context->urb.size_vfe_entry - 1; + vfe_state->vfe1.num_urb_entries = avc_ildb_context->urb.num_vfe_entries; + vfe_state->vfe1.vfe_mode = VFE_GENERIC_MODE; + vfe_state->vfe1.children_present = 1; + vfe_state->vfe2.interface_descriptor_base = + avc_ildb_context->idrt.bo->offset >> 4; /* reloc */ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_vfe_state, vfe2), + avc_ildb_context->idrt.bo); + dri_bo_unmap(bo); +} + +static void +i965_avc_ildb_upload_constants(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_h264_context *i965_h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + VAPictureParameterBufferH264 *pic_param; + struct avc_ildb_root_input *root_input; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + dri_bo_map(avc_ildb_context->curbe.bo, 1); + assert(avc_ildb_context->curbe.bo->virtual); + root_input = avc_ildb_context->curbe.bo->virtual; + + if (IS_IRONLAKE(i965->intel.device_info)) { + root_input->max_concurrent_threads = 76; /* 72 - 2 + 8 - 2 */ + } else { + root_input->max_concurrent_threads = 54; /* 50 - 2 + 8 - 2 */ + } + + if (pic_param->pic_fields.bits.field_pic_flag) + root_input->picture_type = PICTURE_FIELD; + else { + if (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag) + root_input->picture_type = PICTURE_MBAFF; + else + root_input->picture_type = PICTURE_FRAME; + } + + avc_ildb_context->picture_type = root_input->picture_type; + root_input->blocks_per_row = pic_param->picture_width_in_mbs_minus1 + 1; + root_input->blocks_per_column = (pic_param->picture_height_in_mbs_minus1 + 1) / + (1 + (root_input->picture_type != PICTURE_FRAME)); + avc_ildb_context->mbs_per_picture = (pic_param->picture_width_in_mbs_minus1 + 1) * + (pic_param->picture_height_in_mbs_minus1 + 1); + + root_input->mbaff_frame_flag = (root_input->picture_type == PICTURE_MBAFF); + root_input->bottom_field_flag = !!(pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD); + root_input->control_data_expansion_flag = 1; /* Always 1 on G4x+ */ + root_input->chroma_format = (pic_param->seq_fields.bits.chroma_format_idc != 1); /* 0=4:0:0, 1=4:2:0 */ + + root_input->ramp_constant_0 = 0x03020100; + + root_input->ramp_constant_1 = 0x07060504; + + root_input->constant_0 = -2; + root_input->constant_1 = 1; + + dri_bo_unmap(avc_ildb_context->curbe.bo); +} + +static void +i965_avc_ildb_states_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_h264_context *i965_h264_context) +{ + i965_avc_ildb_surface_state(ctx, decode_state, i965_h264_context); + i965_avc_ildb_binding_table(ctx, i965_h264_context); + i965_avc_ildb_interface_descriptor_table(ctx, i965_h264_context); + i965_avc_ildb_vfe_state(ctx, i965_h264_context); + i965_avc_ildb_upload_constants(ctx, decode_state, i965_h264_context); +} + +static void +i965_avc_ildb_pipeline_select(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_urb_layout(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + unsigned int vfe_fence, cs_fence; + + vfe_fence = avc_ildb_context->urb.cs_start; + cs_fence = i965->intel.device_info->urb_size; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_URB_FENCE | UF0_VFE_REALLOC | UF0_CS_REALLOC | 1); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (vfe_fence << UF2_VFE_FENCE_SHIFT) | /* VFE_SIZE */ + (cs_fence << UF2_CS_FENCE_SHIFT)); /* CS_SIZE */ + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_state_base_address(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965_h264_context->batch; + + if (IS_IRONLAKE(i965->intel.device_info)) { + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 6); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } else { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 4); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } +} + +static void +i965_avc_ildb_state_pointers(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_MEDIA_STATE_POINTERS | 1); + OUT_BATCH(batch, 0); + OUT_RELOC(batch, avc_ildb_context->vfe_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_cs_urb_layout(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CS_URB_STATE | 0); + OUT_BATCH(batch, + ((avc_ildb_context->urb.size_cs_entry - 1) << 4) | /* URB Entry Allocation Size */ + (avc_ildb_context->urb.num_cs_entries << 0)); /* Number of URB Entries */ + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_constant_buffer(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CONSTANT_BUFFER | (1 << 8) | (2 - 2)); + OUT_RELOC(batch, avc_ildb_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + avc_ildb_context->urb.size_cs_entry - 1); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_objects(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context; + struct intel_batchbuffer *batch = i965_h264_context->batch; + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_MEDIA_OBJECT | 4); + + switch (avc_ildb_context->picture_type) { + case PICTURE_FRAME: + OUT_BATCH(batch, AVC_ILDB_ROOT_Y_ILDB_FRAME); + break; + + case PICTURE_FIELD: + OUT_BATCH(batch, AVC_ILDB_ROOT_Y_ILDB_FIELD); + break; + + case PICTURE_MBAFF: + OUT_BATCH(batch, AVC_ILDB_ROOT_Y_ILDB_MBAFF); + break; + + default: + assert(0); + OUT_BATCH(batch, 0); + break; + } + + OUT_BATCH(batch, 0); /* no indirect data */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_avc_ildb_pipeline_setup(VADriverContextP ctx, struct i965_h264_context *i965_h264_context) +{ + struct intel_batchbuffer *batch = i965_h264_context->batch; + + intel_batchbuffer_emit_mi_flush(batch); + i965_avc_ildb_pipeline_select(ctx, i965_h264_context); + i965_avc_ildb_state_base_address(ctx, i965_h264_context); + i965_avc_ildb_state_pointers(ctx, i965_h264_context); + i965_avc_ildb_urb_layout(ctx, i965_h264_context); + i965_avc_ildb_cs_urb_layout(ctx, i965_h264_context); + i965_avc_ildb_constant_buffer(ctx, i965_h264_context); + i965_avc_ildb_objects(ctx, i965_h264_context); +} + +void +i965_avc_ildb(VADriverContextP ctx, struct decode_state *decode_state, void *h264_context) +{ + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + + if (i965_h264_context->enable_avc_ildb) { + i965_avc_ildb_states_setup(ctx, decode_state, i965_h264_context); + i965_avc_ildb_pipeline_setup(ctx, i965_h264_context); + } +} + +void +i965_avc_ildb_decode_init(VADriverContextP ctx, void *h264_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)h264_context; + struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context;; + dri_bo *bo; + int i; + + dri_bo_unreference(avc_ildb_context->curbe.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, 64); + assert(bo); + avc_ildb_context->curbe.bo = bo; + + dri_bo_unreference(avc_ildb_context->binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "binding table", + NUM_AVC_ILDB_SURFACES * sizeof(unsigned int), 32); + assert(bo); + avc_ildb_context->binding_table.bo = bo; + + dri_bo_unreference(avc_ildb_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface discriptor", + NUM_AVC_ILDB_INTERFACES * sizeof(struct i965_interface_descriptor), 16); + assert(bo); + avc_ildb_context->idrt.bo = bo; + + dri_bo_unreference(avc_ildb_context->vfe_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vfe state", + sizeof(struct i965_vfe_state), 32); + assert(bo); + avc_ildb_context->vfe_state.bo = bo; + + avc_ildb_context->urb.num_vfe_entries = 1; + avc_ildb_context->urb.size_vfe_entry = 640; + avc_ildb_context->urb.num_cs_entries = 1; + avc_ildb_context->urb.size_cs_entry = 1; + avc_ildb_context->urb.vfe_start = 0; + avc_ildb_context->urb.cs_start = avc_ildb_context->urb.vfe_start + + avc_ildb_context->urb.num_vfe_entries * avc_ildb_context->urb.size_vfe_entry; + assert(avc_ildb_context->urb.cs_start + + avc_ildb_context->urb.num_cs_entries * avc_ildb_context->urb.size_cs_entry <= i965->intel.device_info->urb_size); + + for (i = 0; i < NUM_AVC_ILDB_SURFACES; i++) { + dri_bo_unreference(avc_ildb_context->surface[i].s_bo); + avc_ildb_context->surface[i].s_bo = NULL; + + dri_bo_unreference(avc_ildb_context->surface[i].ss_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state", + sizeof(struct i965_surface_state), 32); + assert(bo); + avc_ildb_context->surface[i].ss_bo = bo; + } + + /* kernel offset */ + assert(NUM_AVC_ILDB_INTERFACES == ARRAY_ELEMS(avc_ildb_kernel_offset_gen5)); + + if (IS_IRONLAKE(i965->intel.device_info)) { + avc_ildb_kernel_offset = avc_ildb_kernel_offset_gen5; + } else { + avc_ildb_kernel_offset = avc_ildb_kernel_offset_gen4; + } +} + +Bool +i965_avc_ildb_ternimate(struct i965_avc_ildb_context *avc_ildb_context) +{ + int i; + + dri_bo_unreference(avc_ildb_context->curbe.bo); + avc_ildb_context->curbe.bo = NULL; + + dri_bo_unreference(avc_ildb_context->binding_table.bo); + avc_ildb_context->binding_table.bo = NULL; + + dri_bo_unreference(avc_ildb_context->idrt.bo); + avc_ildb_context->idrt.bo = NULL; + + dri_bo_unreference(avc_ildb_context->vfe_state.bo); + avc_ildb_context->vfe_state.bo = NULL; + + for (i = 0; i < NUM_AVC_ILDB_SURFACES; i++) { + dri_bo_unreference(avc_ildb_context->surface[i].ss_bo); + avc_ildb_context->surface[i].ss_bo = NULL; + + dri_bo_unreference(avc_ildb_context->surface[i].s_bo); + avc_ildb_context->surface[i].s_bo = NULL; + } + + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.h new file mode 100644 index 000000000..ff16ac6f3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_avc_ildb.h @@ -0,0 +1,96 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef __I965_AVC_ILDB_H__ +#define __I965_AVC_ILDB_H__ + +#define SURFACE_EDGE_CONTROL_DATA 0 +#define SURFACE_SRC_Y 1 +#define SURFACE_SRC_UV 2 +#define SURFACE_DEST_Y 3 +#define SURFACE_DEST_UV 4 + +#define NUM_AVC_ILDB_SURFACES 5 + +#define EDGE_CONTROL_DATA_IN_DWS 16 +#define EDGE_CONTROL_DATA_IN_BTYES 64 + +struct i965_avc_ildb_context +{ + struct { + dri_bo *bo; + } curbe; + + struct { + dri_bo *ss_bo; + dri_bo *s_bo; + unsigned long offset; + int surface_type; + int width; + int height; + int depth; + int pitch; + int format; + int vert_line_stride; + int vert_line_stride_ofs; + int is_target; + } surface[NUM_AVC_ILDB_SURFACES]; + + struct { + dri_bo *bo; + } binding_table; + + struct { + dri_bo *bo; + } idrt; + + struct { + dri_bo *bo; + } vfe_state; + + struct { + unsigned int vfe_start; + unsigned int cs_start; + + unsigned int num_vfe_entries; + unsigned int num_cs_entries; + + unsigned int size_vfe_entry; + unsigned int size_cs_entry; + } urb; + + int picture_type; + int mbs_per_picture; +}; + +void i965_avc_ildb(VADriverContextP, struct decode_state *, void *h264_context); +void i965_avc_ildb_decode_init(VADriverContextP, void *h264_context); +Bool i965_avc_ildb_ternimate(struct i965_avc_ildb_context *); + +#endif /* __I965_AVC_ILDB_H__ */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder.h new file mode 100644 index 000000000..9ef0349a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef I965_DECODER_H +#define I965_DECODER_H + +#include +#include + +#include +#include +#include +#include + +#define MAX_GEN_REFERENCE_FRAMES 16 +#define MAX_GEN_HCP_REFERENCE_FRAMES 8 + +#define ALLOC_GEN_BUFFER(gen_buffer, string, size) do { \ + dri_bo_unreference(gen_buffer->bo); \ + gen_buffer->bo = dri_bo_alloc(i965->intel.bufmgr, \ + string, \ + size, \ + 0x1000); \ + assert(gen_buffer->bo); \ + gen_buffer->valid = 1; \ + } while (0); + +#define FREE_GEN_BUFFER(gen_buffer) do { \ + dri_bo_unreference(gen_buffer->bo); \ + gen_buffer->bo = NULL; \ + gen_buffer->valid = 0; \ + } while (0) + +typedef struct gen_frame_store GenFrameStore; +struct gen_frame_store { + VASurfaceID surface_id; + int frame_store_id; + struct object_surface *obj_surface; + + /* This represents the time when this frame store was last used to + hold a reference frame. This is not connected to a presentation + timestamp (PTS), and this is not a common decoding time stamp + (DTS) either. It serves the purpose of tracking retired + reference frame candidates. + + This is only used for H.264 decoding on platforms before Haswell */ + uint64_t ref_age; +}; + +typedef struct gen_frame_store_context GenFrameStoreContext; +struct gen_frame_store_context { + uint64_t age; + int prev_poc; +}; + +typedef struct gen_buffer GenBuffer; +struct gen_buffer { + dri_bo *bo; + int valid; +}; + +struct hw_context * +gen75_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config); + +extern struct hw_context * +gen8_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config); +#endif /* I965_DECODER_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.c new file mode 100644 index 000000000..835d3fddb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.c @@ -0,0 +1,1520 @@ +/* + * Copyright (C) 2006-2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_media.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" +#include "i965_defines.h" + +/* Set reference surface if backing store exists */ +static inline int +set_ref_frame( + struct i965_driver_data *i965, + GenFrameStore *ref_frame, + VASurfaceID va_surface, + struct object_surface *obj_surface +) +{ + if (va_surface == VA_INVALID_ID) + return 0; + + if (!obj_surface || !obj_surface->bo) + return 0; + + ref_frame->surface_id = va_surface; + ref_frame->obj_surface = obj_surface; + return 1; +} + +/* Check wether codec layer incorrectly fills in slice_vertical_position */ +int +mpeg2_wa_slice_vertical_position( + struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param +) +{ + unsigned int i, j, mb_height, vpos, last_vpos = 0; + + /* Assume progressive sequence if we got a progressive frame */ + if (pic_param->picture_coding_extension.bits.progressive_frame) + return 0; + + /* Wait for a field coded picture */ + if (pic_param->picture_coding_extension.bits.picture_structure == MPEG_FRAME) + return -1; + + assert(decode_state && decode_state->slice_params); + + mb_height = (pic_param->vertical_size + 31) / 32; + + for (j = 0; j < decode_state->num_slice_params; j++) { + struct buffer_store * const buffer_store = + decode_state->slice_params[j]; + + for (i = 0; i < buffer_store->num_elements; i++) { + VASliceParameterBufferMPEG2 * const slice_param = + ((VASliceParameterBufferMPEG2 *)buffer_store->buffer) + i; + + vpos = slice_param->slice_vertical_position; + if (vpos >= mb_height || vpos == last_vpos + 2) { + WARN_ONCE("codec layer incorrectly fills in MPEG-2 slice_vertical_position. Workaround applied\n"); + return 1; + } + last_vpos = vpos; + } + } + return 0; +} + +/* Build MPEG-2 reference frames array */ +void +mpeg2_set_reference_surfaces( + VADriverContextP ctx, + GenFrameStore ref_frames[MAX_GEN_REFERENCE_FRAMES], + struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + VASurfaceID va_surface; + unsigned pic_structure, is_second_field, n = 0; + struct object_surface *obj_surface; + + pic_structure = pic_param->picture_coding_extension.bits.picture_structure; + is_second_field = pic_structure != MPEG_FRAME && + !pic_param->picture_coding_extension.bits.is_first_field; + + ref_frames[0].surface_id = VA_INVALID_ID; + ref_frames[0].obj_surface = NULL; + + /* Reference frames are indexed by frame store ID (0:top, 1:bottom) */ + switch (pic_param->picture_coding_type) { + case MPEG_P_PICTURE: + if (is_second_field && pic_structure == MPEG_BOTTOM_FIELD) { + va_surface = decode_state->current_render_target; + obj_surface = decode_state->render_object; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + } + va_surface = pic_param->forward_reference_picture; + obj_surface = decode_state->reference_objects[0]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + break; + + case MPEG_B_PICTURE: + va_surface = pic_param->forward_reference_picture; + obj_surface = decode_state->reference_objects[0]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + va_surface = pic_param->backward_reference_picture; + obj_surface = decode_state->reference_objects[1]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + break; + } + + while (n != 2) { + ref_frames[n].obj_surface = ref_frames[0].obj_surface; + ref_frames[n++].surface_id = ref_frames[0].surface_id; + } + + if (pic_param->picture_coding_extension.bits.frame_pred_frame_dct) + return; + + ref_frames[2].surface_id = VA_INVALID_ID; + ref_frames[2].obj_surface = NULL; + + /* Bottom field pictures used as reference */ + switch (pic_param->picture_coding_type) { + case MPEG_P_PICTURE: + if (is_second_field && pic_structure == MPEG_TOP_FIELD) { + va_surface = decode_state->current_render_target; + obj_surface = decode_state->render_object; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + } + va_surface = pic_param->forward_reference_picture; + obj_surface = decode_state->reference_objects[0]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + break; + + case MPEG_B_PICTURE: + va_surface = pic_param->forward_reference_picture; + obj_surface = decode_state->reference_objects[0]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + va_surface = pic_param->backward_reference_picture; + obj_surface = decode_state->reference_objects[1]; + n += set_ref_frame(i965, &ref_frames[n], va_surface, obj_surface); + break; + } + + while (n != 4) { + ref_frames[n].obj_surface = ref_frames[2].obj_surface; + ref_frames[n++].surface_id = ref_frames[2].surface_id; + } +} + +/* Ensure the supplied VA surface has valid storage for decoding the + current picture */ +VAStatus +avc_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VAPictureParameterBufferH264 *pic_param +) +{ + VAStatus va_status; + uint32_t hw_fourcc, fourcc, subsample, chroma_format; + + /* Validate chroma format */ + switch (pic_param->seq_fields.bits.chroma_format_idc) { + case 0: // Grayscale + fourcc = VA_FOURCC_Y800; + subsample = SUBSAMPLE_YUV400; + chroma_format = VA_RT_FORMAT_YUV400; + break; + case 1: // YUV 4:2:0 + fourcc = VA_FOURCC_NV12; + subsample = SUBSAMPLE_YUV420; + chroma_format = VA_RT_FORMAT_YUV420; + break; + default: + return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; + } + + /* Determine the HW surface format, bound to VA config needs */ + if ((decode_state->base.chroma_formats & chroma_format) == chroma_format) + hw_fourcc = fourcc; + else { + hw_fourcc = 0; + switch (fourcc) { + case VA_FOURCC_Y800: // Implement with an NV12 surface + if (decode_state->base.chroma_formats & VA_RT_FORMAT_YUV420) { + hw_fourcc = VA_FOURCC_NV12; + subsample = SUBSAMPLE_YUV420; + } + break; + } + } + if (!hw_fourcc) + return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; + + /* (Re-)allocate the underlying surface buffer store, if necessary */ + if (!obj_surface->bo || obj_surface->fourcc != hw_fourcc) { + struct i965_driver_data * const i965 = i965_driver_data(ctx); + + i965_destroy_surface_storage(obj_surface); + va_status = i965_check_alloc_surface_bo(ctx, obj_surface, + i965->codec_info->has_tiled_surface, hw_fourcc, subsample); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + } + + /* Fake chroma components if grayscale is implemented on top of NV12 */ + if (fourcc == VA_FOURCC_Y800 && hw_fourcc == VA_FOURCC_NV12) { + const uint32_t uv_offset = obj_surface->width * obj_surface->height; + const uint32_t uv_size = obj_surface->width * obj_surface->height / 2; + + drm_intel_gem_bo_map_gtt(obj_surface->bo); + memset(obj_surface->bo->virtual + uv_offset, 0x80, uv_size); + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + } + return VA_STATUS_SUCCESS; +} + +/* Generate flat scaling matrices for H.264 decoding */ +void +avc_gen_default_iq_matrix(VAIQMatrixBufferH264 *iq_matrix) +{ + /* Flat_4x4_16 */ + memset(&iq_matrix->ScalingList4x4, 16, sizeof(iq_matrix->ScalingList4x4)); + + /* Flat_8x8_16 */ + memset(&iq_matrix->ScalingList8x8, 16, sizeof(iq_matrix->ScalingList8x8)); +} + +/* Returns the POC of the supplied VA picture */ +static int +avc_get_picture_poc(const VAPictureH264 *va_pic) +{ + int structure, field_poc[2]; + + structure = va_pic->flags & + (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD); + field_poc[0] = structure != VA_PICTURE_H264_BOTTOM_FIELD ? + va_pic->TopFieldOrderCnt : INT_MAX; + field_poc[1] = structure != VA_PICTURE_H264_TOP_FIELD ? + va_pic->BottomFieldOrderCnt : INT_MAX; + return MIN(field_poc[0], field_poc[1]); +} + +/* Returns a unique picture ID that represents the supplied VA surface object */ +int +avc_get_picture_id(struct object_surface *obj_surface) +{ + int pic_id; + + /* This highly depends on how the internal VA objects are organized. + + Theory of operations: + The VA objects are maintained in heaps so that any released VA + surface will become free again for future allocation. This means + that holes in there are filled in for subsequent allocations. + So, this ultimately means that we could just use the Heap ID of + the VA surface as the resulting picture ID (16 bits) */ + pic_id = 1 + (obj_surface->base.id & OBJECT_HEAP_ID_MASK); + return (pic_id <= 0xffff) ? pic_id : -1; +} + +/* Finds the VA/H264 picture associated with the specified VA surface id */ +VAPictureH264 * +avc_find_picture(VASurfaceID id, VAPictureH264 *pic_list, int pic_list_count) +{ + int i; + + if (id != VA_INVALID_ID) { + for (i = 0; i < pic_list_count; i++) { + VAPictureH264 * const va_pic = &pic_list[i]; + if (va_pic->picture_id == id && + !(va_pic->flags & VA_PICTURE_H264_INVALID)) + return va_pic; + } + } + return NULL; +} + +/* Get first macroblock bit offset for BSD, minus EPB count (AVC) */ +/* XXX: slice_data_bit_offset does not account for EPB */ +unsigned int +avc_get_first_mb_bit_offset( + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *slice_param, + unsigned int mode_flag +) +{ + unsigned int slice_data_bit_offset = slice_param->slice_data_bit_offset; + + if (mode_flag == ENTROPY_CABAC) + slice_data_bit_offset = ALIGN(slice_data_bit_offset, 0x8); + return slice_data_bit_offset; +} + +/* Get first macroblock bit offset for BSD, with EPB count (AVC) */ +/* XXX: slice_data_bit_offset does not account for EPB */ +unsigned int +avc_get_first_mb_bit_offset_with_epb( + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *slice_param, + unsigned int mode_flag +) +{ + unsigned int in_slice_data_bit_offset = slice_param->slice_data_bit_offset; + unsigned int out_slice_data_bit_offset; + unsigned int i, j, n, buf_size, data_size, header_size; + uint8_t *buf; + int ret; + + header_size = slice_param->slice_data_bit_offset / 8; + data_size = slice_param->slice_data_size - slice_param->slice_data_offset; + buf_size = (header_size * 3 + 1) / 2; // Max possible header size (x1.5) + + if (buf_size > data_size) + buf_size = data_size; + + buf = alloca(buf_size); + ret = dri_bo_get_subdata( + slice_data_bo, slice_param->slice_data_offset, + buf_size, buf + ); + assert(ret == 0); + + for (i = 2, j = 2, n = 0; i < buf_size && j < header_size; i++, j++) { + if (buf[i] == 0x03 && buf[i - 1] == 0x00 && buf[i - 2] == 0x00) + i += 2, j++, n++; + } + + out_slice_data_bit_offset = in_slice_data_bit_offset + n * 8; + + if (mode_flag == ENTROPY_CABAC) + out_slice_data_bit_offset = ALIGN(out_slice_data_bit_offset, 0x8); + return out_slice_data_bit_offset; +} + +static inline uint8_t +get_ref_idx_state_1(const VAPictureH264 *va_pic, unsigned int frame_store_id) +{ + /* The H.264 standard, and the VA-API specification, allows for at + least 3 states for a picture: "used for short-term reference", + "used for long-term reference", or considered as not used for + reference. + + The latter is used in the MVC inter prediction and inter-view + prediction process (H.8.4). This has an incidence on the + colZeroFlag variable, as defined in 8.4.1.2. + + Since it is not possible to directly program that flag, let's + make the hardware derive this value by assimilating "considered + as not used for reference" to a "not used for short-term + reference", and subsequently making it "used for long-term + reference" to fit the definition of Bit6 here */ + const unsigned int ref_flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE | + VA_PICTURE_H264_LONG_TERM_REFERENCE; + const unsigned int is_long_term = + ((va_pic->flags & ref_flags) != VA_PICTURE_H264_SHORT_TERM_REFERENCE); + const unsigned int is_top_field = + !!(va_pic->flags & VA_PICTURE_H264_TOP_FIELD); + const unsigned int is_bottom_field = + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD); + + return ((is_long_term << 6) | + ((is_top_field ^ is_bottom_field ^ 1) << 5) | + (frame_store_id << 1) | + ((is_top_field ^ 1) & is_bottom_field)); +} + +/* Fill in Reference List Entries (Gen5+: ILK, SNB, IVB) */ +void +gen5_fill_avc_ref_idx_state( + uint8_t state[32], + const VAPictureH264 ref_list[32], + unsigned int ref_list_count, + const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + int i, j; + + for (i = 0; i < ref_list_count; i++) { + const VAPictureH264 * const va_pic = &ref_list[i]; + + if ((va_pic->flags & VA_PICTURE_H264_INVALID) || + va_pic->picture_id == VA_INVALID_ID) { + state[i] = 0xff; + continue; + } + + for (j = 0; j < MAX_GEN_REFERENCE_FRAMES; j++) { + if (frame_store[j].surface_id == va_pic->picture_id) + break; + } + + if (j != MAX_GEN_REFERENCE_FRAMES) { // Found picture in the Frame Store + const GenFrameStore * const fs = &frame_store[j]; + assert(fs->frame_store_id == j); // Current architecture/assumption + state[i] = get_ref_idx_state_1(va_pic, fs->frame_store_id); + } + else { + WARN_ONCE("Invalid RefPicListX[] entry!!! It is not included in DPB\n"); + state[i] = get_ref_idx_state_1(va_pic, 0) | 0x80; + } + } + + for (; i < 32; i++) + state[i] = 0xff; +} + +/* Emit Reference List Entries (Gen6+: SNB, IVB) */ +static void +gen6_send_avc_ref_idx_state_1( + struct intel_batchbuffer *batch, + unsigned int list, + const VAPictureH264 *ref_list, + unsigned int ref_list_count, + const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + uint8_t ref_idx_state[32]; + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFX_AVC_REF_IDX_STATE | (10 - 2)); + OUT_BCS_BATCH(batch, list); + gen5_fill_avc_ref_idx_state( + ref_idx_state, + ref_list, ref_list_count, + frame_store + ); + intel_batchbuffer_data(batch, ref_idx_state, sizeof(ref_idx_state)); + ADVANCE_BCS_BATCH(batch); +} + +void +gen6_send_avc_ref_idx_state( + struct intel_batchbuffer *batch, + const VASliceParameterBufferH264 *slice_param, + const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) + return; + + /* RefPicList0 */ + gen6_send_avc_ref_idx_state_1( + batch, 0, + slice_param->RefPicList0, slice_param->num_ref_idx_l0_active_minus1 + 1, + frame_store + ); + + if (slice_param->slice_type != SLICE_TYPE_B) + return; + + /* RefPicList1 */ + gen6_send_avc_ref_idx_state_1( + batch, 1, + slice_param->RefPicList1, slice_param->num_ref_idx_l1_active_minus1 + 1, + frame_store + ); +} + +static void +gen6_mfd_avc_phantom_slice_state(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct intel_batchbuffer *batch) +{ + int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1; + int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */ + int slice_hor_pos, slice_ver_pos, slice_start_mb_num, next_slice_hor_pos, next_slice_ver_pos; + int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag && + pic_param->seq_fields.bits.mb_adaptive_frame_field_flag); + + if (next_slice_param) { + int first_mb_in_next_slice; + + slice_hor_pos = 0; + slice_ver_pos = 0; + slice_start_mb_num = 0; + first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture; + next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs; + next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs; + } else { + slice_hor_pos = 0; + slice_ver_pos = height_in_mbs; + slice_start_mb_num = width_in_mbs * height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag); + next_slice_hor_pos = 0; + next_slice_ver_pos = 0; + } + + BEGIN_BCS_BATCH(batch, 11); + OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, + slice_ver_pos << 24 | + slice_hor_pos << 16 | + slice_start_mb_num << 0); + OUT_BCS_BATCH(batch, + next_slice_ver_pos << 16 | + next_slice_hor_pos << 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +static void +gen6_mfd_avc_phantom_slice_bsd_object(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + struct intel_batchbuffer *batch) +{ + + BEGIN_BCS_BATCH(batch, 6); + OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2)); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); +} + +void +gen6_mfd_avc_phantom_slice(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct intel_batchbuffer *batch) +{ + gen6_mfd_avc_phantom_slice_state(ctx, pic_param, next_slice_param, batch); + gen6_mfd_avc_phantom_slice_bsd_object(ctx, pic_param, batch); +} + +/* Comparison function for sorting out the array of free frame store entries */ +static int +compare_avc_ref_store_func(const void *p1, const void *p2) +{ + const GenFrameStore * const fs1 = *((GenFrameStore **)p1); + const GenFrameStore * const fs2 = *((GenFrameStore **)p2); + + return fs1->ref_age - fs2->ref_age; +} + +static void +intel_update_codec_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + int poc, + GenFrameStore frame_store[], + int num_elements, + GenFrameStoreContext *fs_ctx +) +{ + GenFrameStore **free_refs = calloc(num_elements, sizeof(GenFrameStore *)); + uint32_t used_refs = 0, add_refs = 0; + uint64_t age; + int i, n, num_free_refs; + + if (!free_refs) + return; + + /* Detect changes of access unit */ + if (fs_ctx->age == 0 || fs_ctx->prev_poc != poc) + fs_ctx->age++; + fs_ctx->prev_poc = poc; + age = fs_ctx->age; + + /* Tag entries that are still available in our Frame Store */ + for (i = 0; i < ARRAY_ELEMS(decode_state->reference_objects); i++) { + struct object_surface * const obj_surface = + decode_state->reference_objects[i]; + if (!obj_surface) + continue; + + GenCodecSurface * const codec_surface = obj_surface->private_data; + if (!codec_surface) + continue; + if (codec_surface->frame_store_id >= 0) { + GenFrameStore * const fs = + &frame_store[codec_surface->frame_store_id]; + if (fs->surface_id == obj_surface->base.id) { + fs->obj_surface = obj_surface; + fs->ref_age = age; + used_refs |= 1 << fs->frame_store_id; + continue; + } + } + add_refs |= 1 << i; + } + + /* Build and sort out the list of retired candidates. The resulting + list is ordered by increasing age when they were last used */ + for (i = 0, n = 0; i < num_elements; i++) { + if (!(used_refs & (1 << i))) { + GenFrameStore * const fs = &frame_store[i]; + fs->obj_surface = NULL; + free_refs[n++] = fs; + } + } + num_free_refs = n; + qsort(&free_refs[0], n, sizeof(free_refs[0]), compare_avc_ref_store_func); + + /* Append the new reference frames */ + for (i = 0, n = 0; i < ARRAY_ELEMS(decode_state->reference_objects); i++) { + struct object_surface * const obj_surface = + decode_state->reference_objects[i]; + if (!obj_surface || !(add_refs & (1 << i))) + continue; + + GenCodecSurface * const codec_surface = obj_surface->private_data; + if (!codec_surface) + continue; + if (n < num_free_refs) { + GenFrameStore * const fs = free_refs[n++]; + fs->surface_id = obj_surface->base.id; + fs->obj_surface = obj_surface; + fs->frame_store_id = fs - frame_store; + fs->ref_age = age; + codec_surface->frame_store_id = fs->frame_store_id; + continue; + } + WARN_ONCE("No free slot found for DPB reference list!!!\n"); + } + + free(free_refs); +} + +void +intel_update_avc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES], + GenFrameStoreContext *fs_ctx +) +{ + intel_update_codec_frame_store_index(ctx, + decode_state, + avc_get_picture_poc(&pic_param->CurrPic), + frame_store, + MAX_GEN_REFERENCE_FRAMES, + fs_ctx); +} + +void +intel_update_hevc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferHEVC *pic_param, + GenFrameStore frame_store[MAX_GEN_HCP_REFERENCE_FRAMES], + GenFrameStoreContext *fs_ctx + ) +{ + int i, n = 0; + + for (i = 0; i < ARRAY_ELEMS(decode_state->reference_objects); i++) { + struct object_surface * const obj_surface = decode_state->reference_objects[i]; + + if (!obj_surface) + continue; + + GenFrameStore * const fs = &frame_store[n]; + fs->surface_id = obj_surface->base.id; + fs->obj_surface = obj_surface; + fs->frame_store_id = n++; + + if (n == MAX_GEN_HCP_REFERENCE_FRAMES) + break; + } + + for (; n < MAX_GEN_HCP_REFERENCE_FRAMES; n++) { + GenFrameStore * const fs = &frame_store[n]; + + fs->surface_id = VA_INVALID_ID; + fs->obj_surface = NULL; + fs->frame_store_id = -1; + } +} + +void +gen75_update_avc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + int i, n; + + /* Construct the Frame Store array, in compact form. i.e. empty or + invalid entries are discarded. */ + for (i = 0, n = 0; i < ARRAY_ELEMS(decode_state->reference_objects); i++) { + struct object_surface * const obj_surface = + decode_state->reference_objects[i]; + if (!obj_surface) + continue; + + GenFrameStore * const fs = &frame_store[n]; + fs->surface_id = obj_surface->base.id; + fs->obj_surface = obj_surface; + fs->frame_store_id = n++; + } + + /* Any remaining entry is marked as invalid */ + for (; n < MAX_GEN_REFERENCE_FRAMES; n++) { + GenFrameStore * const fs = &frame_store[n]; + fs->surface_id = VA_INVALID_ID; + fs->obj_surface = NULL; + fs->frame_store_id = -1; + } +} + +bool +gen75_fill_avc_picid_list( + uint16_t pic_ids[16], + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + int i, pic_id; + + /* Fill in with known picture IDs. The Frame Store array is in + compact form, i.e. empty entries are only to be found at the + end of the array: there are no holes in the set of active + reference frames */ + for (i = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) { + GenFrameStore * const fs = &frame_store[i]; + if (!fs->obj_surface) + break; + pic_id = avc_get_picture_id(fs->obj_surface); + if (pic_id < 0) + return false; + pic_ids[i] = pic_id; + } + + /* When an element of the list is not relevant the value of the + picture ID shall be set to 0 */ + for (; i < MAX_GEN_REFERENCE_FRAMES; i++) + pic_ids[i] = 0; + return true; +} + +bool +gen75_send_avc_picid_state( + struct intel_batchbuffer *batch, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +) +{ + uint16_t pic_ids[16]; + + if (!gen75_fill_avc_picid_list(pic_ids, frame_store)) + return false; + + BEGIN_BCS_BATCH(batch, 10); + OUT_BCS_BATCH(batch, MFD_AVC_PICID_STATE | (10 - 2)); + OUT_BCS_BATCH(batch, 0); // enable Picture ID Remapping + intel_batchbuffer_data(batch, pic_ids, sizeof(pic_ids)); + ADVANCE_BCS_BATCH(batch); + return true; +} + +void +intel_update_vc1_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferVC1 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]) +{ + struct object_surface *obj_surface; + int i; + + obj_surface = decode_state->reference_objects[0]; + + if (pic_param->forward_reference_picture == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[0].surface_id = VA_INVALID_ID; + frame_store[0].obj_surface = NULL; + } else { + frame_store[0].surface_id = pic_param->forward_reference_picture; + frame_store[0].obj_surface = obj_surface; + } + + obj_surface = decode_state->reference_objects[1]; + + if (pic_param->backward_reference_picture == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[1].surface_id = frame_store[0].surface_id; + frame_store[1].obj_surface = frame_store[0].obj_surface; + } else { + frame_store[1].surface_id = pic_param->backward_reference_picture; + frame_store[1].obj_surface = obj_surface; + } + for (i = 2; i < MAX_GEN_REFERENCE_FRAMES; i++) { + frame_store[i].surface_id = frame_store[i % 2].surface_id; + frame_store[i].obj_surface = frame_store[i % 2].obj_surface; + } + +} + +void +intel_update_vp8_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferVP8 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]) +{ + struct object_surface *obj_surface; + int i; + + obj_surface = decode_state->reference_objects[0]; + + if (pic_param->last_ref_frame == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[0].surface_id = VA_INVALID_ID; + frame_store[0].obj_surface = NULL; + } else { + frame_store[0].surface_id = pic_param->last_ref_frame; + frame_store[0].obj_surface = obj_surface; + } + + obj_surface = decode_state->reference_objects[1]; + + if (pic_param->golden_ref_frame == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[1].surface_id = frame_store[0].surface_id; + frame_store[1].obj_surface = frame_store[0].obj_surface; + } else { + frame_store[1].surface_id = pic_param->golden_ref_frame; + frame_store[1].obj_surface = obj_surface; + } + + obj_surface = decode_state->reference_objects[2]; + + if (pic_param->alt_ref_frame == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[2].surface_id = frame_store[0].surface_id; + frame_store[2].obj_surface = frame_store[0].obj_surface; + } else { + frame_store[2].surface_id = pic_param->alt_ref_frame; + frame_store[2].obj_surface = obj_surface; + } + + for (i = 3; i < MAX_GEN_REFERENCE_FRAMES; i++) { + frame_store[i].surface_id = frame_store[i % 2].surface_id; + frame_store[i].obj_surface = frame_store[i % 2].obj_surface; + } + +} + +//Obtain the reference frames from the decode state and store them in frame store. +void +intel_update_vp9_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VADecPictureParameterBufferVP9 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]) +{ + struct object_surface *obj_surface; + int i=0, index=0; + + //Check for the validity of the last reference frame + obj_surface = decode_state->reference_objects[0]; + + index = pic_param->pic_fields.bits.last_ref_frame; + if (pic_param->reference_frames[index] == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[0].surface_id = VA_INVALID_ID; + frame_store[0].obj_surface = NULL; + } else { + frame_store[0].surface_id = pic_param->reference_frames[index]; + frame_store[0].obj_surface = obj_surface; + } + + //Check for the validity of the golden reference frame + obj_surface = decode_state->reference_objects[1]; + + index = pic_param->pic_fields.bits.golden_ref_frame; + if (pic_param->reference_frames[index] == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[1].surface_id = frame_store[0].surface_id; + frame_store[1].obj_surface = frame_store[0].obj_surface; + } else { + frame_store[1].surface_id = pic_param->reference_frames[index]; + frame_store[1].obj_surface = obj_surface; + } + + //Check for the validity of the altref reference frame + obj_surface = decode_state->reference_objects[2]; + + index = pic_param->pic_fields.bits.alt_ref_frame; + if (pic_param->reference_frames[index] == VA_INVALID_ID || + !obj_surface || + !obj_surface->bo) { + frame_store[2].surface_id = frame_store[0].surface_id; + frame_store[2].obj_surface = frame_store[0].obj_surface; + } else { + frame_store[2].surface_id = pic_param->reference_frames[index]; + frame_store[2].obj_surface = obj_surface; + } + + //Set the remaining framestores to either last/golden/altref + for (i = 3; i < MAX_GEN_REFERENCE_FRAMES; i++) { + frame_store[i].surface_id = frame_store[i % 2].surface_id; + frame_store[i].obj_surface = frame_store[i % 2].obj_surface; + } + +} + +static VAStatus +intel_decoder_check_avc_parameter(VADriverContextP ctx, + VAProfile h264_profile, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferH264 *pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + VAStatus va_status; + struct object_surface *obj_surface; + int i; + VASliceParameterBufferH264 *slice_param, *next_slice_param, *next_slice_group_param; + int j; + + assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID)); + assert(pic_param->CurrPic.picture_id != VA_INVALID_SURFACE); + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID || + pic_param->CurrPic.picture_id == VA_INVALID_SURFACE) + goto error; + + assert(pic_param->CurrPic.picture_id == decode_state->current_render_target); + + if (pic_param->CurrPic.picture_id != decode_state->current_render_target) + goto error; + + if ((h264_profile != VAProfileH264Baseline)) { + if (pic_param->num_slice_groups_minus1 || + pic_param->pic_fields.bits.redundant_pic_cnt_present_flag) { + WARN_ONCE("Unsupported the FMO/ASO constraints!!!\n"); + goto error; + } + } + + /* Fill in the reference objects array with the actual VA surface + objects with 1:1 correspondance with any entry in ReferenceFrames[], + i.e. including "holes" for invalid entries, that are expanded + to NULL in the reference_objects[] array */ + for (i = 0; i < ARRAY_ELEMS(pic_param->ReferenceFrames); i++) { + const VAPictureH264 * const va_pic = &pic_param->ReferenceFrames[i]; + + obj_surface = NULL; + if (!(va_pic->flags & VA_PICTURE_H264_INVALID) && + va_pic->picture_id != VA_INVALID_ID) { + obj_surface = SURFACE(pic_param->ReferenceFrames[i].picture_id); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* + * Sometimes a dummy frame comes from the upper layer + * library, call i965_check_alloc_surface_bo() to make + * sure the store buffer is allocated for this reference + * frame + */ + va_status = avc_ensure_surface_bo(ctx, decode_state, obj_surface, + pic_param); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + } + decode_state->reference_objects[i] = obj_surface; + } + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params && decode_state->slice_params[j]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j]->buffer; + + if (j == decode_state->num_slice_params - 1) + next_slice_group_param = NULL; + else + next_slice_group_param = (VASliceParameterBufferH264 *)decode_state->slice_params[j + 1]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + + if (i < decode_state->slice_params[j]->num_elements - 1) + next_slice_param = slice_param + 1; + else + next_slice_param = next_slice_group_param; + + if (next_slice_param != NULL) { + /* If the mb position of next_slice is less than or equal to the current slice, + * discard the current frame. + */ + if (next_slice_param->first_mb_in_slice <= slice_param->first_mb_in_slice) { + next_slice_param = NULL; + WARN_ONCE("!!!incorrect slice_param. The first_mb_in_slice of next_slice is less" + " than or equal to that in current slice\n"); + goto error; + } + } + } + } + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_decoder_check_mpeg2_parameter(VADriverContextP ctx, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferMPEG2 *pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + struct object_surface *obj_surface; + int i = 0; + + if (pic_param->picture_coding_type == MPEG_I_PICTURE) { + } else if (pic_param->picture_coding_type == MPEG_P_PICTURE) { + obj_surface = SURFACE(pic_param->forward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + } else if (pic_param->picture_coding_type == MPEG_B_PICTURE) { + obj_surface = SURFACE(pic_param->forward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + + obj_surface = SURFACE(pic_param->backward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + } else + goto error; + + for ( ; i < 16; i++) + decode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_decoder_check_vc1_parameter(VADriverContextP ctx, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferVC1 *pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer; + struct object_surface *obj_surface; + int i = 0; + + if (pic_param->sequence_fields.bits.interlace == 1 && + pic_param->picture_fields.bits.frame_coding_mode != 0) { /* frame-interlace or field-interlace */ + return VA_STATUS_ERROR_DECODING_ERROR; + } + + if (pic_param->picture_fields.bits.picture_type == 0 || + pic_param->picture_fields.bits.picture_type == 3) { + } else if (pic_param->picture_fields.bits.picture_type == 1 || + pic_param->picture_fields.bits.picture_type == 4) { + obj_surface = SURFACE(pic_param->forward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + } else if (pic_param->picture_fields.bits.picture_type == 2) { + obj_surface = SURFACE(pic_param->forward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + + obj_surface = SURFACE(pic_param->backward_reference_picture); + + if (!obj_surface || !obj_surface->bo) + decode_state->reference_objects[i++] = NULL; + else + decode_state->reference_objects[i++] = obj_surface; + } else + goto error; + + for ( ; i < 16; i++) + decode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_decoder_check_vp8_parameter(VADriverContextP ctx, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferVP8 *pic_param = (VAPictureParameterBufferVP8 *)decode_state->pic_param->buffer; + struct object_surface *obj_surface; + int i = 0; + + if (pic_param->last_ref_frame != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->last_ref_frame); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + if (pic_param->golden_ref_frame != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->golden_ref_frame); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + if (pic_param->alt_ref_frame != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->alt_ref_frame); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + for ( ; i < 16; i++) + decode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; +} + +VAStatus +hevc_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VAPictureParameterBufferHEVC *pic_param +) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + int update = 0; + unsigned int fourcc = VA_FOURCC_NV12; + + if((pic_param->bit_depth_luma_minus8 > 0) + || (pic_param->bit_depth_chroma_minus8 > 0)) + { + if(obj_surface->fourcc != VA_FOURCC_P010) + { + update = 1; + fourcc = VA_FOURCC_P010; + } + } + else if(obj_surface->fourcc != VA_FOURCC_NV12) + { + update = 1; + fourcc = VA_FOURCC_NV12; + } + + /* (Re-)allocate the underlying surface buffer store, if necessary */ + if (!obj_surface->bo || update) { + struct i965_driver_data * const i965 = i965_driver_data(ctx); + + i965_destroy_surface_storage(obj_surface); + + va_status = i965_check_alloc_surface_bo(ctx, + obj_surface, + i965->codec_info->has_tiled_surface, + fourcc, + SUBSAMPLE_YUV420); + } + + return va_status; +} + +//Ensure there is a tiled render surface in NV12 format. If not, create one. +VAStatus +vp9_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VADecPictureParameterBufferVP9 *pic_param +) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + + /* (Re-)allocate the underlying surface buffer store, if necessary */ + if (!obj_surface->bo || obj_surface->fourcc != VA_FOURCC_NV12) { + struct i965_driver_data * const i965 = i965_driver_data(ctx); + + i965_destroy_surface_storage(obj_surface); + + va_status = i965_check_alloc_surface_bo(ctx, + obj_surface, + i965->codec_info->has_tiled_surface, + VA_FOURCC_NV12, + SUBSAMPLE_YUV420); + } + + return va_status; +} + +static VAStatus +intel_decoder_check_hevc_parameter(VADriverContextP ctx, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAPictureParameterBufferHEVC *pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer; + VAStatus va_status = VA_STATUS_ERROR_INVALID_PARAMETER; + struct object_surface *obj_surface; + int i; + int min_cb_size; + + if (pic_param->CurrPic.flags & VA_PICTURE_HEVC_INVALID || + pic_param->CurrPic.picture_id == VA_INVALID_SURFACE) + goto error; + + if (pic_param->CurrPic.picture_id != decode_state->current_render_target) + goto error; + + min_cb_size = (1 << (pic_param->log2_min_luma_coding_block_size_minus3 + 3)); + + if (pic_param->pic_width_in_luma_samples % min_cb_size || + pic_param->pic_height_in_luma_samples % min_cb_size) + goto error; + + /* Fill in the reference objects array with the actual VA surface + objects with 1:1 correspondance with any entry in ReferenceFrames[], + i.e. including "holes" for invalid entries, that are expanded + to NULL in the reference_objects[] array */ + for (i = 0; i < ARRAY_ELEMS(pic_param->ReferenceFrames); i++) { + const VAPictureHEVC * const va_pic = &pic_param->ReferenceFrames[i]; + + obj_surface = NULL; + + /* + * Only the index with (VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE | + * VA_PICTURE_HEVC_RPS_ST_CURR_AFTER | VA_PICTURE_HEVC_RPS_LT_CURR) + * is valid + */ + if (!(va_pic->flags & VA_PICTURE_HEVC_INVALID) && + (va_pic->picture_id != VA_INVALID_ID) && + (va_pic->flags & (VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE | + VA_PICTURE_HEVC_RPS_ST_CURR_AFTER | + VA_PICTURE_HEVC_RPS_LT_CURR))) { + + obj_surface = SURFACE(pic_param->ReferenceFrames[i].picture_id); + + if (!obj_surface) { + va_status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + va_status = hevc_ensure_surface_bo(ctx, decode_state, obj_surface, + pic_param); + + if (va_status != VA_STATUS_SUCCESS) + goto error; + } + + decode_state->reference_objects[i] = obj_surface; + } + + va_status = VA_STATUS_SUCCESS; + +error: + return va_status; +} + +//Obtains reference frames from the picture parameter and +//then sets the reference frames in the decode_state +static VAStatus +intel_decoder_check_vp9_parameter(VADriverContextP ctx, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VADecPictureParameterBufferVP9 *pic_param = (VADecPictureParameterBufferVP9 *)decode_state->pic_param->buffer; + VAStatus va_status = VA_STATUS_ERROR_INVALID_PARAMETER; + struct object_surface *obj_surface; + int i=0, index=0; + + //Max support upto 4k for BXT + if ((pic_param->frame_width-1 < 7) || (pic_param->frame_width-1 > 4095)) + return va_status; + + if ((pic_param->frame_height-1 < 7) || (pic_param->frame_height-1 > 4095)) + return va_status; + + //Set the reference object in decode state for last reference + index = pic_param->pic_fields.bits.last_ref_frame; + if (pic_param->reference_frames[index] != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->reference_frames[index]); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + //Set the reference object in decode state for golden reference + index = pic_param->pic_fields.bits.golden_ref_frame; + if (pic_param->reference_frames[index] != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->reference_frames[index]); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + //Set the reference object in decode state for altref reference + index = pic_param->pic_fields.bits.alt_ref_frame; + if (pic_param->reference_frames[index] != VA_INVALID_SURFACE) { + obj_surface = SURFACE(pic_param->reference_frames[index]); + + if (obj_surface && obj_surface->bo) + decode_state->reference_objects[i++] = obj_surface; + else + decode_state->reference_objects[i++] = NULL; + } + + for ( ; i < 16; i++) + decode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; +} + +VAStatus +intel_decoder_sanity_check_input(VADriverContextP ctx, + VAProfile profile, + struct decode_state *decode_state) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + VAStatus vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + + if (decode_state->current_render_target == VA_INVALID_SURFACE) + goto out; + + obj_surface = SURFACE(decode_state->current_render_target); + + if (!obj_surface) + goto out; + + decode_state->render_object = obj_surface; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + vaStatus = intel_decoder_check_mpeg2_parameter(ctx, decode_state); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + vaStatus = intel_decoder_check_avc_parameter(ctx, profile, decode_state); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + vaStatus = intel_decoder_check_vc1_parameter(ctx, decode_state); + break; + + case VAProfileJPEGBaseline: + vaStatus = VA_STATUS_SUCCESS; + break; + + case VAProfileVP8Version0_3: + vaStatus = intel_decoder_check_vp8_parameter(ctx, decode_state); + break; + + case VAProfileHEVCMain: + case VAProfileHEVCMain10: + vaStatus = intel_decoder_check_hevc_parameter(ctx, decode_state); + break; + + case VAProfileVP9Profile0: + vaStatus = intel_decoder_check_vp9_parameter(ctx, decode_state); + break; + + default: + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + break; + } + +out: + return vaStatus; +} + +/* + * Return the next slice paramter + * + * Input: + * slice_param: the current slice + * *group_idx & *element_idx the current slice position in slice groups + * Output: + * Return the next slice parameter + * *group_idx & *element_idx the next slice position in slice groups, + * if the next slice is NULL, *group_idx & *element_idx will be ignored + */ +VASliceParameterBufferMPEG2 * +intel_mpeg2_find_next_slice(struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + int *group_idx, + int *element_idx) +{ + VASliceParameterBufferMPEG2 *next_slice_param; + unsigned int width_in_mbs = ALIGN(pic_param->horizontal_size, 16) / 16; + int j = *group_idx, i = *element_idx + 1; + + for (; j < decode_state->num_slice_params; j++) { + for (; i < decode_state->slice_params[j]->num_elements; i++) { + next_slice_param = ((VASliceParameterBufferMPEG2 *)decode_state->slice_params[j]->buffer) + i; + + if ((next_slice_param->slice_vertical_position * width_in_mbs + next_slice_param->slice_horizontal_position) >= + (slice_param->slice_vertical_position * width_in_mbs + slice_param->slice_horizontal_position)) { + *group_idx = j; + *element_idx = i; + + return next_slice_param; + } + } + + i = 0; + } + + return NULL; +} + +/* Ensure the segmentation buffer is large enough for the supplied + number of MBs, or re-allocate it */ +bool +intel_ensure_vp8_segmentation_buffer(VADriverContextP ctx, GenBuffer *buf, + unsigned int mb_width, unsigned int mb_height) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + /* The segmentation map is a 64-byte aligned linear buffer, with + each cache line holding only 8 bits for 4 continuous MBs */ + const unsigned int buf_size = ((mb_width + 3) / 4) * 64 * mb_height; + + if (buf->valid) { + if (buf->bo && buf->bo->size >= buf_size) + return true; + drm_intel_bo_unreference(buf->bo); + buf->valid = false; + } + + buf->bo = drm_intel_bo_alloc(i965->intel.bufmgr, "segmentation map", + buf_size, 0x1000); + buf->valid = buf->bo != NULL; + return buf->valid; +} + +void +hevc_gen_default_iq_matrix(VAIQMatrixBufferHEVC *iq_matrix) +{ + /* Flat_4x4_16 */ + memset(&iq_matrix->ScalingList4x4, 16, sizeof(iq_matrix->ScalingList4x4)); + + /* Flat_8x8_16 */ + memset(&iq_matrix->ScalingList8x8, 16, sizeof(iq_matrix->ScalingList8x8)); + + /* Flat_16x16_16 */ + memset(&iq_matrix->ScalingList16x16, 16, sizeof(iq_matrix->ScalingList16x16)); + + /* Flat_32x32_16 */ + memset(&iq_matrix->ScalingList32x32, 16, sizeof(iq_matrix->ScalingList32x32)); + + /* Flat_16x16_dc_16 */ + memset(&iq_matrix->ScalingListDC16x16, 16, sizeof(iq_matrix->ScalingListDC16x16)); + + /* Flat_32x32_dc_16 */ + memset(&iq_matrix->ScalingListDC32x32, 16, sizeof(iq_matrix->ScalingListDC32x32)); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.h new file mode 100644 index 000000000..5889158ac --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_decoder_utils.h @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2006-2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef I965_DECODER_UTILS_H +#define I965_DECODER_UTILS_H + +#include "i965_decoder.h" +#include "intel_batchbuffer.h" + +struct decode_state; + +int +mpeg2_wa_slice_vertical_position( + struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param +); + +void +mpeg2_set_reference_surfaces( + VADriverContextP ctx, + GenFrameStore ref_frames[MAX_GEN_REFERENCE_FRAMES], + struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param +); + +VAStatus +avc_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VAPictureParameterBufferH264 *pic_param +); + +void +avc_gen_default_iq_matrix(VAIQMatrixBufferH264 *iq_matrix); + +int +avc_get_picture_id(struct object_surface *obj_surface); + +VAPictureH264 * +avc_find_picture(VASurfaceID id, VAPictureH264 *pic_list, int pic_list_count); + +unsigned int +avc_get_first_mb_bit_offset( + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *slice_param, + unsigned int mode_flag +); + +unsigned int +avc_get_first_mb_bit_offset_with_epb( + dri_bo *slice_data_bo, + VASliceParameterBufferH264 *slice_param, + unsigned int mode_flag +); + +void +gen5_fill_avc_ref_idx_state( + uint8_t state[32], + const VAPictureH264 ref_list[32], + unsigned int ref_list_count, + const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +); + +void +gen6_send_avc_ref_idx_state( + struct intel_batchbuffer *batch, + const VASliceParameterBufferH264 *slice_param, + const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +); + +void +gen6_mfd_avc_phantom_slice(VADriverContextP ctx, + VAPictureParameterBufferH264 *pic_param, + VASliceParameterBufferH264 *next_slice_param, + struct intel_batchbuffer *batch +); + +VAStatus +intel_decoder_sanity_check_input(VADriverContextP ctx, + VAProfile profile, + struct decode_state *decode_state); + +void +intel_update_avc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES], + GenFrameStoreContext *fs_ctx +); + +void +intel_update_hevc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferHEVC *pic_param, + GenFrameStore frame_store[MAX_GEN_HCP_REFERENCE_FRAMES], + GenFrameStoreContext *fs_ctx +); + +void +gen75_update_avc_frame_store_index( + VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferH264 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +); + +bool +gen75_fill_avc_picid_list( + uint16_t pic_ids[16], + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +); + +bool +gen75_send_avc_picid_state( + struct intel_batchbuffer *batch, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES] +); + +void +intel_update_vc1_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferVC1 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]); + +VASliceParameterBufferMPEG2 * +intel_mpeg2_find_next_slice(struct decode_state *decode_state, + VAPictureParameterBufferMPEG2 *pic_param, + VASliceParameterBufferMPEG2 *slice_param, + int *group_idx, + int *element_idx); + + +void +intel_update_vp8_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VAPictureParameterBufferVP8 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]); + +void +intel_update_vp9_frame_store_index(VADriverContextP ctx, + struct decode_state *decode_state, + VADecPictureParameterBufferVP9 *pic_param, + GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]); + +bool +intel_ensure_vp8_segmentation_buffer(VADriverContextP ctx, GenBuffer *buf, + unsigned int mb_width, unsigned int mb_height); + +void +hevc_gen_default_iq_matrix(VAIQMatrixBufferHEVC *iq_matrix); + +VAStatus +hevc_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VAPictureParameterBufferHEVC *pic_param +); + +VAStatus +vp9_ensure_surface_bo( + VADriverContextP ctx, + struct decode_state *decode_state, + struct object_surface *obj_surface, + const VADecPictureParameterBufferVP9 *pic_param +); +#endif /* I965_DECODER_UTILS_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_defines.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_defines.h new file mode 100644 index 000000000..9ea8a9fcb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_defines.h @@ -0,0 +1,921 @@ +#ifndef _I965_DEFINES_H_ +#define _I965_DEFINES_H_ + +#define CMD(pipeline,op,sub_op) ((3 << 29) | \ + ((pipeline) << 27) | \ + ((op) << 24) | \ + ((sub_op) << 16)) + +#define CMD_URB_FENCE CMD(0, 0, 0) +#define CMD_CS_URB_STATE CMD(0, 0, 1) +#define CMD_CONSTANT_BUFFER CMD(0, 0, 2) +#define CMD_STATE_PREFETCH CMD(0, 0, 3) + +#define CMD_STATE_BASE_ADDRESS CMD(0, 1, 1) +#define CMD_STATE_SIP CMD(0, 1, 2) +#define CMD_PIPELINE_SELECT CMD(1, 1, 4) +#define CMD_SAMPLER_PALETTE_LOAD CMD(3, 1, 2) + +#define CMD_MEDIA_STATE_POINTERS CMD(2, 0, 0) +#define CMD_MEDIA_VFE_STATE CMD(2, 0, 0) +#define CMD_MEDIA_CURBE_LOAD CMD(2, 0, 1) +#define CMD_MEDIA_INTERFACE_LOAD CMD(2, 0, 2) +#define CMD_MEDIA_OBJECT CMD(2, 1, 0) +#define CMD_MEDIA_OBJECT_EX CMD(2, 1, 1) + +#define CMD_AVC_BSD_IMG_STATE CMD(2, 4, 0) +#define CMD_AVC_BSD_QM_STATE CMD(2, 4, 1) +#define CMD_AVC_BSD_SLICE_STATE CMD(2, 4, 2) +#define CMD_AVC_BSD_BUF_BASE_STATE CMD(2, 4, 3) +#define CMD_BSD_IND_OBJ_BASE_ADDR CMD(2, 4, 4) +#define CMD_AVC_BSD_OBJECT CMD(2, 4, 8) + +#define CMD_MEDIA_VFE_STATE CMD(2, 0, 0) +#define CMD_MEDIA_CURBE_LOAD CMD(2, 0, 1) +#define CMD_MEDIA_INTERFACE_DESCRIPTOR_LOAD CMD(2, 0, 2) +#define CMD_MEDIA_GATEWAY_STATE CMD(2, 0, 3) +#define CMD_MEDIA_STATE_FLUSH CMD(2, 0, 4) +#define CMD_MEDIA_OBJECT_WALKER CMD(2, 1, 3) + +#define CMD_PIPELINED_POINTERS CMD(3, 0, 0) +#define CMD_BINDING_TABLE_POINTERS CMD(3, 0, 1) +# define GEN6_BINDING_TABLE_MODIFY_PS (1 << 12)/* for GEN6 */ +# define GEN6_BINDING_TABLE_MODIFY_GS (1 << 9) /* for GEN6 */ +# define GEN6_BINDING_TABLE_MODIFY_VS (1 << 8) /* for GEN6 */ + +#define CMD_VERTEX_BUFFERS CMD(3, 0, 8) +#define CMD_VERTEX_ELEMENTS CMD(3, 0, 9) +#define CMD_DRAWING_RECTANGLE CMD(3, 1, 0) +#define CMD_CONSTANT_COLOR CMD(3, 1, 1) +#define CMD_3DPRIMITIVE CMD(3, 3, 0) + +#define CMD_DEPTH_BUFFER CMD(3, 1, 5) +# define CMD_DEPTH_BUFFER_TYPE_SHIFT 29 +# define CMD_DEPTH_BUFFER_FORMAT_SHIFT 18 + +#define CMD_CLEAR_PARAMS CMD(3, 1, 0x10) +/* DW1 */ +# define CMD_CLEAR_PARAMS_DEPTH_CLEAR_VALID (1 << 15) + +/* for GEN6+ */ +#define GEN6_3DSTATE_SAMPLER_STATE_POINTERS CMD(3, 0, 0x02) +# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS (1 << 12) +# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_GS (1 << 9) +# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_VS (1 << 8) + +#define GEN6_3DSTATE_URB CMD(3, 0, 0x05) +/* DW1 */ +# define GEN6_3DSTATE_URB_VS_SIZE_SHIFT 16 +# define GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT 0 +/* DW2 */ +# define GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT 8 +# define GEN6_3DSTATE_URB_GS_SIZE_SHIFT 0 + +#define GEN6_3DSTATE_VIEWPORT_STATE_POINTERS CMD(3, 0, 0x0d) +# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC (1 << 12) +# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_SF (1 << 11) +# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CLIP (1 << 10) + +#define GEN6_3DSTATE_CC_STATE_POINTERS CMD(3, 0, 0x0e) + +#define GEN6_3DSTATE_VS CMD(3, 0, 0x10) + +#define GEN6_3DSTATE_GS CMD(3, 0, 0x11) +/* DW4 */ +# define GEN6_3DSTATE_GS_DISPATCH_START_GRF_SHIFT 0 + +#define GEN6_3DSTATE_CLIP CMD(3, 0, 0x12) + +#define GEN6_3DSTATE_SF CMD(3, 0, 0x13) +/* DW1 on GEN6 */ +# define GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT 22 +# define GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT 11 +# define GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT 4 +/* DW1 on GEN7 */ +# define GEN7_SF_DEPTH_BUFFER_SURFACE_FORMAT_SHIFT 12 + + +/* DW2 */ +/* DW3 */ +# define GEN6_3DSTATE_SF_CULL_BOTH (0 << 29) +# define GEN6_3DSTATE_SF_CULL_NONE (1 << 29) +# define GEN6_3DSTATE_SF_CULL_FRONT (2 << 29) +# define GEN6_3DSTATE_SF_CULL_BACK (3 << 29) +/* DW4 */ +# define GEN6_3DSTATE_SF_TRI_PROVOKE_SHIFT 29 +# define GEN6_3DSTATE_SF_LINE_PROVOKE_SHIFT 27 +# define GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT 25 + +#define GEN8_3DSTATE_RASTER CMD(3, 0, 0x50) +# define GEN8_3DSTATE_RASTER_CULL_BOTH (0 << 16) +# define GEN8_3DSTATE_RASTER_CULL_NONE (1 << 16) +# define GEN8_3DSTATE_RASTER_CULL_FRONT (2 << 16) +# define GEN8_3DSTATE_RASTER_CULL_BACK (3 << 16) + +#define GEN6_3DSTATE_WM CMD(3, 0, 0x14) +/* DW2 */ +# define GEN6_3DSTATE_WM_SAMPLER_COUNT_SHITF 27 +# define GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT 18 +/* DW4 */ +# define GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT 16 +/* DW5 */ +# define GEN6_3DSTATE_WM_MAX_THREADS_SHIFT 25 +# define GEN6_3DSTATE_WM_DISPATCH_ENABLE (1 << 19) +# define GEN6_3DSTATE_WM_16_DISPATCH_ENABLE (1 << 1) +# define GEN6_3DSTATE_WM_8_DISPATCH_ENABLE (1 << 0) +/* DW6 */ +# define GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT 20 +# define GEN6_3DSTATE_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 15) +# define GEN6_3DSTATE_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC (1 << 14) +# define GEN6_3DSTATE_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC (1 << 13) +# define GEN6_3DSTATE_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 12) +# define GEN6_3DSTATE_WM_PERSPECTIVE_CENTROID_BARYCENTRIC (1 << 11) +# define GEN6_3DSTATE_WM_PERSPECTIVE_PIXEL_BARYCENTRIC (1 << 10) + +/* 3DSTATE_WM on GEN7 */ +/* DW1 */ +# define GEN7_WM_STATISTICS_ENABLE (1 << 31) +# define GEN7_WM_DEPTH_CLEAR (1 << 30) +# define GEN7_WM_DISPATCH_ENABLE (1 << 29) +# define GEN6_WM_DEPTH_RESOLVE (1 << 28) +# define GEN7_WM_HIERARCHICAL_DEPTH_RESOLVE (1 << 27) +# define GEN7_WM_KILL_ENABLE (1 << 25) +# define GEN7_WM_PSCDEPTH_OFF (0 << 23) +# define GEN7_WM_PSCDEPTH_ON (1 << 23) +# define GEN7_WM_PSCDEPTH_ON_GE (2 << 23) +# define GEN7_WM_PSCDEPTH_ON_LE (3 << 23) +# define GEN7_WM_USES_SOURCE_DEPTH (1 << 20) +# define GEN7_WM_USES_SOURCE_W (1 << 19) +# define GEN7_WM_POSITION_ZW_PIXEL (0 << 17) +# define GEN7_WM_POSITION_ZW_CENTROID (2 << 17) +# define GEN7_WM_POSITION_ZW_SAMPLE (3 << 17) +# define GEN7_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 16) +# define GEN7_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC (1 << 15) +# define GEN7_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC (1 << 14) +# define GEN7_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 13) +# define GEN7_WM_PERSPECTIVE_CENTROID_BARYCENTRIC (1 << 12) +# define GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC (1 << 11) +# define GEN7_WM_USES_INPUT_COVERAGE_MASK (1 << 10) +# define GEN7_WM_LINE_END_CAP_AA_WIDTH_0_5 (0 << 8) +# define GEN7_WM_LINE_END_CAP_AA_WIDTH_1_0 (1 << 8) +# define GEN7_WM_LINE_END_CAP_AA_WIDTH_2_0 (2 << 8) +# define GEN7_WM_LINE_END_CAP_AA_WIDTH_4_0 (3 << 8) +# define GEN7_WM_LINE_AA_WIDTH_0_5 (0 << 6) +# define GEN7_WM_LINE_AA_WIDTH_1_0 (1 << 6) +# define GEN7_WM_LINE_AA_WIDTH_2_0 (2 << 6) +# define GEN7_WM_LINE_AA_WIDTH_4_0 (3 << 6) +# define GEN7_WM_POLYGON_STIPPLE_ENABLE (1 << 4) +# define GEN7_WM_LINE_STIPPLE_ENABLE (1 << 3) +# define GEN7_WM_POINT_RASTRULE_UPPER_RIGHT (1 << 2) +# define GEN7_WM_MSRAST_OFF_PIXEL (0 << 0) +# define GEN7_WM_MSRAST_OFF_PATTERN (1 << 0) +# define GEN7_WM_MSRAST_ON_PIXEL (2 << 0) +# define GEN7_WM_MSRAST_ON_PATTERN (3 << 0) +/* DW2 */ +# define GEN7_WM_MSDISPMODE_PERPIXEL (1 << 31) + +#define GEN6_3DSTATE_CONSTANT_VS CMD(3, 0, 0x15) +#define GEN6_3DSTATE_CONSTANT_GS CMD(3, 0, 0x16) +#define GEN6_3DSTATE_CONSTANT_PS CMD(3, 0, 0x17) + +/* Gen8 WM_HZ_OP */ +#define GEN8_3DSTATE_WM_HZ_OP CMD(3, 0, 0x52) + + +# define GEN6_3DSTATE_CONSTANT_BUFFER_3_ENABLE (1 << 15) +# define GEN6_3DSTATE_CONSTANT_BUFFER_2_ENABLE (1 << 14) +# define GEN6_3DSTATE_CONSTANT_BUFFER_1_ENABLE (1 << 13) +# define GEN6_3DSTATE_CONSTANT_BUFFER_0_ENABLE (1 << 12) + +#define GEN6_3DSTATE_SAMPLE_MASK CMD(3, 0, 0x18) + +#define GEN6_3DSTATE_MULTISAMPLE CMD(3, 1, 0x0d) +/* DW1 */ +# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER (0 << 4) +# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_UPPER_LEFT (1 << 4) +# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1 (0 << 1) +# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_4 (2 << 1) +# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_8 (3 << 1) + +#define GEN8_3DSTATE_MULTISAMPLE CMD(3, 0, 0x0d) +#define GEN8_3DSTATE_SAMPLE_PATTERN CMD(3, 1, 0x1C) + +/* GEN7 */ +#define GEN7_3DSTATE_CLEAR_PARAMS CMD(3, 0, 0x04) +#define GEN7_3DSTATE_DEPTH_BUFFER CMD(3, 0, 0x05) +#define GEN7_3DSTATE_HIER_DEPTH_BUFFER CMD(3, 0, 0x07) + +#define GEN7_3DSTATE_URB_VS CMD(3, 0, 0x30) +#define GEN7_3DSTATE_URB_HS CMD(3, 0, 0x31) +#define GEN7_3DSTATE_URB_DS CMD(3, 0, 0x32) +#define GEN7_3DSTATE_URB_GS CMD(3, 0, 0x33) +/* DW1 */ +# define GEN7_URB_ENTRY_NUMBER_SHIFT 0 +# define GEN7_URB_ENTRY_SIZE_SHIFT 16 +# define GEN7_URB_STARTING_ADDRESS_SHIFT 25 + +#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS CMD(3, 1, 0x12) +#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS CMD(3, 1, 0x16) + +#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS CMD(3, 1, 0x14) +#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS CMD(3, 1, 0x13) +#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS CMD(3, 1, 0x15) +/* DW1 */ +# define GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT 16 +# define GEN8_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT 16 +# define GEN8_PUSH_CONSTANT_BUFFER_SIZE_SHIFT 0 + +#define GEN7_3DSTATE_CONSTANT_HS CMD(3, 0, 0x19) +#define GEN7_3DSTATE_CONSTANT_DS CMD(3, 0, 0x1a) + +#define GEN7_3DSTATE_HS CMD(3, 0, 0x1b) +#define GEN7_3DSTATE_TE CMD(3, 0, 0x1c) +#define GEN7_3DSTATE_DS CMD(3, 0, 0x1d) +#define GEN7_3DSTATE_STREAMOUT CMD(3, 0, 0x1e) +#define GEN7_3DSTATE_SBE CMD(3, 0, 0x1f) + +/* DW1 */ +# define GEN7_SBE_SWIZZLE_CONTROL_MODE (1 << 28) +# define GEN7_SBE_NUM_OUTPUTS_SHIFT 22 +# define GEN7_SBE_SWIZZLE_ENABLE (1 << 21) +# define GEN7_SBE_POINT_SPRITE_LOWERLEFT (1 << 20) +# define GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT 11 +# define GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT 4 +# define GEN8_SBE_FORCE_URB_ENTRY_READ_LENGTH (1 << 29) +# define GEN8_SBE_FORCE_URB_ENTRY_READ_OFFSET (1 << 28) + +# define GEN8_SBE_URB_ENTRY_READ_OFFSET_SHIFT 5 +#define GEN8_3DSTATE_SBE_SWIZ CMD(3, 0, 0x51) + +#define GEN7_3DSTATE_PS CMD(3, 0, 0x20) +/* DW1: kernel pointer */ +/* DW2 */ +# define GEN7_PS_SPF_MODE (1 << 31) +# define GEN7_PS_VECTOR_MASK_ENABLE (1 << 30) +# define GEN7_PS_SAMPLER_COUNT_SHIFT 27 +# define GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT 18 +# define GEN7_PS_FLOATING_POINT_MODE_IEEE_754 (0 << 16) +# define GEN7_PS_FLOATING_POINT_MODE_ALT (1 << 16) +/* DW3: scratch space */ +/* DW4 */ +# define GEN7_PS_MAX_THREADS_SHIFT_IVB 24 +# define GEN7_PS_MAX_THREADS_SHIFT_HSW 23 +# define GEN7_PS_SAMPLE_MASK_SHIFT_HSW 12 +# define GEN7_PS_PUSH_CONSTANT_ENABLE (1 << 11) +# define GEN7_PS_ATTRIBUTE_ENABLE (1 << 10) +# define GEN7_PS_OMASK_TO_RENDER_TARGET (1 << 9) +# define GEN7_PS_DUAL_SOURCE_BLEND_ENABLE (1 << 7) +# define GEN7_PS_POSOFFSET_NONE (0 << 3) +# define GEN7_PS_POSOFFSET_CENTROID (2 << 3) +# define GEN7_PS_POSOFFSET_SAMPLE (3 << 3) +# define GEN7_PS_32_DISPATCH_ENABLE (1 << 2) +# define GEN7_PS_16_DISPATCH_ENABLE (1 << 1) +# define GEN7_PS_8_DISPATCH_ENABLE (1 << 0) +/* DW5 */ +# define GEN7_PS_DISPATCH_START_GRF_SHIFT_0 16 +# define GEN7_PS_DISPATCH_START_GRF_SHIFT_1 8 +# define GEN7_PS_DISPATCH_START_GRF_SHIFT_2 0 +/* DW6: kernel 1 pointer */ +/* DW7: kernel 2 pointer */ + +# define GEN8_PS_MAX_THREADS_SHIFT 23 + +#define GEN8_3DSTATE_PSEXTRA CMD(3, 0, 0x4f) +/* DW1 */ +# define GEN8_PSX_PIXEL_SHADER_VALID (1 << 31) +# define GEN8_PSX_PSCDEPTH_OFF (0 << 26) +# define GEN8_PSX_PSCDEPTH_ON (1 << 26) +# define GEN8_PSX_PSCDEPTH_ON_GE (2 << 26) +# define GEN8_PSX_PSCDEPTH_ON_LE (3 << 26) +# define GEN8_PSX_ATTRIBUTE_ENABLE (1 << 8) + +#define GEN8_3DSTATE_PSBLEND CMD(3, 0, 0x4d) +/* DW1 */ +# define GEN8_PS_BLEND_ALPHA_TO_COVERAGE_ENABLE (1 << 31) +# define GEN8_PS_BLEND_HAS_WRITEABLE_RT (1 << 30) +# define GEN8_PS_BLEND_COLOR_BUFFER_BLEND_ENABLE (1 << 29) +# define GEN8_PS_BLEND_SRC_ALPHA_BLEND_FACTOR_MASK INTEL_MASK(28, 24) +# define GEN8_PS_BLEND_SRC_ALPHA_BLEND_FACTOR_SHIFT 24 +# define GEN8_PS_BLEND_DST_ALPHA_BLEND_FACTOR_MASK INTEL_MASK(23, 19) +# define GEN8_PS_BLEND_DST_ALPHA_BLEND_FACTOR_SHIFT 19 +# define GEN8_PS_BLEND_SRC_BLEND_FACTOR_MASK INTEL_MASK(18, 14) +# define GEN8_PS_BLEND_SRC_BLEND_FACTOR_SHIFT 14 +# define GEN8_PS_BLEND_DST_BLEND_FACTOR_MASK INTEL_MASK(13, 9) +# define GEN8_PS_BLEND_DST_BLEND_FACTOR_SHIFT 9 +# define GEN8_PS_BLEND_ALPHA_TEST_ENABLE (1 << 8) +# define GEN8_PS_BLEND_INDEPENDENT_ALPHA_BLEND_ENABLE (1 << 7) + + +#define GEN7_3DSTATE_STENCIL_BUFFER CMD(3, 0, 0x06) +#define GEN8_3DSTATE_WM_DEPTH_STENCIL CMD(3, 0, 0x4e) + +#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL CMD(3, 0, 0x21) +#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC CMD(3, 0, 0x23) + +#define GEN7_3DSTATE_BLEND_STATE_POINTERS CMD(3, 0, 0x24) +#define GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS CMD(3, 0, 0x25) + +#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS CMD(3, 0, 0x26) +#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS CMD(3, 0, 0x27) +#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS CMD(3, 0, 0x28) +#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS CMD(3, 0, 0x29) +#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS CMD(3, 0, 0x2a) + +#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS CMD(3, 0, 0x2b) +#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS CMD(3, 0, 0x2e) +#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS CMD(3, 0, 0x2f) +#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS CMD(3, 0, 0x2c) +#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS CMD(3, 0, 0x2d) + +#define GEN7_3DSTATE_VF CMD(3, 0, 0x0c) +#define GEN8_3DSTATE_VF_INSTANCING CMD(3, 0, 0x49) + +#define GEN7_3DSTATE_VF CMD(3, 0, 0x0c) +#define GEN8_3DSTATE_VF_INSTANCING CMD(3, 0, 0x49) + +#define MFX(pipeline, op, sub_opa, sub_opb) \ + (3 << 29 | \ + (pipeline) << 27 | \ + (op) << 24 | \ + (sub_opa) << 21 | \ + (sub_opb) << 16) + +#define MFX_PIPE_MODE_SELECT MFX(2, 0, 0, 0) +#define MFX_SURFACE_STATE MFX(2, 0, 0, 1) +#define MFX_PIPE_BUF_ADDR_STATE MFX(2, 0, 0, 2) +#define MFX_IND_OBJ_BASE_ADDR_STATE MFX(2, 0, 0, 3) +#define MFX_BSP_BUF_BASE_ADDR_STATE MFX(2, 0, 0, 4) +#define MFX_AES_STATE MFX(2, 0, 0, 5) +#define MFX_STATE_POINTER MFX(2, 0, 0, 6) +#define MFX_QM_STATE MFX(2, 0, 0, 7) +#define MFX_FQM_STATE MFX(2, 0, 0, 8) + +#define MFX_INSERT_OBJECT MFX(2, 0, 2, 8) + +#define MFX_WAIT MFX(1, 0, 0, 0) + +#define MFX_AVC_IMG_STATE MFX(2, 1, 0, 0) +#define MFX_AVC_QM_STATE MFX(2, 1, 0, 1) +#define MFX_AVC_DIRECTMODE_STATE MFX(2, 1, 0, 2) +#define MFX_AVC_SLICE_STATE MFX(2, 1, 0, 3) +#define MFX_AVC_REF_IDX_STATE MFX(2, 1, 0, 4) +#define MFX_AVC_WEIGHTOFFSET_STATE MFX(2, 1, 0, 5) + +#define MFD_AVC_PICID_STATE MFX(2, 1, 1, 5) +#define MFD_AVC_BSD_OBJECT MFX(2, 1, 1, 8) + +#define MFC_AVC_FQM_STATE MFX(2, 1, 2, 2) +#define MFC_AVC_INSERT_OBJECT MFX(2, 1, 2, 8) +#define MFC_AVC_PAK_OBJECT MFX(2, 1, 2, 9) + +#define MFX_MPEG2_PIC_STATE MFX(2, 3, 0, 0) +#define MFX_MPEG2_QM_STATE MFX(2, 3, 0, 1) + +#define MFD_MPEG2_BSD_OBJECT MFX(2, 3, 1, 8) + +#define MFC_MPEG2_SLICEGROUP_STATE MFX(2, 3, 2, 3) +#define MFC_MPEG2_PAK_OBJECT MFX(2, 3, 2, 9) + +#define MFX_VC1_PIC_STATE MFX(2, 2, 0, 0) +#define MFX_VC1_PRED_PIPE_STATE MFX(2, 2, 0, 1) +#define MFX_VC1_DIRECTMODE_STATE MFX(2, 2, 0, 2) + +#define MFD_VC1_SHORT_PIC_STATE MFX(2, 2, 1, 0) +#define MFD_VC1_LONG_PIC_STATE MFX(2, 2, 1, 1) + +#define MFD_VC1_BSD_OBJECT MFX(2, 2, 1, 8) + +//MFX_JPEG #defines for JPEG decoder only +#define MFX_JPEG_PIC_STATE MFX(2, 7, 0, 0) +#define MFX_JPEG_HUFF_TABLE_STATE MFX(2, 7, 0, 2) + +//MFC_JPEG #defines for JPEG encoder only +#define MFC_JPEG_SCAN_OBJECT MFX(2, 7, 2, 9) +#define MFC_JPEG_HUFF_TABLE_STATE MFX(2, 7, 2, 3) + +#define MFD_JPEG_BSD_OBJECT MFX(2, 7, 1, 8) + +#define MFX_VP8_PIC_STATE MFX(2, 4, 0, 0) + +#define MFD_VP8_BSD_OBJECT MFX(2, 4, 1, 8) + +#define MFX_VP8_ENCODER_CFG MFX(2, 4, 2, 1) + +#define MFX_VP8_BSP_BUF_BASE_ADDR_STATE MFX(2, 4, 2, 3) + +#define MFX_VP8_PAK_OBJECT MFX(2, 4, 2, 9) + +#define VEB(pipeline, op, sub_opa, sub_opb) \ + (3 << 29 | \ + (pipeline) << 27 | \ + (op) << 24 | \ + (sub_opa) << 21 | \ + (sub_opb) << 16) + +#define VEB_SURFACE_STATE VEB(2, 4, 0, 0) +#define VEB_STATE VEB(2, 4, 0, 2) +#define VEB_DNDI_IECP_STATE VEB(2, 4, 0, 3) + +#define HCP(command) \ + (3 << 29 | \ + 2 << 27 | \ + 7 << 23 | \ + (command << 16)) + +#define HCP_PIPE_MODE_SELECT HCP(0x00) +#define HCP_SURFACE_STATE HCP(0x01) +#define HCP_PIPE_BUF_ADDR_STATE HCP(0x02) +#define HCP_IND_OBJ_BASE_ADDR_STATE HCP(0x03) +#define HCP_QM_STATE HCP(0x04) +#define HCP_FQM_STATE HCP(0x05) +#define HCP_PIC_STATE HCP(0x10) +#define HCP_TILE_STATE HCP(0x11) +#define HCP_REF_IDX_STATE HCP(0x12) +#define HCP_WEIGHTOFFSET HCP(0x13) +#define HCP_SLICE_STATE HCP(0x14) +#define HCP_BSD_OBJECT HCP(0x20) +#define HCP_PAK_OBJECT HCP(0x21) +#define HCP_INSERT_PAK_OBJECT HCP(0x22) + +#define HCP_VP9_SEGMENT_STATE HCP(0x32) +#define HCP_VP9_PIC_STATE HCP(0x30) + +#define I965_DEPTHFORMAT_D32_FLOAT 1 + +#define BASE_ADDRESS_MODIFY (1 << 0) + +#define PIPELINE_SELECT_3D 0 +#define PIPELINE_SELECT_MEDIA 1 + + +#define UF0_CS_REALLOC (1 << 13) +#define UF0_VFE_REALLOC (1 << 12) +#define UF0_SF_REALLOC (1 << 11) +#define UF0_CLIP_REALLOC (1 << 10) +#define UF0_GS_REALLOC (1 << 9) +#define UF0_VS_REALLOC (1 << 8) +#define UF1_CLIP_FENCE_SHIFT 20 +#define UF1_GS_FENCE_SHIFT 10 +#define UF1_VS_FENCE_SHIFT 0 +#define UF2_CS_FENCE_SHIFT 20 +#define UF2_VFE_FENCE_SHIFT 10 +#define UF2_SF_FENCE_SHIFT 0 + +#define VFE_GENERIC_MODE 0x0 +#define VFE_VLD_MODE 0x1 +#define VFE_IS_MODE 0x2 +#define VFE_AVC_MC_MODE 0x4 +#define VFE_AVC_IT_MODE 0x7 + +#define FLOATING_POINT_IEEE_754 0 +#define FLOATING_POINT_NON_IEEE_754 1 + + +#define I965_SURFACE_1D 0 +#define I965_SURFACE_2D 1 +#define I965_SURFACE_3D 2 +#define I965_SURFACE_CUBE 3 +#define I965_SURFACE_BUFFER 4 +#define I965_SURFACE_NULL 7 + +#define I965_SURFACEFORMAT_R32G32B32A32_FLOAT 0x000 +#define I965_SURFACEFORMAT_R32G32B32A32_SINT 0x001 +#define I965_SURFACEFORMAT_R32G32B32A32_UINT 0x002 +#define I965_SURFACEFORMAT_R32G32B32A32_UNORM 0x003 +#define I965_SURFACEFORMAT_R32G32B32A32_SNORM 0x004 +#define I965_SURFACEFORMAT_R64G64_FLOAT 0x005 +#define I965_SURFACEFORMAT_R32G32B32X32_FLOAT 0x006 +#define I965_SURFACEFORMAT_R32G32B32A32_SSCALED 0x007 +#define I965_SURFACEFORMAT_R32G32B32A32_USCALED 0x008 +#define I965_SURFACEFORMAT_R32G32B32_FLOAT 0x040 +#define I965_SURFACEFORMAT_R32G32B32_SINT 0x041 +#define I965_SURFACEFORMAT_R32G32B32_UINT 0x042 +#define I965_SURFACEFORMAT_R32G32B32_UNORM 0x043 +#define I965_SURFACEFORMAT_R32G32B32_SNORM 0x044 +#define I965_SURFACEFORMAT_R32G32B32_SSCALED 0x045 +#define I965_SURFACEFORMAT_R32G32B32_USCALED 0x046 +#define I965_SURFACEFORMAT_R16G16B16A16_UNORM 0x080 +#define I965_SURFACEFORMAT_R16G16B16A16_SNORM 0x081 +#define I965_SURFACEFORMAT_R16G16B16A16_SINT 0x082 +#define I965_SURFACEFORMAT_R16G16B16A16_UINT 0x083 +#define I965_SURFACEFORMAT_R16G16B16A16_FLOAT 0x084 +#define I965_SURFACEFORMAT_R32G32_FLOAT 0x085 +#define I965_SURFACEFORMAT_R32G32_SINT 0x086 +#define I965_SURFACEFORMAT_R32G32_UINT 0x087 +#define I965_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS 0x088 +#define I965_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT 0x089 +#define I965_SURFACEFORMAT_L32A32_FLOAT 0x08A +#define I965_SURFACEFORMAT_R32G32_UNORM 0x08B +#define I965_SURFACEFORMAT_R32G32_SNORM 0x08C +#define I965_SURFACEFORMAT_R64_FLOAT 0x08D +#define I965_SURFACEFORMAT_R16G16B16X16_UNORM 0x08E +#define I965_SURFACEFORMAT_R16G16B16X16_FLOAT 0x08F +#define I965_SURFACEFORMAT_A32X32_FLOAT 0x090 +#define I965_SURFACEFORMAT_L32X32_FLOAT 0x091 +#define I965_SURFACEFORMAT_I32X32_FLOAT 0x092 +#define I965_SURFACEFORMAT_R16G16B16A16_SSCALED 0x093 +#define I965_SURFACEFORMAT_R16G16B16A16_USCALED 0x094 +#define I965_SURFACEFORMAT_R32G32_SSCALED 0x095 +#define I965_SURFACEFORMAT_R32G32_USCALED 0x096 +#define I965_SURFACEFORMAT_B8G8R8A8_UNORM 0x0C0 +#define I965_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB 0x0C1 +#define I965_SURFACEFORMAT_R10G10B10A2_UNORM 0x0C2 +#define I965_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB 0x0C3 +#define I965_SURFACEFORMAT_R10G10B10A2_UINT 0x0C4 +#define I965_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM 0x0C5 +#define I965_SURFACEFORMAT_R8G8B8A8_UNORM 0x0C7 +#define I965_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB 0x0C8 +#define I965_SURFACEFORMAT_R8G8B8A8_SNORM 0x0C9 +#define I965_SURFACEFORMAT_R8G8B8A8_SINT 0x0CA +#define I965_SURFACEFORMAT_R8G8B8A8_UINT 0x0CB +#define I965_SURFACEFORMAT_R16G16_UNORM 0x0CC +#define I965_SURFACEFORMAT_R16G16_SNORM 0x0CD +#define I965_SURFACEFORMAT_R16G16_SINT 0x0CE +#define I965_SURFACEFORMAT_R16G16_UINT 0x0CF +#define I965_SURFACEFORMAT_R16G16_FLOAT 0x0D0 +#define I965_SURFACEFORMAT_B10G10R10A2_UNORM 0x0D1 +#define I965_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB 0x0D2 +#define I965_SURFACEFORMAT_R11G11B10_FLOAT 0x0D3 +#define I965_SURFACEFORMAT_R32_SINT 0x0D6 +#define I965_SURFACEFORMAT_R32_UINT 0x0D7 +#define I965_SURFACEFORMAT_R32_FLOAT 0x0D8 +#define I965_SURFACEFORMAT_R24_UNORM_X8_TYPELESS 0x0D9 +#define I965_SURFACEFORMAT_X24_TYPELESS_G8_UINT 0x0DA +#define I965_SURFACEFORMAT_L16A16_UNORM 0x0DF +#define I965_SURFACEFORMAT_I24X8_UNORM 0x0E0 +#define I965_SURFACEFORMAT_L24X8_UNORM 0x0E1 +#define I965_SURFACEFORMAT_A24X8_UNORM 0x0E2 +#define I965_SURFACEFORMAT_I32_FLOAT 0x0E3 +#define I965_SURFACEFORMAT_L32_FLOAT 0x0E4 +#define I965_SURFACEFORMAT_A32_FLOAT 0x0E5 +#define I965_SURFACEFORMAT_B8G8R8X8_UNORM 0x0E9 +#define I965_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB 0x0EA +#define I965_SURFACEFORMAT_R8G8B8X8_UNORM 0x0EB +#define I965_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB 0x0EC +#define I965_SURFACEFORMAT_R9G9B9E5_SHAREDEXP 0x0ED +#define I965_SURFACEFORMAT_B10G10R10X2_UNORM 0x0EE +#define I965_SURFACEFORMAT_L16A16_FLOAT 0x0F0 +#define I965_SURFACEFORMAT_R32_UNORM 0x0F1 +#define I965_SURFACEFORMAT_R32_SNORM 0x0F2 +#define I965_SURFACEFORMAT_R10G10B10X2_USCALED 0x0F3 +#define I965_SURFACEFORMAT_R8G8B8A8_SSCALED 0x0F4 +#define I965_SURFACEFORMAT_R8G8B8A8_USCALED 0x0F5 +#define I965_SURFACEFORMAT_R16G16_SSCALED 0x0F6 +#define I965_SURFACEFORMAT_R16G16_USCALED 0x0F7 +#define I965_SURFACEFORMAT_R32_SSCALED 0x0F8 +#define I965_SURFACEFORMAT_R32_USCALED 0x0F9 +#define I965_SURFACEFORMAT_B5G6R5_UNORM 0x100 +#define I965_SURFACEFORMAT_B5G6R5_UNORM_SRGB 0x101 +#define I965_SURFACEFORMAT_B5G5R5A1_UNORM 0x102 +#define I965_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB 0x103 +#define I965_SURFACEFORMAT_B4G4R4A4_UNORM 0x104 +#define I965_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB 0x105 +#define I965_SURFACEFORMAT_R8G8_UNORM 0x106 +#define I965_SURFACEFORMAT_R8G8_SNORM 0x107 +#define I965_SURFACEFORMAT_R8G8_SINT 0x108 +#define I965_SURFACEFORMAT_R8G8_UINT 0x109 +#define I965_SURFACEFORMAT_R16_UNORM 0x10A +#define I965_SURFACEFORMAT_R16_SNORM 0x10B +#define I965_SURFACEFORMAT_R16_SINT 0x10C +#define I965_SURFACEFORMAT_R16_UINT 0x10D +#define I965_SURFACEFORMAT_R16_FLOAT 0x10E +#define I965_SURFACEFORMAT_I16_UNORM 0x111 +#define I965_SURFACEFORMAT_L16_UNORM 0x112 +#define I965_SURFACEFORMAT_A16_UNORM 0x113 +#define I965_SURFACEFORMAT_L8A8_UNORM 0x114 +#define I965_SURFACEFORMAT_I16_FLOAT 0x115 +#define I965_SURFACEFORMAT_L16_FLOAT 0x116 +#define I965_SURFACEFORMAT_A16_FLOAT 0x117 +#define I965_SURFACEFORMAT_R5G5_SNORM_B6_UNORM 0x119 +#define I965_SURFACEFORMAT_B5G5R5X1_UNORM 0x11A +#define I965_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB 0x11B +#define I965_SURFACEFORMAT_R8G8_SSCALED 0x11C +#define I965_SURFACEFORMAT_R8G8_USCALED 0x11D +#define I965_SURFACEFORMAT_R16_SSCALED 0x11E +#define I965_SURFACEFORMAT_R16_USCALED 0x11F +#define I965_SURFACEFORMAT_P8A8_UNORM 0x122 +#define I965_SURFACEFORMAT_A8P8_UNORM 0x123 +#define I965_SURFACEFORMAT_R8_UNORM 0x140 +#define I965_SURFACEFORMAT_R8_SNORM 0x141 +#define I965_SURFACEFORMAT_R8_SINT 0x142 +#define I965_SURFACEFORMAT_R8_UINT 0x143 +#define I965_SURFACEFORMAT_A8_UNORM 0x144 +#define I965_SURFACEFORMAT_I8_UNORM 0x145 +#define I965_SURFACEFORMAT_L8_UNORM 0x146 +#define I965_SURFACEFORMAT_P4A4_UNORM 0x147 +#define I965_SURFACEFORMAT_A4P4_UNORM 0x148 +#define I965_SURFACEFORMAT_R8_SSCALED 0x149 +#define I965_SURFACEFORMAT_R8_USCALED 0x14A +#define I965_SURFACEFORMAT_R1_UINT 0x181 +#define I965_SURFACEFORMAT_YCRCB_NORMAL 0x182 +#define I965_SURFACEFORMAT_YCRCB_SWAPUVY 0x183 +#define I965_SURFACEFORMAT_BC1_UNORM 0x186 +#define I965_SURFACEFORMAT_BC2_UNORM 0x187 +#define I965_SURFACEFORMAT_BC3_UNORM 0x188 +#define I965_SURFACEFORMAT_BC4_UNORM 0x189 +#define I965_SURFACEFORMAT_BC5_UNORM 0x18A +#define I965_SURFACEFORMAT_BC1_UNORM_SRGB 0x18B +#define I965_SURFACEFORMAT_BC2_UNORM_SRGB 0x18C +#define I965_SURFACEFORMAT_BC3_UNORM_SRGB 0x18D +#define I965_SURFACEFORMAT_MONO8 0x18E +#define I965_SURFACEFORMAT_YCRCB_SWAPUV 0x18F +#define I965_SURFACEFORMAT_YCRCB_SWAPY 0x190 +#define I965_SURFACEFORMAT_DXT1_RGB 0x191 +#define I965_SURFACEFORMAT_FXT1 0x192 +#define I965_SURFACEFORMAT_R8G8B8_UNORM 0x193 +#define I965_SURFACEFORMAT_R8G8B8_SNORM 0x194 +#define I965_SURFACEFORMAT_R8G8B8_SSCALED 0x195 +#define I965_SURFACEFORMAT_R8G8B8_USCALED 0x196 +#define I965_SURFACEFORMAT_R64G64B64A64_FLOAT 0x197 +#define I965_SURFACEFORMAT_R64G64B64_FLOAT 0x198 +#define I965_SURFACEFORMAT_BC4_SNORM 0x199 +#define I965_SURFACEFORMAT_BC5_SNORM 0x19A +#define I965_SURFACEFORMAT_R16G16B16_UNORM 0x19C +#define I965_SURFACEFORMAT_R16G16B16_SNORM 0x19D +#define I965_SURFACEFORMAT_R16G16B16_SSCALED 0x19E +#define I965_SURFACEFORMAT_R16G16B16_USCALED 0x19F + +#define I965_CULLMODE_BOTH 0 +#define I965_CULLMODE_NONE 1 +#define I965_CULLMODE_FRONT 2 +#define I965_CULLMODE_BACK 3 + +#define I965_MAPFILTER_NEAREST 0x0 +#define I965_MAPFILTER_LINEAR 0x1 +#define I965_MAPFILTER_ANISOTROPIC 0x2 + +#define I965_MIPFILTER_NONE 0 +#define I965_MIPFILTER_NEAREST 1 +#define I965_MIPFILTER_LINEAR 3 + +#define HSW_SCS_ZERO 0 +#define HSW_SCS_ONE 1 +#define HSW_SCS_RED 4 +#define HSW_SCS_GREEN 5 +#define HSW_SCS_BLUE 6 +#define HSW_SCS_ALPHA 7 + +#define I965_TEXCOORDMODE_WRAP 0 +#define I965_TEXCOORDMODE_MIRROR 1 +#define I965_TEXCOORDMODE_CLAMP 2 +#define I965_TEXCOORDMODE_CUBE 3 +#define I965_TEXCOORDMODE_CLAMP_BORDER 4 +#define I965_TEXCOORDMODE_MIRROR_ONCE 5 + +#define I965_BLENDFACTOR_ONE 0x1 +#define I965_BLENDFACTOR_SRC_COLOR 0x2 +#define I965_BLENDFACTOR_SRC_ALPHA 0x3 +#define I965_BLENDFACTOR_DST_ALPHA 0x4 +#define I965_BLENDFACTOR_DST_COLOR 0x5 +#define I965_BLENDFACTOR_SRC_ALPHA_SATURATE 0x6 +#define I965_BLENDFACTOR_CONST_COLOR 0x7 +#define I965_BLENDFACTOR_CONST_ALPHA 0x8 +#define I965_BLENDFACTOR_SRC1_COLOR 0x9 +#define I965_BLENDFACTOR_SRC1_ALPHA 0x0A +#define I965_BLENDFACTOR_ZERO 0x11 +#define I965_BLENDFACTOR_INV_SRC_COLOR 0x12 +#define I965_BLENDFACTOR_INV_SRC_ALPHA 0x13 +#define I965_BLENDFACTOR_INV_DST_ALPHA 0x14 +#define I965_BLENDFACTOR_INV_DST_COLOR 0x15 +#define I965_BLENDFACTOR_INV_CONST_COLOR 0x17 +#define I965_BLENDFACTOR_INV_CONST_ALPHA 0x18 +#define I965_BLENDFACTOR_INV_SRC1_COLOR 0x19 +#define I965_BLENDFACTOR_INV_SRC1_ALPHA 0x1A + +#define I965_BLENDFUNCTION_ADD 0 +#define I965_BLENDFUNCTION_SUBTRACT 1 +#define I965_BLENDFUNCTION_REVERSE_SUBTRACT 2 +#define I965_BLENDFUNCTION_MIN 3 +#define I965_BLENDFUNCTION_MAX 4 + +#define I965_SURFACERETURNFORMAT_FLOAT32 0 +#define I965_SURFACERETURNFORMAT_S1 1 + +#define I965_VFCOMPONENT_NOSTORE 0 +#define I965_VFCOMPONENT_STORE_SRC 1 +#define I965_VFCOMPONENT_STORE_0 2 +#define I965_VFCOMPONENT_STORE_1_FLT 3 +#define I965_VFCOMPONENT_STORE_1_INT 4 +#define I965_VFCOMPONENT_STORE_VID 5 +#define I965_VFCOMPONENT_STORE_IID 6 +#define I965_VFCOMPONENT_STORE_PID 7 + +#define VE0_VERTEX_BUFFER_INDEX_SHIFT 27 +#define GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT 26 /* for GEN6 */ +#define VE0_VALID (1 << 26) +#define GEN6_VE0_VALID (1 << 25) /* for GEN6 */ +#define VE0_FORMAT_SHIFT 16 +#define VE0_OFFSET_SHIFT 0 +#define VE1_VFCOMPONENT_0_SHIFT 28 +#define VE1_VFCOMPONENT_1_SHIFT 24 +#define VE1_VFCOMPONENT_2_SHIFT 20 +#define VE1_VFCOMPONENT_3_SHIFT 16 +#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT 0 +#define GEN8_VE0_VERTEX_BUFFER_INDEX_SHIFT 26 /* for GEN8 */ +#define GEN8_VE0_VALID (1 << 25) /* for GEN8 */ + +#define VB0_BUFFER_INDEX_SHIFT 27 +#define GEN6_VB0_BUFFER_INDEX_SHIFT 26 +#define VB0_VERTEXDATA (0 << 26) +#define VB0_INSTANCEDATA (1 << 26) +#define GEN6_VB0_VERTEXDATA (0 << 20) +#define GEN6_VB0_INSTANCEDATA (1 << 20) +#define GEN7_VB0_ADDRESS_MODIFYENABLE (1 << 14) +#define VB0_BUFFER_PITCH_SHIFT 0 +#define GEN8_VB0_BUFFER_INDEX_SHIFT 26 +#define GEN8_VB0_MOCS_SHIFT 16 + +#define _3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15) +#define _3DPRIMITIVE_VERTEX_RANDOM (1 << 15) +#define _3DPRIMITIVE_TOPOLOGY_SHIFT 10 +/* DW1 on GEN7*/ +# define GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL (0 << 8) +# define GEN7_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM (1 << 8) + +#define _3DPRIM_POINTLIST 0x01 +#define _3DPRIM_LINELIST 0x02 +#define _3DPRIM_LINESTRIP 0x03 +#define _3DPRIM_TRILIST 0x04 +#define _3DPRIM_TRISTRIP 0x05 +#define _3DPRIM_TRIFAN 0x06 +#define _3DPRIM_QUADLIST 0x07 +#define _3DPRIM_QUADSTRIP 0x08 +#define _3DPRIM_LINELIST_ADJ 0x09 +#define _3DPRIM_LINESTRIP_ADJ 0x0A +#define _3DPRIM_TRILIST_ADJ 0x0B +#define _3DPRIM_TRISTRIP_ADJ 0x0C +#define _3DPRIM_TRISTRIP_REVERSE 0x0D +#define _3DPRIM_POLYGON 0x0E +#define _3DPRIM_RECTLIST 0x0F +#define _3DPRIM_LINELOOP 0x10 +#define _3DPRIM_POINTLIST_BF 0x11 +#define _3DPRIM_LINESTRIP_CONT 0x12 +#define _3DPRIM_LINESTRIP_BF 0x13 +#define _3DPRIM_LINESTRIP_CONT_BF 0x14 +#define _3DPRIM_TRIFAN_NOSTIPPLE 0x15 + +#define GEN8_3DSTATE_VF_INSTANCING CMD(3, 0, 0x49) +#define GEN8_3DSTATE_VF_SGVS CMD(3, 0, 0x4a) +#define GEN8_3DSTATE_VF_TOPOLOGY CMD(3, 0, 0x4b) + +#define I965_TILEWALK_XMAJOR 0 +#define I965_TILEWALK_YMAJOR 1 + +#define SCAN_RASTER_ORDER 0 +#define SCAN_SPECIAL_ORDER 1 + +#define ENTROPY_CAVLD 0 +#define ENTROPY_CABAC 1 + +#define SLICE_TYPE_P 0 +#define SLICE_TYPE_B 1 +#define SLICE_TYPE_I 2 +#define SLICE_TYPE_SP 3 +#define SLICE_TYPE_SI 4 + +#define PRESENT_REF_LIST0 (1 << 0) +#define PRESENT_REF_LIST1 (1 << 1) +#define PRESENT_WEIGHT_OFFSET_L0 (1 << 2) +#define PRESENT_WEIGHT_OFFSET_L1 (1 << 3) + +#define RESIDUAL_DATA_OFFSET 48 + +#define PRESENT_NOMV 0 +#define PRESENT_NOWO 1 +#define PRESENT_MV_WO 3 + +#define SCOREBOARD_STALLING 0 +#define SCOREBOARD_NON_STALLING 1 + +#define SURFACE_FORMAT_YCRCB_NORMAL 0 +#define SURFACE_FORMAT_YCRCB_SWAPUVY 1 +#define SURFACE_FORMAT_YCRCB_SWAPUV 2 +#define SURFACE_FORMAT_YCRCB_SWAPY 3 +#define SURFACE_FORMAT_PLANAR_420_8 4 +#define SURFACE_FORMAT_PLANAR_411_8 5 +#define SURFACE_FORMAT_PLANAR_422_8 6 +#define SURFACE_FORMAT_STMM_DN_STATISTICS 7 +#define SURFACE_FORMAT_R10G10B10A2_UNORM 8 +#define SURFACE_FORMAT_R8G8B8A8_UNORM 9 +#define SURFACE_FORMAT_R8B8_UNORM 10 +#define SURFACE_FORMAT_R8_UNORM 11 +#define SURFACE_FORMAT_Y8_UNORM 12 +#define SURFACE_FORMAT_P010 13 +#define SURFACE_FORMAT_P016 14 + +#define AVS_FILTER_ADAPTIVE_8_TAP 0 +#define AVS_FILTER_NEAREST 1 + +#define IEF_FILTER_COMBO 0 +#define IEF_FILTER_DETAIL 1 + +#define IEF_FILTER_SIZE_3X3 0 +#define IEF_FILTER_SIZE_5X5 1 + +#define MFX_FORMAT_MPEG2 0 +#define MFX_FORMAT_VC1 1 +#define MFX_FORMAT_AVC 2 +#define MFX_FORMAT_JPEG 3 +#define MFX_FORMAT_SVC 4 +#define MFX_FORMAT_VP8 5 + +#define MFX_SHORT_MODE 0 +#define MFX_LONG_MODE 1 + +#define MFX_CODEC_DECODE 0 +#define MFX_CODEC_ENCODE 1 + +#define MFX_QM_AVC_4X4_INTRA_MATRIX 0 +#define MFX_QM_AVC_4X4_INTER_MATRIX 1 +#define MFX_QM_AVC_8x8_INTRA_MATRIX 2 +#define MFX_QM_AVC_8x8_INTER_MATRIX 3 + +#define MFX_QM_MPEG_INTRA_QUANTIZER_MATRIX 0 +#define MFX_QM_MPEG_NON_INTRA_QUANTIZER_MATRIX 1 + +#define MFX_QM_JPEG_LUMA_Y_QUANTIZER_MATRIX 0 +#define MFX_QM_JPEG_CHROMA_CB_QUANTIZER_MATRIX 1 +#define MFX_QM_JPEG_CHROMA_CR_QUANTIZER_MATRIX 2 +#define MFX_QM_JPEG_ALPHA_QUANTIZER_MATRIX 3 /* for new device */ + +#define MFX_HUFFTABLE_ID_Y 0 +#define MFX_HUFFTABLE_ID_UV 1 /* UV on Ivybridge */ + +#define MFD_MODE_VLD 0 +#define MFD_MODE_IT 1 + +#define MFX_SURFACE_YCRCB_NORMAL 0 +#define MFX_SURFACE_YCRCB_SWAPY 3 +#define MFX_SURFACE_PLANAR_420_8 4 +#define MFX_SURFACE_PLANAR_411_8 5 +#define MFX_SURFACE_PLANAR_422_8 6 +#define MFX_SURFACE_R8G8B8A8_UNORM 9 +#define MFX_SURFACE_MONOCHROME 12 + +#define MPEG_I_PICTURE 1 +#define MPEG_P_PICTURE 2 +#define MPEG_B_PICTURE 3 + +#define MPEG_TOP_FIELD 1 +#define MPEG_BOTTOM_FIELD 2 +#define MPEG_FRAME 3 + +#define SUBSAMPLE_YUV400 0 +#define SUBSAMPLE_YUV420 1 +#define SUBSAMPLE_YUV422H 2 +#define SUBSAMPLE_YUV422V 3 +#define SUBSAMPLE_YUV444 4 +#define SUBSAMPLE_YUV411 5 +#define SUBSAMPLE_RGBX 6 +#define JPEG_ENC_SURFACE_NV12 1 +#define JPEG_ENC_SURFACE_UYVY 2 +#define JPEG_ENC_SURFACE_YUY2 3 +#define JPEG_ENC_SURFACE_Y8 4 +#define JPEG_ENC_SURFACE_RGB 5 + +#define JPEG_ENC_MCU_YUV400 0 +#define JPEG_ENC_MCU_YUV420 1 +#define JPEG_ENC_MCU_YUV422H_2Y 2 +#define JPEG_ENC_MCU_RGB 3 + +#define JPEG_ENC_ROUND_QUANT_DEFAULT 0 +#define JPEG_ENC_ROUND_QUANT_MINUS_128TH 1 +#define JPEG_ENC_ROUND_QUANT_PLUS_128TH 2 +#define JPEG_ENC_ROUND_QUANT_MINUS_64TH 3 +#define JPEG_ENC_ROUND_QUANT_PLUS_64TH 4 +#define JPEG_ENC_ROUND_QUANT_MINUS_32TH 5 +#define JPEG_ENC_ROUND_QUANT_MINUS_16TH 6 +#define JPEG_ENC_ROUND_QUANT_MINUS_8TH 7 + + + +#define GEN9_PIPELINE_SELECTION_MASK (0x3 << 8) +#define GEN9_FORCE_MEDIA_AWAKE_MASK (1 << 13) +#define GEN9_FORCE_MEDIA_AWAKE_ON (1 << 5) +#define GEN9_FORCE_MEDIA_AWAKE_OFF (0 << 5) + +#define GEN9_MEDIA_DOP_GATE_MASK (1 << 12) +#define GEN9_MEDIA_DOP_GATE_ON (1 << 4) +#define GEN9_MEDIA_DOP_GATE_OFF (0 << 4) + +#define GEN9_SBE_ACTIVE_COMPONENT_NONE 0 +#define GEN9_SBE_ACTIVE_COMPONENT_XY 1 +#define GEN9_SBE_ACTIVE_COMPONENT_XYZ 2 +#define GEN9_SBE_ACTIVE_COMPONENT_XYZW 3 + +#define HEVC_SLICE_B 0 +#define HEVC_SLICE_P 1 +#define HEVC_SLICE_I 2 + +#define HCP_CODEC_HEVC 0 + +#define HCP_CODEC_VP9 1 +#define HCP_VP9_KEY_FRAME 0 +#define HCP_VP9_INTER_FRAME 1 +#define HCP_VP9_PROFILE0 0 /* 8 bit 420 only */ +#define HCP_VP9_PROFILE2 2 /* 10 bits 420 only */ + +#define HCP_CODEC_SELECT_DECODE 0 +#define HCP_CODEC_SELECT_ENCODE 1 + +#endif /* _I965_DEFINES_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_device_info.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_device_info.c new file mode 100644 index 000000000..4921922af --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_device_info.c @@ -0,0 +1,787 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include +#include "i965_drv_video.h" + +#include +#include +#include +#include + +/* Extra set of chroma formats supported for H.264 decoding (beyond YUV 4:2:0) */ +#define EXTRA_H264_DEC_CHROMA_FORMATS \ + (VA_RT_FORMAT_YUV400) + +/* Extra set of chroma formats supported for JPEG decoding (beyond YUV 4:2:0) */ +#define EXTRA_JPEG_DEC_CHROMA_FORMATS \ + (VA_RT_FORMAT_YUV400 | VA_RT_FORMAT_YUV411 | VA_RT_FORMAT_YUV422 | \ + VA_RT_FORMAT_YUV444) + +/* Extra set of chroma formats supported for JPEG encoding (beyond YUV 4:2:0) */ +#define EXTRA_JPEG_ENC_CHROMA_FORMATS \ + (VA_RT_FORMAT_YUV400| VA_RT_FORMAT_YUV422 | VA_RT_FORMAT_YUV444 | VA_RT_FORMAT_RGB32) + +#define EXTRA_HEVC_DEC_CHROMA_FORMATS \ + (VA_RT_FORMAT_YUV420_10BPP) + +/* Defines VA profile as a 32-bit unsigned integer mask */ +#define VA_PROFILE_MASK(PROFILE) \ + (1U << VAProfile##PROFILE) + +extern struct hw_context *i965_proc_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *g4x_dec_hw_context_init(VADriverContextP, struct object_config *); +extern bool genx_render_init(VADriverContextP); + +static struct hw_codec_info g4x_hw_codec_info = { + .dec_hw_context_init = g4x_dec_hw_context_init, + .enc_hw_context_init = NULL, + .proc_hw_context_init = NULL, + .render_init = genx_render_init, + .post_processing_context_init = NULL, + + .max_width = 2048, + .max_height = 2048, + .min_linear_wpitch = 16, + .min_linear_hpitch = 16, + + .has_mpeg2_decoding = 1, + + .num_filters = 0, +}; + +extern struct hw_context *ironlake_dec_hw_context_init(VADriverContextP, struct object_config *); +extern void i965_post_processing_context_init(VADriverContextP, void *, struct intel_batchbuffer *); + +static struct hw_codec_info ilk_hw_codec_info = { + .dec_hw_context_init = ironlake_dec_hw_context_init, + .enc_hw_context_init = NULL, + .proc_hw_context_init = i965_proc_context_init, + .render_init = genx_render_init, + .post_processing_context_init = i965_post_processing_context_init, + + .max_width = 2048, + .max_height = 2048, + .min_linear_wpitch = 16, + .min_linear_hpitch = 16, + + .has_mpeg2_decoding = 1, + .has_h264_decoding = 1, + .has_vpp = 1, + .has_accelerated_putimage = 1, + + .num_filters = 0, +}; + +static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info); + +extern struct hw_context *gen6_dec_hw_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *gen6_enc_hw_context_init(VADriverContextP, struct object_config *); +static struct hw_codec_info snb_hw_codec_info = { + .dec_hw_context_init = gen6_dec_hw_context_init, + .enc_hw_context_init = gen6_enc_hw_context_init, + .proc_hw_context_init = i965_proc_context_init, + .render_init = genx_render_init, + .post_processing_context_init = i965_post_processing_context_init, + .preinit_hw_codec = gen6_hw_codec_preinit, + + .max_width = 2048, + .max_height = 2048, + .min_linear_wpitch = 16, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + + .num_filters = 2, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_NULL }, + { VAProcFilterDeinterlacing, I965_RING_NULL }, + }, +}; + +static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info); + +extern struct hw_context *gen7_dec_hw_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *gen7_enc_hw_context_init(VADriverContextP, struct object_config *); +static struct hw_codec_info ivb_hw_codec_info = { + .dec_hw_context_init = gen7_dec_hw_context_init, + .enc_hw_context_init = gen7_enc_hw_context_init, + .proc_hw_context_init = i965_proc_context_init, + .render_init = genx_render_init, + .post_processing_context_init = i965_post_processing_context_init, + .preinit_hw_codec = gen7_hw_codec_preinit, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 64, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_mpeg2_encoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + + .num_filters = 2, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_NULL }, + { VAProcFilterDeinterlacing, I965_RING_NULL }, + }, +}; + +static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info); + +extern struct hw_context *gen75_dec_hw_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *gen75_enc_hw_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *gen75_proc_context_init(VADriverContextP, struct object_config *); +static struct hw_codec_info hsw_hw_codec_info = { + .dec_hw_context_init = gen75_dec_hw_context_init, + .enc_hw_context_init = gen75_enc_hw_context_init, + .proc_hw_context_init = gen75_proc_context_init, + .render_init = genx_render_init, + .post_processing_context_init = i965_post_processing_context_init, + .preinit_hw_codec = hsw_hw_codec_preinit, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 64, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | + VA_PROFILE_MASK(H264MultiviewHigh)), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_mpeg2_encoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + .has_h264_mvc_encoding = 1, + + .num_filters = 5, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_VEBOX }, + { VAProcFilterDeinterlacing, I965_RING_VEBOX }, + { VAProcFilterSharpening, I965_RING_NULL }, + { VAProcFilterColorBalance, I965_RING_VEBOX}, + { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX}, + }, +}; + +extern struct hw_context *gen8_dec_hw_context_init(VADriverContextP, struct object_config *); +extern struct hw_context *gen8_enc_hw_context_init(VADriverContextP, struct object_config *); +extern void gen8_post_processing_context_init(VADriverContextP, void *, struct intel_batchbuffer *); +static struct hw_codec_info bdw_hw_codec_info = { + .dec_hw_context_init = gen8_dec_hw_context_init, + .enc_hw_context_init = gen8_enc_hw_context_init, + .proc_hw_context_init = gen75_proc_context_init, + .render_init = gen8_render_init, + .post_processing_context_init = gen8_post_processing_context_init, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 128, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | + VA_PROFILE_MASK(H264MultiviewHigh)), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_mpeg2_encoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + .has_vp8_decoding = 1, + .has_h264_mvc_encoding = 1, + + .num_filters = 5, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_VEBOX }, + { VAProcFilterDeinterlacing, I965_RING_VEBOX }, + { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */ + { VAProcFilterColorBalance, I965_RING_VEBOX}, + { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX}, + }, +}; + +extern struct hw_context *gen9_dec_hw_context_init(VADriverContextP, struct object_config *); +static struct hw_codec_info chv_hw_codec_info = { + .dec_hw_context_init = gen9_dec_hw_context_init, + .enc_hw_context_init = gen8_enc_hw_context_init, + .proc_hw_context_init = gen75_proc_context_init, + .render_init = gen8_render_init, + .post_processing_context_init = gen8_post_processing_context_init, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 128, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | + VA_PROFILE_MASK(H264MultiviewHigh)), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_mpeg2_encoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_jpeg_encoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + .has_vp8_decoding = 1, + .has_vp8_encoding = 1, + .has_h264_mvc_encoding = 1, + .has_hevc_decoding = 1, + + .num_filters = 5, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_VEBOX }, + { VAProcFilterDeinterlacing, I965_RING_VEBOX }, + { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */ + { VAProcFilterColorBalance, I965_RING_VEBOX}, + { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX}, + }, +}; + +extern struct hw_context *gen9_enc_hw_context_init(VADriverContextP, struct object_config *); +extern void gen9_post_processing_context_init(VADriverContextP, void *, struct intel_batchbuffer *); +static struct hw_codec_info skl_hw_codec_info = { + .dec_hw_context_init = gen9_dec_hw_context_init, + .enc_hw_context_init = gen9_enc_hw_context_init, + .proc_hw_context_init = gen75_proc_context_init, + .render_init = gen9_render_init, + .post_processing_context_init = gen9_post_processing_context_init, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 128, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | + VA_PROFILE_MASK(H264MultiviewHigh)), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_mpeg2_encoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_jpeg_encoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + .has_vp8_decoding = 1, + .has_vp8_encoding = 1, + .has_h264_mvc_encoding = 1, + .has_hevc_decoding = 1, + .has_hevc_encoding = 1, + + .num_filters = 5, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_VEBOX }, + { VAProcFilterDeinterlacing, I965_RING_VEBOX }, + { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */ + { VAProcFilterColorBalance, I965_RING_VEBOX}, + { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX}, + }, +}; + + +static struct hw_codec_info bxt_hw_codec_info = { + .dec_hw_context_init = gen9_dec_hw_context_init, + .enc_hw_context_init = gen9_enc_hw_context_init, + .proc_hw_context_init = gen75_proc_context_init, + .render_init = gen9_render_init, + .post_processing_context_init = gen9_post_processing_context_init, + + .max_width = 4096, + .max_height = 4096, + .min_linear_wpitch = 64, + .min_linear_hpitch = 16, + + .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | + VA_PROFILE_MASK(H264MultiviewHigh)), + .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, + .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, + .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS, + .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS, + + .has_mpeg2_decoding = 1, + .has_h264_decoding = 1, + .has_h264_encoding = 1, + .has_vc1_decoding = 1, + .has_jpeg_decoding = 1, + .has_jpeg_encoding = 1, + .has_vpp = 1, + .has_accelerated_getimage = 1, + .has_accelerated_putimage = 1, + .has_tiled_surface = 1, + .has_di_motion_adptive = 1, + .has_di_motion_compensated = 1, + .has_vp8_decoding = 1, + .has_vp8_encoding = 1, + .has_h264_mvc_encoding = 1, + .has_hevc_decoding = 1, + .has_hevc_encoding = 1, + .has_hevc10_decoding = 1, + .has_vp9_decoding = 1, + + .num_filters = 5, + .filters = { + { VAProcFilterNoiseReduction, I965_RING_VEBOX }, + { VAProcFilterDeinterlacing, I965_RING_VEBOX }, + { VAProcFilterSharpening, I965_RING_NULL }, + { VAProcFilterColorBalance, I965_RING_VEBOX}, + { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX}, + }, +}; + + +struct hw_codec_info * +i965_get_codec_info(int devid) +{ + switch (devid) { +#undef CHIPSET +#define CHIPSET(id, family, dev, str) case id: return &family##_hw_codec_info; +#include "i965_pciids.h" + default: + return NULL; + } +} + +static const struct intel_device_info g4x_device_info = { + .gen = 4, + + .urb_size = 384, + .max_wm_threads = 50, /* 10 * 5 */ + + .is_g4x = 1, +}; + +static const struct intel_device_info ilk_device_info = { + .gen = 5, + + .urb_size = 1024, + .max_wm_threads = 72, /* 12 * 6 */ +}; + +static const struct intel_device_info snb_gt1_device_info = { + .gen = 6, + .gt = 1, + + .urb_size = 1024, + .max_wm_threads = 40, +}; + +static const struct intel_device_info snb_gt2_device_info = { + .gen = 6, + .gt = 2, + + .urb_size = 1024, + .max_wm_threads = 80, +}; + +static const struct intel_device_info ivb_gt1_device_info = { + .gen = 7, + .gt = 1, + + .urb_size = 4096, + .max_wm_threads = 48, + + .is_ivybridge = 1, +}; + +static const struct intel_device_info ivb_gt2_device_info = { + .gen = 7, + .gt = 2, + + .urb_size = 4096, + .max_wm_threads = 172, + + .is_ivybridge = 1, +}; + +static const struct intel_device_info byt_device_info = { + .gen = 7, + .gt = 1, + + .urb_size = 4096, + .max_wm_threads = 48, + + .is_ivybridge = 1, + .is_baytrail = 1, +}; + +static const struct intel_device_info hsw_gt1_device_info = { + .gen = 7, + .gt = 1, + + .urb_size = 4096, + .max_wm_threads = 102, + + .is_haswell = 1, +}; + +static const struct intel_device_info hsw_gt2_device_info = { + .gen = 7, + .gt = 2, + + .urb_size = 4096, + .max_wm_threads = 204, + + .is_haswell = 1, +}; + +static const struct intel_device_info hsw_gt3_device_info = { + .gen = 7, + .gt = 3, + + .urb_size = 4096, + .max_wm_threads = 408, + + .is_haswell = 1, +}; + +static const struct intel_device_info bdw_device_info = { + .gen = 8, + + .urb_size = 4096, + .max_wm_threads = 64, /* per PSD */ +}; + +static const struct intel_device_info chv_device_info = { + .gen = 8, + + .urb_size = 4096, + .max_wm_threads = 64, /* per PSD */ + + .is_cherryview = 1, +}; + +static const struct intel_device_info skl_device_info = { + .gen = 9, + + .urb_size = 4096, + .max_wm_threads = 64, /* per PSD */ +}; + +static const struct intel_device_info bxt_device_info = { + .gen = 9, + + .urb_size = 4096, + .max_wm_threads = 64, /* per PSD */ + .is_broxton = 1, +}; + +const struct intel_device_info * +i965_get_device_info(int devid) +{ + switch (devid) { +#undef CHIPSET +#define CHIPSET(id, family, dev, str) case id: return &dev##_device_info; +#include "i965_pciids.h" + default: + return NULL; + } +} + +static void cpuid(unsigned int op, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + __cpuid_count(op, 0, *eax, *ebx, *ecx, *edx); +} + +/* + * This function doesn't check the length. And the caller should + * assure that the length of input string should be greater than 48. + */ +static int intel_driver_detect_cpustring(char *model_id) +{ + uint32_t *rdata; + + if (model_id == NULL) + return -EINVAL; + + rdata = (uint32_t *)model_id; + + /* obtain the max supported extended CPUID info */ + cpuid(0x80000000, &rdata[0], &rdata[1], &rdata[2], &rdata[3]); + + /* If the max extended CPUID info is less than 0x80000004, fail */ + if (rdata[0] < 0x80000004) + return -EINVAL; + + /* obtain the CPUID string */ + cpuid(0x80000002, &rdata[0], &rdata[1], &rdata[2], &rdata[3]); + cpuid(0x80000003, &rdata[4], &rdata[5], &rdata[6], &rdata[7]); + cpuid(0x80000004, &rdata[8], &rdata[9], &rdata[10], &rdata[11]); + + *(model_id + 48) = '\0'; + return 0; +} + +/* + * the hook_list for HSW. + * It is captured by /proc/cpuinfo and the space character is stripped. + */ +const static char *hsw_cpu_hook_list[] = { +"Intel(R)Pentium(R)3556U", +"Intel(R)Pentium(R)3560Y", +"Intel(R)Pentium(R)3550M", +"Intel(R)Celeron(R)2980U", +"Intel(R)Celeron(R)2955U", +"Intel(R)Celeron(R)2950M", +}; + +static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info) +{ + char model_string[64]; + char *model_ptr, *tmp_ptr; + int i, model_len, list_len; + bool found; + + memset(model_string, 0, sizeof(model_string)); + + /* If it can't detect cpu model_string, leave it alone */ + if (intel_driver_detect_cpustring(model_string)) + return; + + /* strip the cpufreq info */ + model_ptr = model_string; + tmp_ptr = strstr(model_ptr, "@"); + + if (tmp_ptr) + *tmp_ptr = '\0'; + + /* strip the space character and convert to the lower case */ + model_ptr = model_string; + model_len = strlen(model_string); + for (i = 0; i < model_len; i++) { + if (model_string[i] != ' ') { + *model_ptr = model_string[i]; + model_ptr++; + } + } + *model_ptr = '\0'; + + found = false; + list_len = sizeof(hsw_cpu_hook_list) / sizeof(char *); + model_len = strlen(model_string); + for (i = 0; i < list_len; i++) { + model_ptr = (char *)hsw_cpu_hook_list[i]; + + if (strlen(model_ptr) != model_len) + continue; + + if (strncasecmp(model_string, model_ptr, model_len) == 0) { + found = true; + break; + } + } + + if (found) { + codec_info->has_h264_encoding = 0; + codec_info->has_h264_mvc_encoding = 0; + codec_info->has_mpeg2_encoding = 0; + } + return; +} + +/* + * the hook_list for Sandybride. + * It is captured by /proc/cpuinfo and the space character is stripped. + */ +const static char *gen6_cpu_hook_list[] = { +"Intel(R)Celeron(R)CPU847", +"Intel(R)Celeron(R)CPU867", +}; + +static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info) +{ + char model_string[64]; + char *model_ptr, *tmp_ptr; + int i, model_len, list_len; + bool found; + + memset(model_string, 0, sizeof(model_string)); + + /* If it can't detect cpu model_string, leave it alone */ + if (intel_driver_detect_cpustring(model_string)) + return; + + /* strip the cpufreq info */ + model_ptr = model_string; + tmp_ptr = strstr(model_ptr, "@"); + + if (tmp_ptr) + *tmp_ptr = '\0'; + + /* strip the space character and convert to the lower case */ + model_ptr = model_string; + model_len = strlen(model_string); + for (i = 0; i < model_len; i++) { + if (model_string[i] != ' ') { + *model_ptr = model_string[i]; + model_ptr++; + } + } + *model_ptr = '\0'; + + found = false; + list_len = sizeof(gen6_cpu_hook_list) / sizeof(char *); + model_len = strlen(model_string); + for (i = 0; i < list_len; i++) { + model_ptr = (char *)gen6_cpu_hook_list[i]; + + if (strlen(model_ptr) != model_len) + continue; + + if (strncasecmp(model_string, model_ptr, model_len) == 0) { + found = true; + break; + } + } + + if (found) { + codec_info->has_h264_encoding = 0; + } + return; +} + +/* + * the hook_list for Ivybridge. + * It is captured by /proc/cpuinfo and the space character is stripped. + */ +const static char *gen7_cpu_hook_list[] = { +"Intel(R)Celeron(R)CPU1007U", +}; + +static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info) +{ + char model_string[64]; + char *model_ptr, *tmp_ptr; + int i, model_len, list_len; + bool found; + + memset(model_string, 0, sizeof(model_string)); + + /* If it can't detect cpu model_string, leave it alone */ + if (intel_driver_detect_cpustring(model_string)) + return; + + /* strip the cpufreq info */ + model_ptr = model_string; + tmp_ptr = strstr(model_ptr, "@"); + + if (tmp_ptr) + *tmp_ptr = '\0'; + + /* strip the space character and convert to the lower case */ + model_ptr = model_string; + model_len = strlen(model_string); + for (i = 0; i < model_len; i++) { + if (model_string[i] != ' ') { + *model_ptr = model_string[i]; + model_ptr++; + } + } + *model_ptr = '\0'; + + found = false; + list_len = sizeof(gen7_cpu_hook_list) / sizeof(char *); + model_len = strlen(model_string); + for (i = 0; i < list_len; i++) { + model_ptr = (char *)gen7_cpu_hook_list[i]; + + if (strlen(model_ptr) != model_len) + continue; + + if (strncasecmp(model_string, model_ptr, model_len) == 0) { + found = true; + break; + } + } + + if (found) { + codec_info->has_h264_encoding = 0; + codec_info->has_mpeg2_encoding = 0; + } + return; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.c new file mode 100644 index 000000000..f1afcaad4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.c @@ -0,0 +1,6589 @@ +/* + * Copyright ?2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#include "sysdeps.h" +#include + +#ifdef HAVE_VA_X11 +# include "i965_output_dri.h" +#endif + +#ifdef HAVE_VA_WAYLAND +# include "i965_output_wayland.h" +#endif + +#include "intel_version.h" +#include "intel_driver.h" +#include "intel_memman.h" +#include "intel_batchbuffer.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder.h" +#include "i965_encoder.h" + +#define CONFIG_ID_OFFSET 0x01000000 +#define CONTEXT_ID_OFFSET 0x02000000 +#define SURFACE_ID_OFFSET 0x04000000 +#define BUFFER_ID_OFFSET 0x08000000 +#define IMAGE_ID_OFFSET 0x0a000000 +#define SUBPIC_ID_OFFSET 0x10000000 + +#define HAS_MPEG2_DECODING(ctx) ((ctx)->codec_info->has_mpeg2_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_MPEG2_ENCODING(ctx) ((ctx)->codec_info->has_mpeg2_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_H264_DECODING(ctx) ((ctx)->codec_info->has_h264_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_H264_ENCODING(ctx) ((ctx)->codec_info->has_h264_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_VC1_DECODING(ctx) ((ctx)->codec_info->has_vc1_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_JPEG_DECODING(ctx) ((ctx)->codec_info->has_jpeg_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_JPEG_ENCODING(ctx) ((ctx)->codec_info->has_jpeg_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_VPP(ctx) ((ctx)->codec_info->has_vpp) + +#define HAS_ACCELERATED_GETIMAGE(ctx) ((ctx)->codec_info->has_accelerated_getimage) + +#define HAS_ACCELERATED_PUTIMAGE(ctx) ((ctx)->codec_info->has_accelerated_putimage) + +#define HAS_TILED_SURFACE(ctx) ((ctx)->codec_info->has_tiled_surface) + +#define HAS_VP8_DECODING(ctx) ((ctx)->codec_info->has_vp8_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_VP8_ENCODING(ctx) ((ctx)->codec_info->has_vp8_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_H264_MVC_DECODING(ctx) \ + (HAS_H264_DECODING(ctx) && (ctx)->codec_info->h264_mvc_dec_profiles) + +#define HAS_H264_MVC_DECODING_PROFILE(ctx, profile) \ + (HAS_H264_MVC_DECODING(ctx) && \ + ((ctx)->codec_info->h264_mvc_dec_profiles & (1U << profile))) + +#define HAS_H264_MVC_ENCODING(ctx) ((ctx)->codec_info->has_h264_mvc_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_HEVC_DECODING(ctx) ((ctx)->codec_info->has_hevc_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_HEVC_ENCODING(ctx) ((ctx)->codec_info->has_hevc_encoding && \ + (ctx)->intel.has_bsd) + +#define HAS_VP9_DECODING(ctx) ((ctx)->codec_info->has_vp9_decoding && \ + (ctx)->intel.has_bsd) + +#define HAS_HEVC10_DECODING(ctx) ((ctx)->codec_info->has_hevc10_decoding && \ + (ctx)->intel.has_bsd) + +static int get_sampling_from_fourcc(unsigned int fourcc); + +/* Check whether we are rendering to X11 (VA/X11 or VA/GLX API) */ +#define IS_VA_X11(ctx) \ + (((ctx)->display_type & VA_DISPLAY_MAJOR_MASK) == VA_DISPLAY_X11) + +/* Check whether we are rendering to Wayland */ +#define IS_VA_WAYLAND(ctx) \ + (((ctx)->display_type & VA_DISPLAY_MAJOR_MASK) == VA_DISPLAY_WAYLAND) + +#define I965_BIT 1 +#define I965_2BITS (I965_BIT << 1) +#define I965_4BITS (I965_BIT << 2) +#define I965_8BITS (I965_BIT << 3) +#define I965_16BITS (I965_BIT << 4) +#define I965_32BITS (I965_BIT << 5) + +#define PLANE_0 0 +#define PLANE_1 1 +#define PLANE_2 2 + +#define OFFSET_0 0 +#define OFFSET_4 4 +#define OFFSET_8 8 +#define OFFSET_16 16 +#define OFFSET_24 24 + +/* hfactor, vfactor, num_planes, bpp[], num_components, components[] */ +#define I_NV12 2, 2, 2, {I965_8BITS, I965_4BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_1, OFFSET_8} } +#define I_I420 2, 2, 3, {I965_8BITS, I965_2BITS, I965_2BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } +#define I_IYUV I_I420 +#define I_IMC3 I_I420 +#define I_YV12 2, 2, 3, {I965_8BITS, I965_2BITS, I965_2BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_2, OFFSET_0}, {PLANE_1, OFFSET_0} } +#define I_IMC1 I_YV12 + +#define I_P010 2, 2, 2, {I965_16BITS, I965_8BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_1, OFFSET_16} } + +#define I_422H 2, 1, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } +#define I_422V 1, 2, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } +#define I_YV16 2, 1, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_2, OFFSET_0}, {PLANE_1, OFFSET_0} } +#define I_YUY2 2, 1, 1, {I965_16BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_24} } +#define I_UYVY 2, 1, 1, {I965_16BITS}, 3, { {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_16} } + +#define I_444P 1, 1, 3, {I965_8BITS, I965_8BITS, I965_8BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } + +#define I_411P 4, 1, 3, {I965_8BITS, I965_2BITS, I965_2BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } + +#define I_Y800 1, 1, 1, {I965_8BITS}, 1, { {PLANE_0, OFFSET_0} } + +#define I_RGBA 1, 1, 1, {I965_32BITS}, 4, { {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_16}, {PLANE_0, OFFSET_24} } +#define I_RGBX 1, 1, 1, {I965_32BITS}, 3, { {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_16} } +#define I_BGRA 1, 1, 1, {I965_32BITS}, 4, { {PLANE_0, OFFSET_16}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_24} } +#define I_BGRX 1, 1, 1, {I965_32BITS}, 3, { {PLANE_0, OFFSET_16}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_0} } + +#define I_ARGB 1, 1, 1, {I965_32BITS}, 4, { {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_16}, {PLANE_0, OFFSET_24}, {PLANE_0, OFFSET_0} } +#define I_ABGR 1, 1, 1, {I965_32BITS}, 4, { {PLANE_0, OFFSET_24}, {PLANE_0, OFFSET_16}, {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_0} } + +#define I_IA88 1, 1, 1, {I965_16BITS}, 2, { {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_8} } +#define I_AI88 1, 1, 1, {I965_16BITS}, 2, { {PLANE_0, OFFSET_8}, {PLANE_0, OFFSET_0} } + +#define I_IA44 1, 1, 1, {I965_8BITS}, 2, { {PLANE_0, OFFSET_0}, {PLANE_0, OFFSET_4} } +#define I_AI44 1, 1, 1, {I965_8BITS}, 2, { {PLANE_0, OFFSET_4}, {PLANE_0, OFFSET_0} } + +/* flag */ +#define I_S 1 +#define I_I 2 +#define I_SI (I_S | I_I) + +#define DEF_FOUCC_INFO(FOURCC, FORMAT, SUB, FLAG) { VA_FOURCC_##FOURCC, I965_COLOR_##FORMAT, SUBSAMPLE_##SUB, FLAG, I_##FOURCC } +#define DEF_YUV(FOURCC, SUB, FLAG) DEF_FOUCC_INFO(FOURCC, YUV, SUB, FLAG) +#define DEF_RGB(FOURCC, SUB, FLAG) DEF_FOUCC_INFO(FOURCC, RGB, SUB, FLAG) +#define DEF_INDEX(FOURCC, SUB, FLAG) DEF_FOUCC_INFO(FOURCC, INDEX, SUB, FLAG) + +static const i965_fourcc_info i965_fourcc_infos[] = { + DEF_YUV(NV12, YUV420, I_SI), + DEF_YUV(I420, YUV420, I_SI), + DEF_YUV(IYUV, YUV420, I_S), + DEF_YUV(IMC3, YUV420, I_S), + DEF_YUV(YV12, YUV420, I_SI), + DEF_YUV(IMC1, YUV420, I_S), + + DEF_YUV(P010, YUV420, I_SI), + + DEF_YUV(422H, YUV422H, I_SI), + DEF_YUV(422V, YUV422V, I_S), + DEF_YUV(YV16, YUV422H, I_S), + DEF_YUV(YUY2, YUV422H, I_SI), + DEF_YUV(UYVY, YUV422H, I_SI), + + DEF_YUV(444P, YUV444, I_S), + + DEF_YUV(411P, YUV411, I_S), + + DEF_YUV(Y800, YUV400, I_S), + + DEF_RGB(RGBA, RGBX, I_SI), + DEF_RGB(RGBX, RGBX, I_SI), + DEF_RGB(BGRA, RGBX, I_SI), + DEF_RGB(BGRX, RGBX, I_SI), + + DEF_RGB(ARGB, RGBX, I_I), + DEF_RGB(ABGR, RGBX, I_I), + + DEF_INDEX(IA88, RGBX, I_I), + DEF_INDEX(AI88, RGBX, I_I), + + DEF_INDEX(IA44, RGBX, I_I), + DEF_INDEX(AI44, RGBX, I_I) +}; + +const i965_fourcc_info * +get_fourcc_info(unsigned int fourcc) +{ + unsigned int i; + + for (i = 0; ARRAY_ELEMS(i965_fourcc_infos); i++) { + const i965_fourcc_info * const info = &i965_fourcc_infos[i]; + + if (info->fourcc == fourcc) + return info; + } + + return NULL; +} + +static int +get_bpp_from_fourcc(unsigned int fourcc) +{ + const i965_fourcc_info *info = get_fourcc_info(fourcc); + unsigned int i = 0; + unsigned int bpp = 0; + + if (!info) + return 0; + + for (i = 0; i < info->num_planes; i++) + bpp += info->bpp[i]; + + return bpp; +} + +enum { + I965_SURFACETYPE_RGBA = 1, + I965_SURFACETYPE_YUV, + I965_SURFACETYPE_INDEXED +}; + +/* List of supported display attributes */ +static const VADisplayAttribute i965_display_attributes[] = { + { + VADisplayAttribBrightness, + -100, 100, DEFAULT_BRIGHTNESS, + VA_DISPLAY_ATTRIB_GETTABLE | VA_DISPLAY_ATTRIB_SETTABLE + }, + + { + VADisplayAttribContrast, + 0, 100, DEFAULT_CONTRAST, + VA_DISPLAY_ATTRIB_GETTABLE | VA_DISPLAY_ATTRIB_SETTABLE + }, + + { + VADisplayAttribHue, + -180, 180, DEFAULT_HUE, + VA_DISPLAY_ATTRIB_GETTABLE | VA_DISPLAY_ATTRIB_SETTABLE + }, + + { + VADisplayAttribSaturation, + 0, 100, DEFAULT_SATURATION, + VA_DISPLAY_ATTRIB_GETTABLE | VA_DISPLAY_ATTRIB_SETTABLE + }, + + { + VADisplayAttribRotation, + 0, 3, VA_ROTATION_NONE, + VA_DISPLAY_ATTRIB_GETTABLE|VA_DISPLAY_ATTRIB_SETTABLE + }, +}; + +/* List of supported image formats */ +typedef struct { + unsigned int type; + VAImageFormat va_format; +} i965_image_format_map_t; + +static const i965_image_format_map_t +i965_image_formats_map[I965_MAX_IMAGE_FORMATS + 1] = { + { I965_SURFACETYPE_YUV, + { VA_FOURCC_YV12, VA_LSB_FIRST, 12, } }, + { I965_SURFACETYPE_YUV, + { VA_FOURCC_I420, VA_LSB_FIRST, 12, } }, + { I965_SURFACETYPE_YUV, + { VA_FOURCC_NV12, VA_LSB_FIRST, 12, } }, + { I965_SURFACETYPE_YUV, + { VA_FOURCC_YUY2, VA_LSB_FIRST, 16, } }, + { I965_SURFACETYPE_YUV, + { VA_FOURCC_UYVY, VA_LSB_FIRST, 16, } }, + { I965_SURFACETYPE_YUV, + { VA_FOURCC_422H, VA_LSB_FIRST, 16, } }, + { I965_SURFACETYPE_RGBA, + { VA_FOURCC_RGBX, VA_LSB_FIRST, 32, 24, 0x000000ff, 0x0000ff00, 0x00ff0000 } }, + { I965_SURFACETYPE_RGBA, + { VA_FOURCC_BGRX, VA_LSB_FIRST, 32, 24, 0x00ff0000, 0x0000ff00, 0x000000ff } }, +}; + +/* List of supported subpicture formats */ +typedef struct { + unsigned int type; + unsigned int format; + VAImageFormat va_format; + unsigned int va_flags; +} i965_subpic_format_map_t; + +#define COMMON_SUBPICTURE_FLAGS \ + (VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD| \ + VA_SUBPICTURE_GLOBAL_ALPHA) + +static const i965_subpic_format_map_t +i965_subpic_formats_map[I965_MAX_SUBPIC_FORMATS + 1] = { + { I965_SURFACETYPE_INDEXED, I965_SURFACEFORMAT_P4A4_UNORM, + { VA_FOURCC_IA44, VA_MSB_FIRST, 8, }, + COMMON_SUBPICTURE_FLAGS }, + { I965_SURFACETYPE_INDEXED, I965_SURFACEFORMAT_A4P4_UNORM, + { VA_FOURCC_AI44, VA_MSB_FIRST, 8, }, + COMMON_SUBPICTURE_FLAGS }, + { I965_SURFACETYPE_INDEXED, I965_SURFACEFORMAT_P8A8_UNORM, + { VA_FOURCC_IA88, VA_MSB_FIRST, 16, }, + COMMON_SUBPICTURE_FLAGS }, + { I965_SURFACETYPE_INDEXED, I965_SURFACEFORMAT_A8P8_UNORM, + { VA_FOURCC_AI88, VA_MSB_FIRST, 16, }, + COMMON_SUBPICTURE_FLAGS }, + { I965_SURFACETYPE_RGBA, I965_SURFACEFORMAT_B8G8R8A8_UNORM, + { VA_FOURCC_BGRA, VA_LSB_FIRST, 32, + 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, + COMMON_SUBPICTURE_FLAGS }, + { I965_SURFACETYPE_RGBA, I965_SURFACEFORMAT_R8G8B8A8_UNORM, + { VA_FOURCC_RGBA, VA_LSB_FIRST, 32, + 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }, + COMMON_SUBPICTURE_FLAGS }, +}; + +static const i965_subpic_format_map_t * +get_subpic_format(const VAImageFormat *va_format) +{ + unsigned int i; + for (i = 0; i965_subpic_formats_map[i].type != 0; i++) { + const i965_subpic_format_map_t * const m = &i965_subpic_formats_map[i]; + if (m->va_format.fourcc == va_format->fourcc && + (m->type == I965_SURFACETYPE_RGBA ? + (m->va_format.byte_order == va_format->byte_order && + m->va_format.red_mask == va_format->red_mask && + m->va_format.green_mask == va_format->green_mask && + m->va_format.blue_mask == va_format->blue_mask && + m->va_format.alpha_mask == va_format->alpha_mask) : 1)) + return m; + } + return NULL; +} + +/* Checks whether the surface is in busy state */ +static bool +is_surface_busy(struct i965_driver_data *i965, + struct object_surface *obj_surface) +{ + assert(obj_surface != NULL); + + if (obj_surface->locked_image_id != VA_INVALID_ID) + return true; + if (obj_surface->derived_image_id != VA_INVALID_ID) + return true; + return false; +} + +/* Checks whether the image is in busy state */ +static bool +is_image_busy(struct i965_driver_data *i965, struct object_image *obj_image, VASurfaceID surface) +{ + struct object_buffer *obj_buffer; + + assert(obj_image != NULL); + + if (obj_image->derived_surface != VA_INVALID_ID && + obj_image->derived_surface == surface) + return true; + + obj_buffer = BUFFER(obj_image->image.buf); + if (obj_buffer && obj_buffer->export_refcount > 0) + return true; + return false; +} + +#define I965_PACKED_HEADER_BASE 0 +#define I965_SEQ_PACKED_HEADER_BASE 0 +#define I965_SEQ_PACKED_HEADER_END 2 +#define I965_PIC_PACKED_HEADER_BASE 2 +#define I965_PACKED_MISC_HEADER_BASE 4 + +int +va_enc_packed_type_to_idx(int packed_type) +{ + int idx = 0; + + if (packed_type & VAEncPackedHeaderMiscMask) { + idx = I965_PACKED_MISC_HEADER_BASE; + packed_type = (~VAEncPackedHeaderMiscMask & packed_type); + ASSERT_RET(packed_type > 0, 0); + idx += (packed_type - 1); + } else { + idx = I965_PACKED_HEADER_BASE; + + switch (packed_type) { + case VAEncPackedHeaderSequence: + idx = I965_SEQ_PACKED_HEADER_BASE + 0; + break; + + case VAEncPackedHeaderPicture: + idx = I965_PIC_PACKED_HEADER_BASE + 0; + break; + + case VAEncPackedHeaderSlice: + idx = I965_PIC_PACKED_HEADER_BASE + 1; + break; + + default: + /* Should not get here */ + ASSERT_RET(0, 0); + break; + } + } + + ASSERT_RET(idx < 5, 0); + return idx; +} + +#define CALL_VTABLE(vawr, status, param) status = (vawr->vtable->param) + +static VAStatus +i965_surface_wrapper(VADriverContextP ctx, VASurfaceID surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = SURFACE(surface); + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface) { + return VA_STATUS_ERROR_INVALID_SURFACE; + } + + if (obj_surface->wrapper_surface != VA_INVALID_ID) { + /* the wrapped surface already exists. just return it */ + return va_status; + } + + if (obj_surface->fourcc == 0) + i965_check_alloc_surface_bo(ctx, obj_surface, + 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + /* + * TBD: Support more surface formats. + * Currently only NV12 is support as NV12 is used by decoding. + */ + if (obj_surface->fourcc != VA_FOURCC_NV12 ) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if ((i965->wrapper_pdrvctx == NULL) || + (obj_surface->bo == NULL)) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + { + int fd_handle; + VASurfaceAttrib attrib_list[2]; + VASurfaceAttribExternalBuffers buffer_descriptor; + VAGenericID wrapper_surface; + +// if (drm_intel_bo_gem_export_to_prime(obj_surface->bo, &fd_handle) != 0) + return VA_STATUS_ERROR_OPERATION_FAILED; + + obj_surface->exported_primefd = fd_handle; + + memset(&attrib_list, 0, sizeof(attrib_list)); + memset(&buffer_descriptor, 0, sizeof(buffer_descriptor)); + + attrib_list[0].type = VASurfaceAttribExternalBufferDescriptor; + attrib_list[0].flags = VA_SURFACE_ATTRIB_SETTABLE; + attrib_list[0].value.value.p = &buffer_descriptor; + attrib_list[0].value.type = VAGenericValueTypePointer; + + attrib_list[1].type = VASurfaceAttribMemoryType; + attrib_list[1].flags = VA_SURFACE_ATTRIB_SETTABLE; + attrib_list[1].value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME; + attrib_list[1].value.type = VAGenericValueTypeInteger; + + buffer_descriptor.num_buffers = 1; + buffer_descriptor.num_planes = 2; + buffer_descriptor.width = obj_surface->orig_width; + buffer_descriptor.height = obj_surface->orig_height; + buffer_descriptor.pixel_format = obj_surface->fourcc; + buffer_descriptor.data_size = obj_surface->size; + buffer_descriptor.pitches[0] = obj_surface->width; + buffer_descriptor.pitches[1] = obj_surface->cb_cr_pitch; + buffer_descriptor.offsets[0] = 0; + buffer_descriptor.offsets[1] = obj_surface->width * obj_surface->height; + buffer_descriptor.buffers = (void *)&fd_handle; + + CALL_VTABLE(i965->wrapper_pdrvctx, va_status, + vaCreateSurfaces2(i965->wrapper_pdrvctx, + VA_RT_FORMAT_YUV420, + obj_surface->orig_width, + obj_surface->orig_height, + &wrapper_surface, 1, + attrib_list, 2)); + + if (va_status == VA_STATUS_SUCCESS) { + obj_surface->wrapper_surface = wrapper_surface; + } else { + /* This needs to be checked */ + va_status = VA_STATUS_ERROR_OPERATION_FAILED; + } + return va_status; + } + +} + +VAStatus +i965_QueryConfigProfiles(VADriverContextP ctx, + VAProfile *profile_list, /* out */ + int *num_profiles) /* out */ +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + int i = 0; + + if (HAS_MPEG2_DECODING(i965) || + HAS_MPEG2_ENCODING(i965)) { + profile_list[i++] = VAProfileMPEG2Simple; + profile_list[i++] = VAProfileMPEG2Main; + } + + if (HAS_H264_DECODING(i965) || + HAS_H264_ENCODING(i965)) { + profile_list[i++] = VAProfileH264ConstrainedBaseline; + profile_list[i++] = VAProfileH264Main; + profile_list[i++] = VAProfileH264High; + } + if (HAS_H264_MVC_DECODING_PROFILE(i965, VAProfileH264MultiviewHigh)) + profile_list[i++] = VAProfileH264MultiviewHigh; + if (HAS_H264_MVC_DECODING_PROFILE(i965, VAProfileH264StereoHigh)) + profile_list[i++] = VAProfileH264StereoHigh; + + if (HAS_VC1_DECODING(i965)) { + profile_list[i++] = VAProfileVC1Simple; + profile_list[i++] = VAProfileVC1Main; + profile_list[i++] = VAProfileVC1Advanced; + } + + if (HAS_VPP(i965)) { + profile_list[i++] = VAProfileNone; + } + + if (HAS_JPEG_DECODING(i965) || + HAS_JPEG_ENCODING(i965)) { + profile_list[i++] = VAProfileJPEGBaseline; + } + + if (HAS_VP8_DECODING(i965) || + HAS_VP8_ENCODING(i965)) { + profile_list[i++] = VAProfileVP8Version0_3; + } + + if (HAS_H264_MVC_ENCODING(i965)) { + profile_list[i++] = VAProfileH264MultiviewHigh; + profile_list[i++] = VAProfileH264StereoHigh; + } + + if (HAS_HEVC_DECODING(i965)|| + HAS_HEVC_ENCODING(i965)) { + profile_list[i++] = VAProfileHEVCMain; + } + + if (HAS_HEVC10_DECODING(i965)) { + profile_list[i++] = VAProfileHEVCMain10; + } + + if(HAS_VP9_DECODING(i965)) { + profile_list[i++] = VAProfileVP9Profile0; + } + + if (i965->wrapper_pdrvctx) { + VAProfile wrapper_list[4]; + int wrapper_num; + VADriverContextP pdrvctx; + VAStatus va_status; + + pdrvctx = i965->wrapper_pdrvctx; + CALL_VTABLE(pdrvctx, va_status, + vaQueryConfigProfiles(pdrvctx, + wrapper_list, &wrapper_num)); + + if (va_status == VA_STATUS_SUCCESS) { + int j; + for (j = 0; j < wrapper_num; j++) + if (wrapper_list[j] != VAProfileNone) + profile_list[i++] = wrapper_list[j]; + } + } + + /* If the assert fails then I965_MAX_PROFILES needs to be bigger */ + ASSERT_RET(i <= I965_MAX_PROFILES, VA_STATUS_ERROR_OPERATION_FAILED); + *num_profiles = i; + + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_QueryConfigEntrypoints(VADriverContextP ctx, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints) /* out */ +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + int n = 0; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + if (HAS_MPEG2_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_MPEG2_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncSlice; + + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + if (HAS_H264_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_H264_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncSlice; + + break; + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + if (HAS_H264_MVC_DECODING_PROFILE(i965, profile)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_H264_MVC_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncSlice; + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + if (HAS_VC1_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + break; + + case VAProfileNone: + if (HAS_VPP(i965)) + entrypoint_list[n++] = VAEntrypointVideoProc; + break; + + case VAProfileJPEGBaseline: + if (HAS_JPEG_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_JPEG_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncPicture; + break; + + case VAProfileVP8Version0_3: + if (HAS_VP8_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_VP8_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncSlice; + + break; + + case VAProfileHEVCMain: + if (HAS_HEVC_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (HAS_HEVC_ENCODING(i965)) + entrypoint_list[n++] = VAEntrypointEncSlice; + + break; + + case VAProfileHEVCMain10: + if (HAS_HEVC10_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + break; + + case VAProfileVP9Profile0: + if(HAS_VP9_DECODING(i965)) + entrypoint_list[n++] = VAEntrypointVLD; + + if (i965->wrapper_pdrvctx) { + VAStatus va_status = VA_STATUS_SUCCESS; + VADriverContextP pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, va_status, + vaQueryConfigEntrypoints(pdrvctx, profile, + entrypoint_list, + num_entrypoints)); + return va_status; + } + + break; + + default: + break; + } + + /* If the assert fails then I965_MAX_ENTRYPOINTS needs to be bigger */ + ASSERT_RET(n <= I965_MAX_ENTRYPOINTS, VA_STATUS_ERROR_OPERATION_FAILED); + *num_entrypoints = n; + return n > 0 ? VA_STATUS_SUCCESS : VA_STATUS_ERROR_UNSUPPORTED_PROFILE; +} + +static VAStatus +i965_validate_config(VADriverContextP ctx, VAProfile profile, + VAEntrypoint entrypoint) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + VAStatus va_status; + + /* Validate profile & entrypoint */ + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + if ((HAS_MPEG2_DECODING(i965) && entrypoint == VAEntrypointVLD) || + (HAS_MPEG2_ENCODING(i965) && entrypoint == VAEntrypointEncSlice)) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + if ((HAS_H264_DECODING(i965) && entrypoint == VAEntrypointVLD) || + (HAS_H264_ENCODING(i965) && entrypoint == VAEntrypointEncSlice)) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + if (HAS_VC1_DECODING(i965) && entrypoint == VAEntrypointVLD) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileNone: + if (HAS_VPP(i965) && VAEntrypointVideoProc == entrypoint) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileJPEGBaseline: + if ((HAS_JPEG_DECODING(i965) && entrypoint == VAEntrypointVLD) || + (HAS_JPEG_ENCODING(i965) && entrypoint == VAEntrypointEncPicture)) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileVP8Version0_3: + if ((HAS_VP8_DECODING(i965) && entrypoint == VAEntrypointVLD) || + (HAS_VP8_ENCODING(i965) && entrypoint == VAEntrypointEncSlice)) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + if ((HAS_H264_MVC_DECODING_PROFILE(i965, profile) && + entrypoint == VAEntrypointVLD) || + (HAS_H264_MVC_ENCODING(i965) && entrypoint == VAEntrypointEncSlice)) { + va_status = VA_STATUS_SUCCESS; + } else { + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + + break; + + case VAProfileHEVCMain: + if ((HAS_HEVC_DECODING(i965) && (entrypoint == VAEntrypointVLD))|| + (HAS_HEVC_ENCODING(i965) && (entrypoint == VAEntrypointEncSlice))) + va_status = VA_STATUS_SUCCESS; + else + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + + break; + + case VAProfileHEVCMain10: + if (HAS_HEVC10_DECODING(i965) && (entrypoint == VAEntrypointVLD)) + va_status = VA_STATUS_SUCCESS; + else + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + + break; + + case VAProfileVP9Profile0: + if ((HAS_VP9_DECODING(i965)) && (entrypoint == VAEntrypointVLD)) + va_status = VA_STATUS_SUCCESS; + else if (i965->wrapper_pdrvctx) + va_status = VA_STATUS_SUCCESS; + else + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + break; + + default: + va_status = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + return va_status; +} + +static uint32_t +i965_get_default_chroma_formats(VADriverContextP ctx, VAProfile profile, + VAEntrypoint entrypoint) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + uint32_t chroma_formats = VA_RT_FORMAT_YUV420; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + if (HAS_H264_DECODING(i965) && entrypoint == VAEntrypointVLD) + chroma_formats |= i965->codec_info->h264_dec_chroma_formats; + break; + + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + if (HAS_H264_MVC_DECODING(i965) && entrypoint == VAEntrypointVLD) + chroma_formats |= i965->codec_info->h264_dec_chroma_formats; + break; + + case VAProfileJPEGBaseline: + if (HAS_JPEG_DECODING(i965) && entrypoint == VAEntrypointVLD) + chroma_formats |= i965->codec_info->jpeg_dec_chroma_formats; + if (HAS_JPEG_ENCODING(i965) && entrypoint == VAEntrypointEncPicture) + chroma_formats |= i965->codec_info->jpeg_enc_chroma_formats; + break; + + case VAProfileHEVCMain10: + chroma_formats = 0; // clear YUV420 8bits format support + if (HAS_HEVC10_DECODING(i965) && entrypoint == VAEntrypointVLD) + chroma_formats |= i965->codec_info->hevc_dec_chroma_formats; + break; + default: + break; + } + return chroma_formats; +} + +VAStatus +i965_GetConfigAttributes(VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs) +{ + VAStatus va_status; + int i; + + va_status = i965_validate_config(ctx, profile, entrypoint); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + /* Other attributes don't seem to be defined */ + /* What to do if we don't know the attribute? */ + for (i = 0; i < num_attribs; i++) { + attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; + switch (attrib_list[i].type) { + case VAConfigAttribRTFormat: + attrib_list[i].value = i965_get_default_chroma_formats(ctx, + profile, entrypoint); + break; + + case VAConfigAttribRateControl: + if (entrypoint == VAEntrypointEncSlice) { + attrib_list[i].value = VA_RC_CQP; + + if (profile != VAProfileMPEG2Main && + profile != VAProfileMPEG2Simple) + attrib_list[i].value |= VA_RC_CBR; + break; + } + break; + + case VAConfigAttribEncPackedHeaders: + if (entrypoint == VAEntrypointEncSlice) { + attrib_list[i].value = VA_ENC_PACKED_HEADER_SEQUENCE | VA_ENC_PACKED_HEADER_PICTURE | VA_ENC_PACKED_HEADER_MISC; + if (profile == VAProfileH264ConstrainedBaseline || + profile == VAProfileH264Main || + profile == VAProfileH264High || + profile == VAProfileH264StereoHigh || + profile == VAProfileH264MultiviewHigh || + profile == VAProfileHEVCMain) { + attrib_list[i].value |= (VA_ENC_PACKED_HEADER_RAW_DATA | + VA_ENC_PACKED_HEADER_SLICE); + } + break; + } + else if (entrypoint == VAEntrypointEncPicture) { + if (profile == VAProfileJPEGBaseline) + attrib_list[i].value = VA_ENC_PACKED_HEADER_RAW_DATA; + } + break; + + case VAConfigAttribEncMaxRefFrames: + if (entrypoint == VAEntrypointEncSlice) { + attrib_list[i].value = (1 << 16) | (1 << 0); + break; + } + break; + + case VAConfigAttribEncQualityRange: + if (entrypoint == VAEntrypointEncSlice) { + attrib_list[i].value = 1; + if (profile == VAProfileH264ConstrainedBaseline || + profile == VAProfileH264Main || + profile == VAProfileH264High ) + attrib_list[i].value = ENCODER_QUALITY_RANGE; + break; + } + break; + + case VAConfigAttribEncJPEG: + if( entrypoint == VAEntrypointEncPicture) { + VAConfigAttribValEncJPEG *configVal = (VAConfigAttribValEncJPEG*)&(attrib_list[i].value); + (configVal->bits).arithmatic_coding_mode = 0; // Huffman coding is used + (configVal->bits).progressive_dct_mode = 0; // Only Sequential DCT is supported + (configVal->bits).non_interleaved_mode = 1; // Support both interleaved and non-interleaved + (configVal->bits).differential_mode = 0; // Baseline DCT is non-differential + (configVal->bits).max_num_components = 3; // Only 3 components supported + (configVal->bits).max_num_scans = 1; // Only 1 scan per frame + (configVal->bits).max_num_huffman_tables = 3; // Max 3 huffman tables + (configVal->bits).max_num_quantization_tables = 3; // Max 3 quantization tables + } + break; + + case VAConfigAttribDecSliceMode: + attrib_list[i].value = VA_DEC_SLICE_MODE_NORMAL; + break; + + default: + /* Do nothing */ + attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; + break; + } + } + + return VA_STATUS_SUCCESS; +} + +static void +i965_destroy_config(struct object_heap *heap, struct object_base *obj) +{ + object_heap_free(heap, obj); +} + +static VAConfigAttrib * +i965_lookup_config_attribute(struct object_config *obj_config, + VAConfigAttribType type) +{ + int i; + + for (i = 0; i < obj_config->num_attribs; i++) { + VAConfigAttrib * const attrib = &obj_config->attrib_list[i]; + if (attrib->type == type) + return attrib; + } + return NULL; +} + +static VAStatus +i965_append_config_attribute(struct object_config *obj_config, + const VAConfigAttrib *new_attrib) +{ + VAConfigAttrib *attrib; + + if (obj_config->num_attribs >= I965_MAX_CONFIG_ATTRIBUTES) + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + + attrib = &obj_config->attrib_list[obj_config->num_attribs++]; + attrib->type = new_attrib->type; + attrib->value = new_attrib->value; + return VA_STATUS_SUCCESS; +} + +static VAStatus +i965_ensure_config_attribute(struct object_config *obj_config, + const VAConfigAttrib *new_attrib) +{ + VAConfigAttrib *attrib; + + /* Check for existing attributes */ + attrib = i965_lookup_config_attribute(obj_config, new_attrib->type); + if (attrib) { + /* Update existing attribute */ + attrib->value = new_attrib->value; + return VA_STATUS_SUCCESS; + } + return i965_append_config_attribute(obj_config, new_attrib); +} + +VAStatus +i965_CreateConfig(VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id) /* out */ +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_config *obj_config; + int configID; + int i; + VAStatus vaStatus; + + vaStatus = i965_validate_config(ctx, profile, entrypoint); + + if (VA_STATUS_SUCCESS != vaStatus) { + return vaStatus; + } + + configID = NEW_CONFIG_ID(); + obj_config = CONFIG(configID); + + if (NULL == obj_config) { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + obj_config->profile = profile; + obj_config->entrypoint = entrypoint; + obj_config->num_attribs = 0; + obj_config->wrapper_config = VA_INVALID_ID; + + for (i = 0; i < num_attribs; i++) { + vaStatus = i965_ensure_config_attribute(obj_config, &attrib_list[i]); + if (vaStatus != VA_STATUS_SUCCESS) + break; + } + + if (vaStatus == VA_STATUS_SUCCESS) { + VAConfigAttrib attrib, *attrib_found; + attrib.type = VAConfigAttribRTFormat; + attrib.value = i965_get_default_chroma_formats(ctx, profile, entrypoint); + attrib_found = i965_lookup_config_attribute(obj_config, attrib.type); + if (!attrib_found || !attrib_found->value) + vaStatus = i965_append_config_attribute(obj_config, &attrib); + else if (!(attrib_found->value & attrib.value)) + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; + } + + if ((vaStatus == VA_STATUS_SUCCESS) && + (profile == VAProfileVP9Profile0)) { + + if (i965->wrapper_pdrvctx) { + VAGenericID wrapper_config; + + CALL_VTABLE(i965->wrapper_pdrvctx, vaStatus, + vaCreateConfig(i965->wrapper_pdrvctx, profile, + entrypoint, attrib_list, + num_attribs, &wrapper_config)); + + if (vaStatus == VA_STATUS_SUCCESS) + obj_config->wrapper_config = wrapper_config; + } + } + + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) { + i965_destroy_config(&i965->config_heap, (struct object_base *)obj_config); + } else { + *config_id = configID; + } + + return vaStatus; +} + +VAStatus +i965_DestroyConfig(VADriverContextP ctx, VAConfigID config_id) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_config *obj_config = CONFIG(config_id); + VAStatus vaStatus; + + if (NULL == obj_config) { + vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; + return vaStatus; + } + + if ((obj_config->wrapper_config != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + CALL_VTABLE(i965->wrapper_pdrvctx, vaStatus, + vaDestroyConfig(i965->wrapper_pdrvctx, + obj_config->wrapper_config)); + obj_config->wrapper_config = VA_INVALID_ID; + } + + i965_destroy_config(&i965->config_heap, (struct object_base *)obj_config); + return VA_STATUS_SUCCESS; +} + +VAStatus i965_QueryConfigAttributes(VADriverContextP ctx, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list, /* out */ + int *num_attribs) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_config *obj_config = CONFIG(config_id); + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + + ASSERT_RET(obj_config, VA_STATUS_ERROR_INVALID_CONFIG); + *profile = obj_config->profile; + *entrypoint = obj_config->entrypoint; + *num_attribs = obj_config->num_attribs; + + for(i = 0; i < obj_config->num_attribs; i++) { + attrib_list[i] = obj_config->attrib_list[i]; + } + + return vaStatus; +} + +void +i965_destroy_surface_storage(struct object_surface *obj_surface) +{ + if (!obj_surface) + return; + + dri_bo_unreference(obj_surface->bo); + obj_surface->bo = NULL; + + if (obj_surface->free_private_data != NULL) { + obj_surface->free_private_data(&obj_surface->private_data); + obj_surface->private_data = NULL; + } +} + +static void +i965_destroy_surface(struct object_heap *heap, struct object_base *obj) +{ + struct object_surface *obj_surface = (struct object_surface *)obj; + + i965_destroy_surface_storage(obj_surface); + object_heap_free(heap, obj); +} + +static VAStatus +i965_surface_native_memory(VADriverContextP ctx, + struct object_surface *obj_surface, + int format, + int expected_fourcc) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int tiling = HAS_TILED_SURFACE(i965); + + if (!expected_fourcc) + return VA_STATUS_SUCCESS; + + // todo, should we disable tiling for 422 format? + if (expected_fourcc == VA_FOURCC_I420 || + expected_fourcc == VA_FOURCC_IYUV || + expected_fourcc == VA_FOURCC_YV12 || + expected_fourcc == VA_FOURCC_YV16) + tiling = 0; + + return i965_check_alloc_surface_bo(ctx, obj_surface, tiling, expected_fourcc, get_sampling_from_fourcc(expected_fourcc)); +} + +static VAStatus +i965_suface_external_memory(VADriverContextP ctx, + struct object_surface *obj_surface, + int external_memory_type, + VASurfaceAttribExternalBuffers *memory_attibute, + int index) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + + if (!memory_attibute || + !memory_attibute->buffers || + index > memory_attibute->num_buffers) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + ASSERT_RET(obj_surface->orig_width == memory_attibute->width, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(obj_surface->orig_height == memory_attibute->height, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->num_planes >= 1, VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->fourcc = memory_attibute->pixel_format; + obj_surface->width = memory_attibute->pitches[0]; + obj_surface->size = memory_attibute->data_size; + + if (memory_attibute->num_planes == 1) + obj_surface->height = memory_attibute->data_size / obj_surface->width; + else + obj_surface->height = memory_attibute->offsets[1] / obj_surface->width; + + obj_surface->x_cb_offset = 0; /* X offset is always 0 */ + obj_surface->x_cr_offset = 0; + + switch (obj_surface->fourcc) { + case VA_FOURCC_NV12: + case VA_FOURCC_P010: + ASSERT_RET(memory_attibute->num_planes == 2, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[0] == memory_attibute->pitches[1], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV420; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_YV12: + case VA_FOURCC_IMC1: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV420; + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->y_cb_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_I420: + case VA_FOURCC_IYUV: + case VA_FOURCC_IMC3: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV420; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + ASSERT_RET(memory_attibute->num_planes == 1, VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV422H; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = memory_attibute->pitches[0]; + + break; + + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + ASSERT_RET(memory_attibute->num_planes == 1, VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_RGBX; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = 0; + obj_surface->cb_cr_height = 0; + obj_surface->cb_cr_pitch = 0; + + break; + + case VA_FOURCC_Y800: /* monochrome surface */ + ASSERT_RET(memory_attibute->num_planes == 1, VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV400; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = 0; + obj_surface->cb_cr_height = 0; + obj_surface->cb_cr_pitch = 0; + + break; + + case VA_FOURCC_411P: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV411; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = obj_surface->orig_width / 4; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_422H: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV422H; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_YV16: + assert(memory_attibute->num_planes == 3); + assert(memory_attibute->pitches[1] == memory_attibute->pitches[2]); + + obj_surface->subsampling = SUBSAMPLE_YUV422H; + obj_surface->y_cr_offset = memory_attibute->offsets[1] / obj_surface->width; + obj_surface->y_cb_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_422V: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV422H; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + case VA_FOURCC_444P: + ASSERT_RET(memory_attibute->num_planes == 3, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(memory_attibute->pitches[1] == memory_attibute->pitches[2], VA_STATUS_ERROR_INVALID_PARAMETER); + + obj_surface->subsampling = SUBSAMPLE_YUV444; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; + + break; + + default: + + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + + if (external_memory_type == I965_SURFACE_MEM_GEM_FLINK) + obj_surface->bo = drm_intel_bo_gem_create_from_name(i965->intel.bufmgr, + "gem flinked vaapi surface", + memory_attibute->buffers[index]); +// else if (external_memory_type == I965_SURFACE_MEM_DRM_PRIME) +// obj_surface->bo = drm_intel_bo_gem_create_from_prime(i965->intel.bufmgr, +// memory_attibute->buffers[index], +// obj_surface->size); + + if (!obj_surface->bo) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + return VA_STATUS_SUCCESS; +} + +/* byte-per-pixel of the first plane */ +static int +bpp_1stplane_by_fourcc(unsigned int fourcc) +{ + const i965_fourcc_info *info = get_fourcc_info(fourcc); + + if (info && (info->flag & I_S)) + return info->bpp[0] / 8; + else + return 0; +} + +static VAStatus +i965_CreateSurfaces2( + VADriverContextP ctx, + unsigned int format, + unsigned int width, + unsigned int height, + VASurfaceID *surfaces, + unsigned int num_surfaces, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs + ) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i,j; + VAStatus vaStatus = VA_STATUS_SUCCESS; + int expected_fourcc = 0; + int memory_type = I965_SURFACE_MEM_NATIVE; /* native */ + VASurfaceAttribExternalBuffers *memory_attibute = NULL; + + for (i = 0; i < num_attribs && attrib_list; i++) { + if ((attrib_list[i].type == VASurfaceAttribPixelFormat) && + (attrib_list[i].flags & VA_SURFACE_ATTRIB_SETTABLE)) { + ASSERT_RET(attrib_list[i].value.type == VAGenericValueTypeInteger, VA_STATUS_ERROR_INVALID_PARAMETER); + expected_fourcc = attrib_list[i].value.value.i; + } + + if ((attrib_list[i].type == VASurfaceAttribMemoryType) && + (attrib_list[i].flags & VA_SURFACE_ATTRIB_SETTABLE)) { + + ASSERT_RET(attrib_list[i].value.type == VAGenericValueTypeInteger, VA_STATUS_ERROR_INVALID_PARAMETER); + + if (attrib_list[i].value.value.i == VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM) + memory_type = I965_SURFACE_MEM_GEM_FLINK; /* flinked GEM handle */ + else if (attrib_list[i].value.value.i == VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME) + memory_type = I965_SURFACE_MEM_DRM_PRIME; /* drm prime fd */ + else if (attrib_list[i].value.value.i == VA_SURFACE_ATTRIB_MEM_TYPE_VA) + memory_type = I965_SURFACE_MEM_NATIVE; /* va native memory, to be allocated */ + } + + if ((attrib_list[i].type == VASurfaceAttribExternalBufferDescriptor) && + (attrib_list[i].flags == VA_SURFACE_ATTRIB_SETTABLE)) { + ASSERT_RET(attrib_list[i].value.type == VAGenericValueTypePointer, VA_STATUS_ERROR_INVALID_PARAMETER); + memory_attibute = (VASurfaceAttribExternalBuffers *)attrib_list[i].value.value.p; + } + } + + /* support 420 & 422 & RGB32 format, 422 and RGB32 are only used + * for post-processing (including color conversion) */ + if (VA_RT_FORMAT_YUV420 != format && + VA_RT_FORMAT_YUV420_10BPP != format && + VA_RT_FORMAT_YUV422 != format && + VA_RT_FORMAT_YUV444 != format && + VA_RT_FORMAT_YUV411 != format && + VA_RT_FORMAT_YUV400 != format && + VA_RT_FORMAT_RGB32 != format) { + return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; + } + + for (i = 0; i < num_surfaces; i++) { + int surfaceID = NEW_SURFACE_ID(); + struct object_surface *obj_surface = SURFACE(surfaceID); + + if (NULL == obj_surface) { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + break; + } + + surfaces[i] = surfaceID; + obj_surface->status = VASurfaceReady; + obj_surface->orig_width = width; + obj_surface->orig_height = height; + obj_surface->user_disable_tiling = false; + obj_surface->user_h_stride_set = false; + obj_surface->user_v_stride_set = false; + + obj_surface->subpic_render_idx = 0; + for(j = 0; j < I965_MAX_SUBPIC_SUM; j++){ + obj_surface->subpic[j] = VA_INVALID_ID; + obj_surface->obj_subpic[j] = NULL; + } + + assert(i965->codec_info->min_linear_wpitch); + assert(i965->codec_info->min_linear_hpitch); + obj_surface->width = ALIGN(width, i965->codec_info->min_linear_wpitch); + obj_surface->height = ALIGN(height, i965->codec_info->min_linear_hpitch); + obj_surface->flags = SURFACE_REFERENCED; + obj_surface->fourcc = 0; + obj_surface->expected_format = format; + obj_surface->bo = NULL; + obj_surface->locked_image_id = VA_INVALID_ID; + obj_surface->derived_image_id = VA_INVALID_ID; + obj_surface->private_data = NULL; + obj_surface->free_private_data = NULL; + obj_surface->subsampling = SUBSAMPLE_YUV420; + + obj_surface->wrapper_surface = VA_INVALID_ID; + obj_surface->exported_primefd = -1; + + switch (memory_type) { + case I965_SURFACE_MEM_NATIVE: + if (memory_attibute) { + if (!(memory_attibute->flags & VA_SURFACE_EXTBUF_DESC_ENABLE_TILING)) + obj_surface->user_disable_tiling = true; + + if (memory_attibute->pixel_format) { + if (expected_fourcc) + ASSERT_RET(memory_attibute->pixel_format == expected_fourcc, VA_STATUS_ERROR_INVALID_PARAMETER); + else + expected_fourcc = memory_attibute->pixel_format; + } + ASSERT_RET(expected_fourcc, VA_STATUS_ERROR_INVALID_PARAMETER); + if (memory_attibute->pitches[0]) { + int bpp_1stplane = bpp_1stplane_by_fourcc(expected_fourcc); + ASSERT_RET(bpp_1stplane, VA_STATUS_ERROR_INVALID_PARAMETER); + obj_surface->width = memory_attibute->pitches[0]; + obj_surface->user_h_stride_set = true; + ASSERT_RET(IS_ALIGNED(obj_surface->width, 16), VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(obj_surface->width >= width * bpp_1stplane, VA_STATUS_ERROR_INVALID_PARAMETER); + + if (memory_attibute->offsets[1]) { + ASSERT_RET(!memory_attibute->offsets[0], VA_STATUS_ERROR_INVALID_PARAMETER); + obj_surface->height = memory_attibute->offsets[1]/memory_attibute->pitches[0]; + obj_surface->user_v_stride_set = true; + ASSERT_RET(IS_ALIGNED(obj_surface->height, 16), VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(obj_surface->height >= height, VA_STATUS_ERROR_INVALID_PARAMETER); + } + } + } + vaStatus = i965_surface_native_memory(ctx, + obj_surface, + format, + expected_fourcc); + break; + + case I965_SURFACE_MEM_GEM_FLINK: + case I965_SURFACE_MEM_DRM_PRIME: + vaStatus = i965_suface_external_memory(ctx, + obj_surface, + memory_type, + memory_attibute, + i); + break; + } + if (VA_STATUS_SUCCESS != vaStatus) { + i965_destroy_surface(&i965->surface_heap, (struct object_base *)obj_surface); + break; + } + } + + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) { + /* surfaces[i-1] was the last successful allocation */ + for (; i--; ) { + struct object_surface *obj_surface = SURFACE(surfaces[i]); + + surfaces[i] = VA_INVALID_SURFACE; + assert(obj_surface); + i965_destroy_surface(&i965->surface_heap, (struct object_base *)obj_surface); + } + } + + return vaStatus; +} + +VAStatus +i965_CreateSurfaces(VADriverContextP ctx, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces) /* out */ +{ + return i965_CreateSurfaces2(ctx, + format, + width, + height, + surfaces, + num_surfaces, + NULL, + 0); +} + +VAStatus +i965_DestroySurfaces(VADriverContextP ctx, + VASurfaceID *surface_list, + int num_surfaces) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + VAStatus va_status = VA_STATUS_SUCCESS; + + for (i = num_surfaces; i--; ) { + struct object_surface *obj_surface = SURFACE(surface_list[i]); + + ASSERT_RET(obj_surface, VA_STATUS_ERROR_INVALID_SURFACE); + + if ((obj_surface->wrapper_surface != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + CALL_VTABLE(i965->wrapper_pdrvctx, va_status, + vaDestroySurfaces(i965->wrapper_pdrvctx, + &(obj_surface->wrapper_surface), + 1)); + obj_surface->wrapper_surface = VA_INVALID_ID; + } + if (obj_surface->exported_primefd >= 0) { + close(obj_surface->exported_primefd); + obj_surface->exported_primefd = -1; + } + + i965_destroy_surface(&i965->surface_heap, (struct object_base *)obj_surface); + } + + return va_status; +} + +VAStatus +i965_QueryImageFormats(VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + int *num_formats) /* out */ +{ + int n; + + for (n = 0; i965_image_formats_map[n].va_format.fourcc != 0; n++) { + const i965_image_format_map_t * const m = &i965_image_formats_map[n]; + if (format_list) + format_list[n] = m->va_format; + } + + if (num_formats) + *num_formats = n; + + return VA_STATUS_SUCCESS; +} + +/* + * Guess the format when the usage of a VA surface is unknown + * 1. Without a valid context: YV12 + * 2. The current context is valid: + * a) always NV12 on GEN6 and later + * b) I420 for MPEG-2 and NV12 for other codec on GEN4 & GEN5 + */ +static void +i965_guess_surface_format(VADriverContextP ctx, + VASurfaceID surface, + unsigned int *fourcc, + unsigned int *is_tiled) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = NULL; + struct object_config *obj_config = NULL; + + *fourcc = VA_FOURCC_YV12; + *is_tiled = 0; + + if (i965->current_context_id == VA_INVALID_ID) + return; + + obj_context = CONTEXT(i965->current_context_id); + + if (!obj_context) + return; + + obj_config = obj_context->obj_config; + assert(obj_config); + + if (!obj_config) + return; + + if (IS_GEN6(i965->intel.device_info) || + IS_GEN7(i965->intel.device_info) || + IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + *fourcc = VA_FOURCC_NV12; + *is_tiled = 1; + return; + } + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + *fourcc = VA_FOURCC_I420; + *is_tiled = 0; + break; + + default: + *fourcc = VA_FOURCC_NV12; + *is_tiled = 0; + break; + } +} + +VAStatus +i965_QuerySubpictureFormats(VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats) /* out */ +{ + int n; + + for (n = 0; i965_subpic_formats_map[n].va_format.fourcc != 0; n++) { + const i965_subpic_format_map_t * const m = &i965_subpic_formats_map[n]; + if (format_list) + format_list[n] = m->va_format; + if (flags) + flags[n] = m->va_flags; + } + + if (num_formats) + *num_formats = n; + + return VA_STATUS_SUCCESS; +} + +static void +i965_destroy_subpic(struct object_heap *heap, struct object_base *obj) +{ + // struct object_subpic *obj_subpic = (struct object_subpic *)obj; + + object_heap_free(heap, obj); +} + +VAStatus +i965_CreateSubpicture(VADriverContextP ctx, + VAImageID image, + VASubpictureID *subpicture) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VASubpictureID subpicID = NEW_SUBPIC_ID() + struct object_subpic *obj_subpic = SUBPIC(subpicID); + + if (!obj_subpic) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + struct object_image *obj_image = IMAGE(image); + if (!obj_image) + return VA_STATUS_ERROR_INVALID_IMAGE; + + const i965_subpic_format_map_t * const m = get_subpic_format(&obj_image->image.format); + if (!m) + return VA_STATUS_ERROR_UNKNOWN; /* XXX: VA_STATUS_ERROR_UNSUPPORTED_FORMAT? */ + + *subpicture = subpicID; + obj_subpic->image = image; + obj_subpic->obj_image = obj_image; + obj_subpic->format = m->format; + obj_subpic->width = obj_image->image.width; + obj_subpic->height = obj_image->image.height; + obj_subpic->pitch = obj_image->image.pitches[0]; + obj_subpic->bo = obj_image->bo; + obj_subpic->global_alpha = 1.0; + + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_DestroySubpicture(VADriverContextP ctx, + VASubpictureID subpicture) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_subpic *obj_subpic = SUBPIC(subpicture); + + if (!obj_subpic) + return VA_STATUS_ERROR_INVALID_SUBPICTURE; + + ASSERT_RET(obj_subpic->obj_image, VA_STATUS_ERROR_INVALID_SUBPICTURE); + i965_destroy_subpic(&i965->subpic_heap, (struct object_base *)obj_subpic); + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_SetSubpictureImage(VADriverContextP ctx, + VASubpictureID subpicture, + VAImageID image) +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus +i965_SetSubpictureChromakey(VADriverContextP ctx, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask) +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus +i965_SetSubpictureGlobalAlpha(VADriverContextP ctx, + VASubpictureID subpicture, + float global_alpha) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_subpic *obj_subpic = SUBPIC(subpicture); + + if(global_alpha > 1.0 || global_alpha < 0.0){ + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + + if (!obj_subpic) + return VA_STATUS_ERROR_INVALID_SUBPICTURE; + + obj_subpic->global_alpha = global_alpha; + + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_AssociateSubpicture(VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_subpic *obj_subpic = SUBPIC(subpicture); + int i, j; + + if (!obj_subpic) + return VA_STATUS_ERROR_INVALID_SUBPICTURE; + + ASSERT_RET(obj_subpic->obj_image, VA_STATUS_ERROR_INVALID_SUBPICTURE); + + obj_subpic->src_rect.x = src_x; + obj_subpic->src_rect.y = src_y; + obj_subpic->src_rect.width = src_width; + obj_subpic->src_rect.height = src_height; + obj_subpic->dst_rect.x = dest_x; + obj_subpic->dst_rect.y = dest_y; + obj_subpic->dst_rect.width = dest_width; + obj_subpic->dst_rect.height = dest_height; + obj_subpic->flags = flags; + + for (i = 0; i < num_surfaces; i++) { + struct object_surface *obj_surface = SURFACE(target_surfaces[i]); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + for(j = 0; j < I965_MAX_SUBPIC_SUM; j ++){ + if(obj_surface->subpic[j] == VA_INVALID_ID){ + assert(obj_surface->obj_subpic[j] == NULL); + obj_surface->subpic[j] = subpicture; + obj_surface->obj_subpic[j] = obj_subpic; + break; + } + } + + if(j == I965_MAX_SUBPIC_SUM){ + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + } + return VA_STATUS_SUCCESS; +} + + +VAStatus +i965_DeassociateSubpicture(VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_subpic *obj_subpic = SUBPIC(subpicture); + int i, j; + + if (!obj_subpic) + return VA_STATUS_ERROR_INVALID_SUBPICTURE; + + for (i = 0; i < num_surfaces; i++) { + struct object_surface *obj_surface = SURFACE(target_surfaces[i]); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + for(j = 0; j < I965_MAX_SUBPIC_SUM; j ++){ + if (obj_surface->subpic[j] == subpicture) { + assert(obj_surface->obj_subpic[j] == obj_subpic); + obj_surface->subpic[j] = VA_INVALID_ID; + obj_surface->obj_subpic[j] = NULL; + break; + } + } + + if(j == I965_MAX_SUBPIC_SUM){ + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + } + return VA_STATUS_SUCCESS; +} + +void +i965_reference_buffer_store(struct buffer_store **ptr, + struct buffer_store *buffer_store) +{ + assert(*ptr == NULL); + + if (buffer_store) { + buffer_store->ref_count++; + *ptr = buffer_store; + } +} + +void +i965_release_buffer_store(struct buffer_store **ptr) +{ + struct buffer_store *buffer_store = *ptr; + + if (buffer_store == NULL) + return; + + assert(buffer_store->bo || buffer_store->buffer); + assert(!(buffer_store->bo && buffer_store->buffer)); + buffer_store->ref_count--; + + if (buffer_store->ref_count == 0) { + dri_bo_unreference(buffer_store->bo); + free(buffer_store->buffer); + buffer_store->bo = NULL; + buffer_store->buffer = NULL; + free(buffer_store); + } + + *ptr = NULL; +} + +static void +i965_destroy_context(struct object_heap *heap, struct object_base *obj) +{ + struct object_context *obj_context = (struct object_context *)obj; + int i; + + if (obj_context->hw_context) { + obj_context->hw_context->destroy(obj_context->hw_context); + obj_context->hw_context = NULL; + } + + if (obj_context->codec_type == CODEC_PROC) { + i965_release_buffer_store(&obj_context->codec_state.proc.pipeline_param); + + } else if (obj_context->codec_type == CODEC_ENC) { + assert(obj_context->codec_state.encode.num_slice_params <= obj_context->codec_state.encode.max_slice_params); + i965_release_buffer_store(&obj_context->codec_state.encode.pic_param); + i965_release_buffer_store(&obj_context->codec_state.encode.seq_param); + + for (i = 0; i < obj_context->codec_state.encode.num_slice_params; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.slice_params[i]); + + free(obj_context->codec_state.encode.slice_params); + + assert(obj_context->codec_state.encode.num_slice_params_ext <= obj_context->codec_state.encode.max_slice_params_ext); + i965_release_buffer_store(&obj_context->codec_state.encode.pic_param_ext); + i965_release_buffer_store(&obj_context->codec_state.encode.seq_param_ext); + + for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.packed_header_param); i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_param[i]); + + for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.packed_header_data); i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_data[i]); + + for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.misc_param); i++) + i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[i]); + + for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.slice_params_ext[i]); + + free(obj_context->codec_state.encode.slice_params_ext); + if (obj_context->codec_state.encode.slice_rawdata_index) { + free(obj_context->codec_state.encode.slice_rawdata_index); + obj_context->codec_state.encode.slice_rawdata_index = NULL; + } + if (obj_context->codec_state.encode.slice_rawdata_count) { + free(obj_context->codec_state.encode.slice_rawdata_count); + obj_context->codec_state.encode.slice_rawdata_count = NULL; + } + + if (obj_context->codec_state.encode.slice_header_index) { + free(obj_context->codec_state.encode.slice_header_index); + obj_context->codec_state.encode.slice_header_index = NULL; + } + + for (i = 0; i < obj_context->codec_state.encode.num_packed_header_params_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_params_ext[i]); + free(obj_context->codec_state.encode.packed_header_params_ext); + + for (i = 0; i < obj_context->codec_state.encode.num_packed_header_data_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_data_ext[i]); + free(obj_context->codec_state.encode.packed_header_data_ext); + + } else { + assert(obj_context->codec_state.decode.num_slice_params <= obj_context->codec_state.decode.max_slice_params); + assert(obj_context->codec_state.decode.num_slice_datas <= obj_context->codec_state.decode.max_slice_datas); + + i965_release_buffer_store(&obj_context->codec_state.decode.pic_param); + i965_release_buffer_store(&obj_context->codec_state.decode.iq_matrix); + i965_release_buffer_store(&obj_context->codec_state.decode.bit_plane); + + for (i = 0; i < obj_context->codec_state.decode.num_slice_params; i++) + i965_release_buffer_store(&obj_context->codec_state.decode.slice_params[i]); + + for (i = 0; i < obj_context->codec_state.decode.num_slice_datas; i++) + i965_release_buffer_store(&obj_context->codec_state.decode.slice_datas[i]); + + free(obj_context->codec_state.decode.slice_params); + free(obj_context->codec_state.decode.slice_datas); + } + + free(obj_context->render_targets); + object_heap_free(heap, obj); +} + +VAStatus +i965_CreateContext(VADriverContextP ctx, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_config *obj_config = CONFIG(config_id); + struct object_context *obj_context = NULL; + VAConfigAttrib *attrib; + VAStatus vaStatus = VA_STATUS_SUCCESS; + int contextID; + int i; + + if (NULL == obj_config) { + vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; + return vaStatus; + } + + if (picture_width > i965->codec_info->max_width || + picture_height > i965->codec_info->max_height) { + vaStatus = VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED; + return vaStatus; + } + + /* Validate flag */ + /* Validate picture dimensions */ + contextID = NEW_CONTEXT_ID(); + obj_context = CONTEXT(contextID); + + if (NULL == obj_context) { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + *context = contextID; + obj_context->flags = flag; + obj_context->context_id = contextID; + obj_context->obj_config = obj_config; + obj_context->picture_width = picture_width; + obj_context->picture_height = picture_height; + obj_context->num_render_targets = num_render_targets; + obj_context->render_targets = + (VASurfaceID *)calloc(num_render_targets, sizeof(VASurfaceID)); + obj_context->hw_context = NULL; + obj_context->wrapper_context = VA_INVALID_ID; + + if (!obj_context->render_targets) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + for(i = 0; i < num_render_targets; i++) { + if (NULL == SURFACE(render_targets[i])) { + vaStatus = VA_STATUS_ERROR_INVALID_SURFACE; + break; + } + + obj_context->render_targets[i] = render_targets[i]; + } + + if (VA_STATUS_SUCCESS == vaStatus) { + if (VAEntrypointVideoProc == obj_config->entrypoint) { + obj_context->codec_type = CODEC_PROC; + memset(&obj_context->codec_state.proc, 0, sizeof(obj_context->codec_state.proc)); + obj_context->codec_state.proc.current_render_target = VA_INVALID_ID; + assert(i965->codec_info->proc_hw_context_init); + obj_context->hw_context = i965->codec_info->proc_hw_context_init(ctx, obj_config); + } else if ((VAEntrypointEncSlice == obj_config->entrypoint) || + (VAEntrypointEncPicture == obj_config->entrypoint)) { /*encode routine only*/ + VAConfigAttrib *packed_attrib; + obj_context->codec_type = CODEC_ENC; + memset(&obj_context->codec_state.encode, 0, sizeof(obj_context->codec_state.encode)); + obj_context->codec_state.encode.current_render_target = VA_INVALID_ID; + obj_context->codec_state.encode.max_slice_params = NUM_SLICES; + obj_context->codec_state.encode.slice_params = calloc(obj_context->codec_state.encode.max_slice_params, + sizeof(*obj_context->codec_state.encode.slice_params)); + obj_context->codec_state.encode.max_packed_header_params_ext = NUM_SLICES; + obj_context->codec_state.encode.packed_header_params_ext = + calloc(obj_context->codec_state.encode.max_packed_header_params_ext, + sizeof(struct buffer_store *)); + + obj_context->codec_state.encode.max_packed_header_data_ext = NUM_SLICES; + obj_context->codec_state.encode.packed_header_data_ext = + calloc(obj_context->codec_state.encode.max_packed_header_data_ext, + sizeof(struct buffer_store *)); + + obj_context->codec_state.encode.max_slice_num = NUM_SLICES; + obj_context->codec_state.encode.slice_rawdata_index = + calloc(obj_context->codec_state.encode.max_slice_num, sizeof(int)); + obj_context->codec_state.encode.slice_rawdata_count = + calloc(obj_context->codec_state.encode.max_slice_num, sizeof(int)); + + obj_context->codec_state.encode.slice_header_index = + calloc(obj_context->codec_state.encode.max_slice_num, sizeof(int)); + + obj_context->codec_state.encode.vps_sps_seq_index = 0; + + obj_context->codec_state.encode.slice_index = 0; + packed_attrib = i965_lookup_config_attribute(obj_config, VAConfigAttribEncPackedHeaders); + if (packed_attrib) + obj_context->codec_state.encode.packed_header_flag = packed_attrib->value; + else { + /* use the default value. SPS/PPS/RAWDATA is passed from user + * while Slice_header data is generated by driver. + */ + obj_context->codec_state.encode.packed_header_flag = + VA_ENC_PACKED_HEADER_SEQUENCE | + VA_ENC_PACKED_HEADER_PICTURE | + VA_ENC_PACKED_HEADER_RAW_DATA; + } + assert(i965->codec_info->enc_hw_context_init); + obj_context->hw_context = i965->codec_info->enc_hw_context_init(ctx, obj_config); + } else { + obj_context->codec_type = CODEC_DEC; + memset(&obj_context->codec_state.decode, 0, sizeof(obj_context->codec_state.decode)); + obj_context->codec_state.decode.current_render_target = -1; + obj_context->codec_state.decode.max_slice_params = NUM_SLICES; + obj_context->codec_state.decode.max_slice_datas = NUM_SLICES; + obj_context->codec_state.decode.slice_params = calloc(obj_context->codec_state.decode.max_slice_params, + sizeof(*obj_context->codec_state.decode.slice_params)); + obj_context->codec_state.decode.slice_datas = calloc(obj_context->codec_state.decode.max_slice_datas, + sizeof(*obj_context->codec_state.decode.slice_datas)); + + assert(i965->codec_info->dec_hw_context_init); + obj_context->hw_context = i965->codec_info->dec_hw_context_init(ctx, obj_config); + } + } + + attrib = i965_lookup_config_attribute(obj_config, VAConfigAttribRTFormat); + if (!attrib) + return VA_STATUS_ERROR_INVALID_CONFIG; + obj_context->codec_state.base.chroma_formats = attrib->value; + + if (obj_config->wrapper_config != VA_INVALID_ID) { + /* The wrapper_pdrvctx should exist when wrapper_config is valid. + * So it won't check i965->wrapper_pdrvctx again. + * Fixme if it is incorrect. + */ + VAGenericID wrapper_context; + + /* + * The render_surface is not passed when calling + * vaCreateContext. + * If it is needed, we must get the wrapped surface + * for the corresponding Surface_list. + * So the wrapped surface conversion is deferred. + */ + CALL_VTABLE(i965->wrapper_pdrvctx, vaStatus, + vaCreateContext(i965->wrapper_pdrvctx, + obj_config->wrapper_config, + picture_width, picture_height, + flag, NULL, 0, + &wrapper_context)); + + if (vaStatus == VA_STATUS_SUCCESS) + obj_context->wrapper_context = wrapper_context; + } + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) { + i965_destroy_context(&i965->context_heap, (struct object_base *)obj_context); + } + + i965->current_context_id = contextID; + + return vaStatus; +} + +VAStatus +i965_DestroyContext(VADriverContextP ctx, VAContextID context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + VAStatus va_status = VA_STATUS_SUCCESS; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + + if (i965->current_context_id == context) + i965->current_context_id = VA_INVALID_ID; + + if ((obj_context->wrapper_context != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + CALL_VTABLE(i965->wrapper_pdrvctx, va_status, + vaDestroyContext(i965->wrapper_pdrvctx, + obj_context->wrapper_context)); + + obj_context->wrapper_context = VA_INVALID_ID; + } + + i965_destroy_context(&i965->context_heap, (struct object_base *)obj_context); + + return va_status; +} + +static void +i965_destroy_buffer(struct object_heap *heap, struct object_base *obj) +{ + struct object_buffer *obj_buffer = (struct object_buffer *)obj; + + assert(obj_buffer->buffer_store); + i965_release_buffer_store(&obj_buffer->buffer_store); + object_heap_free(heap, obj); +} + +static VAStatus +i965_create_buffer_internal(VADriverContextP ctx, + VAContextID context, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data, + dri_bo *store_bo, + VABufferID *buf_id) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer = NULL; + struct buffer_store *buffer_store = NULL; + int bufferID; + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + struct object_context *obj_context = CONTEXT(context); + int wrapper_flag = 0; + + /* Validate type */ + switch (type) { + case VAPictureParameterBufferType: + case VAIQMatrixBufferType: + case VAQMatrixBufferType: + case VABitPlaneBufferType: + case VASliceGroupMapBufferType: + case VASliceParameterBufferType: + case VASliceDataBufferType: + case VAMacroblockParameterBufferType: + case VAResidualDataBufferType: + case VADeblockingParameterBufferType: + case VAImageBufferType: + case VAEncCodedBufferType: + case VAEncSequenceParameterBufferType: + case VAEncPictureParameterBufferType: + case VAEncSliceParameterBufferType: + case VAEncPackedHeaderParameterBufferType: + case VAEncPackedHeaderDataBufferType: + case VAEncMiscParameterBufferType: + case VAProcPipelineParameterBufferType: + case VAProcFilterParameterBufferType: + case VAHuffmanTableBufferType: + case VAProbabilityBufferType: + /* Ok */ + break; + + default: + return VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + } + + bufferID = NEW_BUFFER_ID(); + obj_buffer = BUFFER(bufferID); + + if (NULL == obj_buffer) { + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + if (type == VAEncCodedBufferType) { + size += I965_CODEDBUFFER_HEADER_SIZE; + size += 0x1000; /* for upper bound check */ + } + + obj_buffer->max_num_elements = num_elements; + obj_buffer->num_elements = num_elements; + obj_buffer->size_element = size; + obj_buffer->type = type; + obj_buffer->export_refcount = 0; + obj_buffer->buffer_store = NULL; + obj_buffer->wrapper_buffer = VA_INVALID_ID; + + buffer_store = calloc(1, sizeof(struct buffer_store)); + assert(buffer_store); + buffer_store->ref_count = 1; + + if (obj_context && + (obj_context->wrapper_context != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + VAGenericID wrapper_buffer; + VADriverContextP pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, vaStatus, + vaCreateBuffer(pdrvctx, obj_context->wrapper_context, type, size, num_elements, + data, &wrapper_buffer)); + if (vaStatus == VA_STATUS_SUCCESS) { + obj_buffer->wrapper_buffer = wrapper_buffer; + } else { + free(buffer_store); + return vaStatus; + } + wrapper_flag = 1; + } + + if (store_bo != NULL) { + buffer_store->bo = store_bo; + dri_bo_reference(buffer_store->bo); + + /* If the buffer is wrapped, the buffer_store is bogus. Unnecessary to copy it */ + if (data && !wrapper_flag) + dri_bo_subdata(buffer_store->bo, 0, size * num_elements, data); + } else if (type == VASliceDataBufferType || + type == VAImageBufferType || + type == VAEncCodedBufferType || + type == VAProbabilityBufferType) { + + /* If the buffer is wrapped, the bo/buffer of buffer_store is bogus. + * So it is enough to allocate one 64 byte bo + */ + if (wrapper_flag) + buffer_store->bo = dri_bo_alloc(i965->intel.bufmgr, "Bogus buffer", + 64, 64); + else + buffer_store->bo = dri_bo_alloc(i965->intel.bufmgr, + "Buffer", + size * num_elements, 64); + assert(buffer_store->bo); + + /* If the buffer is wrapped, the bo/buffer of buffer_store is bogus. + * In fact it can be skipped. But it is still allocated and it is + * only to follow the normal flowchart of buffer_allocation/release. + */ + if (!wrapper_flag) { + if (type == VAEncCodedBufferType) { + struct i965_coded_buffer_segment *coded_buffer_segment; + + dri_bo_map(buffer_store->bo, 1); + coded_buffer_segment = (struct i965_coded_buffer_segment *)buffer_store->bo->virtual; + coded_buffer_segment->base.size = size - I965_CODEDBUFFER_HEADER_SIZE; + coded_buffer_segment->base.bit_offset = 0; + coded_buffer_segment->base.status = 0; + coded_buffer_segment->base.buf = NULL; + coded_buffer_segment->base.next = NULL; + coded_buffer_segment->mapped = 0; + coded_buffer_segment->codec = 0; + dri_bo_unmap(buffer_store->bo); + } else if (data) { + dri_bo_subdata(buffer_store->bo, 0, size * num_elements, data); + } + } + + } else { + int msize = size; + + if (type == VAEncPackedHeaderDataBufferType) { + msize = ALIGN(size, 4); + } + + /* If the buffer is wrapped, it is enough to allocate 4 bytes */ + if (wrapper_flag) + buffer_store->buffer = malloc(4); + else + buffer_store->buffer = malloc(msize * num_elements); + assert(buffer_store->buffer); + + if (data && (!wrapper_flag)) + memcpy(buffer_store->buffer, data, size * num_elements); + } + + buffer_store->num_elements = obj_buffer->num_elements; + i965_reference_buffer_store(&obj_buffer->buffer_store, buffer_store); + i965_release_buffer_store(&buffer_store); + *buf_id = bufferID; + + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_CreateBuffer(VADriverContextP ctx, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id) /* out */ +{ + return i965_create_buffer_internal(ctx, context, type, size, num_elements, data, NULL, buf_id); +} + + +VAStatus +i965_BufferSetNumElements(VADriverContextP ctx, + VABufferID buf_id, /* in */ + unsigned int num_elements) /* in */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer = BUFFER(buf_id); + VAStatus vaStatus = VA_STATUS_SUCCESS; + + ASSERT_RET(obj_buffer, VA_STATUS_ERROR_INVALID_BUFFER); + + /* When the wrapper_buffer exists, it will wrapper to the + * buffer allocated from backend driver. + */ + if ((obj_buffer->wrapper_buffer != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + VADriverContextP pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, vaStatus, + vaBufferSetNumElements(pdrvctx, obj_buffer->wrapper_buffer, + num_elements)); + return vaStatus; + } + + if ((num_elements < 0) || + (num_elements > obj_buffer->max_num_elements)) { + vaStatus = VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } else { + obj_buffer->num_elements = num_elements; + if (obj_buffer->buffer_store != NULL) { + obj_buffer->buffer_store->num_elements = num_elements; + } + } + + return vaStatus; +} + +VAStatus +i965_MapBuffer(VADriverContextP ctx, + VABufferID buf_id, /* in */ + void **pbuf) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer = BUFFER(buf_id); + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + + ASSERT_RET(obj_buffer && obj_buffer->buffer_store, VA_STATUS_ERROR_INVALID_BUFFER); + + /* When the wrapper_buffer exists, it will wrapper to the + * buffer allocated from backend driver. + */ + if ((obj_buffer->wrapper_buffer != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + VADriverContextP pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, vaStatus, + vaMapBuffer(pdrvctx, obj_buffer->wrapper_buffer, pbuf)); + return vaStatus; + } + + ASSERT_RET(obj_buffer->buffer_store->bo || obj_buffer->buffer_store->buffer, VA_STATUS_ERROR_INVALID_BUFFER); + ASSERT_RET(!(obj_buffer->buffer_store->bo && obj_buffer->buffer_store->buffer), VA_STATUS_ERROR_INVALID_BUFFER); + + if (obj_buffer->export_refcount > 0) + return VA_STATUS_ERROR_INVALID_BUFFER; + + if (NULL != obj_buffer->buffer_store->bo) { + unsigned int tiling, swizzle; + + dri_bo_get_tiling(obj_buffer->buffer_store->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_buffer->buffer_store->bo); + else + dri_bo_map(obj_buffer->buffer_store->bo, 1); + + ASSERT_RET(obj_buffer->buffer_store->bo->virtual, VA_STATUS_ERROR_OPERATION_FAILED); + *pbuf = obj_buffer->buffer_store->bo->virtual; + + if (obj_buffer->type == VAEncCodedBufferType) { + int i; + unsigned char *buffer = NULL; + unsigned int header_offset = I965_CODEDBUFFER_HEADER_SIZE; + struct i965_coded_buffer_segment *coded_buffer_segment = (struct i965_coded_buffer_segment *)(obj_buffer->buffer_store->bo->virtual); + + if (!coded_buffer_segment->mapped) { + unsigned char delimiter0, delimiter1, delimiter2, delimiter3, delimiter4; + + coded_buffer_segment->base.buf = buffer = (unsigned char *)(obj_buffer->buffer_store->bo->virtual) + I965_CODEDBUFFER_HEADER_SIZE; + + if (coded_buffer_segment->codec == CODEC_H264 || + coded_buffer_segment->codec == CODEC_H264_MVC) { + delimiter0 = H264_DELIMITER0; + delimiter1 = H264_DELIMITER1; + delimiter2 = H264_DELIMITER2; + delimiter3 = H264_DELIMITER3; + delimiter4 = H264_DELIMITER4; + } else if (coded_buffer_segment->codec == CODEC_MPEG2) { + delimiter0 = MPEG2_DELIMITER0; + delimiter1 = MPEG2_DELIMITER1; + delimiter2 = MPEG2_DELIMITER2; + delimiter3 = MPEG2_DELIMITER3; + delimiter4 = MPEG2_DELIMITER4; + } else if(coded_buffer_segment->codec == CODEC_JPEG) { + //In JPEG End of Image (EOI = 0xDDF9) marker can be used for delimiter. + delimiter0 = 0xFF; + delimiter1 = 0xD9; + } else if (coded_buffer_segment->codec == CODEC_HEVC) { + delimiter0 = HEVC_DELIMITER0; + delimiter1 = HEVC_DELIMITER1; + delimiter2 = HEVC_DELIMITER2; + delimiter3 = HEVC_DELIMITER3; + delimiter4 = HEVC_DELIMITER4; + } else if (coded_buffer_segment->codec != CODEC_VP8) { + ASSERT_RET(0, VA_STATUS_ERROR_UNSUPPORTED_PROFILE); + } + + if(coded_buffer_segment->codec == CODEC_JPEG) { + for(i = 0; i < obj_buffer->size_element - header_offset - 1 - 0x1000; i++) { + if( (buffer[i] == 0xFF) && (buffer[i + 1] == 0xD9)) { + break; + } + } + coded_buffer_segment->base.size = i + 2; + } else if (coded_buffer_segment->codec != CODEC_VP8) { + /* vp8 coded buffer size can be told by vp8 internal statistics buffer, + so it don't need to traversal the coded buffer */ + for (i = 0; i < obj_buffer->size_element - header_offset - 3 - 0x1000; i++) { + if ((buffer[i] == delimiter0) && + (buffer[i + 1] == delimiter1) && + (buffer[i + 2] == delimiter2) && + (buffer[i + 3] == delimiter3) && + (buffer[i + 4] == delimiter4)) + break; + } + + if (i == obj_buffer->size_element - header_offset - 3 - 0x1000) { + coded_buffer_segment->base.status |= VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK; + } + coded_buffer_segment->base.size = i; + } + + if (coded_buffer_segment->base.size >= obj_buffer->size_element - header_offset - 0x1000) { + coded_buffer_segment->base.status |= VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK; + } + + coded_buffer_segment->mapped = 1; + } else { + assert(coded_buffer_segment->base.buf); + } + } + + vaStatus = VA_STATUS_SUCCESS; + } else if (NULL != obj_buffer->buffer_store->buffer) { + *pbuf = obj_buffer->buffer_store->buffer; + vaStatus = VA_STATUS_SUCCESS; + } + + return vaStatus; +} + +VAStatus +i965_UnmapBuffer(VADriverContextP ctx, VABufferID buf_id) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer = BUFFER(buf_id); + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + + if ((buf_id & OBJECT_HEAP_OFFSET_MASK) != BUFFER_ID_OFFSET) + return VA_STATUS_ERROR_INVALID_BUFFER; + + ASSERT_RET(obj_buffer && obj_buffer->buffer_store, VA_STATUS_ERROR_INVALID_BUFFER); + /* When the wrapper_buffer exists, it will wrapper to the + * buffer allocated from backend driver. + */ + if ((obj_buffer->wrapper_buffer != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + VADriverContextP pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, vaStatus, + vaUnmapBuffer(pdrvctx, obj_buffer->wrapper_buffer)); + return vaStatus; + } + + ASSERT_RET(obj_buffer->buffer_store->bo || obj_buffer->buffer_store->buffer, VA_STATUS_ERROR_OPERATION_FAILED); + ASSERT_RET(!(obj_buffer->buffer_store->bo && obj_buffer->buffer_store->buffer), VA_STATUS_ERROR_OPERATION_FAILED); + + if (NULL != obj_buffer->buffer_store->bo) { + unsigned int tiling, swizzle; + + dri_bo_get_tiling(obj_buffer->buffer_store->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_buffer->buffer_store->bo); + else + dri_bo_unmap(obj_buffer->buffer_store->bo); + + vaStatus = VA_STATUS_SUCCESS; + } else if (NULL != obj_buffer->buffer_store->buffer) { + /* Do nothing */ + vaStatus = VA_STATUS_SUCCESS; + } + + return vaStatus; +} + +VAStatus +i965_DestroyBuffer(VADriverContextP ctx, VABufferID buffer_id) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer = BUFFER(buffer_id); + VAStatus va_status = VA_STATUS_SUCCESS; + + ASSERT_RET(obj_buffer, VA_STATUS_ERROR_INVALID_BUFFER); + + if ((obj_buffer->wrapper_buffer != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + CALL_VTABLE(i965->wrapper_pdrvctx, va_status, + vaDestroyBuffer(i965->wrapper_pdrvctx, + obj_buffer->wrapper_buffer)); + obj_buffer->wrapper_buffer = VA_INVALID_ID; + } + + i965_destroy_buffer(&i965->buffer_heap, (struct object_base *)obj_buffer); + + return va_status; +} + +VAStatus +i965_BeginPicture(VADriverContextP ctx, + VAContextID context, + VASurfaceID render_target) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + struct object_surface *obj_surface = SURFACE(render_target); + struct object_config *obj_config; + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + ASSERT_RET(obj_surface, VA_STATUS_ERROR_INVALID_SURFACE); + obj_config = obj_context->obj_config; + ASSERT_RET(obj_config, VA_STATUS_ERROR_INVALID_CONFIG); + + if (is_surface_busy(i965, obj_surface)) + return VA_STATUS_ERROR_SURFACE_BUSY; + + if (obj_context->codec_type == CODEC_PROC) { + obj_context->codec_state.proc.current_render_target = render_target; + } else if (obj_context->codec_type == CODEC_ENC) { + i965_release_buffer_store(&obj_context->codec_state.encode.pic_param); + + for (i = 0; i < obj_context->codec_state.encode.num_slice_params; i++) { + i965_release_buffer_store(&obj_context->codec_state.encode.slice_params[i]); + } + + obj_context->codec_state.encode.num_slice_params = 0; + + /* ext */ + i965_release_buffer_store(&obj_context->codec_state.encode.pic_param_ext); + + for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.packed_header_param); i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_param[i]); + + for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.packed_header_data); i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_data[i]); + + for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.slice_params_ext[i]); + + obj_context->codec_state.encode.num_slice_params_ext = 0; + obj_context->codec_state.encode.current_render_target = render_target; /*This is input new frame*/ + obj_context->codec_state.encode.last_packed_header_type = 0; + memset(obj_context->codec_state.encode.slice_rawdata_index, 0, + sizeof(int) * obj_context->codec_state.encode.max_slice_num); + memset(obj_context->codec_state.encode.slice_rawdata_count, 0, + sizeof(int) * obj_context->codec_state.encode.max_slice_num); + memset(obj_context->codec_state.encode.slice_header_index, 0, + sizeof(int) * obj_context->codec_state.encode.max_slice_num); + + for (i = 0; i < obj_context->codec_state.encode.num_packed_header_params_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_params_ext[i]); + for (i = 0; i < obj_context->codec_state.encode.num_packed_header_data_ext; i++) + i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_data_ext[i]); + obj_context->codec_state.encode.num_packed_header_params_ext = 0; + obj_context->codec_state.encode.num_packed_header_data_ext = 0; + obj_context->codec_state.encode.slice_index = 0; + obj_context->codec_state.encode.vps_sps_seq_index = 0; + } else { + obj_context->codec_state.decode.current_render_target = render_target; + i965_release_buffer_store(&obj_context->codec_state.decode.pic_param); + i965_release_buffer_store(&obj_context->codec_state.decode.iq_matrix); + i965_release_buffer_store(&obj_context->codec_state.decode.bit_plane); + i965_release_buffer_store(&obj_context->codec_state.decode.huffman_table); + + for (i = 0; i < obj_context->codec_state.decode.num_slice_params; i++) { + i965_release_buffer_store(&obj_context->codec_state.decode.slice_params[i]); + i965_release_buffer_store(&obj_context->codec_state.decode.slice_datas[i]); + } + + obj_context->codec_state.decode.num_slice_params = 0; + obj_context->codec_state.decode.num_slice_datas = 0; + + if ((obj_context->wrapper_context != VA_INVALID_ID) && + i965->wrapper_pdrvctx) { + if (obj_surface->wrapper_surface == VA_INVALID_ID) + vaStatus = i965_surface_wrapper(ctx, render_target); + + if (vaStatus != VA_STATUS_SUCCESS) + return vaStatus; + + CALL_VTABLE(i965->wrapper_pdrvctx, vaStatus, + vaBeginPicture(i965->wrapper_pdrvctx, + obj_context->wrapper_context, + obj_surface->wrapper_surface)); + } + } + + return vaStatus; +} + +#define I965_RENDER_BUFFER(category, name) i965_render_##category##_##name##_buffer(ctx, obj_context, obj_buffer) + +#define DEF_RENDER_SINGLE_BUFFER_FUNC(category, name, member) \ + static VAStatus \ + i965_render_##category##_##name##_buffer(VADriverContextP ctx, \ + struct object_context *obj_context, \ + struct object_buffer *obj_buffer) \ + { \ + struct category##_state *category = &obj_context->codec_state.category; \ + i965_release_buffer_store(&category->member); \ + i965_reference_buffer_store(&category->member, obj_buffer->buffer_store); \ + return VA_STATUS_SUCCESS; \ + } + +#define DEF_RENDER_MULTI_BUFFER_FUNC(category, name, member) \ + static VAStatus \ + i965_render_##category##_##name##_buffer(VADriverContextP ctx, \ + struct object_context *obj_context, \ + struct object_buffer *obj_buffer) \ + { \ + struct category##_state *category = &obj_context->codec_state.category; \ + if (category->num_##member == category->max_##member) { \ + category->member = realloc(category->member, (category->max_##member + NUM_SLICES) * sizeof(*category->member)); \ + memset(category->member + category->max_##member, 0, NUM_SLICES * sizeof(*category->member)); \ + category->max_##member += NUM_SLICES; \ + } \ + i965_release_buffer_store(&category->member[category->num_##member]); \ + i965_reference_buffer_store(&category->member[category->num_##member], obj_buffer->buffer_store); \ + category->num_##member++; \ + return VA_STATUS_SUCCESS; \ + } + +#define I965_RENDER_DECODE_BUFFER(name) I965_RENDER_BUFFER(decode, name) + +#define DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(name, member) DEF_RENDER_SINGLE_BUFFER_FUNC(decode, name, member) +DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(picture_parameter, pic_param) +DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(iq_matrix, iq_matrix) +DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(bit_plane, bit_plane) +DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(huffman_table, huffman_table) +DEF_RENDER_DECODE_SINGLE_BUFFER_FUNC(probability_data, probability_data) + +#define DEF_RENDER_DECODE_MULTI_BUFFER_FUNC(name, member) DEF_RENDER_MULTI_BUFFER_FUNC(decode, name, member) +DEF_RENDER_DECODE_MULTI_BUFFER_FUNC(slice_parameter, slice_params) +DEF_RENDER_DECODE_MULTI_BUFFER_FUNC(slice_data, slice_datas) + + +static VAStatus +i965_decoder_vp9_wrapper_picture(VADriverContextP ctx, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + VADecPictureParameterBufferVP9 *pVp9PicParams; + VADriverContextP pdrvctx; + struct object_buffer *obj_buffer; + + pdrvctx = i965->wrapper_pdrvctx; + /* do the conversion of VADecPictureParameterBufferVP9 */ + for (i = 0; i < num_buffers; i++) { + obj_buffer = BUFFER(buffers[i]); + + if (!obj_buffer) + continue; + + if (obj_buffer->wrapper_buffer == VA_INVALID_ID) + continue; + + if (obj_buffer->type == VAPictureParameterBufferType) { + int j; + VASurfaceID surface_id; + struct object_surface *obj_surface; + + pdrvctx = i965->wrapper_pdrvctx; + + CALL_VTABLE(pdrvctx, vaStatus, + vaMapBuffer(pdrvctx, obj_buffer->wrapper_buffer, + (void **)(&pVp9PicParams))); + + if (vaStatus != VA_STATUS_SUCCESS) + return vaStatus; + + for (j = 0; j < 8; j++) { + surface_id = pVp9PicParams->reference_frames[j]; + obj_surface = SURFACE(surface_id); + + if (!obj_surface) + continue; + + if (obj_surface->wrapper_surface == VA_INVALID_ID) { + vaStatus = i965_surface_wrapper(ctx, surface_id); + if (vaStatus != VA_STATUS_SUCCESS) { + pdrvctx->vtable->vaUnmapBuffer(pdrvctx, + obj_buffer->wrapper_buffer); + goto fail_out; + } + } + + pVp9PicParams->reference_frames[j] = obj_surface->wrapper_surface; + } + CALL_VTABLE(pdrvctx, vaStatus, + vaUnmapBuffer(pdrvctx, obj_buffer->wrapper_buffer)); + break; + } + } + + return VA_STATUS_SUCCESS; + +fail_out: + return vaStatus; +} + +static VAStatus +i965_decoder_wrapper_picture(VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + VADriverContextP pdrvctx; + struct object_buffer *obj_buffer; + + if (obj_context == NULL) + return VA_STATUS_ERROR_INVALID_CONTEXT; + + /* When it is not wrapped context, continue the normal flowchart */ + if (obj_context->wrapper_context == VA_INVALID_ID) + return vaStatus; + + if (obj_context->obj_config && + (obj_context->obj_config->profile == VAProfileVP9Profile0)) { + vaStatus = i965_decoder_vp9_wrapper_picture(ctx, buffers, num_buffers); + } else + return VA_STATUS_ERROR_INVALID_PARAMETER; + + pdrvctx = i965->wrapper_pdrvctx; + + for (i = 0; i < num_buffers && vaStatus == VA_STATUS_SUCCESS; i++) { + obj_buffer = BUFFER(buffers[i]); + + if (!obj_buffer) + continue; + + if (obj_buffer->wrapper_buffer == VA_INVALID_ID) { + vaStatus = VA_STATUS_ERROR_INVALID_BUFFER; + break; + } + + CALL_VTABLE(pdrvctx, vaStatus, + vaRenderPicture(pdrvctx, obj_context->wrapper_context, + &(obj_buffer->wrapper_buffer), 1)); + } + return vaStatus; +} + +static VAStatus +i965_decoder_render_picture(VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + + for (i = 0; i < num_buffers && vaStatus == VA_STATUS_SUCCESS; i++) { + struct object_buffer *obj_buffer = BUFFER(buffers[i]); + + if (!obj_buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + + switch (obj_buffer->type) { + case VAPictureParameterBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(picture_parameter); + break; + + case VAIQMatrixBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(iq_matrix); + break; + + case VABitPlaneBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(bit_plane); + break; + + case VASliceParameterBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(slice_parameter); + break; + + case VASliceDataBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(slice_data); + break; + + case VAHuffmanTableBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(huffman_table); + break; + + case VAProbabilityBufferType: + vaStatus = I965_RENDER_DECODE_BUFFER(probability_data); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + break; + } + } + + if ((vaStatus == VA_STATUS_SUCCESS) && + (obj_context->wrapper_context != VA_INVALID_ID)) + vaStatus = i965_decoder_wrapper_picture(ctx, context, buffers, num_buffers); + + return vaStatus; +} + +#define I965_RENDER_ENCODE_BUFFER(name) I965_RENDER_BUFFER(encode, name) + +#define DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(name, member) DEF_RENDER_SINGLE_BUFFER_FUNC(encode, name, member) +// DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(sequence_parameter, seq_param) +// DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(picture_parameter, pic_param) +// DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(picture_control, pic_control) +DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(qmatrix, q_matrix) +DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(iqmatrix, iq_matrix) +DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(huffman_table, huffman_table) +/* extended buffer */ +DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(sequence_parameter_ext, seq_param_ext) +DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(picture_parameter_ext, pic_param_ext) + +#define DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(name, member) DEF_RENDER_MULTI_BUFFER_FUNC(encode, name, member) +// DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(slice_parameter, slice_params) +DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(slice_parameter_ext, slice_params_ext) + +DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(packed_header_params_ext, packed_header_params_ext) +DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(packed_header_data_ext, packed_header_data_ext) + +static VAStatus +i965_encoder_render_packed_header_parameter_buffer(VADriverContextP ctx, + struct object_context *obj_context, + struct object_buffer *obj_buffer, + int type_index) +{ + struct encode_state *encode = &obj_context->codec_state.encode; + + ASSERT_RET(obj_buffer->buffer_store->bo == NULL, VA_STATUS_ERROR_INVALID_BUFFER); + ASSERT_RET(obj_buffer->buffer_store->buffer, VA_STATUS_ERROR_INVALID_BUFFER); + i965_release_buffer_store(&encode->packed_header_param[type_index]); + i965_reference_buffer_store(&encode->packed_header_param[type_index], obj_buffer->buffer_store); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +i965_encoder_render_packed_header_data_buffer(VADriverContextP ctx, + struct object_context *obj_context, + struct object_buffer *obj_buffer, + int type_index) +{ + struct encode_state *encode = &obj_context->codec_state.encode; + + ASSERT_RET(obj_buffer->buffer_store->bo == NULL, VA_STATUS_ERROR_INVALID_BUFFER); + ASSERT_RET(obj_buffer->buffer_store->buffer, VA_STATUS_ERROR_INVALID_BUFFER); + i965_release_buffer_store(&encode->packed_header_data[type_index]); + i965_reference_buffer_store(&encode->packed_header_data[type_index], obj_buffer->buffer_store); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +i965_encoder_render_misc_parameter_buffer(VADriverContextP ctx, + struct object_context *obj_context, + struct object_buffer *obj_buffer) +{ + struct encode_state *encode = &obj_context->codec_state.encode; + VAEncMiscParameterBuffer *param = NULL; + + ASSERT_RET(obj_buffer->buffer_store->bo == NULL, VA_STATUS_ERROR_INVALID_BUFFER); + ASSERT_RET(obj_buffer->buffer_store->buffer, VA_STATUS_ERROR_INVALID_BUFFER); + + param = (VAEncMiscParameterBuffer *)obj_buffer->buffer_store->buffer; + + if (param->type >= ARRAY_ELEMS(encode->misc_param)) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + i965_release_buffer_store(&encode->misc_param[param->type]); + i965_reference_buffer_store(&encode->misc_param[param->type], obj_buffer->buffer_store); + + return VA_STATUS_SUCCESS; +} + +static VAStatus +i965_encoder_render_picture(VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + struct object_config *obj_config; + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + struct encode_state *encode; + int i; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + obj_config = obj_context->obj_config; + ASSERT_RET(obj_config, VA_STATUS_ERROR_INVALID_CONFIG); + + encode = &obj_context->codec_state.encode; + for (i = 0; i < num_buffers; i++) { + struct object_buffer *obj_buffer = BUFFER(buffers[i]); + + if (!obj_buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + + switch (obj_buffer->type) { + case VAQMatrixBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(qmatrix); + break; + + case VAIQMatrixBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(iqmatrix); + break; + + case VAEncSequenceParameterBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(sequence_parameter_ext); + break; + + case VAEncPictureParameterBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(picture_parameter_ext); + break; + + case VAHuffmanTableBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(huffman_table); + break; + + case VAEncSliceParameterBufferType: + vaStatus = I965_RENDER_ENCODE_BUFFER(slice_parameter_ext); + if (vaStatus == VA_STATUS_SUCCESS) { + /* When the max number of slices is updated, it also needs + * to reallocate the arrays that is used to store + * the packed data index/count for the slice + */ + if (!(encode->packed_header_flag & VA_ENC_PACKED_HEADER_SLICE)) { + encode->slice_index++; + } + if (encode->slice_index == encode->max_slice_num) { + int slice_num = encode->max_slice_num; + encode->slice_rawdata_index = realloc(encode->slice_rawdata_index, + (slice_num + NUM_SLICES) * sizeof(int)); + encode->slice_rawdata_count = realloc(encode->slice_rawdata_count, + (slice_num + NUM_SLICES) * sizeof(int)); + encode->slice_header_index = realloc(encode->slice_header_index, + (slice_num + NUM_SLICES) * sizeof(int)); + memset(encode->slice_rawdata_index + slice_num, 0, + sizeof(int) * NUM_SLICES); + memset(encode->slice_rawdata_count + slice_num, 0, + sizeof(int) * NUM_SLICES); + memset(encode->slice_header_index + slice_num, 0, + sizeof(int) * NUM_SLICES); + + encode->max_slice_num += NUM_SLICES; + if ((encode->slice_rawdata_index == NULL) || + (encode->slice_header_index == NULL) || + (encode->slice_rawdata_count == NULL)) { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + } + } + break; + + case VAEncPackedHeaderParameterBufferType: + { + VAEncPackedHeaderParameterBuffer *param = (VAEncPackedHeaderParameterBuffer *)obj_buffer->buffer_store->buffer; + encode->last_packed_header_type = param->type; + + if ((param->type == VAEncPackedHeaderRawData) || + (param->type == VAEncPackedHeaderSlice)) { + vaStatus = I965_RENDER_ENCODE_BUFFER(packed_header_params_ext); + } else if((obj_config->profile == VAProfileHEVCMain) && + (encode->last_packed_header_type == VAEncPackedHeaderSequence)) { + vaStatus = i965_encoder_render_packed_header_parameter_buffer(ctx, + obj_context, + obj_buffer, + va_enc_packed_type_to_idx(encode->last_packed_header_type) + encode->vps_sps_seq_index); + } else { + vaStatus = i965_encoder_render_packed_header_parameter_buffer(ctx, + obj_context, + obj_buffer, + va_enc_packed_type_to_idx(encode->last_packed_header_type)); + } + break; + } + + case VAEncPackedHeaderDataBufferType: + { + if (encode->last_packed_header_type == 0) { + WARN_ONCE("the packed header data is passed without type!\n"); + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + return vaStatus; + } + if (encode->last_packed_header_type == VAEncPackedHeaderRawData || + encode->last_packed_header_type == VAEncPackedHeaderSlice) { + vaStatus = I965_RENDER_ENCODE_BUFFER(packed_header_data_ext); + + /* When the PACKED_SLICE_HEADER flag is passed, it will use + * the packed_slice_header as the delimeter to decide how + * the packed rawdata is inserted for the given slice. + * Otherwise it will use the VAEncSequenceParameterBuffer + * as the delimeter + */ + if (encode->packed_header_flag & VA_ENC_PACKED_HEADER_SLICE) { + /* store the first index of the packed header data for current slice */ + if (encode->slice_rawdata_index[encode->slice_index] == 0) { + encode->slice_rawdata_index[encode->slice_index] = + SLICE_PACKED_DATA_INDEX_TYPE | (encode->num_packed_header_data_ext - 1); + } + encode->slice_rawdata_count[encode->slice_index]++; + if (encode->last_packed_header_type == VAEncPackedHeaderSlice) { + /* find one packed slice_header delimeter. And the following + * packed data is for the next slice + */ + encode->slice_header_index[encode->slice_index] = + SLICE_PACKED_DATA_INDEX_TYPE | (encode->num_packed_header_data_ext - 1); + encode->slice_index++; + /* Reallocate the buffer to record the index/count of + * packed_data for one slice. + */ + if (encode->slice_index == encode->max_slice_num) { + int slice_num = encode->max_slice_num; + + encode->slice_rawdata_index = realloc(encode->slice_rawdata_index, + (slice_num + NUM_SLICES) * sizeof(int)); + encode->slice_rawdata_count = realloc(encode->slice_rawdata_count, + (slice_num + NUM_SLICES) * sizeof(int)); + encode->slice_header_index = realloc(encode->slice_header_index, + (slice_num + NUM_SLICES) * sizeof(int)); + memset(encode->slice_rawdata_index + slice_num, 0, + sizeof(int) * NUM_SLICES); + memset(encode->slice_rawdata_count + slice_num, 0, + sizeof(int) * NUM_SLICES); + memset(encode->slice_header_index + slice_num, 0, + sizeof(int) * NUM_SLICES); + encode->max_slice_num += NUM_SLICES; + } + } + } else { + if (vaStatus == VA_STATUS_SUCCESS) { + /* store the first index of the packed header data for current slice */ + if (encode->slice_rawdata_index[encode->slice_index] == 0) { + encode->slice_rawdata_index[encode->slice_index] = + SLICE_PACKED_DATA_INDEX_TYPE | (encode->num_packed_header_data_ext - 1); + } + encode->slice_rawdata_count[encode->slice_index]++; + if (encode->last_packed_header_type == VAEncPackedHeaderSlice) { + if (encode->slice_header_index[encode->slice_index] == 0) { + encode->slice_header_index[encode->slice_index] = + SLICE_PACKED_DATA_INDEX_TYPE | (encode->num_packed_header_data_ext - 1); + } else { + WARN_ONCE("Multi slice header data is passed for" + " slice %d!\n", encode->slice_index); + } + } + } + } + } else { + ASSERT_RET(encode->last_packed_header_type == VAEncPackedHeaderSequence || + encode->last_packed_header_type == VAEncPackedHeaderPicture || + encode->last_packed_header_type == VAEncPackedHeaderSlice || + (((encode->last_packed_header_type & VAEncPackedHeaderMiscMask) == VAEncPackedHeaderMiscMask) && + ((encode->last_packed_header_type & (~VAEncPackedHeaderMiscMask)) != 0)), + VA_STATUS_ERROR_ENCODING_ERROR); + + if((obj_config->profile == VAProfileHEVCMain) && + (encode->last_packed_header_type == VAEncPackedHeaderSequence)) { + + vaStatus = i965_encoder_render_packed_header_data_buffer(ctx, + obj_context, + obj_buffer, + va_enc_packed_type_to_idx(encode->last_packed_header_type) + encode->vps_sps_seq_index); + encode->vps_sps_seq_index = (encode->vps_sps_seq_index + 1) % I965_SEQ_PACKED_HEADER_END; + }else{ + vaStatus = i965_encoder_render_packed_header_data_buffer(ctx, + obj_context, + obj_buffer, + va_enc_packed_type_to_idx(encode->last_packed_header_type)); + + } + } + encode->last_packed_header_type = 0; + break; + } + + case VAEncMiscParameterBufferType: + vaStatus = i965_encoder_render_misc_parameter_buffer(ctx, + obj_context, + obj_buffer); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + break; + } + } + + return vaStatus; +} + +#define I965_RENDER_PROC_BUFFER(name) I965_RENDER_BUFFER(proc, name) + +#define DEF_RENDER_PROC_SINGLE_BUFFER_FUNC(name, member) DEF_RENDER_SINGLE_BUFFER_FUNC(proc, name, member) +DEF_RENDER_PROC_SINGLE_BUFFER_FUNC(pipeline_parameter, pipeline_param) + +static VAStatus +i965_proc_render_picture(VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + + for (i = 0; i < num_buffers && vaStatus == VA_STATUS_SUCCESS; i++) { + struct object_buffer *obj_buffer = BUFFER(buffers[i]); + + if (!obj_buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + + switch (obj_buffer->type) { + case VAProcPipelineParameterBufferType: + vaStatus = I965_RENDER_PROC_BUFFER(pipeline_parameter); + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + break; + } + } + + return vaStatus; +} + +VAStatus +i965_RenderPicture(VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context; + struct object_config *obj_config; + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + + obj_context = CONTEXT(context); + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + + if (num_buffers <= 0) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + obj_config = obj_context->obj_config; + ASSERT_RET(obj_config, VA_STATUS_ERROR_INVALID_CONFIG); + + if (VAEntrypointVideoProc == obj_config->entrypoint) { + vaStatus = i965_proc_render_picture(ctx, context, buffers, num_buffers); + } else if ((VAEntrypointEncSlice == obj_config->entrypoint ) || + (VAEntrypointEncPicture == obj_config->entrypoint)) { + vaStatus = i965_encoder_render_picture(ctx, context, buffers, num_buffers); + } else { + vaStatus = i965_decoder_render_picture(ctx, context, buffers, num_buffers); + } + + return vaStatus; +} + +VAStatus +i965_EndPicture(VADriverContextP ctx, VAContextID context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_context *obj_context = CONTEXT(context); + struct object_config *obj_config; + + ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); + obj_config = obj_context->obj_config; + ASSERT_RET(obj_config, VA_STATUS_ERROR_INVALID_CONFIG); + + if (obj_context->codec_type == CODEC_PROC) { + ASSERT_RET(VAEntrypointVideoProc == obj_config->entrypoint, VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT); + } else if (obj_context->codec_type == CODEC_ENC) { + ASSERT_RET(((VAEntrypointEncSlice == obj_config->entrypoint) || (VAEntrypointEncPicture == obj_config->entrypoint)), VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT); + + if (obj_context->codec_state.encode.num_packed_header_params_ext != + obj_context->codec_state.encode.num_packed_header_data_ext) { + WARN_ONCE("the packed header/data is not paired for encoding!\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + if (!(obj_context->codec_state.encode.pic_param || + obj_context->codec_state.encode.pic_param_ext)) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + if (!(obj_context->codec_state.encode.seq_param || + obj_context->codec_state.encode.seq_param_ext) && + (VAEntrypointEncPicture != obj_config->entrypoint)) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + if ((obj_context->codec_state.encode.num_slice_params <=0) && + (obj_context->codec_state.encode.num_slice_params_ext <=0) && + (obj_config->profile != VAProfileVP8Version0_3)) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + + if ((obj_context->codec_state.encode.packed_header_flag & VA_ENC_PACKED_HEADER_SLICE) && + (obj_context->codec_state.encode.num_slice_params_ext != + obj_context->codec_state.encode.slice_index)) { + WARN_ONCE("packed slice_header data is missing for some slice" + " under packed SLICE_HEADER mode\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + } else { + if (obj_context->codec_state.decode.pic_param == NULL) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + if (obj_context->codec_state.decode.num_slice_params <=0) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + if (obj_context->codec_state.decode.num_slice_datas <=0) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + + if (obj_context->codec_state.decode.num_slice_params != + obj_context->codec_state.decode.num_slice_datas) { + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + + if (obj_context->wrapper_context != VA_INVALID_ID) { + /* call the vaEndPicture of wrapped driver */ + VADriverContextP pdrvctx; + VAStatus va_status; + + pdrvctx = i965->wrapper_pdrvctx; + CALL_VTABLE(pdrvctx, va_status, + vaEndPicture(pdrvctx, obj_context->wrapper_context)); + + return va_status; + } + } + + ASSERT_RET(obj_context->hw_context->run, VA_STATUS_ERROR_OPERATION_FAILED); + return obj_context->hw_context->run(ctx, obj_config->profile, &obj_context->codec_state, obj_context->hw_context); +} + +VAStatus +i965_SyncSurface(VADriverContextP ctx, + VASurfaceID render_target) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = SURFACE(render_target); + + ASSERT_RET(obj_surface, VA_STATUS_ERROR_INVALID_SURFACE); + + if(obj_surface->bo) + drm_intel_bo_wait_rendering(obj_surface->bo); + + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_QuerySurfaceStatus(VADriverContextP ctx, + VASurfaceID render_target, + VASurfaceStatus *status) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = SURFACE(render_target); + + ASSERT_RET(obj_surface, VA_STATUS_ERROR_INVALID_SURFACE); + + if (obj_surface->bo) { + if (drm_intel_bo_busy(obj_surface->bo)){ + *status = VASurfaceRendering; + } + else { + *status = VASurfaceReady; + } + } else { + *status = VASurfaceReady; + } + + return VA_STATUS_SUCCESS; +} + +static VADisplayAttribute * +get_display_attribute(VADriverContextP ctx, VADisplayAttribType type) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + unsigned int i; + + if (!i965->display_attributes) + return NULL; + + for (i = 0; i < i965->num_display_attributes; i++) { + if (i965->display_attributes[i].type == type) + return &i965->display_attributes[i]; + } + return NULL; +} + +static void +i965_display_attributes_terminate(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + + if (i965->display_attributes) { + free(i965->display_attributes); + i965->display_attributes = NULL; + i965->num_display_attributes = 0; + } +} + +static bool +i965_display_attributes_init(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + + i965->num_display_attributes = ARRAY_ELEMS(i965_display_attributes); + i965->display_attributes = malloc( + i965->num_display_attributes * sizeof(i965->display_attributes[0])); + if (!i965->display_attributes) + goto error; + + memcpy( + i965->display_attributes, + i965_display_attributes, + sizeof(i965_display_attributes) + ); + + i965->rotation_attrib = get_display_attribute(ctx, VADisplayAttribRotation); + i965->brightness_attrib = get_display_attribute(ctx, VADisplayAttribBrightness); + i965->contrast_attrib = get_display_attribute(ctx, VADisplayAttribContrast); + i965->hue_attrib = get_display_attribute(ctx, VADisplayAttribHue); + i965->saturation_attrib = get_display_attribute(ctx, VADisplayAttribSaturation); + + if (!i965->rotation_attrib || + !i965->brightness_attrib || + !i965->contrast_attrib || + !i965->hue_attrib || + !i965->saturation_attrib) { + goto error; + } + return true; + +error: + i965_display_attributes_terminate(ctx); + return false; +} + +/* + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus +i965_QueryDisplayAttributes( + VADriverContextP ctx, + VADisplayAttribute *attribs, /* out */ + int *num_attribs_ptr /* out */ +) +{ + const int num_attribs = ARRAY_ELEMS(i965_display_attributes); + + if (attribs && num_attribs > 0) + memcpy(attribs, i965_display_attributes, sizeof(i965_display_attributes)); + + if (num_attribs_ptr) + *num_attribs_ptr = num_attribs; + + return VA_STATUS_SUCCESS; +} + +/* + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus +i965_GetDisplayAttributes( + VADriverContextP ctx, + VADisplayAttribute *attribs, /* inout */ + int num_attribs /* in */ +) +{ + int i; + + for (i = 0; i < num_attribs; i++) { + VADisplayAttribute *src_attrib, * const dst_attrib = &attribs[i]; + + src_attrib = get_display_attribute(ctx, dst_attrib->type); + if (src_attrib && (src_attrib->flags & VA_DISPLAY_ATTRIB_GETTABLE)) { + dst_attrib->min_value = src_attrib->min_value; + dst_attrib->max_value = src_attrib->max_value; + dst_attrib->value = src_attrib->value; + } + else + dst_attrib->flags = VA_DISPLAY_ATTRIB_NOT_SUPPORTED; + } + return VA_STATUS_SUCCESS; +} + +/* + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus +i965_SetDisplayAttributes( + VADriverContextP ctx, + VADisplayAttribute *attribs, /* in */ + int num_attribs /* in */ +) +{ + int i; + + for (i = 0; i < num_attribs; i++) { + VADisplayAttribute *dst_attrib, * const src_attrib = &attribs[i]; + + dst_attrib = get_display_attribute(ctx, src_attrib->type); + if (!dst_attrib) + return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; + + if (!(dst_attrib->flags & VA_DISPLAY_ATTRIB_SETTABLE)) + continue; + + if (src_attrib->value < dst_attrib->min_value || + src_attrib->value > dst_attrib->max_value) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + dst_attrib->value = src_attrib->value; + /* XXX: track modified attributes through timestamps */ + } + return VA_STATUS_SUCCESS; +} + +VAStatus +i965_DbgCopySurfaceToBuffer(VADriverContextP ctx, + VASurfaceID surface, + void **buffer, /* out */ + unsigned int *stride) /* out */ +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +static void +i965_destroy_heap(struct object_heap *heap, + void (*func)(struct object_heap *heap, struct object_base *object)) +{ + struct object_base *object; + object_heap_iterator iter; + + object = object_heap_first(heap, &iter); + + while (object) { + if (func) + func(heap, object); + + object = object_heap_next(heap, &iter); + } + + object_heap_destroy(heap); +} + + +VAStatus +i965_DestroyImage(VADriverContextP ctx, VAImageID image); + +VAStatus +i965_CreateImage(VADriverContextP ctx, + VAImageFormat *format, + int width, + int height, + VAImage *out_image) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_image *obj_image; + VAStatus va_status = VA_STATUS_ERROR_OPERATION_FAILED; + VAImageID image_id; + unsigned int size2, size, awidth, aheight; + + out_image->image_id = VA_INVALID_ID; + out_image->buf = VA_INVALID_ID; + + image_id = NEW_IMAGE_ID(); + if (image_id == VA_INVALID_ID) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + obj_image = IMAGE(image_id); + if (!obj_image) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + obj_image->bo = NULL; + obj_image->palette = NULL; + obj_image->derived_surface = VA_INVALID_ID; + + VAImage * const image = &obj_image->image; + image->image_id = image_id; + image->buf = VA_INVALID_ID; + + awidth = ALIGN(width, i965->codec_info->min_linear_wpitch); + + if ((format->fourcc == VA_FOURCC_YV12) || + (format->fourcc == VA_FOURCC_I420)) { + if (awidth % 128 != 0) { + awidth = ALIGN(width, 128); + } + } + + aheight = ALIGN(height, i965->codec_info->min_linear_hpitch); + size = awidth * aheight; + size2 = (awidth / 2) * (aheight / 2); + + image->num_palette_entries = 0; + image->entry_bytes = 0; + memset(image->component_order, 0, sizeof(image->component_order)); + + switch (format->fourcc) { + case VA_FOURCC_IA44: + case VA_FOURCC_AI44: + image->num_planes = 1; + image->pitches[0] = awidth; + image->offsets[0] = 0; + image->data_size = image->offsets[0] + image->pitches[0] * aheight; + image->num_palette_entries = 16; + image->entry_bytes = 3; + image->component_order[0] = 'R'; + image->component_order[1] = 'G'; + image->component_order[2] = 'B'; + break; + case VA_FOURCC_IA88: + case VA_FOURCC_AI88: + image->num_planes = 1; + image->pitches[0] = awidth * 2; + image->offsets[0] = 0; + image->data_size = image->offsets[0] + image->pitches[0] * aheight; + image->num_palette_entries = 256; + image->entry_bytes = 3; + image->component_order[0] = 'R'; + image->component_order[1] = 'G'; + image->component_order[2] = 'B'; + break; + case VA_FOURCC_ARGB: + case VA_FOURCC_ABGR: + case VA_FOURCC_BGRA: + case VA_FOURCC_RGBA: + case VA_FOURCC_BGRX: + case VA_FOURCC_RGBX: + image->num_planes = 1; + image->pitches[0] = awidth * 4; + image->offsets[0] = 0; + image->data_size = image->offsets[0] + image->pitches[0] * aheight; + break; + case VA_FOURCC_YV12: + image->num_planes = 3; + image->pitches[0] = awidth; + image->offsets[0] = 0; + image->pitches[1] = awidth / 2; + image->offsets[1] = size; + image->pitches[2] = awidth / 2; + image->offsets[2] = size + size2; + image->data_size = size + 2 * size2; + break; + case VA_FOURCC_I420: + image->num_planes = 3; + image->pitches[0] = awidth; + image->offsets[0] = 0; + image->pitches[1] = awidth / 2; + image->offsets[1] = size; + image->pitches[2] = awidth / 2; + image->offsets[2] = size + size2; + image->data_size = size + 2 * size2; + break; + case VA_FOURCC_422H: + image->num_planes = 3; + image->pitches[0] = awidth; + image->offsets[0] = 0; + image->pitches[1] = awidth / 2; + image->offsets[1] = size; + image->pitches[2] = awidth / 2; + image->offsets[2] = size + (awidth / 2) * aheight; + image->data_size = size + 2 * ((awidth / 2) * aheight); + break; + case VA_FOURCC_NV12: + image->num_planes = 2; + image->pitches[0] = awidth; + image->offsets[0] = 0; + image->pitches[1] = awidth; + image->offsets[1] = size; + image->data_size = size + 2 * size2; + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + image->num_planes = 1; + image->pitches[0] = awidth * 2; + image->offsets[0] = 0; + image->data_size = size * 2; + break; + default: + goto error; + } + + va_status = i965_CreateBuffer(ctx, 0, VAImageBufferType, + image->data_size, 1, NULL, &image->buf); + if (va_status != VA_STATUS_SUCCESS) + goto error; + + struct object_buffer *obj_buffer = BUFFER(image->buf); + + if (!obj_buffer || + !obj_buffer->buffer_store || + !obj_buffer->buffer_store->bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + obj_image->bo = obj_buffer->buffer_store->bo; + dri_bo_reference(obj_image->bo); + + if (image->num_palette_entries > 0 && image->entry_bytes > 0) { + obj_image->palette = malloc(image->num_palette_entries * sizeof(*obj_image->palette)); + if (!obj_image->palette) + goto error; + } + + image->image_id = image_id; + image->format = *format; + image->width = width; + image->height = height; + + *out_image = *image; + return VA_STATUS_SUCCESS; + + error: + i965_DestroyImage(ctx, image_id); + return va_status; +} + +VAStatus +i965_check_alloc_surface_bo(VADriverContextP ctx, + struct object_surface *obj_surface, + int tiled, + unsigned int fourcc, + unsigned int subsampling) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int region_width, region_height; + + if (obj_surface->bo) { + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(obj_surface->fourcc == fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(obj_surface->subsampling == subsampling, VA_STATUS_ERROR_INVALID_SURFACE); + return VA_STATUS_SUCCESS; + } + + obj_surface->x_cb_offset = 0; /* X offset is always 0 */ + obj_surface->x_cr_offset = 0; + + int bpp_1stplane = bpp_1stplane_by_fourcc(fourcc); + + if (obj_surface->user_h_stride_set) { + ASSERT_RET(IS_ALIGNED(obj_surface->width, 128), VA_STATUS_ERROR_INVALID_PARAMETER); + } else + obj_surface->width = ALIGN(obj_surface->orig_width * bpp_1stplane, 128); + + if (obj_surface->user_v_stride_set) { + ASSERT_RET(IS_ALIGNED(obj_surface->height, 32), VA_STATUS_ERROR_INVALID_PARAMETER); + } else + obj_surface->height = ALIGN(obj_surface->orig_height, 32); + + if ((tiled && !obj_surface->user_disable_tiling)) { + ASSERT_RET(fourcc != VA_FOURCC_I420 && + fourcc != VA_FOURCC_IYUV && + fourcc != VA_FOURCC_YV12, + VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT); + + region_height = obj_surface->height; + + switch (fourcc) { + case VA_FOURCC_NV12: + case VA_FOURCC_P010: + assert(subsampling == SUBSAMPLE_YUV420); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->height; + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32); + + break; + + case VA_FOURCC_IMC1: + assert(subsampling == SUBSAMPLE_YUV420); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->y_cb_offset = obj_surface->y_cr_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_IMC3: + assert(subsampling == SUBSAMPLE_YUV420); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_422H: + assert(subsampling == SUBSAMPLE_YUV422H); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_422V: + assert(subsampling == SUBSAMPLE_YUV422V); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_411P: + assert(subsampling == SUBSAMPLE_YUV411); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width / 4; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_444P: + assert(subsampling == SUBSAMPLE_YUV444); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->cb_cr_width = obj_surface->orig_width; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); + region_width = obj_surface->width; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32) * 2; + + break; + + case VA_FOURCC_Y800: + assert(subsampling == SUBSAMPLE_YUV400); + obj_surface->cb_cr_pitch = 0; + obj_surface->cb_cr_width = 0; + obj_surface->cb_cr_height = 0; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + region_width = obj_surface->width; + region_height = obj_surface->height; + + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + assert(subsampling == SUBSAMPLE_YUV422H); + obj_surface->width = ALIGN(obj_surface->orig_width * 2, 128); + obj_surface->cb_cr_pitch = obj_surface->width; + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + region_width = obj_surface->width; + region_height = obj_surface->height; + + break; + + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + assert(subsampling == SUBSAMPLE_RGBX); + + obj_surface->width = ALIGN(obj_surface->orig_width * 4, 128); + region_width = obj_surface->width; + region_height = obj_surface->height; + break; + + default: + /* Never get here */ + ASSERT_RET(0, VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT); + break; + } + } else { + assert(subsampling == SUBSAMPLE_YUV420 || + subsampling == SUBSAMPLE_YUV422H || + subsampling == SUBSAMPLE_YUV422V || + subsampling == SUBSAMPLE_RGBX); + + region_width = obj_surface->width; + region_height = obj_surface->height; + + switch (fourcc) { + case VA_FOURCC_NV12: + case VA_FOURCC_P010: + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = obj_surface->width; + region_height = obj_surface->height + obj_surface->height / 2; + break; + + case VA_FOURCC_YV16: + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->y_cb_offset = obj_surface->y_cr_offset + ALIGN(obj_surface->cb_cr_height, 32) / 2; + obj_surface->cb_cr_pitch = obj_surface->width / 2; + region_height = obj_surface->height + ALIGN(obj_surface->cb_cr_height, 32); + break; + + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + if (fourcc == VA_FOURCC_YV12) { + obj_surface->y_cr_offset = obj_surface->height; + obj_surface->y_cb_offset = obj_surface->height + obj_surface->height / 4; + } else { + obj_surface->y_cb_offset = obj_surface->height; + obj_surface->y_cr_offset = obj_surface->height + obj_surface->height / 4; + } + + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height / 2; + obj_surface->cb_cr_pitch = obj_surface->width / 2; + region_height = obj_surface->height + obj_surface->height / 2; + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + obj_surface->width = ALIGN(obj_surface->orig_width * 2, i965->codec_info->min_linear_wpitch); + obj_surface->y_cb_offset = 0; + obj_surface->y_cr_offset = 0; + obj_surface->cb_cr_width = obj_surface->orig_width / 2; + obj_surface->cb_cr_height = obj_surface->orig_height; + obj_surface->cb_cr_pitch = obj_surface->width; + region_width = obj_surface->width; + region_height = obj_surface->height; + break; + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + obj_surface->width = ALIGN(obj_surface->orig_width * 4, i965->codec_info->min_linear_wpitch); + region_width = obj_surface->width; + region_height = obj_surface->height; + break; + + default: + /* Never get here */ + ASSERT_RET(0, VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT); + break; + } + } + + obj_surface->size = ALIGN(region_width * region_height, 0x1000); + + if ((tiled && !obj_surface->user_disable_tiling)) { + uint32_t tiling_mode = I915_TILING_Y; /* always uses Y-tiled format */ + unsigned long pitch; + + obj_surface->bo = drm_intel_bo_alloc_tiled(i965->intel.bufmgr, + "vaapi surface", + region_width, + region_height, + 1, + &tiling_mode, + &pitch, + 0); + assert(tiling_mode == I915_TILING_Y); + assert(pitch == obj_surface->width); + } else { + obj_surface->bo = dri_bo_alloc(i965->intel.bufmgr, + "vaapi surface", + obj_surface->size, + 0x1000); + } + + obj_surface->fourcc = fourcc; + obj_surface->subsampling = subsampling; + assert(obj_surface->bo); + return VA_STATUS_SUCCESS; +} + +VAStatus i965_DeriveImage(VADriverContextP ctx, + VASurfaceID surface, + VAImage *out_image) /* out */ +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_image *obj_image; + struct object_surface *obj_surface; + VAImageID image_id; + unsigned int w_pitch; + VAStatus va_status = VA_STATUS_ERROR_OPERATION_FAILED; + + out_image->image_id = VA_INVALID_ID; + obj_surface = SURFACE(surface); + + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + if (!obj_surface->bo) { + unsigned int is_tiled = 0; + unsigned int fourcc = VA_FOURCC_YV12; + i965_guess_surface_format(ctx, surface, &fourcc, &is_tiled); + int sampling = get_sampling_from_fourcc(fourcc); + va_status = i965_check_alloc_surface_bo(ctx, obj_surface, is_tiled, fourcc, sampling); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + } + + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + + w_pitch = obj_surface->width; + + image_id = NEW_IMAGE_ID(); + + if (image_id == VA_INVALID_ID) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + obj_image = IMAGE(image_id); + + if (!obj_image) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + obj_image->bo = NULL; + obj_image->palette = NULL; + obj_image->derived_surface = VA_INVALID_ID; + + VAImage * const image = &obj_image->image; + + memset(image, 0, sizeof(*image)); + image->image_id = image_id; + image->buf = VA_INVALID_ID; + image->num_palette_entries = 0; + image->entry_bytes = 0; + image->width = obj_surface->orig_width; + image->height = obj_surface->orig_height; + image->data_size = obj_surface->size; + + image->format.fourcc = obj_surface->fourcc; + image->format.byte_order = VA_LSB_FIRST; + image->format.bits_per_pixel = get_bpp_from_fourcc(obj_surface->fourcc); + + if (!image->format.bits_per_pixel) + goto error; + + switch (image->format.fourcc) { + case VA_FOURCC_YV12: + image->num_planes = 3; + image->pitches[0] = w_pitch; /* Y */ + image->offsets[0] = 0; + image->pitches[1] = obj_surface->cb_cr_pitch; /* V */ + image->offsets[1] = w_pitch * obj_surface->y_cr_offset; + image->pitches[2] = obj_surface->cb_cr_pitch; /* U */ + image->offsets[2] = w_pitch * obj_surface->y_cb_offset; + break; + + case VA_FOURCC_YV16: + image->num_planes = 3; + image->pitches[0] = w_pitch; /* Y */ + image->offsets[0] = 0; + image->pitches[1] = obj_surface->cb_cr_pitch; /* V */ + image->offsets[1] = w_pitch * obj_surface->y_cr_offset; + image->pitches[2] = obj_surface->cb_cr_pitch; /* U */ + image->offsets[2] = w_pitch * obj_surface->y_cb_offset; + break; + + case VA_FOURCC_NV12: + case VA_FOURCC_P010: + image->num_planes = 2; + image->pitches[0] = w_pitch; /* Y */ + image->offsets[0] = 0; + image->pitches[1] = obj_surface->cb_cr_pitch; /* UV */ + image->offsets[1] = w_pitch * obj_surface->y_cb_offset; + break; + + case VA_FOURCC_I420: + case VA_FOURCC_422H: + case VA_FOURCC_IMC3: + case VA_FOURCC_444P: + case VA_FOURCC_422V: + case VA_FOURCC_411P: + image->num_planes = 3; + image->pitches[0] = w_pitch; /* Y */ + image->offsets[0] = 0; + image->pitches[1] = obj_surface->cb_cr_pitch; /* U */ + image->offsets[1] = w_pitch * obj_surface->y_cb_offset; + image->pitches[2] = obj_surface->cb_cr_pitch; /* V */ + image->offsets[2] = w_pitch * obj_surface->y_cr_offset; + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + case VA_FOURCC_Y800: + image->num_planes = 1; + image->pitches[0] = obj_surface->width; /* Y, width is aligned already */ + image->offsets[0] = 0; + break; + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + image->num_planes = 1; + image->pitches[0] = obj_surface->width; + + switch (image->format.fourcc) { + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + image->format.red_mask = 0x000000ff; + image->format.green_mask = 0x0000ff00; + image->format.blue_mask = 0x00ff0000; + image->format.alpha_mask = 0x00000000; + break; + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + image->format.red_mask = 0x00ff0000; + image->format.green_mask = 0x0000ff00; + image->format.blue_mask = 0x000000ff; + image->format.alpha_mask = 0x00000000; + break; + default: + goto error; + } + + switch (image->format.fourcc) { + case VA_FOURCC_RGBA: + case VA_FOURCC_BGRA: + image->format.depth = 32; + break; + case VA_FOURCC_RGBX: + case VA_FOURCC_BGRX: + image->format.depth = 24; + break; + default: + goto error; + } + + break; + default: + goto error; + } + + va_status = i965_create_buffer_internal(ctx, 0, VAImageBufferType, + obj_surface->size, 1, NULL, obj_surface->bo, &image->buf); + if (va_status != VA_STATUS_SUCCESS) + goto error; + + struct object_buffer *obj_buffer = BUFFER(image->buf); + + if (!obj_buffer || + !obj_buffer->buffer_store || + !obj_buffer->buffer_store->bo) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + obj_image->bo = obj_buffer->buffer_store->bo; + dri_bo_reference(obj_image->bo); + + if (image->num_palette_entries > 0 && image->entry_bytes > 0) { + obj_image->palette = malloc(image->num_palette_entries * sizeof(*obj_image->palette)); + if (!obj_image->palette) { + va_status = VA_STATUS_ERROR_ALLOCATION_FAILED; + goto error; + } + } + + *out_image = *image; + obj_surface->flags |= SURFACE_DERIVED; + obj_surface->derived_image_id = image_id; + obj_image->derived_surface = surface; + + return VA_STATUS_SUCCESS; + + error: + i965_DestroyImage(ctx, image_id); + return va_status; +} + +static void +i965_destroy_image(struct object_heap *heap, struct object_base *obj) +{ + object_heap_free(heap, obj); +} + + +VAStatus +i965_DestroyImage(VADriverContextP ctx, VAImageID image) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_image *obj_image = IMAGE(image); + struct object_surface *obj_surface; + + if (!obj_image) + return VA_STATUS_SUCCESS; + + dri_bo_unreference(obj_image->bo); + obj_image->bo = NULL; + + if (obj_image->image.buf != VA_INVALID_ID) { + i965_DestroyBuffer(ctx, obj_image->image.buf); + obj_image->image.buf = VA_INVALID_ID; + } + + if (obj_image->palette) { + free(obj_image->palette); + obj_image->palette = NULL; + } + + obj_surface = SURFACE(obj_image->derived_surface); + + if (obj_surface) { + obj_surface->flags &= ~SURFACE_DERIVED; + obj_surface->derived_image_id = VA_INVALID_ID; + } + + i965_destroy_image(&i965->image_heap, (struct object_base *)obj_image); + + return VA_STATUS_SUCCESS; +} + +/* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VASubpicture struct + */ +VAStatus +i965_SetImagePalette(VADriverContextP ctx, + VAImageID image, + unsigned char *palette) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + unsigned int i; + + struct object_image *obj_image = IMAGE(image); + if (!obj_image) + return VA_STATUS_ERROR_INVALID_IMAGE; + + if (!obj_image->palette) + return VA_STATUS_ERROR_ALLOCATION_FAILED; /* XXX: unpaletted/error */ + + for (i = 0; i < obj_image->image.num_palette_entries; i++) + obj_image->palette[i] = (((unsigned int)palette[3*i + 0] << 16) | + ((unsigned int)palette[3*i + 1] << 8) | + (unsigned int)palette[3*i + 2]); + return VA_STATUS_SUCCESS; +} + +static int +get_sampling_from_fourcc(unsigned int fourcc) +{ + const i965_fourcc_info *info = get_fourcc_info(fourcc); + + if (info && (info->flag & I_S)) + return info->subsampling; + else + return -1; +} + +static inline void +memcpy_pic(uint8_t *dst, unsigned int dst_stride, + const uint8_t *src, unsigned int src_stride, + unsigned int len, unsigned int height) +{ + unsigned int i; + + for (i = 0; i < height; i++) { + memcpy(dst, src, len); + dst += dst_stride; + src += src_stride; + } +} + +static VAStatus +get_image_i420(struct object_image *obj_image, uint8_t *image_data, + struct object_surface *obj_surface, + const VARectangle *rect) +{ + uint8_t *dst[3], *src[3]; + const int Y = 0; + const int U = obj_image->image.format.fourcc == obj_surface->fourcc ? 1 : 2; + const int V = obj_image->image.format.fourcc == obj_surface->fourcc ? 2 : 1; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface->bo) + return VA_STATUS_ERROR_INVALID_SURFACE; + + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Dest VA image has either I420 or YV12 format. + Source VA surface alway has I420 format */ + dst[Y] = image_data + obj_image->image.offsets[Y]; + src[0] = (uint8_t *)obj_surface->bo->virtual; + dst[U] = image_data + obj_image->image.offsets[U]; + src[1] = src[0] + obj_surface->width * obj_surface->height; + dst[V] = image_data + obj_image->image.offsets[V]; + src[2] = src[1] + (obj_surface->width / 2) * (obj_surface->height / 2); + + /* Y plane */ + dst[Y] += rect->y * obj_image->image.pitches[Y] + rect->x; + src[0] += rect->y * obj_surface->width + rect->x; + memcpy_pic(dst[Y], obj_image->image.pitches[Y], + src[0], obj_surface->width, + rect->width, rect->height); + + /* U plane */ + dst[U] += (rect->y / 2) * obj_image->image.pitches[U] + rect->x / 2; + src[1] += (rect->y / 2) * obj_surface->width / 2 + rect->x / 2; + memcpy_pic(dst[U], obj_image->image.pitches[U], + src[1], obj_surface->width / 2, + rect->width / 2, rect->height / 2); + + /* V plane */ + dst[V] += (rect->y / 2) * obj_image->image.pitches[V] + rect->x / 2; + src[2] += (rect->y / 2) * obj_surface->width / 2 + rect->x / 2; + memcpy_pic(dst[V], obj_image->image.pitches[V], + src[2], obj_surface->width / 2, + rect->width / 2, rect->height / 2); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +get_image_nv12(struct object_image *obj_image, uint8_t *image_data, + struct object_surface *obj_surface, + const VARectangle *rect) +{ + uint8_t *dst[2], *src[2]; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface->bo) + return VA_STATUS_ERROR_INVALID_SURFACE; + + assert(obj_surface->fourcc); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Both dest VA image and source surface have NV12 format */ + dst[0] = image_data + obj_image->image.offsets[0]; + src[0] = (uint8_t *)obj_surface->bo->virtual; + dst[1] = image_data + obj_image->image.offsets[1]; + src[1] = src[0] + obj_surface->width * obj_surface->height; + + /* Y plane */ + dst[0] += rect->y * obj_image->image.pitches[0] + rect->x; + src[0] += rect->y * obj_surface->width + rect->x; + memcpy_pic(dst[0], obj_image->image.pitches[0], + src[0], obj_surface->width, + rect->width, rect->height); + + /* UV plane */ + dst[1] += (rect->y / 2) * obj_image->image.pitches[1] + (rect->x & -2); + src[1] += (rect->y / 2) * obj_surface->width + (rect->x & -2); + memcpy_pic(dst[1], obj_image->image.pitches[1], + src[1], obj_surface->width, + rect->width, rect->height / 2); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +get_image_yuy2(struct object_image *obj_image, uint8_t *image_data, + struct object_surface *obj_surface, + const VARectangle *rect) +{ + uint8_t *dst, *src; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface->bo) + return VA_STATUS_ERROR_INVALID_SURFACE; + + assert(obj_surface->fourcc); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Both dest VA image and source surface have YUYV format */ + dst = image_data + obj_image->image.offsets[0]; + src = (uint8_t *)obj_surface->bo->virtual; + + /* Y plane */ + dst += rect->y * obj_image->image.pitches[0] + rect->x*2; + src += rect->y * obj_surface->width + rect->x*2; + memcpy_pic(dst, obj_image->image.pitches[0], + src, obj_surface->width*2, + rect->width*2, rect->height); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +i965_sw_getimage(VADriverContextP ctx, + struct object_surface *obj_surface, struct object_image *obj_image, + const VARectangle *rect) +{ + void *image_data = NULL; + VAStatus va_status; + + if (obj_surface->fourcc != obj_image->image.format.fourcc) + return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT; + + va_status = i965_MapBuffer(ctx, obj_image->image.buf, &image_data); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + switch (obj_image->image.format.fourcc) { + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + get_image_i420(obj_image, image_data, obj_surface, rect); + break; + case VA_FOURCC_NV12: + get_image_nv12(obj_image, image_data, obj_surface, rect); + break; + case VA_FOURCC_YUY2: + /* YUY2 is the format supported by overlay plane */ + get_image_yuy2(obj_image, image_data, obj_surface, rect); + break; + default: + va_status = VA_STATUS_ERROR_OPERATION_FAILED; + break; + } + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = i965_UnmapBuffer(ctx, obj_image->image.buf); + return va_status; +} + +static VAStatus +i965_hw_getimage(VADriverContextP ctx, + struct object_surface *obj_surface, struct object_image *obj_image, + const VARectangle *rect) +{ + struct i965_surface src_surface; + struct i965_surface dst_surface; + + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + dst_surface.base = (struct object_base *)obj_image; + dst_surface.type = I965_SURFACE_TYPE_IMAGE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + return i965_image_processing(ctx, &src_surface, rect, &dst_surface, rect); +} + +VAStatus +i965_GetImage(VADriverContextP ctx, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_surface * const obj_surface = SURFACE(surface); + struct object_image * const obj_image = IMAGE(image); + VARectangle rect; + VAStatus va_status; + + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + if (!obj_surface->bo) /* don't get anything, keep previous data */ + return VA_STATUS_SUCCESS; + if (is_surface_busy(i965, obj_surface)) + return VA_STATUS_ERROR_SURFACE_BUSY; + + if (!obj_image || !obj_image->bo) + return VA_STATUS_ERROR_INVALID_IMAGE; + if (is_image_busy(i965, obj_image, surface)) + return VA_STATUS_ERROR_SURFACE_BUSY; + + if (x < 0 || y < 0) + return VA_STATUS_ERROR_INVALID_PARAMETER; + if (x + width > obj_surface->orig_width || + y + height > obj_surface->orig_height) + return VA_STATUS_ERROR_INVALID_PARAMETER; + if (x + width > obj_image->image.width || + y + height > obj_image->image.height) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + rect.x = x; + rect.y = y; + rect.width = width; + rect.height = height; + + if (HAS_ACCELERATED_GETIMAGE(i965)) + va_status = i965_hw_getimage(ctx, obj_surface, obj_image, &rect); + else + va_status = i965_sw_getimage(ctx, obj_surface, obj_image, &rect); + + return va_status; +} + +static VAStatus +put_image_i420(struct object_surface *obj_surface, + const VARectangle *dst_rect, + struct object_image *obj_image, uint8_t *image_data, + const VARectangle *src_rect) +{ + uint8_t *dst[3], *src[3]; + const int Y = 0; + const int U = obj_image->image.format.fourcc == obj_surface->fourcc ? 1 : 2; + const int V = obj_image->image.format.fourcc == obj_surface->fourcc ? 2 : 1; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + ASSERT_RET(obj_surface->bo, VA_STATUS_ERROR_INVALID_SURFACE); + + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(dst_rect->width == src_rect->width, VA_STATUS_ERROR_UNIMPLEMENTED); + ASSERT_RET(dst_rect->height == src_rect->height, VA_STATUS_ERROR_UNIMPLEMENTED); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Dest VA image has either I420 or YV12 format. + Source VA surface alway has I420 format */ + dst[0] = (uint8_t *)obj_surface->bo->virtual; + src[Y] = image_data + obj_image->image.offsets[Y]; + dst[1] = dst[0] + obj_surface->width * obj_surface->height; + src[U] = image_data + obj_image->image.offsets[U]; + dst[2] = dst[1] + (obj_surface->width / 2) * (obj_surface->height / 2); + src[V] = image_data + obj_image->image.offsets[V]; + + /* Y plane */ + dst[0] += dst_rect->y * obj_surface->width + dst_rect->x; + src[Y] += src_rect->y * obj_image->image.pitches[Y] + src_rect->x; + memcpy_pic(dst[0], obj_surface->width, + src[Y], obj_image->image.pitches[Y], + src_rect->width, src_rect->height); + + /* U plane */ + dst[1] += (dst_rect->y / 2) * obj_surface->width / 2 + dst_rect->x / 2; + src[U] += (src_rect->y / 2) * obj_image->image.pitches[U] + src_rect->x / 2; + memcpy_pic(dst[1], obj_surface->width / 2, + src[U], obj_image->image.pitches[U], + src_rect->width / 2, src_rect->height / 2); + + /* V plane */ + dst[2] += (dst_rect->y / 2) * obj_surface->width / 2 + dst_rect->x / 2; + src[V] += (src_rect->y / 2) * obj_image->image.pitches[V] + src_rect->x / 2; + memcpy_pic(dst[2], obj_surface->width / 2, + src[V], obj_image->image.pitches[V], + src_rect->width / 2, src_rect->height / 2); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +put_image_nv12(struct object_surface *obj_surface, + const VARectangle *dst_rect, + struct object_image *obj_image, uint8_t *image_data, + const VARectangle *src_rect) +{ + uint8_t *dst[2], *src[2]; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface->bo) + return VA_STATUS_ERROR_INVALID_SURFACE; + + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(dst_rect->width == src_rect->width, VA_STATUS_ERROR_UNIMPLEMENTED); + ASSERT_RET(dst_rect->height == src_rect->height, VA_STATUS_ERROR_UNIMPLEMENTED); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Both dest VA image and source surface have NV12 format */ + dst[0] = (uint8_t *)obj_surface->bo->virtual; + src[0] = image_data + obj_image->image.offsets[0]; + dst[1] = dst[0] + obj_surface->width * obj_surface->height; + src[1] = image_data + obj_image->image.offsets[1]; + + /* Y plane */ + dst[0] += dst_rect->y * obj_surface->width + dst_rect->x; + src[0] += src_rect->y * obj_image->image.pitches[0] + src_rect->x; + memcpy_pic(dst[0], obj_surface->width, + src[0], obj_image->image.pitches[0], + src_rect->width, src_rect->height); + + /* UV plane */ + dst[1] += (dst_rect->y / 2) * obj_surface->width + (dst_rect->x & -2); + src[1] += (src_rect->y / 2) * obj_image->image.pitches[1] + (src_rect->x & -2); + memcpy_pic(dst[1], obj_surface->width, + src[1], obj_image->image.pitches[1], + src_rect->width, src_rect->height / 2); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +put_image_yuy2(struct object_surface *obj_surface, + const VARectangle *dst_rect, + struct object_image *obj_image, uint8_t *image_data, + const VARectangle *src_rect) +{ + uint8_t *dst, *src; + unsigned int tiling, swizzle; + VAStatus va_status = VA_STATUS_SUCCESS; + + ASSERT_RET(obj_surface->bo, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + ASSERT_RET(dst_rect->width == src_rect->width, VA_STATUS_ERROR_UNIMPLEMENTED); + ASSERT_RET(dst_rect->height == src_rect->height, VA_STATUS_ERROR_UNIMPLEMENTED); + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_map_gtt(obj_surface->bo); + else + dri_bo_map(obj_surface->bo, 0); + + if (!obj_surface->bo->virtual) + return VA_STATUS_ERROR_INVALID_SURFACE; + + /* Both dest VA image and source surface have YUY2 format */ + dst = (uint8_t *)obj_surface->bo->virtual; + src = image_data + obj_image->image.offsets[0]; + + /* YUYV packed plane */ + dst += dst_rect->y * obj_surface->width + dst_rect->x*2; + src += src_rect->y * obj_image->image.pitches[0] + src_rect->x*2; + memcpy_pic(dst, obj_surface->width*2, + src, obj_image->image.pitches[0], + src_rect->width*2, src_rect->height); + + if (tiling != I915_TILING_NONE) + drm_intel_gem_bo_unmap_gtt(obj_surface->bo); + else + dri_bo_unmap(obj_surface->bo); + + return va_status; +} + +static VAStatus +i965_sw_putimage(VADriverContextP ctx, + struct object_surface *obj_surface, struct object_image *obj_image, + const VARectangle *src_rect, const VARectangle *dst_rect) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + void *image_data = NULL; + + /* XXX: don't allow scaling */ + if (src_rect->width != dst_rect->width || + src_rect->height != dst_rect->height) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if (obj_surface->fourcc) { + /* Don't allow format mismatch */ + if (obj_surface->fourcc != obj_image->image.format.fourcc) + return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT; + } + + else { + /* VA is surface not used for decoding, use same VA image format */ + va_status = i965_check_alloc_surface_bo( + ctx, + obj_surface, + 0, /* XXX: don't use tiled surface */ + obj_image->image.format.fourcc, + get_sampling_from_fourcc (obj_image->image.format.fourcc)); + } + + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = i965_MapBuffer(ctx, obj_image->image.buf, &image_data); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + switch (obj_image->image.format.fourcc) { + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + va_status = put_image_i420(obj_surface, dst_rect, obj_image, image_data, src_rect); + break; + case VA_FOURCC_NV12: + va_status = put_image_nv12(obj_surface, dst_rect, obj_image, image_data, src_rect); + break; + case VA_FOURCC_YUY2: + va_status = put_image_yuy2(obj_surface, dst_rect, obj_image, image_data, src_rect); + break; + default: + va_status = VA_STATUS_ERROR_OPERATION_FAILED; + break; + } + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + va_status = i965_UnmapBuffer(ctx, obj_image->image.buf); + return va_status; +} + +static VAStatus +i965_hw_putimage(VADriverContextP ctx, + struct object_surface *obj_surface, struct object_image *obj_image, + const VARectangle *src_rect, const VARectangle *dst_rect) +{ + struct i965_surface src_surface, dst_surface; + VAStatus va_status = VA_STATUS_SUCCESS; + + if (!obj_surface->bo) { + unsigned int tiling, swizzle; + int surface_sampling = get_sampling_from_fourcc (obj_image->image.format.fourcc);; + dri_bo_get_tiling(obj_image->bo, &tiling, &swizzle); + + i965_check_alloc_surface_bo(ctx, + obj_surface, + !!tiling, + obj_image->image.format.fourcc, + surface_sampling); + } + + ASSERT_RET(obj_surface->fourcc, VA_STATUS_ERROR_INVALID_SURFACE); + + src_surface.base = (struct object_base *)obj_image; + src_surface.type = I965_SURFACE_TYPE_IMAGE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + va_status = i965_image_processing(ctx, + &src_surface, + src_rect, + &dst_surface, + dst_rect); + + return va_status; +} + +static VAStatus +i965_PutImage(VADriverContextP ctx, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_surface * const obj_surface = SURFACE(surface); + struct object_image * const obj_image = IMAGE(image); + VARectangle src_rect, dst_rect; + VAStatus va_status; + + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + if (is_surface_busy(i965, obj_surface)) + return VA_STATUS_ERROR_SURFACE_BUSY; + + if (!obj_image || !obj_image->bo) + return VA_STATUS_ERROR_INVALID_IMAGE; + if (is_image_busy(i965, obj_image, surface)) + return VA_STATUS_ERROR_SURFACE_BUSY; + + if (src_x < 0 || + src_y < 0 || + src_x + src_width > obj_image->image.width || + src_y + src_height > obj_image->image.height) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + src_rect.x = src_x; + src_rect.y = src_y; + src_rect.width = src_width; + src_rect.height = src_height; + + if (dest_x < 0 || + dest_y < 0 || + dest_x + dest_width > obj_surface->orig_width || + dest_y + dest_height > obj_surface->orig_height) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + dst_rect.x = dest_x; + dst_rect.y = dest_y; + dst_rect.width = dest_width; + dst_rect.height = dest_height; + + if (HAS_ACCELERATED_PUTIMAGE(i965)) + va_status = i965_hw_putimage(ctx, obj_surface, obj_image, + &src_rect, &dst_rect); + else + va_status = i965_sw_putimage(ctx, obj_surface, obj_image, + &src_rect, &dst_rect); + + return va_status; +} + +VAStatus +i965_PutSurface(VADriverContextP ctx, + VASurfaceID surface, + void *draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags) /* de-interlacing flags */ +{ +#ifdef HAVE_VA_X11 + if (IS_VA_X11(ctx)) { + VARectangle src_rect, dst_rect; + + src_rect.x = srcx; + src_rect.y = srcy; + src_rect.width = srcw; + src_rect.height = srch; + + dst_rect.x = destx; + dst_rect.y = desty; + dst_rect.width = destw; + dst_rect.height = desth; + + return i965_put_surface_dri(ctx, surface, draw, &src_rect, &dst_rect, + cliprects, number_cliprects, flags); + } +#endif + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +static VAStatus +i965_BufferInfo( + VADriverContextP ctx, /* in */ + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ +) +{ + struct i965_driver_data *i965 = NULL; + struct object_buffer *obj_buffer = NULL; + + i965 = i965_driver_data(ctx); + obj_buffer = BUFFER(buf_id); + + ASSERT_RET(obj_buffer, VA_STATUS_ERROR_INVALID_BUFFER); + + *type = obj_buffer->type; + *size = obj_buffer->size_element; + *num_elements = obj_buffer->num_elements; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +i965_LockSurface( + VADriverContextP ctx, /* in */ + VASurfaceID surface, /* in */ + unsigned int *fourcc, /* out */ + unsigned int *luma_stride, /* out */ + unsigned int *chroma_u_stride, /* out */ + unsigned int *chroma_v_stride, /* out */ + unsigned int *luma_offset, /* out */ + unsigned int *chroma_u_offset, /* out */ + unsigned int *chroma_v_offset, /* out */ + unsigned int *buffer_name, /* out */ + void **buffer /* out */ +) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface = NULL; + VAImage tmpImage; + + ASSERT_RET(fourcc, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(luma_stride, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(chroma_u_stride, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(chroma_v_stride, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(luma_offset, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(chroma_u_offset, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(chroma_v_offset, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(buffer_name, VA_STATUS_ERROR_INVALID_PARAMETER); + ASSERT_RET(buffer, VA_STATUS_ERROR_INVALID_PARAMETER); + + tmpImage.image_id = VA_INVALID_ID; + + obj_surface = SURFACE(surface); + if (obj_surface == NULL) { + // Surface is absent. + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + goto error; + } + + // Lock functionality is absent now. + if (obj_surface->locked_image_id != VA_INVALID_ID) { + // Surface is locked already. + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + goto error; + } + + vaStatus = i965_DeriveImage( + ctx, + surface, + &tmpImage); + if (vaStatus != VA_STATUS_SUCCESS) { + goto error; + } + + obj_surface->locked_image_id = tmpImage.image_id; + + vaStatus = i965_MapBuffer( + ctx, + tmpImage.buf, + buffer); + if (vaStatus != VA_STATUS_SUCCESS) { + goto error; + } + + *fourcc = tmpImage.format.fourcc; + *luma_offset = tmpImage.offsets[0]; + *luma_stride = tmpImage.pitches[0]; + *chroma_u_offset = tmpImage.offsets[1]; + *chroma_u_stride = tmpImage.pitches[1]; + *chroma_v_offset = tmpImage.offsets[2]; + *chroma_v_stride = tmpImage.pitches[2]; + *buffer_name = tmpImage.buf; + +error: + if (vaStatus != VA_STATUS_SUCCESS) { + buffer = NULL; + } + + return vaStatus; +} + +static VAStatus +i965_UnlockSurface( + VADriverContextP ctx, /* in */ + VASurfaceID surface /* in */ +) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_image *locked_img = NULL; + struct object_surface *obj_surface = NULL; + + obj_surface = SURFACE(surface); + + if (obj_surface == NULL) { + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; // Surface is absent + return vaStatus; + } + if (obj_surface->locked_image_id == VA_INVALID_ID) { + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; // Surface is not locked + return vaStatus; + } + + locked_img = IMAGE(obj_surface->locked_image_id); + if (locked_img == NULL || (locked_img->image.image_id == VA_INVALID_ID)) { + // Work image was deallocated before i965_UnlockSurface() + vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; + goto error; + } + + vaStatus = i965_UnmapBuffer( + ctx, + locked_img->image.buf); + if (vaStatus != VA_STATUS_SUCCESS) { + goto error; + } + + vaStatus = i965_DestroyImage( + ctx, + locked_img->image.image_id); + if (vaStatus != VA_STATUS_SUCCESS) { + goto error; + } + + locked_img->image.image_id = VA_INVALID_ID; + + error: + obj_surface->locked_image_id = VA_INVALID_ID; + + return vaStatus; +} + +static VAStatus +i965_GetSurfaceAttributes( + VADriverContextP ctx, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs + ) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_config *obj_config; + int i; + + if (config == VA_INVALID_ID) + return VA_STATUS_ERROR_INVALID_CONFIG; + + obj_config = CONFIG(config); + + if (obj_config == NULL) + return VA_STATUS_ERROR_INVALID_CONFIG; + + if (attrib_list == NULL || num_attribs == 0) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + for (i = 0; i < num_attribs; i++) { + switch (attrib_list[i].type) { + case VASurfaceAttribPixelFormat: + attrib_list[i].value.type = VAGenericValueTypeInteger; + attrib_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + + if (attrib_list[i].value.value.i == 0) { + if (IS_G4X(i965->intel.device_info)) { + if (obj_config->profile == VAProfileMPEG2Simple || + obj_config->profile == VAProfileMPEG2Main) { + attrib_list[i].value.value.i = VA_FOURCC_I420; + } else { + assert(0); + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + } + } else if (IS_IRONLAKE(i965->intel.device_info)) { + if (obj_config->profile == VAProfileMPEG2Simple || + obj_config->profile == VAProfileMPEG2Main) { + attrib_list[i].value.value.i = VA_FOURCC_I420; + } else if (obj_config->profile == VAProfileH264ConstrainedBaseline || + obj_config->profile == VAProfileH264Main || + obj_config->profile == VAProfileH264High) { + attrib_list[i].value.value.i = VA_FOURCC_NV12; + } else if (obj_config->profile == VAProfileNone) { + attrib_list[i].value.value.i = VA_FOURCC_NV12; + } else { + assert(0); + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + } + } else if (IS_GEN6(i965->intel.device_info)) { + attrib_list[i].value.value.i = VA_FOURCC_NV12; + } else if (IS_GEN7(i965->intel.device_info) || + IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + if (obj_config->profile == VAProfileJPEGBaseline) + attrib_list[i].value.value.i = 0; /* internal format */ + else + attrib_list[i].value.value.i = VA_FOURCC_NV12; + } + } else { + if (IS_G4X(i965->intel.device_info)) { + if (obj_config->profile == VAProfileMPEG2Simple || + obj_config->profile == VAProfileMPEG2Main) { + if (attrib_list[i].value.value.i != VA_FOURCC_I420) { + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } + } else { + assert(0); + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + } + } else if (IS_IRONLAKE(i965->intel.device_info)) { + if (obj_config->profile == VAProfileMPEG2Simple || + obj_config->profile == VAProfileMPEG2Main) { + if (attrib_list[i].value.value.i != VA_FOURCC_I420) { + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } + } else if (obj_config->profile == VAProfileH264ConstrainedBaseline || + obj_config->profile == VAProfileH264Main || + obj_config->profile == VAProfileH264High) { + if (attrib_list[i].value.value.i != VA_FOURCC_NV12) { + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } + } else if (obj_config->profile == VAProfileNone) { + switch (attrib_list[i].value.value.i) { + case VA_FOURCC_NV12: + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + case VA_FOURCC_YUY2: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + break; + default: + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + break; + } + } else { + assert(0); + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + } + } else if (IS_GEN6(i965->intel.device_info)) { + if (obj_config->entrypoint == VAEntrypointEncSlice || + obj_config->entrypoint == VAEntrypointVideoProc) { + switch (attrib_list[i].value.value.i) { + case VA_FOURCC_NV12: + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + case VA_FOURCC_YUY2: + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + break; + default: + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + break; + } + } else { + if (attrib_list[i].value.value.i != VA_FOURCC_NV12) { + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } + } + } else if (IS_GEN7(i965->intel.device_info) || + IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + if (obj_config->entrypoint == VAEntrypointEncSlice || + obj_config->entrypoint == VAEntrypointVideoProc) { + switch (attrib_list[i].value.value.i) { + case VA_FOURCC_NV12: + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + break; + default: + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + break; + } + } else { + if (obj_config->profile == VAProfileJPEGBaseline) { + attrib_list[i].value.value.i = 0; /* JPEG decoding always uses an internal format */ + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } else { + if (attrib_list[i].value.value.i != VA_FOURCC_NV12) { + attrib_list[i].value.value.i = 0; + attrib_list[i].flags &= ~VA_SURFACE_ATTRIB_SETTABLE; + } + } + } + } + } + + break; + case VASurfaceAttribMinWidth: + /* FIXME: add support for it later */ + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + break; + case VASurfaceAttribMaxWidth: + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + break; + case VASurfaceAttribMinHeight: + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + break; + case VASurfaceAttribMaxHeight: + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + break; + default: + attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + break; + } + } + + return vaStatus; +} + +static VAStatus +i965_QuerySurfaceAttributes(VADriverContextP ctx, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_config *obj_config; + int i = 0; + VASurfaceAttrib *attribs = NULL; + + if (config == VA_INVALID_ID) + return VA_STATUS_ERROR_INVALID_CONFIG; + + obj_config = CONFIG(config); + + if (obj_config == NULL) + return VA_STATUS_ERROR_INVALID_CONFIG; + + if (!attrib_list && !num_attribs) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if (attrib_list == NULL) { + *num_attribs = I965_MAX_SURFACE_ATTRIBUTES; + return VA_STATUS_SUCCESS; + } + + attribs = malloc(I965_MAX_SURFACE_ATTRIBUTES *sizeof(*attribs)); + + if (attribs == NULL) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + if (IS_G4X(i965->intel.device_info)) { + if (obj_config->profile == VAProfileMPEG2Simple || + obj_config->profile == VAProfileMPEG2Main) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + } + } else if (IS_IRONLAKE(i965->intel.device_info)) { + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + + case VAProfileNone: + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + + break; + + default: + break; + } + } else if (IS_GEN6(i965->intel.device_info)) { + if (obj_config->entrypoint == VAEntrypointVLD) { /* decode */ + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + } else if (obj_config->entrypoint == VAEntrypointEncSlice || /* encode */ + obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */ + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YV12; + i++; + + if (obj_config->entrypoint == VAEntrypointVideoProc) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YUY2; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBA; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBX; + i++; + } + } + } else if (IS_GEN7(i965->intel.device_info)) { + if (obj_config->entrypoint == VAEntrypointVLD) { /* decode */ + if (obj_config->profile == VAProfileJPEGBaseline) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC3; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC1; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_Y800; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_411P; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_422H; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_422V; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_444P; + i++; + } else if (obj_config->profile == VAProfileHEVCMain10) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_P010; + i++; + } else { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + } + } else if (obj_config->entrypoint == VAEntrypointEncSlice || /* encode */ + obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */ + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC3; + i++; + + if (obj_config->entrypoint == VAEntrypointVideoProc) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YUY2; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBA; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBX; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_BGRA; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_BGRX; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YV16; + i++; + } + } + } else if (IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + if (obj_config->entrypoint == VAEntrypointVLD) { /* decode */ + if (obj_config->profile == VAProfileJPEGBaseline) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC3; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC1; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_Y800; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_411P; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_422H; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_422V; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_444P; + i++; + } else { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + } + } else if (obj_config->entrypoint == VAEntrypointEncSlice || /* encode */ + obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */ + + if (obj_config->profile == VAProfileHEVCMain10) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_P010; + i++; + } else { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_NV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_I420; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YV12; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_IMC3; + i++; + } + + if (obj_config->entrypoint == VAEntrypointVideoProc) { + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YUY2; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBA; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_RGBX; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_BGRA; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_BGRX; + i++; + + attribs[i].type = VASurfaceAttribPixelFormat; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_FOURCC_YV16; + i++; + } + } + } + + attribs[i].type = VASurfaceAttribMemoryType; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_VA | + VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM | + VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME; + i++; + + attribs[i].type = VASurfaceAttribExternalBufferDescriptor; + attribs[i].value.type = VAGenericValueTypePointer; + attribs[i].flags = VA_SURFACE_ATTRIB_SETTABLE; + attribs[i].value.value.p = NULL; /* ignore */ + i++; + + attribs[i].type = VASurfaceAttribMaxWidth; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attribs[i].value.value.i = i965->codec_info->max_width; + i++; + + attribs[i].type = VASurfaceAttribMaxHeight; + attribs[i].value.type = VAGenericValueTypeInteger; + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attribs[i].value.value.i = i965->codec_info->max_height; + i++; + + if (i > *num_attribs) { + *num_attribs = i; + free(attribs); + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + *num_attribs = i; + memcpy(attrib_list, attribs, i * sizeof(*attribs)); + free(attribs); + + return vaStatus; +} + +/* Acquires buffer handle for external API usage (internal implementation) */ +static VAStatus +i965_acquire_buffer_handle(struct object_buffer *obj_buffer, + uint32_t mem_type, VABufferInfo *out_buf_info) +{ + struct buffer_store *buffer_store; + + buffer_store = obj_buffer->buffer_store; + if (!buffer_store || !buffer_store->bo) + return VA_STATUS_ERROR_INVALID_BUFFER; + + /* Synchronization point */ + drm_intel_bo_wait_rendering(buffer_store->bo); + + if (obj_buffer->export_refcount > 0) { + if (obj_buffer->export_state.mem_type != mem_type) + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + else { + VABufferInfo * const buf_info = &obj_buffer->export_state; + + switch (mem_type) { + case VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM: { + uint32_t name; + if (drm_intel_bo_flink(buffer_store->bo, &name) != 0) + return VA_STATUS_ERROR_INVALID_BUFFER; + buf_info->handle = name; + break; + } + case VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME: { + int fd = -1; +// if (drm_intel_bo_gem_export_to_prime(buffer_store->bo, &fd) != 0) +// return VA_STATUS_ERROR_INVALID_BUFFER; + buf_info->handle = (intptr_t)fd; + break; + } + } + + buf_info->type = obj_buffer->type; + buf_info->mem_type = mem_type; + buf_info->mem_size = + obj_buffer->num_elements * obj_buffer->size_element; + } + + obj_buffer->export_refcount++; + *out_buf_info = obj_buffer->export_state; + return VA_STATUS_SUCCESS; +} + +/* Releases buffer handle after usage (internal implementation) */ +static VAStatus +i965_release_buffer_handle(struct object_buffer *obj_buffer) +{ + if (obj_buffer->export_refcount == 0) + return VA_STATUS_ERROR_INVALID_BUFFER; + + if (--obj_buffer->export_refcount == 0) { + VABufferInfo * const buf_info = &obj_buffer->export_state; + + switch (buf_info->mem_type) { + case VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME: { + close((intptr_t)buf_info->handle); + break; + } + } + buf_info->mem_type = 0; + } + return VA_STATUS_SUCCESS; +} + +/** Acquires buffer handle for external API usage */ +static VAStatus +i965_AcquireBufferHandle(VADriverContextP ctx, VABufferID buf_id, + VABufferInfo *buf_info) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_buffer * const obj_buffer = BUFFER(buf_id); + uint32_t i, mem_type; + + /* List of supported memory types, in preferred order */ + static const uint32_t mem_types[] = { + VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME, + VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM, + 0 + }; + + if (!obj_buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + /* XXX: only VA surface|image like buffers are supported for now */ + if (obj_buffer->type != VAImageBufferType) + return VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + + /* + * As the allocated buffer by calling vaCreateBuffer is related with + * the specific context, it is unnecessary to export it. + * So it is not supported when the buffer is allocated from wrapped + * backend dirver. + */ + if (obj_buffer->wrapper_buffer != VA_INVALID_ID) { + return VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + } + + if (!buf_info) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if (!buf_info->mem_type) + mem_type = mem_types[0]; + else { + mem_type = 0; + for (i = 0; mem_types[i] != 0; i++) { + if (buf_info->mem_type & mem_types[i]) { + mem_type = buf_info->mem_type; + break; + } + } + if (!mem_type) + return VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE; + } + return i965_acquire_buffer_handle(obj_buffer, mem_type, buf_info); +} + +/** Releases buffer handle after usage from external API */ +static VAStatus +i965_ReleaseBufferHandle(VADriverContextP ctx, VABufferID buf_id) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_buffer * const obj_buffer = BUFFER(buf_id); + + if (!obj_buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + + if (obj_buffer->wrapper_buffer != VA_INVALID_ID) { + return VA_STATUS_ERROR_INVALID_BUFFER; + } + + return i965_release_buffer_handle(obj_buffer); +} + +static int +i965_os_has_ring_support(VADriverContextP ctx, + int ring) +{ + struct i965_driver_data *const i965 = i965_driver_data(ctx); + + switch (ring) { + case I965_RING_BSD: + return i965->intel.has_bsd; + + case I965_RING_BLT: + return i965->intel.has_blt; + + case I965_RING_VEBOX: + return i965->intel.has_vebox; + + case I965_RING_NULL: + return 1; /* Always support */ + + default: + /* should never get here */ + assert(0); + break; + } + + return 0; +} + +/* + * Query video processing pipeline + */ +VAStatus i965_QueryVideoProcFilters( + VADriverContextP ctx, + VAContextID context, + VAProcFilterType *filters, + unsigned int *num_filters + ) +{ + struct i965_driver_data *const i965 = i965_driver_data(ctx); + unsigned int i = 0, num = 0; + + if (!num_filters || !filters) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + for (i = 0; i < i965->codec_info->num_filters; i++) { + if (i965_os_has_ring_support(ctx, i965->codec_info->filters[i].ring)) { + if (num == *num_filters) { + *num_filters = i965->codec_info->num_filters; + + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + filters[num++] = i965->codec_info->filters[i].type; + } + } + + *num_filters = num; + + return VA_STATUS_SUCCESS; +} + +VAStatus i965_QueryVideoProcFilterCaps( + VADriverContextP ctx, + VAContextID context, + VAProcFilterType type, + void *filter_caps, + unsigned int *num_filter_caps + ) +{ + unsigned int i = 0; + struct i965_driver_data *const i965 = i965_driver_data(ctx); + + if (!filter_caps || !num_filter_caps) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + for (i = 0; i < i965->codec_info->num_filters; i++) { + if (type == i965->codec_info->filters[i].type && + i965_os_has_ring_support(ctx, i965->codec_info->filters[i].ring)) + break; + } + + if (i == i965->codec_info->num_filters) + return VA_STATUS_ERROR_UNSUPPORTED_FILTER; + + i = 0; + + switch (type) { + case VAProcFilterNoiseReduction: + case VAProcFilterSharpening: + { + VAProcFilterCap *cap = filter_caps; + + if (*num_filter_caps < 1) { + *num_filter_caps = 1; + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + cap->range.min_value = 0.0; + cap->range.max_value = 1.0; + cap->range.default_value = 0.5; + cap->range.step = 0.03125; /* 1.0 / 32 */ + i++; + } + + break; + + case VAProcFilterDeinterlacing: + { + VAProcFilterCapDeinterlacing *cap = filter_caps; + + if (*num_filter_caps < VAProcDeinterlacingCount) { + *num_filter_caps = VAProcDeinterlacingCount; + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + cap->type = VAProcDeinterlacingBob; + i++; + cap++; + + + if (i965->codec_info->has_di_motion_adptive) { + cap->type = VAProcDeinterlacingMotionAdaptive; + i++; + cap++; + } + + if (i965->codec_info->has_di_motion_compensated) { + cap->type = VAProcDeinterlacingMotionCompensated; + i++; + cap++; + } + } + + break; + + case VAProcFilterColorBalance: + { + VAProcFilterCapColorBalance *cap = filter_caps; + + if (*num_filter_caps < VAProcColorBalanceCount) { + *num_filter_caps = VAProcColorBalanceCount; + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + } + + cap->type = VAProcColorBalanceHue; + cap->range.min_value = -180.0; + cap->range.max_value = 180.0; + cap->range.default_value = 0.0; + cap->range.step = 1.0; + i++; + cap++; + + cap->type = VAProcColorBalanceSaturation; + cap->range.min_value = 0.0; + cap->range.max_value = 10.0; + cap->range.default_value = 1.0; + cap->range.step = 0.1; + i++; + cap++; + + cap->type = VAProcColorBalanceBrightness; + cap->range.min_value = -100.0; + cap->range.max_value = 100.0; + cap->range.default_value = 0.0; + cap->range.step = 1.0; + i++; + cap++; + + cap->type = VAProcColorBalanceContrast; + cap->range.min_value = 0.0; + cap->range.max_value = 10.0; + cap->range.default_value = 1.0; + cap->range.step = 0.1; + i++; + cap++; + } + + break; + + default: + + break; + } + + *num_filter_caps = i; + + return VA_STATUS_SUCCESS; +} + +static VAProcColorStandardType vpp_input_color_standards[VAProcColorStandardCount] = { + VAProcColorStandardBT601, +}; + +static VAProcColorStandardType vpp_output_color_standards[VAProcColorStandardCount] = { + VAProcColorStandardBT601, +}; + +VAStatus i965_QueryVideoProcPipelineCaps( + VADriverContextP ctx, + VAContextID context, + VABufferID *filters, + unsigned int num_filters, + VAProcPipelineCaps *pipeline_cap /* out */ + ) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + unsigned int i = 0; + + pipeline_cap->pipeline_flags = 0; + pipeline_cap->filter_flags = 0; + pipeline_cap->num_forward_references = 0; + pipeline_cap->num_backward_references = 0; + pipeline_cap->num_input_color_standards = 1; + pipeline_cap->input_color_standards = vpp_input_color_standards; + pipeline_cap->num_output_color_standards = 1; + pipeline_cap->output_color_standards = vpp_output_color_standards; + + for (i = 0; i < num_filters; i++) { + struct object_buffer *obj_buffer = BUFFER(filters[i]); + + if (!obj_buffer || + !obj_buffer->buffer_store || + !obj_buffer->buffer_store->buffer) + return VA_STATUS_ERROR_INVALID_BUFFER; + + VAProcFilterParameterBufferBase *base = (VAProcFilterParameterBufferBase *)obj_buffer->buffer_store->buffer; + + if (base->type == VAProcFilterNoiseReduction) { + VAProcFilterParameterBuffer *denoise = (VAProcFilterParameterBuffer *)base; + (void)denoise; + } else if (base->type == VAProcFilterDeinterlacing) { + VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base; + + ASSERT_RET(deint->algorithm == VAProcDeinterlacingBob || + deint->algorithm == VAProcDeinterlacingMotionAdaptive || + deint->algorithm == VAProcDeinterlacingMotionCompensated, + VA_STATUS_ERROR_INVALID_PARAMETER); + + if (deint->algorithm == VAProcDeinterlacingMotionAdaptive || + deint->algorithm == VAProcDeinterlacingMotionCompensated) + pipeline_cap->num_forward_references++; + } else if (base->type == VAProcFilterSkinToneEnhancement) { + VAProcFilterParameterBuffer *stde = (VAProcFilterParameterBuffer *)base; + (void)stde; + } + } + + return VA_STATUS_SUCCESS; +} + +extern struct hw_codec_info *i965_get_codec_info(int devid); + +static bool +i965_driver_data_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + + i965->codec_info = i965_get_codec_info(i965->intel.device_id); + + if (!i965->codec_info) + return false; + + if (object_heap_init(&i965->config_heap, + sizeof(struct object_config), + CONFIG_ID_OFFSET)) + goto err_config_heap; + if (object_heap_init(&i965->context_heap, + sizeof(struct object_context), + CONTEXT_ID_OFFSET)) + goto err_context_heap; + + if (object_heap_init(&i965->surface_heap, + sizeof(struct object_surface), + SURFACE_ID_OFFSET)) + goto err_surface_heap; + if (object_heap_init(&i965->buffer_heap, + sizeof(struct object_buffer), + BUFFER_ID_OFFSET)) + goto err_buffer_heap; + if (object_heap_init(&i965->image_heap, + sizeof(struct object_image), + IMAGE_ID_OFFSET)) + goto err_image_heap; + if (object_heap_init(&i965->subpic_heap, + sizeof(struct object_subpic), + SUBPIC_ID_OFFSET)) + goto err_subpic_heap; + + i965->batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_RENDER, 0); + i965->pp_batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_RENDER, 0); + _i965InitMutex(&i965->render_mutex); + _i965InitMutex(&i965->pp_mutex); + + return true; + +err_subpic_heap: + object_heap_destroy(&i965->image_heap); +err_image_heap: + object_heap_destroy(&i965->buffer_heap); +err_buffer_heap: + object_heap_destroy(&i965->surface_heap); +err_surface_heap: + object_heap_destroy(&i965->context_heap); +err_context_heap: + object_heap_destroy(&i965->config_heap); +err_config_heap: + + return false; +} + +static void +i965_driver_data_terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + + _i965DestroyMutex(&i965->pp_mutex); + _i965DestroyMutex(&i965->render_mutex); + + if (i965->batch) + intel_batchbuffer_free(i965->batch); + + if (i965->pp_batch) + intel_batchbuffer_free(i965->pp_batch); + + i965_destroy_heap(&i965->subpic_heap, i965_destroy_subpic); + i965_destroy_heap(&i965->image_heap, i965_destroy_image); + i965_destroy_heap(&i965->buffer_heap, i965_destroy_buffer); + i965_destroy_heap(&i965->surface_heap, i965_destroy_surface); + i965_destroy_heap(&i965->context_heap, i965_destroy_context); + i965_destroy_heap(&i965->config_heap, i965_destroy_config); +} + +struct { + bool (*init)(VADriverContextP ctx); + void (*terminate)(VADriverContextP ctx); + int display_type; +} i965_sub_ops[] = { + { + intel_driver_init, + intel_driver_terminate, + 0, + }, + + { + i965_driver_data_init, + i965_driver_data_terminate, + 0, + }, + + { + i965_display_attributes_init, + i965_display_attributes_terminate, + 0, + }, + + { + i965_post_processing_init, + i965_post_processing_terminate, + 0, + }, + + { + i965_render_init, + i965_render_terminate, + 0, + }, + +#ifdef HAVE_VA_WAYLAND + { + i965_output_wayland_init, + i965_output_wayland_terminate, + VA_DISPLAY_WAYLAND, + }, +#endif + +#ifdef HAVE_VA_X11 + { + i965_output_dri_init, + i965_output_dri_terminate, + VA_DISPLAY_X11, + }, +#endif +}; + +static bool +ensure_vendor_string(struct i965_driver_data *i965, const char *chipset) +{ + int ret, len; + + if (i965->va_vendor[0] != '\0') + return true; + + len = 0; + ret = snprintf(i965->va_vendor, sizeof(i965->va_vendor), + "%s %s driver for %s - %d.%d.%d", + INTEL_STR_DRIVER_VENDOR, INTEL_STR_DRIVER_NAME, chipset, + INTEL_DRIVER_MAJOR_VERSION, INTEL_DRIVER_MINOR_VERSION, + INTEL_DRIVER_MICRO_VERSION); + if (ret < 0 || ret >= sizeof(i965->va_vendor)) + goto error; + len = ret; + + if (INTEL_DRIVER_PRE_VERSION > 0) { + ret = snprintf(&i965->va_vendor[len], sizeof(i965->va_vendor) - len, + ".pre%d", INTEL_DRIVER_PRE_VERSION); + if (ret < 0 || ret >= sizeof(i965->va_vendor)) + goto error; + len += ret; + + ret = snprintf(&i965->va_vendor[len], sizeof(i965->va_vendor) - len, + " (%s)", INTEL_DRIVER_GIT_VERSION); + if (ret < 0 || ret >= sizeof(i965->va_vendor)) + goto error; + len += ret; + } + return true; + +error: + i965->va_vendor[0] = '\0'; + ASSERT_RET(ret > 0 && len < sizeof(i965->va_vendor), false); + return false; +} + +/* Only when the option of "enable-wrapper" is passed, it is possible + * to initialize/load the wrapper context of backend driver. + * Otherwise it is not loaded. + */ +#if HAVE_HYBRID_CODEC + +static VAStatus +i965_initialize_wrapper(VADriverContextP ctx, const char *driver_name) +{ +#define DRIVER_EXTENSION "_drv_video.so" + + struct i965_driver_data *i965 = i965_driver_data(ctx); + + VADriverContextP wrapper_pdrvctx; + struct VADriverVTable *vtable; + char *search_path, *driver_dir; + char *saveptr; + char driver_path[256]; + void *handle = NULL; + VAStatus va_status = VA_STATUS_SUCCESS; + bool driver_loaded = false; + + wrapper_pdrvctx = calloc(1, sizeof(*wrapper_pdrvctx)); + vtable = calloc(1, sizeof(*vtable)); + + if (!wrapper_pdrvctx || !vtable) { + fprintf(stderr, "Failed to allocate memory for wrapper \n"); + free(wrapper_pdrvctx); + free(vtable); + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + /* use the same drm_state with CTX */ + wrapper_pdrvctx->drm_state = ctx->drm_state; + wrapper_pdrvctx->display_type = ctx->display_type; + wrapper_pdrvctx->vtable = vtable; + + search_path = VA_DRIVERS_PATH; + search_path = strdup((const char *)search_path); + + driver_dir = strtok_r(search_path, ":", &saveptr); + while (driver_dir && !driver_loaded) { + memset(driver_path, 0, sizeof(driver_path)); + sprintf(driver_path, "%s/%s%s", driver_dir, driver_name, DRIVER_EXTENSION); + + handle = dlopen(driver_path, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); + if (!handle) { + fprintf(stderr, "failed to open %s\n", driver_path); + driver_dir = strtok_r(NULL, ":", &saveptr); + continue; + } + { + VADriverInit init_func = NULL; + char init_func_s[256]; + int i; + + static const struct { + int major; + int minor; + } compatible_versions[] = { + { VA_MAJOR_VERSION, VA_MINOR_VERSION }, + { 0, 37 }, + { 0, 36 }, + { 0, 35 }, + { 0, 34 }, + { 0, 33 }, + { 0, 32 }, + { -1, } + }; + for (i = 0; compatible_versions[i].major >= 0; i++) { + snprintf(init_func_s, sizeof(init_func_s), + "__vaDriverInit_%d_%d", + compatible_versions[i].major, + compatible_versions[i].minor); + init_func = (VADriverInit)dlsym(handle, init_func_s); + if (init_func) { + break; + } + } + if (compatible_versions[i].major < 0) { + dlclose(handle); + fprintf(stderr, "%s has no function %s\n", + driver_path, init_func_s); + driver_dir = strtok_r(NULL, ":", &saveptr); + continue; + } + + if (init_func) + va_status = (*init_func)(wrapper_pdrvctx); + + if (va_status != VA_STATUS_SUCCESS) { + dlclose(handle); + fprintf(stderr, "%s init failed\n", driver_path); + driver_dir = strtok_r(NULL, ":", &saveptr); + continue; + } + + wrapper_pdrvctx->handle = handle; + driver_loaded = true; + } + } + + free(search_path); + + if (driver_loaded) { + i965->wrapper_pdrvctx = wrapper_pdrvctx; + return VA_STATUS_SUCCESS; + } else { + fprintf(stderr, "Failed to wrapper %s%s\n", driver_name, DRIVER_EXTENSION); + free(vtable); + free(wrapper_pdrvctx); + return VA_STATUS_ERROR_OPERATION_FAILED; + } +} +#endif + +static VAStatus +i965_Init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + const char *chipset; + + for (i = 0; i < ARRAY_ELEMS(i965_sub_ops); i++) { + if ((i965_sub_ops[i].display_type == 0 || + i965_sub_ops[i].display_type == (ctx->display_type & VA_DISPLAY_MAJOR_MASK)) && + !i965_sub_ops[i].init(ctx)) + break; + } + + if (i == ARRAY_ELEMS(i965_sub_ops)) { + switch (i965->intel.device_id) { +#undef CHIPSET +#define CHIPSET(id, family, dev, str) case id: chipset = str; break; +#include "i965_pciids.h" + default: + chipset = "Unknown Intel Chipset"; + break; + } + + if (!ensure_vendor_string(i965, chipset)) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + i965->current_context_id = VA_INVALID_ID; + + if (i965->codec_info && i965->codec_info->preinit_hw_codec) + i965->codec_info->preinit_hw_codec(ctx, i965->codec_info); + +#if HAVE_HYBRID_CODEC + i965_initialize_wrapper(ctx, "hybrid"); +#endif + + return VA_STATUS_SUCCESS; + } else { + i--; + + for (; i >= 0; i--) { + if (i965_sub_ops[i].display_type == 0 || + i965_sub_ops[i].display_type == (ctx->display_type & VA_DISPLAY_MAJOR_MASK)) { + i965_sub_ops[i].terminate(ctx); + } + } + + return VA_STATUS_ERROR_UNKNOWN; + } +} + +VAStatus +i965_Terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + if (i965) { + if (i965->wrapper_pdrvctx) { + VADriverContextP pdrvctx; + pdrvctx = i965->wrapper_pdrvctx; + if (pdrvctx->handle) { + pdrvctx->vtable->vaTerminate(pdrvctx); + pdrvctx->handle = NULL; + } + free(pdrvctx->vtable); + free(pdrvctx); + i965->wrapper_pdrvctx = NULL; + } + + for (i = ARRAY_ELEMS(i965_sub_ops); i > 0; i--) + if (i965_sub_ops[i - 1].display_type == 0 || + i965_sub_ops[i - 1].display_type == (ctx->display_type & VA_DISPLAY_MAJOR_MASK)) { + i965_sub_ops[i - 1].terminate(ctx); + } + + free(i965); + ctx->pDriverData = NULL; + } + + return VA_STATUS_SUCCESS; +} + +VAStatus DLL_EXPORT +VA_DRIVER_INIT_FUNC(VADriverContextP ctx); + +VAStatus +VA_DRIVER_INIT_FUNC( VADriverContextP ctx ) +{ + struct VADriverVTable * const vtable = ctx->vtable; + struct VADriverVTableVPP * const vtable_vpp = ctx->vtable_vpp; + + struct i965_driver_data *i965; + VAStatus ret = VA_STATUS_ERROR_UNKNOWN; + + ctx->version_major = VA_MAJOR_VERSION; + ctx->version_minor = VA_MINOR_VERSION; + ctx->max_profiles = I965_MAX_PROFILES; + ctx->max_entrypoints = I965_MAX_ENTRYPOINTS; + ctx->max_attributes = I965_MAX_CONFIG_ATTRIBUTES; + ctx->max_image_formats = I965_MAX_IMAGE_FORMATS; + ctx->max_subpic_formats = I965_MAX_SUBPIC_FORMATS; + ctx->max_display_attributes = 1 + ARRAY_ELEMS(i965_display_attributes); + + vtable->vaTerminate = i965_Terminate; + vtable->vaQueryConfigEntrypoints = i965_QueryConfigEntrypoints; + vtable->vaQueryConfigProfiles = i965_QueryConfigProfiles; + vtable->vaQueryConfigAttributes = i965_QueryConfigAttributes; + vtable->vaCreateConfig = i965_CreateConfig; + vtable->vaDestroyConfig = i965_DestroyConfig; + vtable->vaGetConfigAttributes = i965_GetConfigAttributes; + vtable->vaCreateSurfaces = i965_CreateSurfaces; + vtable->vaDestroySurfaces = i965_DestroySurfaces; + vtable->vaCreateContext = i965_CreateContext; + vtable->vaDestroyContext = i965_DestroyContext; + vtable->vaCreateBuffer = i965_CreateBuffer; + vtable->vaBufferSetNumElements = i965_BufferSetNumElements; + vtable->vaMapBuffer = i965_MapBuffer; + vtable->vaUnmapBuffer = i965_UnmapBuffer; + vtable->vaDestroyBuffer = i965_DestroyBuffer; + vtable->vaBeginPicture = i965_BeginPicture; + vtable->vaRenderPicture = i965_RenderPicture; + vtable->vaEndPicture = i965_EndPicture; + vtable->vaSyncSurface = i965_SyncSurface; + vtable->vaQuerySurfaceStatus = i965_QuerySurfaceStatus; + vtable->vaPutSurface = i965_PutSurface; + vtable->vaQueryImageFormats = i965_QueryImageFormats; + vtable->vaCreateImage = i965_CreateImage; + vtable->vaDeriveImage = i965_DeriveImage; + vtable->vaDestroyImage = i965_DestroyImage; + vtable->vaSetImagePalette = i965_SetImagePalette; + vtable->vaGetImage = i965_GetImage; + vtable->vaPutImage = i965_PutImage; + vtable->vaQuerySubpictureFormats = i965_QuerySubpictureFormats; + vtable->vaCreateSubpicture = i965_CreateSubpicture; + vtable->vaDestroySubpicture = i965_DestroySubpicture; + vtable->vaSetSubpictureImage = i965_SetSubpictureImage; + vtable->vaSetSubpictureChromakey = i965_SetSubpictureChromakey; + vtable->vaSetSubpictureGlobalAlpha = i965_SetSubpictureGlobalAlpha; + vtable->vaAssociateSubpicture = i965_AssociateSubpicture; + vtable->vaDeassociateSubpicture = i965_DeassociateSubpicture; + vtable->vaQueryDisplayAttributes = i965_QueryDisplayAttributes; + vtable->vaGetDisplayAttributes = i965_GetDisplayAttributes; + vtable->vaSetDisplayAttributes = i965_SetDisplayAttributes; + vtable->vaBufferInfo = i965_BufferInfo; + vtable->vaLockSurface = i965_LockSurface; + vtable->vaUnlockSurface = i965_UnlockSurface; + vtable->vaGetSurfaceAttributes = i965_GetSurfaceAttributes; + vtable->vaQuerySurfaceAttributes = i965_QuerySurfaceAttributes; + vtable->vaCreateSurfaces2 = i965_CreateSurfaces2; + + /* 0.36.0 */ + vtable->vaAcquireBufferHandle = i965_AcquireBufferHandle; + vtable->vaReleaseBufferHandle = i965_ReleaseBufferHandle; + + vtable_vpp->vaQueryVideoProcFilters = i965_QueryVideoProcFilters; + vtable_vpp->vaQueryVideoProcFilterCaps = i965_QueryVideoProcFilterCaps; + vtable_vpp->vaQueryVideoProcPipelineCaps = i965_QueryVideoProcPipelineCaps; + + i965 = (struct i965_driver_data *)calloc(1, sizeof(*i965)); + + if (i965 == NULL) { + ctx->pDriverData = NULL; + + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + i965->wrapper_pdrvctx = NULL; + ctx->pDriverData = (void *)i965; + ret = i965_Init(ctx); + + if (ret == VA_STATUS_SUCCESS) { + ctx->str_vendor = i965->va_vendor; + } else { + free(i965); + ctx->pDriverData = NULL; + } + + return ret; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.h new file mode 100644 index 000000000..bdb751266 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_drv_video.h @@ -0,0 +1,531 @@ +/* + * Copyright ?2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#ifndef _I965_DRV_VIDEO_H_ +#define _I965_DRV_VIDEO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i965_mutext.h" +#include "object_heap.h" +#include "intel_driver.h" +#include "i965_fourcc.h" + +#define I965_MAX_PROFILES 20 +#define I965_MAX_ENTRYPOINTS 5 +#define I965_MAX_CONFIG_ATTRIBUTES 10 +#define I965_MAX_IMAGE_FORMATS 10 +#define I965_MAX_SUBPIC_FORMATS 6 +#define I965_MAX_SUBPIC_SUM 4 +#define I965_MAX_SURFACE_ATTRIBUTES 16 + +#define INTEL_STR_DRIVER_VENDOR "Intel" +#define INTEL_STR_DRIVER_NAME "i965" + +#define I965_SURFACE_TYPE_IMAGE 0 +#define I965_SURFACE_TYPE_SURFACE 1 + +#define I965_SURFACE_FLAG_FRAME 0x00000000 +#define I965_SURFACE_FLAG_TOP_FIELD_FIRST 0x00000001 +#define I965_SURFACE_FLAG_BOTTOME_FIELD_FIRST 0x00000002 + +#define DEFAULT_BRIGHTNESS 0 +#define DEFAULT_CONTRAST 50 +#define DEFAULT_HUE 0 +#define DEFAULT_SATURATION 50 + +#define ENCODER_QUALITY_RANGE 2 +#define ENCODER_DEFAULT_QUALITY 1 +#define ENCODER_HIGH_QUALITY ENCODER_DEFAULT_QUALITY +#define ENCODER_LOW_QUALITY 2 + +struct i965_surface +{ + struct object_base *base; + int type; + int flags; +}; + +struct i965_kernel +{ + char *name; + int interface; + const uint32_t (*bin)[4]; + int size; + dri_bo *bo; + unsigned int kernel_offset; +}; + +struct buffer_store +{ + unsigned char *buffer; + dri_bo *bo; + int ref_count; + int num_elements; +}; + +struct object_config +{ + struct object_base base; + VAProfile profile; + VAEntrypoint entrypoint; + VAConfigAttrib attrib_list[I965_MAX_CONFIG_ATTRIBUTES]; + int num_attribs; + + VAGenericID wrapper_config; +}; + +#define NUM_SLICES 10 + +struct codec_state_base { + uint32_t chroma_formats; +}; + +struct decode_state +{ + struct codec_state_base base; + struct buffer_store *pic_param; + struct buffer_store **slice_params; + struct buffer_store *iq_matrix; + struct buffer_store *bit_plane; + struct buffer_store *huffman_table; + struct buffer_store **slice_datas; + struct buffer_store *probability_data; + VASurfaceID current_render_target; + int max_slice_params; + int max_slice_datas; + int num_slice_params; + int num_slice_datas; + + struct object_surface *render_object; + struct object_surface *reference_objects[16]; /* Up to 2 reference surfaces are valid for MPEG-2,*/ +}; + +#define SLICE_PACKED_DATA_INDEX_TYPE 0x80000000 +#define SLICE_PACKED_DATA_INDEX_MASK 0x00FFFFFF + +struct encode_state +{ + struct codec_state_base base; + struct buffer_store *seq_param; + struct buffer_store *pic_param; + struct buffer_store *pic_control; + struct buffer_store *iq_matrix; + struct buffer_store *q_matrix; + struct buffer_store **slice_params; + struct buffer_store *huffman_table; + int max_slice_params; + int num_slice_params; + + /* for ext */ + struct buffer_store *seq_param_ext; + struct buffer_store *pic_param_ext; + struct buffer_store *packed_header_param[5]; + struct buffer_store *packed_header_data[5]; + struct buffer_store **slice_params_ext; + int max_slice_params_ext; + int num_slice_params_ext; + + /* Check the user-configurable packed_header attribute. + * Currently it is mainly used to check whether the packed slice_header data + * is provided by user or the driver. + * TBD: It will check for the packed SPS/PPS/MISC/RAWDATA and so on. + */ + unsigned int packed_header_flag; + /* For the packed data that needs to be inserted into video clip */ + /* currently it is mainly to track packed raw data and packed slice_header data. */ + struct buffer_store **packed_header_params_ext; + int max_packed_header_params_ext; + int num_packed_header_params_ext; + struct buffer_store **packed_header_data_ext; + int max_packed_header_data_ext; + int num_packed_header_data_ext; + + /* the index of current vps and sps ,special for HEVC*/ + int vps_sps_seq_index; + /* the index of current slice */ + int slice_index; + /* the array is determined by max_slice_params_ext */ + int max_slice_num; + /* This is to store the first index of packed data for one slice */ + int *slice_rawdata_index; + /* This is to store the number of packed data for one slice. + * Both packed rawdata and slice_header data are tracked by this + * this variable. That is to say: When one packed slice_header is parsed, + * this variable will also be increased. + */ + int *slice_rawdata_count; + + /* This is to store the index of packed slice header for one slice */ + int *slice_header_index; + + int last_packed_header_type; + + struct buffer_store *misc_param[16]; + + VASurfaceID current_render_target; + struct object_surface *input_yuv_object; + struct object_surface *reconstructed_object; + struct object_buffer *coded_buf_object; + struct object_surface *reference_objects[16]; /* Up to 2 reference surfaces are valid for MPEG-2,*/ +}; + +struct proc_state +{ + struct codec_state_base base; + struct buffer_store *pipeline_param; + + VASurfaceID current_render_target; +}; + +#define CODEC_DEC 0 +#define CODEC_ENC 1 +#define CODEC_PROC 2 + +union codec_state +{ + struct codec_state_base base; + struct decode_state decode; + struct encode_state encode; + struct proc_state proc; +}; + +struct hw_context +{ + VAStatus (*run)(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context); + void (*destroy)(void *); + struct intel_batchbuffer *batch; +}; + +struct object_context +{ + struct object_base base; + VAContextID context_id; + struct object_config *obj_config; + VASurfaceID *render_targets; //input->encode, output->decode + int num_render_targets; + int picture_width; + int picture_height; + int flags; + int codec_type; + union codec_state codec_state; + struct hw_context *hw_context; + + VAGenericID wrapper_context; +}; + +#define SURFACE_REFERENCED (1 << 0) +#define SURFACE_DERIVED (1 << 2) +#define SURFACE_ALL_MASK ((SURFACE_REFERENCED) | \ + (SURFACE_DERIVED)) + +struct object_surface +{ + struct object_base base; + VASurfaceStatus status; + VASubpictureID subpic[I965_MAX_SUBPIC_SUM]; + struct object_subpic *obj_subpic[I965_MAX_SUBPIC_SUM]; + unsigned int subpic_render_idx; + + int width; /* the pitch of plane 0 in bytes in horizontal direction */ + int height; /* the pitch of plane 0 in bytes in vertical direction */ + int size; + int orig_width; /* the width of plane 0 in pixels */ + int orig_height; /* the height of plane 0 in pixels */ + int flags; + unsigned int fourcc; + dri_bo *bo; + unsigned int expected_format; + VAImageID locked_image_id; + VAImageID derived_image_id; + void (*free_private_data)(void **data); + void *private_data; + unsigned int subsampling; + int x_cb_offset; + int y_cb_offset; + int x_cr_offset; + int y_cr_offset; + int cb_cr_width; + int cb_cr_height; + int cb_cr_pitch; + /* user specified attributes see: VASurfaceAttribExternalBuffers/VA_SURFACE_ATTRIB_MEM_TYPE_VA */ + uint32_t user_disable_tiling : 1; + uint32_t user_h_stride_set : 1; + uint32_t user_v_stride_set : 1; + + VAGenericID wrapper_surface; + + int exported_primefd; +}; + +struct object_buffer +{ + struct object_base base; + struct buffer_store *buffer_store; + int max_num_elements; + int num_elements; + int size_element; + VABufferType type; + + /* Export state */ + unsigned int export_refcount; + VABufferInfo export_state; + + VAGenericID wrapper_buffer; +}; + +struct object_image +{ + struct object_base base; + VAImage image; + dri_bo *bo; + unsigned int *palette; + VASurfaceID derived_surface; +}; + +struct object_subpic +{ + struct object_base base; + VAImageID image; + struct object_image *obj_image; + VARectangle src_rect; + VARectangle dst_rect; + unsigned int format; + int width; + int height; + int pitch; + float global_alpha; + dri_bo *bo; + unsigned int flags; +}; + +#define I965_RING_NULL 0 +#define I965_RING_BSD 1 +#define I965_RING_BLT 2 +#define I965_RING_VEBOX 3 + +struct i965_filter +{ + VAProcFilterType type; + int ring; +}; + +struct hw_codec_info +{ + struct hw_context *(*dec_hw_context_init)(VADriverContextP, struct object_config *); + struct hw_context *(*enc_hw_context_init)(VADriverContextP, struct object_config *); + struct hw_context *(*proc_hw_context_init)(VADriverContextP, struct object_config *); + bool (*render_init)(VADriverContextP); + void (*post_processing_context_init)(VADriverContextP, void *, struct intel_batchbuffer *); + void (*preinit_hw_codec)(VADriverContextP, struct hw_codec_info *); + + int max_width; + int max_height; + int min_linear_wpitch; + int min_linear_hpitch; + + unsigned int h264_mvc_dec_profiles; + unsigned int h264_dec_chroma_formats; + unsigned int jpeg_dec_chroma_formats; + unsigned int jpeg_enc_chroma_formats; + unsigned int hevc_dec_chroma_formats; + + unsigned int has_mpeg2_decoding:1; + unsigned int has_mpeg2_encoding:1; + unsigned int has_h264_decoding:1; + unsigned int has_h264_encoding:1; + unsigned int has_vc1_decoding:1; + unsigned int has_vc1_encoding:1; + unsigned int has_jpeg_decoding:1; + unsigned int has_jpeg_encoding:1; + unsigned int has_vpp:1; + unsigned int has_accelerated_getimage:1; + unsigned int has_accelerated_putimage:1; + unsigned int has_tiled_surface:1; + unsigned int has_di_motion_adptive:1; + unsigned int has_di_motion_compensated:1; + unsigned int has_vp8_decoding:1; + unsigned int has_vp8_encoding:1; + unsigned int has_h264_mvc_encoding:1; + unsigned int has_hevc_decoding:1; + unsigned int has_hevc_encoding:1; + unsigned int has_hevc10_decoding:1; + unsigned int has_vp9_decoding:1; + + unsigned int num_filters; + struct i965_filter filters[VAProcFilterCount]; +}; + + +#include "i965_render.h" + +struct i965_driver_data +{ + struct intel_driver_data intel; + struct object_heap config_heap; + struct object_heap context_heap; + struct object_heap surface_heap; + struct object_heap buffer_heap; + struct object_heap image_heap; + struct object_heap subpic_heap; + struct hw_codec_info *codec_info; + + _I965Mutex render_mutex; + _I965Mutex pp_mutex; + struct intel_batchbuffer *batch; + struct intel_batchbuffer *pp_batch; + struct i965_render_state render_state; + void *pp_context; + char va_vendor[256]; + + VADisplayAttribute *display_attributes; + unsigned int num_display_attributes; + VADisplayAttribute *rotation_attrib; + VADisplayAttribute *brightness_attrib; + VADisplayAttribute *contrast_attrib; + VADisplayAttribute *hue_attrib; + VADisplayAttribute *saturation_attrib; + VAContextID current_context_id; + + /* VA/DRI (X11) specific data */ + struct va_dri_output *dri_output; + + /* VA/Wayland specific data */ + struct va_wl_output *wl_output; + + VADriverContextP wrapper_pdrvctx; +}; + +#define NEW_CONFIG_ID() object_heap_allocate(&i965->config_heap); +#define NEW_CONTEXT_ID() object_heap_allocate(&i965->context_heap); +#define NEW_SURFACE_ID() object_heap_allocate(&i965->surface_heap); +#define NEW_BUFFER_ID() object_heap_allocate(&i965->buffer_heap); +#define NEW_IMAGE_ID() object_heap_allocate(&i965->image_heap); +#define NEW_SUBPIC_ID() object_heap_allocate(&i965->subpic_heap); + +#define CONFIG(id) ((struct object_config *)object_heap_lookup(&i965->config_heap, id)) +#define CONTEXT(id) ((struct object_context *)object_heap_lookup(&i965->context_heap, id)) +#define SURFACE(id) ((struct object_surface *)object_heap_lookup(&i965->surface_heap, id)) +#define BUFFER(id) ((struct object_buffer *)object_heap_lookup(&i965->buffer_heap, id)) +#define IMAGE(id) ((struct object_image *)object_heap_lookup(&i965->image_heap, id)) +#define SUBPIC(id) ((struct object_subpic *)object_heap_lookup(&i965->subpic_heap, id)) + +#define FOURCC_IA44 0x34344149 +#define FOURCC_AI44 0x34344941 + +#define STRIDE(w) (((w) + 0xf) & ~0xf) +#define SIZE_YUV420(w, h) (h * (STRIDE(w) + STRIDE(w >> 1))) + +static INLINE struct i965_driver_data * +i965_driver_data(VADriverContextP ctx) +{ + return (struct i965_driver_data *)(ctx->pDriverData); +} + +VAStatus +i965_check_alloc_surface_bo(VADriverContextP ctx, + struct object_surface *obj_surface, + int tiled, + unsigned int fourcc, + unsigned int subsampling); + +int +va_enc_packed_type_to_idx(int packed_type); + +/* reserve 2 byte for internal using */ +#define CODEC_H264 0 +#define CODEC_MPEG2 1 +#define CODEC_H264_MVC 2 +#define CODEC_JPEG 3 +#define CODEC_VP8 4 +#define CODEC_HEVC 5 + +#define H264_DELIMITER0 0x00 +#define H264_DELIMITER1 0x00 +#define H264_DELIMITER2 0x00 +#define H264_DELIMITER3 0x00 +#define H264_DELIMITER4 0x00 + +#define MPEG2_DELIMITER0 0x00 +#define MPEG2_DELIMITER1 0x00 +#define MPEG2_DELIMITER2 0x00 +#define MPEG2_DELIMITER3 0x00 +#define MPEG2_DELIMITER4 0xb0 + +#define HEVC_DELIMITER0 0x00 +#define HEVC_DELIMITER1 0x00 +#define HEVC_DELIMITER2 0x00 +#define HEVC_DELIMITER3 0x00 +#define HEVC_DELIMITER4 0x00 + +struct i965_coded_buffer_segment +{ + VACodedBufferSegment base; + unsigned char mapped; + unsigned char codec; +}; + +#define I965_CODEDBUFFER_HEADER_SIZE ALIGN(sizeof(struct i965_coded_buffer_segment), 0x1000) + +extern VAStatus i965_MapBuffer(VADriverContextP ctx, + VABufferID buf_id, /* in */ + void **pbuf); /* out */ + +extern VAStatus i965_UnmapBuffer(VADriverContextP ctx, VABufferID buf_id); + +extern VAStatus i965_DestroySurfaces(VADriverContextP ctx, + VASurfaceID *surface_list, + int num_surfaces); + +extern VAStatus i965_CreateSurfaces(VADriverContextP ctx, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces); + +#define I965_SURFACE_MEM_NATIVE 0 +#define I965_SURFACE_MEM_GEM_FLINK 1 +#define I965_SURFACE_MEM_DRM_PRIME 2 + +void +i965_destroy_surface_storage(struct object_surface *obj_surface); + +#endif /* _I965_DRV_VIDEO_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.c new file mode 100644 index 000000000..30f86d168 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.c @@ -0,0 +1,786 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou Chang + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_encoder.h" +#include "gen6_vme.h" +#include "gen6_mfc.h" +#include "gen9_mfc.h" + +extern Bool gen6_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); +extern Bool gen6_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); +extern Bool gen7_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); +extern Bool gen9_hcpe_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context); + +static VAStatus +intel_encoder_check_yuv_surface(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_surface src_surface, dst_surface; + struct object_surface *obj_surface; + VAStatus status; + VARectangle rect; + + /* releae the temporary surface */ + if (encoder_context->is_tmp_id) { + i965_DestroySurfaces(ctx, &encoder_context->input_yuv_surface, 1); + encode_state->input_yuv_object = NULL; + } + + encoder_context->is_tmp_id = 0; + obj_surface = SURFACE(encode_state->current_render_target); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if (obj_surface->fourcc == VA_FOURCC_NV12) { + unsigned int tiling = 0, swizzle = 0; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling == I915_TILING_Y) { + encoder_context->input_yuv_surface = encode_state->current_render_target; + encode_state->input_yuv_object = obj_surface; + return VA_STATUS_SUCCESS; + } + } + + rect.x = 0; + rect.y = 0; + rect.width = obj_surface->orig_width; + rect.height = obj_surface->orig_height; + + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + status = i965_CreateSurfaces(ctx, + obj_surface->orig_width, + obj_surface->orig_height, + VA_RT_FORMAT_YUV420, + 1, + &encoder_context->input_yuv_surface); + assert(status == VA_STATUS_SUCCESS); + + if (status != VA_STATUS_SUCCESS) + return status; + + obj_surface = SURFACE(encoder_context->input_yuv_surface); + encode_state->input_yuv_object = obj_surface; + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + status = i965_image_processing(ctx, + &src_surface, + &rect, + &dst_surface, + &rect); + assert(status == VA_STATUS_SUCCESS); + + encoder_context->is_tmp_id = 1; + + return VA_STATUS_SUCCESS; +} + + +static VAStatus +intel_encoder_check_jpeg_yuv_surface(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_surface src_surface, dst_surface; + struct object_surface *obj_surface; + VAStatus status; + VARectangle rect; + int format=0, fourcc=0, subsample=0; + + /* releae the temporary surface */ + if (encoder_context->is_tmp_id) { + i965_DestroySurfaces(ctx, &encoder_context->input_yuv_surface, 1); + encode_state->input_yuv_object = NULL; + } + + encoder_context->is_tmp_id = 0; + obj_surface = SURFACE(encode_state->current_render_target); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + unsigned int tiling = 0, swizzle = 0; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + if (tiling == I915_TILING_Y) { + if( (obj_surface->fourcc==VA_FOURCC_NV12) || (obj_surface->fourcc==VA_FOURCC_UYVY) || + (obj_surface->fourcc==VA_FOURCC_YUY2) || (obj_surface->fourcc==VA_FOURCC_Y800) || + (obj_surface->fourcc==VA_FOURCC_RGBA) || (obj_surface->fourcc==VA_FOURCC_444P) ) { + encoder_context->input_yuv_surface = encode_state->current_render_target; + encode_state->input_yuv_object = obj_surface; + return VA_STATUS_SUCCESS; + } + } + + rect.x = 0; + rect.y = 0; + rect.width = obj_surface->orig_width; + rect.height = obj_surface->orig_height; + + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + switch( obj_surface->fourcc) { + + case VA_FOURCC_YUY2: + fourcc = VA_FOURCC_YUY2; + format = VA_RT_FORMAT_YUV422; + subsample = SUBSAMPLE_YUV422H; + break; + + case VA_FOURCC_UYVY: + fourcc = VA_FOURCC_UYVY; + format = VA_RT_FORMAT_YUV422; + subsample = SUBSAMPLE_YUV422H; + break; + + case VA_FOURCC_Y800: + fourcc = VA_FOURCC_Y800; + format = VA_RT_FORMAT_YUV400; + subsample = SUBSAMPLE_YUV400; + break; + + case VA_FOURCC_444P: + fourcc = VA_FOURCC_444P; + format = VA_RT_FORMAT_YUV444; + subsample = SUBSAMPLE_YUV444; + break; + + case VA_FOURCC_RGBA: + fourcc = VA_FOURCC_RGBA; + format = VA_RT_FORMAT_RGB32; + subsample = SUBSAMPLE_RGBX; + break; + + default: //All other scenarios will have NV12 format + fourcc = VA_FOURCC_NV12; + format = VA_RT_FORMAT_YUV420; + subsample = SUBSAMPLE_YUV420; + break; + } + + status = i965_CreateSurfaces(ctx, + obj_surface->orig_width, + obj_surface->orig_height, + format, + 1, + &encoder_context->input_yuv_surface); + assert(status == VA_STATUS_SUCCESS); + + if (status != VA_STATUS_SUCCESS) + return status; + + obj_surface = SURFACE(encoder_context->input_yuv_surface); + encode_state->input_yuv_object = obj_surface; + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 1, fourcc, subsample); + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + //The Y800 format is expected to be tiled. + //Linear Y800 is a corner case and needs code in the i965_image_processing. + if(obj_surface->fourcc != VA_FOURCC_Y800){ + status = i965_image_processing(ctx, + &src_surface, + &rect, + &dst_surface, + &rect); + assert(status == VA_STATUS_SUCCESS); + } + + encoder_context->is_tmp_id = 1; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +intel_encoder_check_misc_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + + if (encode_state->misc_param[VAEncMiscParameterTypeQualityLevel] && + encode_state->misc_param[VAEncMiscParameterTypeQualityLevel]->buffer) { + VAEncMiscParameterBuffer* pMiscParam = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeQualityLevel]->buffer; + VAEncMiscParameterBufferQualityLevel* param_quality_level = (VAEncMiscParameterBufferQualityLevel*)pMiscParam->data; + encoder_context->quality_level = param_quality_level->quality_level; + + if (encoder_context->quality_level == 0) + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY; + else if (encoder_context->quality_level > encoder_context->quality_range) + goto error; + } + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_encoder_check_avc_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + int i; + + assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID)); + + if (pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID) + goto error; + + obj_surface = SURFACE(pic_param->CurrPic.picture_id); + assert(obj_surface); /* It is possible the store buffer isn't allocated yet */ + + if (!obj_surface) + goto error; + + encode_state->reconstructed_object = obj_surface; + obj_buffer = BUFFER(pic_param->coded_buf); + assert(obj_buffer && obj_buffer->buffer_store && obj_buffer->buffer_store->bo); + + if (!obj_buffer || !obj_buffer->buffer_store || !obj_buffer->buffer_store->bo) + goto error; + + encode_state->coded_buf_object = obj_buffer; + + for (i = 0; i < 16; i++) { + if (pic_param->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID || + pic_param->ReferenceFrames[i].picture_id == VA_INVALID_SURFACE) + break; + else { + obj_surface = SURFACE(pic_param->ReferenceFrames[i].picture_id); + assert(obj_surface); + + if (!obj_surface) + goto error; + + if (obj_surface->bo) + encode_state->reference_objects[i] = obj_surface; + else + encode_state->reference_objects[i] = NULL; /* FIXME: Warning or Error ??? */ + } + } + + for ( ; i < 16; i++) + encode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_encoder_check_mpeg2_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAEncPictureParameterBufferMPEG2 *pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + int i = 0; + + obj_surface = SURFACE(pic_param->reconstructed_picture); + assert(obj_surface); /* It is possible the store buffer isn't allocated yet */ + + if (!obj_surface) + goto error; + + encode_state->reconstructed_object = obj_surface; + obj_buffer = BUFFER(pic_param->coded_buf); + assert(obj_buffer && obj_buffer->buffer_store && obj_buffer->buffer_store->bo); + + if (!obj_buffer || !obj_buffer->buffer_store || !obj_buffer->buffer_store->bo) + goto error; + + encode_state->coded_buf_object = obj_buffer; + + if (pic_param->picture_type == VAEncPictureTypeIntra) { + } else if (pic_param->picture_type == VAEncPictureTypePredictive) { + assert(pic_param->forward_reference_picture != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->forward_reference_picture); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + } else if (pic_param->picture_type == VAEncPictureTypeBidirectional) { + assert(pic_param->forward_reference_picture != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->forward_reference_picture); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + + assert(pic_param->backward_reference_picture != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->backward_reference_picture); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + } else + goto error; + + for ( ; i < 16; i++) + encode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_encoder_check_jpeg_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_buffer *obj_buffer; + VAEncPictureParameterBufferJPEG *pic_param = (VAEncPictureParameterBufferJPEG *)encode_state->pic_param_ext->buffer; + + + assert(!(pic_param->pic_flags.bits.profile)); //Baseline profile is 0. + + obj_buffer = BUFFER(pic_param->coded_buf); + assert(obj_buffer && obj_buffer->buffer_store && obj_buffer->buffer_store->bo); + + if (!obj_buffer || !obj_buffer->buffer_store || !obj_buffer->buffer_store->bo) + goto error; + + encode_state->coded_buf_object = obj_buffer; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_encoder_check_vp8_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 *)encode_state->pic_param_ext->buffer; + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + int i = 0; + int is_key_frame = !pic_param->pic_flags.bits.frame_type; + + obj_surface = SURFACE(pic_param->reconstructed_frame); + assert(obj_surface); /* It is possible the store buffer isn't allocated yet */ + + if (!obj_surface) + goto error; + + encode_state->reconstructed_object = obj_surface; + obj_buffer = BUFFER(pic_param->coded_buf); + assert(obj_buffer && obj_buffer->buffer_store && obj_buffer->buffer_store->bo); + + if (!obj_buffer || !obj_buffer->buffer_store || !obj_buffer->buffer_store->bo) + goto error; + + encode_state->coded_buf_object = obj_buffer; + + if (!is_key_frame) { + assert(pic_param->ref_last_frame != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->ref_last_frame); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + + assert(pic_param->ref_gf_frame != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->ref_gf_frame); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + + assert(pic_param->ref_arf_frame != VA_INVALID_SURFACE); + obj_surface = SURFACE(pic_param->ref_arf_frame); + assert(obj_surface && obj_surface->bo); + + if (!obj_surface || !obj_surface->bo) + goto error; + + encode_state->reference_objects[i++] = obj_surface; + } + + for ( ; i < 16; i++) + encode_state->reference_objects[i] = NULL; + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} + +static VAStatus +intel_encoder_check_hevc_parameter(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + struct object_buffer *obj_buffer; + VAEncPictureParameterBufferHEVC *pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferHEVC *slice_param; + int i; + + assert(!(pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_INVALID)); + + if (pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_INVALID) + goto error; + + obj_surface = SURFACE(pic_param->decoded_curr_pic.picture_id); + assert(obj_surface); /* It is possible the store buffer isn't allocated yet */ + + if (!obj_surface) + goto error; + + encode_state->reconstructed_object = obj_surface; + obj_buffer = BUFFER(pic_param->coded_buf); + assert(obj_buffer && obj_buffer->buffer_store && obj_buffer->buffer_store->bo); + + if (!obj_buffer || !obj_buffer->buffer_store || !obj_buffer->buffer_store->bo) + goto error; + + encode_state->coded_buf_object = obj_buffer; + + for (i = 0; i < 15; i++) { + if (pic_param->reference_frames[i].flags & VA_PICTURE_HEVC_INVALID || + pic_param->reference_frames[i].picture_id == VA_INVALID_SURFACE) + break; + else { + obj_surface = SURFACE(pic_param->reference_frames[i].picture_id); + assert(obj_surface); + + if (!obj_surface) + goto error; + + if (obj_surface->bo) + encode_state->reference_objects[i] = obj_surface; + else + encode_state->reference_objects[i] = NULL; /* FIXME: Warning or Error ??? */ + } + } + + for ( ; i < 15; i++) + encode_state->reference_objects[i] = NULL; + + for (i = 0; i < encode_state->num_slice_params_ext; i++) { + slice_param = (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[i]->buffer; + + if (slice_param->slice_type != HEVC_SLICE_I && + slice_param->slice_type != HEVC_SLICE_P && + slice_param->slice_type != HEVC_SLICE_B) + goto error; + + /* TODO: add more check here */ + } + + return VA_STATUS_SUCCESS; + +error: + return VA_STATUS_ERROR_INVALID_PARAMETER; +} +static VAStatus +intel_encoder_sanity_check_input(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + VAStatus vaStatus; + + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: { + vaStatus = intel_encoder_check_avc_parameter(ctx, encode_state, encoder_context); + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + vaStatus = intel_encoder_check_yuv_surface(ctx, profile, encode_state, encoder_context); + break; + } + + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: { + vaStatus = intel_encoder_check_mpeg2_parameter(ctx, encode_state, encoder_context); + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + vaStatus = intel_encoder_check_yuv_surface(ctx, profile, encode_state, encoder_context); + break; + } + + case VAProfileJPEGBaseline: { + vaStatus = intel_encoder_check_jpeg_parameter(ctx, encode_state, encoder_context); + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + vaStatus = intel_encoder_check_jpeg_yuv_surface(ctx, profile, encode_state, encoder_context); + break; + } + + case VAProfileVP8Version0_3: { + vaStatus = intel_encoder_check_vp8_parameter(ctx, encode_state, encoder_context); + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + vaStatus = intel_encoder_check_yuv_surface(ctx, profile, encode_state, encoder_context); + break; + } + + case VAProfileHEVCMain: { + vaStatus = intel_encoder_check_hevc_parameter(ctx, encode_state, encoder_context); + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + vaStatus = intel_encoder_check_yuv_surface(ctx, profile, encode_state, encoder_context); + break; + } + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + if (vaStatus == VA_STATUS_SUCCESS) + vaStatus = intel_encoder_check_misc_parameter(ctx, encode_state, encoder_context); + +out: + return vaStatus; +} + +static VAStatus +intel_encoder_end_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + struct intel_encoder_context *encoder_context = (struct intel_encoder_context *)hw_context; + struct encode_state *encode_state = &codec_state->encode; + VAStatus vaStatus; + + vaStatus = intel_encoder_sanity_check_input(ctx, profile, encode_state, encoder_context); + + if (vaStatus != VA_STATUS_SUCCESS) + return vaStatus; + + encoder_context->mfc_brc_prepare(encode_state, encoder_context); + + if((encoder_context->vme_context && encoder_context->vme_pipeline)) { + vaStatus = encoder_context->vme_pipeline(ctx, profile, encode_state, encoder_context); + } + + if (vaStatus == VA_STATUS_SUCCESS) + encoder_context->mfc_pipeline(ctx, profile, encode_state, encoder_context); + return VA_STATUS_SUCCESS; +} + +static void +intel_encoder_context_destroy(void *hw_context) +{ + struct intel_encoder_context *encoder_context = (struct intel_encoder_context *)hw_context; + + encoder_context->mfc_context_destroy(encoder_context->mfc_context); + + if (encoder_context->vme_context_destroy && encoder_context->vme_context) + encoder_context->vme_context_destroy(encoder_context->vme_context); + + intel_batchbuffer_free(encoder_context->base.batch); + free(encoder_context); +} + +typedef Bool (* hw_init_func)(VADriverContextP, struct intel_encoder_context *); + +static struct hw_context * +intel_enc_hw_context_init(VADriverContextP ctx, + struct object_config *obj_config, + hw_init_func vme_context_init, + hw_init_func mfc_context_init) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct intel_encoder_context *encoder_context = calloc(1, sizeof(struct intel_encoder_context)); + int i; + + assert(encoder_context); + encoder_context->base.destroy = intel_encoder_context_destroy; + encoder_context->base.run = intel_encoder_end_picture; + encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + encoder_context->input_yuv_surface = VA_INVALID_SURFACE; + encoder_context->is_tmp_id = 0; + encoder_context->rate_control_mode = VA_RC_NONE; + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY; + encoder_context->quality_range = 1; + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + encoder_context->codec = CODEC_MPEG2; + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + encoder_context->codec = CODEC_H264; + encoder_context->quality_range = ENCODER_QUALITY_RANGE; + break; + + case VAProfileH264StereoHigh: + case VAProfileH264MultiviewHigh: + encoder_context->codec = CODEC_H264_MVC; + break; + + case VAProfileJPEGBaseline: + encoder_context->codec = CODEC_JPEG; + break; + + case VAProfileVP8Version0_3: + encoder_context->codec = CODEC_VP8; + break; + + case VAProfileHEVCMain: + encoder_context->codec = CODEC_HEVC; + break; + + default: + /* Never get here */ + assert(0); + break; + } + + for (i = 0; i < obj_config->num_attribs; i++) { + if (obj_config->attrib_list[i].type == VAConfigAttribRateControl) { + encoder_context->rate_control_mode = obj_config->attrib_list[i].value; + + if (encoder_context->codec == CODEC_MPEG2 && + encoder_context->rate_control_mode & VA_RC_CBR) { + WARN_ONCE("Don't support CBR for MPEG-2 encoding\n"); + encoder_context->rate_control_mode &= ~VA_RC_CBR; + } + + break; + } + } + + vme_context_init(ctx, encoder_context); + if(obj_config->profile != VAProfileJPEGBaseline) { + assert(encoder_context->vme_context); + assert(encoder_context->vme_context_destroy); + assert(encoder_context->vme_pipeline); + } + + mfc_context_init(ctx, encoder_context); + assert(encoder_context->mfc_context); + assert(encoder_context->mfc_context_destroy); + assert(encoder_context->mfc_pipeline); + + return (struct hw_context *)encoder_context; +} + +struct hw_context * +gen6_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + return intel_enc_hw_context_init(ctx, obj_config, gen6_vme_context_init, gen6_mfc_context_init); +} + +struct hw_context * +gen7_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + + return intel_enc_hw_context_init(ctx, obj_config, gen7_vme_context_init, gen7_mfc_context_init); +} + +struct hw_context * +gen75_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + return intel_enc_hw_context_init(ctx, obj_config, gen75_vme_context_init, gen75_mfc_context_init); +} + +struct hw_context * +gen8_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + return intel_enc_hw_context_init(ctx, obj_config, gen8_vme_context_init, gen8_mfc_context_init); +} + +struct hw_context * +gen9_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + if (obj_config->profile == VAProfileHEVCMain) { + return intel_enc_hw_context_init(ctx, obj_config, gen9_vme_context_init, gen9_hcpe_context_init); + } else if (obj_config->profile == VAProfileJPEGBaseline) + return intel_enc_hw_context_init(ctx, obj_config, gen8_vme_context_init, gen8_mfc_context_init); + else + return intel_enc_hw_context_init(ctx, obj_config, gen9_vme_context_init, gen9_mfc_context_init); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.h new file mode 100644 index 000000000..13a9ad123 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder.h @@ -0,0 +1,74 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhou chang + * + */ + +#ifndef _I965_ENCODER_H_ +#define _I965_ENCODER_H_ + +#include +#include +#include + +#include "i965_structs.h" +#include "i965_drv_video.h" + +struct intel_encoder_context +{ + struct hw_context base; + int codec; + VASurfaceID input_yuv_surface; + int is_tmp_id; + unsigned int rate_control_mode; + unsigned int quality_level; + unsigned int quality_range; + void *vme_context; + void *mfc_context; + void (*vme_context_destroy)(void *vme_context); + VAStatus (*vme_pipeline)(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + void (*mfc_context_destroy)(void *mfc_context); + VAStatus (*mfc_pipeline)(VADriverContextP ctx, + VAProfile profile, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); + void (*mfc_brc_prepare)(struct encode_state *encode_state, + struct intel_encoder_context *encoder_context); +}; + +extern struct hw_context * +gen75_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config); + +extern struct hw_context * +gen8_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config); + +extern struct hw_context * +gen9_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config); +#endif /* _I965_ENCODER_H_ */ + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.c new file mode 100644 index 000000000..bb8dbe4d7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.c @@ -0,0 +1,1136 @@ +/* + * Copyright © 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include "gen6_mfc.h" +#include "i965_encoder_utils.h" + +#define BITSTREAM_ALLOCATE_STEPPING 4096 + +#define NAL_REF_IDC_NONE 0 +#define NAL_REF_IDC_LOW 1 +#define NAL_REF_IDC_MEDIUM 2 +#define NAL_REF_IDC_HIGH 3 + +#define NAL_NON_IDR 1 +#define NAL_IDR 5 +#define NAL_SPS 7 +#define NAL_PPS 8 +#define NAL_SEI 6 + +#define SLICE_TYPE_P 0 +#define SLICE_TYPE_B 1 +#define SLICE_TYPE_I 2 + +#define IS_I_SLICE(type) (SLICE_TYPE_I == (type) || SLICE_TYPE_I == (type - 5)) +#define IS_P_SLICE(type) (SLICE_TYPE_P == (type) || SLICE_TYPE_P == (type - 5)) +#define IS_B_SLICE(type) (SLICE_TYPE_B == (type) || SLICE_TYPE_B == (type - 5)) + +#define ENTROPY_MODE_CAVLC 0 +#define ENTROPY_MODE_CABAC 1 + +#define PROFILE_IDC_BASELINE 66 +#define PROFILE_IDC_MAIN 77 +#define PROFILE_IDC_HIGH 100 + +/*HEVC*/ +#define VPS_NUT 32 +#define SPS_NUT 33 +#define PPS_NUT 34 +#define IDR_WRADL_NUT 19 +#define IDR_NLP_NUT 20 +#define SLICE_TRAIL_N_NUT 0 +#define SLICE_TRAIL_R_NUT 1 +#define PREFIX_SEI_NUT 39 +#define SUFFIX_SEI_NUT 40 + +struct __avc_bitstream { + unsigned int *buffer; + int bit_offset; + int max_size_in_dword; +}; + +typedef struct __avc_bitstream avc_bitstream; + +static unsigned int +swap32(unsigned int val) +{ + unsigned char *pval = (unsigned char *)&val; + + return ((pval[0] << 24) | + (pval[1] << 16) | + (pval[2] << 8) | + (pval[3] << 0)); +} + +static void +avc_bitstream_start(avc_bitstream *bs) +{ + bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1); + bs->bit_offset = 0; +} + +static void +avc_bitstream_end(avc_bitstream *bs) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (bit_offset) { + bs->buffer[pos] = swap32((bs->buffer[pos] << bit_left)); + } + + // free(bs->buffer); +} + +static void +avc_bitstream_put_ui(avc_bitstream *bs, unsigned int val, int size_in_bits) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (!size_in_bits) + return; + + if (size_in_bits < 32) + val &= (( 1 << size_in_bits) - 1); + + bs->bit_offset += size_in_bits; + + if (bit_left > size_in_bits) { + bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val); + } else { + size_in_bits -= bit_left; + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits); + bs->buffer[pos] = swap32(bs->buffer[pos]); + + if (pos + 1 == bs->max_size_in_dword) { + bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int)); + + if (!bs->buffer) + return; + } + + bs->buffer[pos + 1] = val; + } +} + +static void +avc_bitstream_put_ue(avc_bitstream *bs, unsigned int val) +{ + int size_in_bits = 0; + int tmp_val = ++val; + + while (tmp_val) { + tmp_val >>= 1; + size_in_bits++; + } + + avc_bitstream_put_ui(bs, 0, size_in_bits - 1); // leading zero + avc_bitstream_put_ui(bs, val, size_in_bits); +} + +static void +avc_bitstream_put_se(avc_bitstream *bs, int val) +{ + unsigned int new_val; + + if (val <= 0) + new_val = -2 * val; + else + new_val = 2 * val - 1; + + avc_bitstream_put_ue(bs, new_val); +} + +static void +avc_bitstream_byte_aligning(avc_bitstream *bs, int bit) +{ + int bit_offset = (bs->bit_offset & 0x7); + int bit_left = 8 - bit_offset; + int new_val; + + if (!bit_offset) + return; + + assert(bit == 0 || bit == 1); + + if (bit) + new_val = (1 << bit_left) - 1; + else + new_val = 0; + + avc_bitstream_put_ui(bs, new_val, bit_left); +} +static void avc_rbsp_trailing_bits(avc_bitstream *bs) +{ + avc_bitstream_put_ui(bs, 1, 1); + avc_bitstream_byte_aligning(bs, 0); +} +static void nal_start_code_prefix(avc_bitstream *bs) +{ + avc_bitstream_put_ui(bs, 0x00000001, 32); +} + +static void nal_header(avc_bitstream *bs, int nal_ref_idc, int nal_unit_type) +{ + avc_bitstream_put_ui(bs, 0, 1); /* forbidden_zero_bit: 0 */ + avc_bitstream_put_ui(bs, nal_ref_idc, 2); + avc_bitstream_put_ui(bs, nal_unit_type, 5); +} + +static void +slice_header(avc_bitstream *bs, + VAEncSequenceParameterBufferH264 *sps_param, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param) +{ + int first_mb_in_slice = slice_param->macroblock_address; + + avc_bitstream_put_ue(bs, first_mb_in_slice); /* first_mb_in_slice: 0 */ + avc_bitstream_put_ue(bs, slice_param->slice_type); /* slice_type */ + avc_bitstream_put_ue(bs, slice_param->pic_parameter_set_id); /* pic_parameter_set_id: 0 */ + avc_bitstream_put_ui(bs, pic_param->frame_num, sps_param->seq_fields.bits.log2_max_frame_num_minus4 + 4); /* frame_num */ + + /* frame_mbs_only_flag == 1 */ + if (!sps_param->seq_fields.bits.frame_mbs_only_flag) { + /* FIXME: */ + assert(0); + } + + if (pic_param->pic_fields.bits.idr_pic_flag) + avc_bitstream_put_ue(bs, slice_param->idr_pic_id); /* idr_pic_id: 0 */ + + if (sps_param->seq_fields.bits.pic_order_cnt_type == 0) { + avc_bitstream_put_ui(bs, pic_param->CurrPic.TopFieldOrderCnt, sps_param->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 + 4); + /* pic_order_present_flag == 0 */ + } else { + /* FIXME: */ + assert(0); + } + + /* redundant_pic_cnt_present_flag == 0 */ + + /* slice type */ + if (IS_P_SLICE(slice_param->slice_type)) { + avc_bitstream_put_ui(bs, slice_param->num_ref_idx_active_override_flag, 1); /* num_ref_idx_active_override_flag: */ + + if (slice_param->num_ref_idx_active_override_flag) + avc_bitstream_put_ue(bs, slice_param->num_ref_idx_l0_active_minus1); + + /* ref_pic_list_reordering */ + avc_bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + } else if (IS_B_SLICE(slice_param->slice_type)) { + avc_bitstream_put_ui(bs, slice_param->direct_spatial_mv_pred_flag, 1); /* direct_spatial_mv_pred: 1 */ + + avc_bitstream_put_ui(bs, slice_param->num_ref_idx_active_override_flag, 1); /* num_ref_idx_active_override_flag: */ + + if (slice_param->num_ref_idx_active_override_flag) { + avc_bitstream_put_ue(bs, slice_param->num_ref_idx_l0_active_minus1); + avc_bitstream_put_ue(bs, slice_param->num_ref_idx_l1_active_minus1); + } + + /* ref_pic_list_reordering */ + avc_bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + avc_bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l1: 0 */ + } + + if ((pic_param->pic_fields.bits.weighted_pred_flag && + IS_P_SLICE(slice_param->slice_type)) || + ((pic_param->pic_fields.bits.weighted_bipred_idc == 1) && + IS_B_SLICE(slice_param->slice_type))) { + /* FIXME: fill weight/offset table */ + assert(0); + } + + /* dec_ref_pic_marking */ + if (pic_param->pic_fields.bits.reference_pic_flag) { /* nal_ref_idc != 0 */ + unsigned char no_output_of_prior_pics_flag = 0; + unsigned char long_term_reference_flag = 0; + unsigned char adaptive_ref_pic_marking_mode_flag = 0; + + if (pic_param->pic_fields.bits.idr_pic_flag) { + avc_bitstream_put_ui(bs, no_output_of_prior_pics_flag, 1); /* no_output_of_prior_pics_flag: 0 */ + avc_bitstream_put_ui(bs, long_term_reference_flag, 1); /* long_term_reference_flag: 0 */ + } else { + avc_bitstream_put_ui(bs, adaptive_ref_pic_marking_mode_flag, 1); /* adaptive_ref_pic_marking_mode_flag: 0 */ + } + } + + if (pic_param->pic_fields.bits.entropy_coding_mode_flag && + !IS_I_SLICE(slice_param->slice_type)) + avc_bitstream_put_ue(bs, slice_param->cabac_init_idc); /* cabac_init_idc: 0 */ + + avc_bitstream_put_se(bs, slice_param->slice_qp_delta); /* slice_qp_delta: 0 */ + + /* ignore for SP/SI */ + + if (pic_param->pic_fields.bits.deblocking_filter_control_present_flag) { + avc_bitstream_put_ue(bs, slice_param->disable_deblocking_filter_idc); /* disable_deblocking_filter_idc: 0 */ + + if (slice_param->disable_deblocking_filter_idc != 1) { + avc_bitstream_put_se(bs, slice_param->slice_alpha_c0_offset_div2); /* slice_alpha_c0_offset_div2: 2 */ + avc_bitstream_put_se(bs, slice_param->slice_beta_offset_div2); /* slice_beta_offset_div2: 2 */ + } + } + + if (pic_param->pic_fields.bits.entropy_coding_mode_flag) { + avc_bitstream_byte_aligning(bs, 1); + } +} + +int +build_avc_slice_header(VAEncSequenceParameterBufferH264 *sps_param, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + unsigned char **slice_header_buffer) +{ + avc_bitstream bs; + int is_idr = !!pic_param->pic_fields.bits.idr_pic_flag; + int is_ref = !!pic_param->pic_fields.bits.reference_pic_flag; + + avc_bitstream_start(&bs); + nal_start_code_prefix(&bs); + + if (IS_I_SLICE(slice_param->slice_type)) { + nal_header(&bs, NAL_REF_IDC_HIGH, is_idr ? NAL_IDR : NAL_NON_IDR); + } else if (IS_P_SLICE(slice_param->slice_type)) { + assert(!is_idr); + nal_header(&bs, NAL_REF_IDC_MEDIUM, NAL_NON_IDR); + } else { + assert(IS_B_SLICE(slice_param->slice_type)); + assert(!is_idr); + nal_header(&bs, is_ref ? NAL_REF_IDC_LOW : NAL_REF_IDC_NONE, NAL_NON_IDR); + } + + slice_header(&bs, sps_param, pic_param, slice_param); + + avc_bitstream_end(&bs); + *slice_header_buffer = (unsigned char *)bs.buffer; + + return bs.bit_offset; +} + +int +build_avc_sei_buffering_period(int cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int byte_size, i; + + avc_bitstream nal_bs; + avc_bitstream sei_bs; + + avc_bitstream_start(&sei_bs); + avc_bitstream_put_ue(&sei_bs, 0); /*seq_parameter_set_id*/ + avc_bitstream_put_ui(&sei_bs, init_cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_bs, init_cpb_removal_delay_offset, cpb_removal_length); + if ( sei_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_bs, 1, 1); + } + avc_bitstream_end(&sei_bs); + byte_size = (sei_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + avc_bitstream_put_ui(&nal_bs, 0, 8); + avc_bitstream_put_ui(&nal_bs, byte_size, 8); + + byte_buf = (unsigned char *)sei_bs.buffer; + for(i = 0; i < byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +int +build_avc_sei_pic_timing(unsigned int cpb_removal_length, unsigned int cpb_removal_delay, + unsigned int dpb_output_length, unsigned int dpb_output_delay, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int byte_size, i; + + avc_bitstream nal_bs; + avc_bitstream sei_bs; + + avc_bitstream_start(&sei_bs); + avc_bitstream_put_ui(&sei_bs, cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_bs, dpb_output_delay, dpb_output_length); + if ( sei_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_bs, 1, 1); + } + avc_bitstream_end(&sei_bs); + byte_size = (sei_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + avc_bitstream_put_ui(&nal_bs, 0x01, 8); + avc_bitstream_put_ui(&nal_bs, byte_size, 8); + + byte_buf = (unsigned char *)sei_bs.buffer; + for(i = 0; i < byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + + +int +build_avc_sei_buffer_timing(unsigned int init_cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned int cpb_removal_length, + unsigned int cpb_removal_delay, + unsigned int dpb_output_length, + unsigned int dpb_output_delay, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int bp_byte_size, i, pic_byte_size; + + avc_bitstream nal_bs; + avc_bitstream sei_bp_bs, sei_pic_bs; + + avc_bitstream_start(&sei_bp_bs); + avc_bitstream_put_ue(&sei_bp_bs, 0); /*seq_parameter_set_id*/ + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay_offset, cpb_removal_length); + if ( sei_bp_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_bp_bs, 1, 1); + } + avc_bitstream_end(&sei_bp_bs); + bp_byte_size = (sei_bp_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&sei_pic_bs); + avc_bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_pic_bs, dpb_output_delay, dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_pic_bs, 1, 1); + } + avc_bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + /* Write the SEI buffer period data */ + avc_bitstream_put_ui(&nal_bs, 0, 8); + avc_bitstream_put_ui(&nal_bs, bp_byte_size, 8); + + byte_buf = (unsigned char *)sei_bp_bs.buffer; + for(i = 0; i < bp_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + /* write the SEI timing data */ + avc_bitstream_put_ui(&nal_bs, 0x01, 8); + avc_bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +int +build_mpeg2_slice_header(VAEncSequenceParameterBufferMPEG2 *sps_param, + VAEncPictureParameterBufferMPEG2 *pic_param, + VAEncSliceParameterBufferMPEG2 *slice_param, + unsigned char **slice_header_buffer) +{ + avc_bitstream bs; + + avc_bitstream_start(&bs); + avc_bitstream_end(&bs); + *slice_header_buffer = (unsigned char *)bs.buffer; + + return bs.bit_offset; +} + +static void binarize_qindex_delta(avc_bitstream *bs, int qindex_delta) +{ + if (qindex_delta == 0) + avc_bitstream_put_ui(bs, 0, 1); + else { + avc_bitstream_put_ui(bs, 1, 1); + avc_bitstream_put_ui(bs, abs(qindex_delta), 4); + + if (qindex_delta < 0) + avc_bitstream_put_ui(bs, 1, 1); + else + avc_bitstream_put_ui(bs, 0, 1); + } +} + +void binarize_vp8_frame_header(VAEncSequenceParameterBufferVP8 *seq_param, + VAEncPictureParameterBufferVP8 *pic_param, + VAQMatrixBufferVP8 *q_matrix, + struct gen6_mfc_context *mfc_context, + struct intel_encoder_context *encoder_context) +{ + avc_bitstream bs; + int i, j; + int is_intra_frame = !pic_param->pic_flags.bits.frame_type; + int log2num = pic_param->pic_flags.bits.num_token_partitions; + + /* modify picture paramters */ + pic_param->pic_flags.bits.loop_filter_adj_enable = 1; + pic_param->pic_flags.bits.mb_no_coeff_skip = 1; + pic_param->pic_flags.bits.forced_lf_adjustment = 1; + pic_param->pic_flags.bits.refresh_entropy_probs = 1; + pic_param->pic_flags.bits.segmentation_enabled = 0; + + pic_param->pic_flags.bits.loop_filter_type = pic_param->pic_flags.bits.version / 2; + if (pic_param->pic_flags.bits.version > 1) + pic_param->loop_filter_level[0] = 0; + + avc_bitstream_start(&bs); + + if (is_intra_frame) { + avc_bitstream_put_ui(&bs, 0, 1); + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.clamping_type ,1); + } + + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.segmentation_enabled, 1); + + if (pic_param->pic_flags.bits.segmentation_enabled) { + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.update_mb_segmentation_map, 1); + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.update_segment_feature_data, 1); + if (pic_param->pic_flags.bits.update_segment_feature_data) { + /*add it later*/ + assert(0); + } + if (pic_param->pic_flags.bits.update_mb_segmentation_map) { + for (i = 0; i < 3; i++) { + if (mfc_context->vp8_state.mb_segment_tree_probs[i] == 255) + avc_bitstream_put_ui(&bs, 0, 1); + else { + avc_bitstream_put_ui(&bs, 1, 1); + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.mb_segment_tree_probs[i], 8); + } + } + } + } + + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.loop_filter_type, 1); + avc_bitstream_put_ui(&bs, pic_param->loop_filter_level[0], 6); + avc_bitstream_put_ui(&bs, pic_param->sharpness_level, 3); + + mfc_context->vp8_state.frame_header_lf_update_pos = bs.bit_offset; + + if (pic_param->pic_flags.bits.forced_lf_adjustment) { + avc_bitstream_put_ui(&bs, 1, 1);//mode_ref_lf_delta_enable = 1 + avc_bitstream_put_ui(&bs, 1, 1);//mode_ref_lf_delta_update = 1 + + for (i =0; i < 4; i++) { + avc_bitstream_put_ui(&bs, 1, 1); + if (pic_param->ref_lf_delta[i] > 0) { + avc_bitstream_put_ui(&bs, (abs(pic_param->ref_lf_delta[i]) & 0x3F), 6); + avc_bitstream_put_ui(&bs, 0, 1); + } else { + avc_bitstream_put_ui(&bs, (abs(pic_param->ref_lf_delta[i]) & 0x3F), 6); + avc_bitstream_put_ui(&bs, 1, 1); + } + } + + for (i =0; i < 4; i++) { + avc_bitstream_put_ui(&bs, 1, 1); + if (pic_param->mode_lf_delta[i] > 0) { + avc_bitstream_put_ui(&bs, (abs(pic_param->mode_lf_delta[i]) & 0x3F), 6); + avc_bitstream_put_ui(&bs, 0, 1); + } else { + avc_bitstream_put_ui(&bs, (abs(pic_param->mode_lf_delta[i]) & 0x3F), 6); + avc_bitstream_put_ui(&bs, 1, 1); + } + } + + } else { + avc_bitstream_put_ui(&bs, 0, 1);//mode_ref_lf_delta_enable = 0 + } + + avc_bitstream_put_ui(&bs, log2num, 2); + + mfc_context->vp8_state.frame_header_qindex_update_pos = bs.bit_offset; + + avc_bitstream_put_ui(&bs, q_matrix->quantization_index[0], 7); + + for (i = 0; i < 5; i++) + binarize_qindex_delta(&bs, q_matrix->quantization_index_delta[i]); + + if (!is_intra_frame) { + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.refresh_golden_frame, 1); + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.refresh_alternate_frame, 1); + + if (!pic_param->pic_flags.bits.refresh_golden_frame) + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.copy_buffer_to_golden, 2); + + if (!pic_param->pic_flags.bits.refresh_alternate_frame) + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.copy_buffer_to_alternate, 2); + + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.sign_bias_golden, 1); + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.sign_bias_alternate, 1); + } + + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.refresh_entropy_probs, 1); + + if (!is_intra_frame) + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.refresh_last, 1); + + mfc_context->vp8_state.frame_header_token_update_pos = bs.bit_offset; + + for (i = 0; i < 4 * 8 * 3 * 11; i++) + avc_bitstream_put_ui(&bs, 0, 1); //don't update coeff_probs + + avc_bitstream_put_ui(&bs, pic_param->pic_flags.bits.mb_no_coeff_skip, 1); + if (pic_param->pic_flags.bits.mb_no_coeff_skip) + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.prob_skip_false, 8); + + if (!is_intra_frame) { + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.prob_intra, 8); + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.prob_last, 8); + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.prob_gf, 8); + + avc_bitstream_put_ui(&bs, 1, 1); //y_mode_update_flag = 1 + for (i = 0; i < 4; i++) { + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.y_mode_probs[i], 8); + } + + avc_bitstream_put_ui(&bs, 1, 1); //uv_mode_update_flag = 1 + for (i = 0; i < 3; i++) { + avc_bitstream_put_ui(&bs, mfc_context->vp8_state.uv_mode_probs[i], 8); + } + + mfc_context->vp8_state.frame_header_bin_mv_upate_pos = bs.bit_offset; + + for (i = 0; i < 2 ; i++) { + for (j = 0; j < 19; j++) { + avc_bitstream_put_ui(&bs, 0, 1); + //avc_bitstream_put_ui(&bs, mfc_context->vp8_state.mv_probs[i][j], 7); + } + } + } + + avc_bitstream_end(&bs); + + mfc_context->vp8_state.vp8_frame_header = (unsigned char *)bs.buffer; + mfc_context->vp8_state.frame_header_bit_count = bs.bit_offset; +} + +/* HEVC to do for internal header generated*/ + +void nal_header_hevc(avc_bitstream *bs, int nal_unit_type, int temporalid) +{ + /* forbidden_zero_bit: 0 */ + avc_bitstream_put_ui(bs, 0, 1); + /* nal unit_type */ + avc_bitstream_put_ui(bs, nal_unit_type, 6); + /* layer_id. currently it is zero */ + avc_bitstream_put_ui(bs, 0, 6); + /* teporalid + 1 .*/ + avc_bitstream_put_ui(bs, temporalid + 1, 3); +} + +int build_hevc_sei_buffering_period(int init_cpb_removal_delay_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int bp_byte_size, i; + //unsigned int cpb_removal_delay; + + avc_bitstream nal_bs; + avc_bitstream sei_bp_bs; + + avc_bitstream_start(&sei_bp_bs); + avc_bitstream_put_ue(&sei_bp_bs, 0); /*seq_parameter_set_id*/ + /* SEI buffer period info */ + /* NALHrdBpPresentFlag == 1 */ + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay,init_cpb_removal_delay_length); + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay_offset,init_cpb_removal_delay_length); + if ( sei_bp_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_bp_bs, 1, 1); + } + avc_bitstream_end(&sei_bp_bs); + bp_byte_size = (sei_bp_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header_hevc(&nal_bs, PREFIX_SEI_NUT ,0); + + /* Write the SEI buffer period data */ + avc_bitstream_put_ui(&nal_bs, 0, 8); + avc_bitstream_put_ui(&nal_bs, bp_byte_size, 8); + + byte_buf = (unsigned char *)sei_bp_bs.buffer; + for(i = 0; i < bp_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +int build_hevc_idr_sei_buffer_timing(unsigned int init_cpb_removal_delay_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned int cpb_removal_length, + unsigned int cpb_removal_delay, + unsigned int dpb_output_length, + unsigned int dpb_output_delay, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int bp_byte_size, i, pic_byte_size; + //unsigned int cpb_removal_delay; + + avc_bitstream nal_bs; + avc_bitstream sei_bp_bs, sei_pic_bs; + + avc_bitstream_start(&sei_bp_bs); + avc_bitstream_put_ue(&sei_bp_bs, 0); /*seq_parameter_set_id*/ + /* SEI buffer period info */ + /* NALHrdBpPresentFlag == 1 */ + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay,init_cpb_removal_delay_length); + avc_bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay_offset,init_cpb_removal_delay_length); + if ( sei_bp_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_bp_bs, 1, 1); + } + avc_bitstream_end(&sei_bp_bs); + bp_byte_size = (sei_bp_bs.bit_offset + 7) / 8; + + /* SEI pic timing info */ + avc_bitstream_start(&sei_pic_bs); + /* The info of CPB and DPB delay is controlled by CpbDpbDelaysPresentFlag, + * which is derived as 1 if one of the following conditions is true: + * nal_hrd_parameters_present_flag is present in the avc_bitstream and is equal to 1, + * vcl_hrd_parameters_present_flag is present in the avc_bitstream and is equal to 1, + */ + //cpb_removal_delay = (hevc_context.current_cpb_removal - hevc_context.prev_idr_cpb_removal); + avc_bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_pic_bs, dpb_output_delay,dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_pic_bs, 1, 1); + } + /* The pic_structure_present_flag determines whether the pic_structure + * info is written into the SEI pic timing info. + * Currently it is set to zero. + */ + avc_bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header_hevc(&nal_bs, PREFIX_SEI_NUT ,0); + + /* Write the SEI buffer period data */ + avc_bitstream_put_ui(&nal_bs, 0, 8); + avc_bitstream_put_ui(&nal_bs, bp_byte_size, 8); + + byte_buf = (unsigned char *)sei_bp_bs.buffer; + for(i = 0; i < bp_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + /* write the SEI pic timing data */ + avc_bitstream_put_ui(&nal_bs, 0x01, 8); + avc_bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +int build_hevc_sei_pic_timing(unsigned int cpb_removal_length, unsigned int cpb_removal_delay, + unsigned int dpb_output_length, unsigned int dpb_output_delay, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int i, pic_byte_size; + //unsigned int cpb_removal_delay; + + avc_bitstream nal_bs; + avc_bitstream sei_pic_bs; + + avc_bitstream_start(&sei_pic_bs); + /* The info of CPB and DPB delay is controlled by CpbDpbDelaysPresentFlag, + * which is derived as 1 if one of the following conditions is true: + * nal_hrd_parameters_present_flag is present in the avc_bitstream and is equal to 1, + * vcl_hrd_parameters_present_flag is present in the avc_bitstream and is equal to 1, + */ + //cpb_removal_delay = (hevc_context.current_cpb_removal - hevc_context.current_idr_cpb_removal); + avc_bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + avc_bitstream_put_ui(&sei_pic_bs, dpb_output_delay, dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + avc_bitstream_put_ui(&sei_pic_bs, 1, 1); + } + + /* The pic_structure_present_flag determines whether the pic_structure + * info is written into the SEI pic timing info. + * Currently it is set to zero. + */ + avc_bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + avc_bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header_hevc(&nal_bs, PREFIX_SEI_NUT ,0); + + /* write the SEI Pic timing data */ + avc_bitstream_put_ui(&nal_bs, 0x01, 8); + avc_bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + avc_bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + avc_rbsp_trailing_bits(&nal_bs); + avc_bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +typedef struct _RefPicSet +{ + unsigned char num_negative_pics; + unsigned char num_positive_pics; + unsigned char delta_poc_s0_minus1[8]; + unsigned char used_by_curr_pic_s0_flag[8]; + unsigned char delta_poc_s1_minus1[8]; + unsigned char used_by_curr_pic_s1_flag[8]; + unsigned int inter_ref_pic_set_prediction_flag; +}hevcRefPicSet; + +void hevc_short_term_ref_pic_set(avc_bitstream *bs,VAEncSliceParameterBufferHEVC *slice_param,int curPicOrderCnt) +{ + hevcRefPicSet hevc_rps; + int rps_idx = 1, ref_idx = 0; + int i = 0; + + hevc_rps.inter_ref_pic_set_prediction_flag = 0; + /* s0: between I and P/B; s1 : between P and B */ + hevc_rps.num_negative_pics = (slice_param->slice_type!=HEVC_SLICE_I) ? 1 : 0; + hevc_rps.num_positive_pics = (slice_param->slice_type==HEVC_SLICE_B) ? 1 : 0; + hevc_rps.delta_poc_s0_minus1[0] = 0; + hevc_rps.used_by_curr_pic_s0_flag[0] = 0; + hevc_rps.delta_poc_s1_minus1[0] = 0; + hevc_rps.used_by_curr_pic_s1_flag[0] = 0; + if(slice_param->num_ref_idx_l0_active_minus1==0 ) + { + hevc_rps.delta_poc_s0_minus1[0] = (slice_param->slice_type==HEVC_SLICE_I) ? 0 : ( curPicOrderCnt - slice_param->ref_pic_list0[0].pic_order_cnt-1); //0; + hevc_rps.used_by_curr_pic_s0_flag[0] = 1; + } + if(slice_param->num_ref_idx_l1_active_minus1==0 ) + { + hevc_rps.delta_poc_s1_minus1[0] = (slice_param->slice_type==HEVC_SLICE_I) ? 0 : ( slice_param->ref_pic_list1[0].pic_order_cnt -curPicOrderCnt -1); + hevc_rps.used_by_curr_pic_s1_flag[0] = 1; + } + + if (rps_idx) + avc_bitstream_put_ui(bs, hevc_rps.inter_ref_pic_set_prediction_flag, 1); + + if (hevc_rps.inter_ref_pic_set_prediction_flag) + { + /* not support */ + /* to do */ + } else { + avc_bitstream_put_ue(bs, hevc_rps.num_negative_pics); + avc_bitstream_put_ue(bs, hevc_rps.num_positive_pics); + + for (i = 0; i < hevc_rps.num_negative_pics; i++) + { + avc_bitstream_put_ue(bs, hevc_rps.delta_poc_s0_minus1[ref_idx]); + avc_bitstream_put_ui(bs, hevc_rps.used_by_curr_pic_s0_flag[ref_idx], 1); + } + for (i = 0; i < hevc_rps.num_positive_pics; i++) + { + avc_bitstream_put_ue(bs, hevc_rps.delta_poc_s1_minus1[ref_idx]); + avc_bitstream_put_ui(bs, hevc_rps.used_by_curr_pic_s1_flag[ref_idx], 1); + } + } + + return; +} + +static void slice_rbsp(avc_bitstream *bs, + int slice_index, + VAEncSequenceParameterBufferHEVC *seq_param, + VAEncPictureParameterBufferHEVC *pic_param, + VAEncSliceParameterBufferHEVC *slice_param) +{ + int log2_cu_size = seq_param->log2_min_luma_coding_block_size_minus3 + 3; + int log2_ctb_size = seq_param->log2_diff_max_min_luma_coding_block_size + log2_cu_size; + int ctb_size = 1 << log2_ctb_size; + + int picture_width_in_ctb = (seq_param->pic_width_in_luma_samples + ctb_size - 1) / ctb_size; + int picture_height_in_ctb = (seq_param->pic_height_in_luma_samples + ctb_size - 1) / ctb_size; + + /* first_slice_segment_in_pic_flag */ + if (slice_index == 0) + { + avc_bitstream_put_ui(bs, 1, 1); + } + else + { + avc_bitstream_put_ui(bs, 0, 1); + } + + /* no_output_of_prior_pics_flag */ + if (pic_param->pic_fields.bits.idr_pic_flag) + avc_bitstream_put_ui(bs, 1, 1); + + /* slice_pic_parameter_set_id */ + avc_bitstream_put_ue(bs, 0); + + /* not the first slice */ + if (slice_index) + { + /* TBD */ + int bit_size; + + float num_ctus; + + num_ctus = picture_width_in_ctb * picture_height_in_ctb; + bit_size = ceilf(log2f(num_ctus)); + + if (pic_param->pic_fields.bits.dependent_slice_segments_enabled_flag) + { + avc_bitstream_put_ui(bs, + slice_param->slice_fields.bits.dependent_slice_segment_flag, 1); + } + /* slice_segment_address is based on Ceil(log2(PictureSizeinCtbs)) */ + avc_bitstream_put_ui(bs, slice_param->slice_segment_address, bit_size); + } + if (!slice_param->slice_fields.bits.dependent_slice_segment_flag) + { + /* slice_reserved_flag */ + + /* slice_type */ + avc_bitstream_put_ue(bs, slice_param->slice_type); + /* use the inferred the value of pic_output_flag */ + + /* colour_plane_id */ + if (seq_param->seq_fields.bits.separate_colour_plane_flag) + { + avc_bitstream_put_ui(bs, slice_param->slice_fields.bits.colour_plane_id, 1); + } + + if (!pic_param->pic_fields.bits.idr_pic_flag) + { + int Log2MaxPicOrderCntLsb = 8; + avc_bitstream_put_ui(bs, pic_param->decoded_curr_pic.pic_order_cnt, Log2MaxPicOrderCntLsb); + + //if (!slice_param->short_term_ref_pic_set_sps_flag) + { + /* short_term_ref_pic_set_sps_flag. + * Use zero and then pass the RPS from slice_header + */ + avc_bitstream_put_ui(bs, 0, 1); + /* TBD + * Add the short_term reference picture set + */ + hevc_short_term_ref_pic_set(bs,slice_param,pic_param->decoded_curr_pic.pic_order_cnt); + } + /* long term reference present flag. unpresent */ + /* TBD */ + + /* sps temporal MVP*/ + if (seq_param->seq_fields.bits.sps_temporal_mvp_enabled_flag) + { + avc_bitstream_put_ui(bs, + slice_param->slice_fields.bits.slice_temporal_mvp_enabled_flag, 1); + } + } + + /* long term reference present flag. unpresent */ + + /* sample adaptive offset enabled flag */ + if (seq_param->seq_fields.bits.sample_adaptive_offset_enabled_flag) + { + avc_bitstream_put_ui(bs, slice_param->slice_fields.bits.slice_sao_luma_flag, 1); + avc_bitstream_put_ui(bs, slice_param->slice_fields.bits.slice_sao_chroma_flag, 1); + } + + if (slice_param->slice_type != HEVC_SLICE_I) + { + /* num_ref_idx_active_override_flag. 0 */ + avc_bitstream_put_ui(bs, 0, 1); + /* lists_modification_flag is unpresent NumPocTotalCurr > 1 ,here it is 1*/ + + /* No reference picture set modification */ + + /* MVD_l1_zero_flag */ + if (slice_param->slice_type == HEVC_SLICE_B) + avc_bitstream_put_ui(bs, slice_param->slice_fields.bits.mvd_l1_zero_flag, 1); + + /* cabac_init_present_flag. 0 */ + + /* slice_temporal_mvp_enabled_flag. */ + if (slice_param->slice_fields.bits.slice_temporal_mvp_enabled_flag) + { + if (slice_param->slice_type == HEVC_SLICE_B) + avc_bitstream_put_ui(bs, slice_param->slice_fields.bits.collocated_from_l0_flag, 1); + /* + * TBD: Add the collocated_ref_idx. + */ + } + if (((pic_param->pic_fields.bits.weighted_pred_flag) && + (slice_param->slice_type == HEVC_SLICE_P)) || + ((pic_param->pic_fields.bits.weighted_bipred_flag) && + (slice_param->slice_type == HEVC_SLICE_B))) + { + /* TBD: + * add the weighted table + */ + } + avc_bitstream_put_ue(bs, 5 - slice_param->max_num_merge_cand); + } + /* slice_qp_delta */ + avc_bitstream_put_ue(bs, slice_param->slice_qp_delta); + + /* slice_cb/cr_qp_offset is controlled by pps_slice_chroma_qp_offsets_present_flag + * The present flag is set to 1. + */ + avc_bitstream_put_ue(bs, slice_param->slice_cb_qp_offset); + avc_bitstream_put_ue(bs, slice_param->slice_cr_qp_offset); + + /* + * deblocking_filter_override_flag is controlled by + * deblocking_filter_override_enabled_flag. + * The override_enabled_flag is zero. + * deblocking_filter_override_flag is zero. then + * slice_deblocking_filter_disabled_flag is also zero + * (It is inferred to be equal to pps_deblocking_filter_disabled_flag. + */ + + /* slice_loop_filter_across_slices_enabled_flag is controlled + * by pps_loop_filter_across_slices_enabled_flag && + * (slice_sao_luma_flag | | slice_sao_chroma_flag | | + * !slice_deblocking_filter_disabled_flag )) + * + */ + } + + if (pic_param->pic_fields.bits.tiles_enabled_flag || + pic_param->pic_fields.bits.entropy_coding_sync_enabled_flag) + { + /* TBD. + * Add the Entry-points && tile definition. + */ + } + + /* slice_segment_header_extension_present_flag. Not present */ + + /* byte_alignment */ + avc_rbsp_trailing_bits(bs); +} + +int get_hevc_slice_nalu_type (VAEncPictureParameterBufferHEVC *pic_param) +{ + if (pic_param->pic_fields.bits.idr_pic_flag) + return IDR_WRADL_NUT; + else if (pic_param->pic_fields.bits.reference_pic_flag) + return SLICE_TRAIL_R_NUT; + else + return SLICE_TRAIL_N_NUT; +} + +int build_hevc_slice_header(VAEncSequenceParameterBufferHEVC *seq_param, + VAEncPictureParameterBufferHEVC *pic_param, + VAEncSliceParameterBufferHEVC *slice_param, + unsigned char **header_buffer, + int slice_index) +{ + avc_bitstream bs; + + avc_bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header_hevc(&bs, get_hevc_slice_nalu_type(pic_param), 0); + slice_rbsp(&bs, slice_index, seq_param,pic_param,slice_param); + avc_bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.h new file mode 100644 index 000000000..14edaba3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_encoder_utils.h @@ -0,0 +1,65 @@ +#ifndef __I965_ENCODER_UTILS_H__ +#define __I965_ENCODER_UTILS_H__ + +int +build_avc_slice_header(VAEncSequenceParameterBufferH264 *sps_param, + VAEncPictureParameterBufferH264 *pic_param, + VAEncSliceParameterBufferH264 *slice_param, + unsigned char **slice_header_buffer); +int +build_avc_sei_buffering_period(int cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned char **sei_buffer); + +int +build_avc_sei_pic_timing(unsigned int cpb_removal_length, unsigned int cpb_removal_delay, + unsigned int dpb_output_length, unsigned int dpb_output_delay, + unsigned char **sei_buffer); + +int +build_avc_sei_buffer_timing(unsigned int init_cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned int cpb_removal_length, + unsigned int cpb_removal_delay, + unsigned int dpb_output_length, + unsigned int dpb_output_delay, + unsigned char **sei_buffer); + +int +build_mpeg2_slice_header(VAEncSequenceParameterBufferMPEG2 *sps_param, + VAEncPictureParameterBufferMPEG2 *pic_param, + VAEncSliceParameterBufferMPEG2 *slice_param, + unsigned char **slice_header_buffer); + +/* HEVC */ + +int +build_hevc_slice_header(VAEncSequenceParameterBufferHEVC *seq_param, + VAEncPictureParameterBufferHEVC *pic_param, + VAEncSliceParameterBufferHEVC *slice_param, + unsigned char **header_buffer, + int slice_index); +int +build_hevc_sei_buffering_period(int cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned char **sei_buffer); + +int +build_hevc_sei_pic_timing(unsigned int cpb_removal_length, unsigned int cpb_removal_delay, + unsigned int dpb_output_length, unsigned int dpb_output_delay, + unsigned char **sei_buffer); + +int +build_hevc_idr_sei_buffer_timing(unsigned int init_cpb_removal_delay_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned int cpb_removal_length, + unsigned int cpb_removal_delay, + unsigned int dpb_output_length, + unsigned int dpb_output_delay, + unsigned char **sei_buffer); + +#endif /* __I965_ENCODER_UTILS_H__ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_fourcc.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_fourcc.h new file mode 100644 index 000000000..55daf507e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_fourcc.h @@ -0,0 +1,68 @@ +#ifndef _I965_FOURCC_H_ +#define _I965_FOURCC_H_ + +#ifndef VA_FOURCC_YV16 +#define VA_FOURCC_YV16 VA_FOURCC('Y','V','1','6') +#endif + +#ifndef VA_FOURCC_I420 +#define VA_FOURCC_I420 VA_FOURCC('I','4','2','0') +#endif + +/* + * VA_FOURCC_IA44 is an exception because the va.h already + * defines the AI44 as VA_FOURCC('I', 'A', '4', '4'). + */ +#ifndef VA_FOURCC_IA44 +#define VA_FOURCC_IA44 VA_FOURCC('A','I','4','4') +#endif + +#ifndef VA_FOURCC_IA88 +#define VA_FOURCC_IA88 VA_FOURCC('I','A','8','8') +#endif + +#ifndef VA_FOURCC_AI88 +#define VA_FOURCC_AI88 VA_FOURCC('A','I','8','8') +#endif + +#ifndef VA_FOURCC_IMC1 +#define VA_FOURCC_IMC1 VA_FOURCC('I','M','C','1') +#endif + +#ifndef VA_FOURCC_YVY2 +#define VA_FOURCC_YVY2 VA_FOURCC('Y','V','Y','2') +#endif + +#define I965_MAX_PLANES 4 +#define I965_MAX_COMONENTS 4 + +#define I965_COLOR_YUV 0 +#define I965_COLOR_RGB 1 +#define I965_COLOR_INDEX 2 + +typedef struct { + uint8_t plane; /* the plane which the pixel belongs to */ + uint8_t offset; /* bits offset within a macro-pixel for packed YUV formats or pixel for other formats in the plane */ +} i965_component_info; + +typedef struct { + uint32_t fourcc; /* fourcc */ + uint32_t format; /* 0: YUV, 1: RGB, 2: Indexed format */ + uint32_t subsampling; /* Sub sampling */ + uint8_t flag; /* 1: only supported by vaCreateSurfaces(), 2: only supported by vaCreateImage(), 3: both */ + uint8_t hfactor; /* horizontal sampling factor */ + uint8_t vfactor; /* vertical sampling factor */ + uint8_t num_planes; /* number of planes */ + uint8_t bpp[I965_MAX_PLANES]; /* bits per pixel within a plane */ + uint8_t num_components; /* number of components */ + /* + * Components in the array are ordered in Y, U, V, A (up to 4 components) + * for YUV formats, R, G, B, A (up to 4 components) for RGB formats and + * I, A (2 components) for indexed formats + */ + i965_component_info components[I965_MAX_COMONENTS]; +} i965_fourcc_info; + +extern const i965_fourcc_info *get_fourcc_info(unsigned int); + +#endif /* _I965_FOURCC_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.c new file mode 100644 index 000000000..b9bf99bb7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.c @@ -0,0 +1,1310 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_gpe_utils.h" + +static void +i965_gpe_select(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +gen6_gpe_state_base_address(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 10); + + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (10 - 2)); + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General State Base Address */ + OUT_RELOC(batch, + gpe_context->surface_state_binding_table.bo, + I915_GEM_DOMAIN_INSTRUCTION, + 0, + BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic State Base Address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect Object Base Address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction Base Address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General State Access Upper Bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic State Access Upper Bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect Object Access Upper Bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction Access Upper Bound */ + + ADVANCE_BATCH(batch); +} + +static void +gen6_gpe_vfe_state(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + + BEGIN_BATCH(batch, 8); + + OUT_BATCH(batch, CMD_MEDIA_VFE_STATE | (8 - 2)); + OUT_BATCH(batch, 0); /* Scratch Space Base Pointer and Space */ + OUT_BATCH(batch, + gpe_context->vfe_state.max_num_threads << 16 | /* Maximum Number of Threads */ + gpe_context->vfe_state.num_urb_entries << 8 | /* Number of URB Entries */ + gpe_context->vfe_state.gpgpu_mode << 2); /* MEDIA Mode */ + OUT_BATCH(batch, 0); /* Debug: Object ID */ + OUT_BATCH(batch, + gpe_context->vfe_state.urb_entry_size << 16 | /* URB Entry Allocation Size */ + gpe_context->vfe_state.curbe_allocation_size); /* CURBE Allocation Size */ + /* the vfe_desc5/6/7 will decide whether the scoreboard is used. */ + OUT_BATCH(batch, gpe_context->vfe_desc5.dword); + OUT_BATCH(batch, gpe_context->vfe_desc6.dword); + OUT_BATCH(batch, gpe_context->vfe_desc7.dword); + + ADVANCE_BATCH(batch); + +} + +static void +gen6_gpe_curbe_load(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 4); + + OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, gpe_context->curbe.length); + OUT_RELOC(batch, gpe_context->curbe.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + ADVANCE_BATCH(batch); +} + +static void +gen6_gpe_idrt(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 4); + + OUT_BATCH(batch, CMD_MEDIA_INTERFACE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, gpe_context->idrt.max_entries * gpe_context->idrt.entry_size); + OUT_RELOC(batch, gpe_context->idrt.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + + ADVANCE_BATCH(batch); +} + +void +i965_gpe_load_kernels(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_kernel *kernel_list, + unsigned int num_kernels) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + assert(num_kernels <= MAX_GPE_KERNELS); + memcpy(gpe_context->kernels, kernel_list, sizeof(*kernel_list) * num_kernels); + gpe_context->num_kernels = num_kernels; + + for (i = 0; i < num_kernels; i++) { + struct i965_kernel *kernel = &gpe_context->kernels[i]; + + kernel->bo = dri_bo_alloc(i965->intel.bufmgr, + kernel->name, + kernel->size, + 0x1000); + assert(kernel->bo); + dri_bo_subdata(kernel->bo, 0, kernel->size, kernel->bin); + } +} + +void +i965_gpe_context_destroy(struct i965_gpe_context *gpe_context) +{ + int i; + + dri_bo_unreference(gpe_context->surface_state_binding_table.bo); + gpe_context->surface_state_binding_table.bo = NULL; + + dri_bo_unreference(gpe_context->idrt.bo); + gpe_context->idrt.bo = NULL; + + dri_bo_unreference(gpe_context->curbe.bo); + gpe_context->curbe.bo = NULL; + + for (i = 0; i < gpe_context->num_kernels; i++) { + struct i965_kernel *kernel = &gpe_context->kernels[i]; + + dri_bo_unreference(kernel->bo); + kernel->bo = NULL; + } +} + +void +i965_gpe_context_init(VADriverContextP ctx, + struct i965_gpe_context *gpe_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + + dri_bo_unreference(gpe_context->surface_state_binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + gpe_context->surface_state_binding_table.length, + 4096); + assert(bo); + gpe_context->surface_state_binding_table.bo = bo; + + dri_bo_unreference(gpe_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface descriptor table", + gpe_context->idrt.entry_size * gpe_context->idrt.max_entries, + 4096); + assert(bo); + gpe_context->idrt.bo = bo; + + dri_bo_unreference(gpe_context->curbe.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "curbe buffer", + gpe_context->curbe.length, + 4096); + assert(bo); + gpe_context->curbe.bo = bo; +} + +void +gen6_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + intel_batchbuffer_emit_mi_flush(batch); + + i965_gpe_select(ctx, gpe_context, batch); + gen6_gpe_state_base_address(ctx, gpe_context, batch); + gen6_gpe_vfe_state(ctx, gpe_context, batch); + gen6_gpe_curbe_load(ctx, gpe_context, batch); + gen6_gpe_idrt(ctx, gpe_context, batch); +} + +static void +i965_gpe_set_surface_tiling(struct i965_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss3.tiled_surface = 0; + ss->ss3.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +i965_gpe_set_surface2_tiling(struct i965_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen7_gpe_set_surface_tiling(struct gen7_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen7_gpe_set_surface2_tiling(struct gen7_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen8_gpe_set_surface_tiling(struct gen8_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen8_gpe_set_surface2_tiling(struct gen8_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +i965_gpe_set_surface2_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct i965_surface_state2 *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + assert(obj_surface->bo); + assert(obj_surface->fourcc == VA_FOURCC_NV12); + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_base_address = obj_surface->bo->offset; + /* ss1 */ + ss->ss1.cbcr_pixel_offset_v_direction = 2; + ss->ss1.width = w - 1; + ss->ss1.height = h - 1; + /* ss2 */ + ss->ss2.surface_format = MFX_SURFACE_PLANAR_420_8; + ss->ss2.interleave_chroma = 1; + ss->ss2.pitch = w_pitch - 1; + ss->ss2.half_pitch_for_chroma = 0; + i965_gpe_set_surface2_tiling(ss, tiling); + /* ss3: UV offset for interleave mode */ + ss->ss3.x_offset_for_cb = obj_surface->x_cb_offset; + ss->ss3.y_offset_for_cb = obj_surface->y_cb_offset; +} + +void +i965_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct i965_surface_state2 *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct i965_surface_state2 *)((char *)bo->virtual + surface_state_offset); + i965_gpe_set_surface2_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct i965_surface_state2, ss0), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +i965_gpe_set_media_rw_surface_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct i965_surface_state *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM; + /* ss1 */ + ss->ss1.base_addr = obj_surface->bo->offset; + /* ss2 */ + ss->ss2.width = w / 4 - 1; /* in DWORDs for media read & write message */ + ss->ss2.height = h - 1; + /* ss3 */ + ss->ss3.pitch = w_pitch - 1; + i965_gpe_set_surface_tiling(ss, tiling); +} + +void +i965_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct i965_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + + ss = (struct i965_surface_state *)((char *)bo->virtual + surface_state_offset); + i965_gpe_set_media_rw_surface_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct i965_surface_state, ss1), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +i965_gpe_set_buffer_surface_state(VADriverContextP ctx, + struct i965_buffer_surface *buffer_surface, + struct i965_surface_state *ss) +{ + int num_entries; + + assert(buffer_surface->bo); + num_entries = buffer_surface->num_blocks * buffer_surface->size_block / buffer_surface->pitch; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.render_cache_read_mode = 1; + ss->ss0.surface_type = I965_SURFACE_BUFFER; + /* ss1 */ + ss->ss1.base_addr = buffer_surface->bo->offset; + /* ss2 */ + ss->ss2.width = ((num_entries - 1) & 0x7f); + ss->ss2.height = (((num_entries - 1) >> 7) & 0x1fff); + /* ss3 */ + ss->ss3.depth = (((num_entries - 1) >> 20) & 0x7f); + ss->ss3.pitch = buffer_surface->pitch - 1; +} + +void +i965_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct i965_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct i965_surface_state *)((char *)bo->virtual + surface_state_offset); + i965_gpe_set_buffer_surface_state(ctx, buffer_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + surface_state_offset + offsetof(struct i965_surface_state, ss1), + buffer_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +gen7_gpe_set_surface2_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen7_surface_state2 *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + assert(obj_surface->bo); + assert(obj_surface->fourcc == VA_FOURCC_NV12); + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_base_address = obj_surface->bo->offset; + /* ss1 */ + ss->ss1.cbcr_pixel_offset_v_direction = 2; + ss->ss1.width = w - 1; + ss->ss1.height = h - 1; + /* ss2 */ + ss->ss2.surface_format = MFX_SURFACE_PLANAR_420_8; + ss->ss2.interleave_chroma = 1; + ss->ss2.pitch = w_pitch - 1; + ss->ss2.half_pitch_for_chroma = 0; + gen7_gpe_set_surface2_tiling(ss, tiling); + /* ss3: UV offset for interleave mode */ + ss->ss3.x_offset_for_cb = obj_surface->x_cb_offset; + ss->ss3.y_offset_for_cb = obj_surface->y_cb_offset; +} + +void +gen7_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen7_surface_state2 *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct gen7_surface_state2 *)((char *)bo->virtual + surface_state_offset); + gen7_gpe_set_surface2_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct gen7_surface_state2, ss0), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +gen7_gpe_set_media_rw_surface_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen7_surface_state *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM; + /* ss1 */ + ss->ss1.base_addr = obj_surface->bo->offset; + /* ss2 */ + ss->ss2.width = w / 4 - 1; /* in DWORDs for media read & write message */ + ss->ss2.height = h - 1; + /* ss3 */ + ss->ss3.pitch = w_pitch - 1; + gen7_gpe_set_surface_tiling(ss, tiling); +} + +static void +gen75_gpe_set_media_chroma_surface_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen7_surface_state *ss) +{ + int w, w_pitch; + unsigned int tiling, swizzle; + int cbcr_offset; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + w_pitch = obj_surface->width; + + cbcr_offset = obj_surface->height * obj_surface->width; + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM; + /* ss1 */ + ss->ss1.base_addr = obj_surface->bo->offset + cbcr_offset; + /* ss2 */ + ss->ss2.width = w / 4 - 1; /* in DWORDs for media read & write message */ + ss->ss2.height = (obj_surface->height / 2) -1; + /* ss3 */ + ss->ss3.pitch = w_pitch - 1; + gen7_gpe_set_surface_tiling(ss, tiling); +} + +void +gen7_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen7_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + + ss = (struct gen7_surface_state *)((char *)bo->virtual + surface_state_offset); + gen7_gpe_set_media_rw_surface_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct gen7_surface_state, ss1), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +void +gen75_gpe_media_chroma_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen7_surface_state *ss; + dri_bo *bo; + int cbcr_offset; + + assert(obj_surface->fourcc == VA_FOURCC_NV12); + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + + cbcr_offset = obj_surface->height * obj_surface->width; + ss = (struct gen7_surface_state *)((char *)bo->virtual + surface_state_offset); + gen75_gpe_set_media_chroma_surface_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + cbcr_offset, + surface_state_offset + offsetof(struct gen7_surface_state, ss1), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + + +static void +gen7_gpe_set_buffer_surface_state(VADriverContextP ctx, + struct i965_buffer_surface *buffer_surface, + struct gen7_surface_state *ss) +{ + int num_entries; + + assert(buffer_surface->bo); + num_entries = buffer_surface->num_blocks * buffer_surface->size_block / buffer_surface->pitch; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_BUFFER; + /* ss1 */ + ss->ss1.base_addr = buffer_surface->bo->offset; + /* ss2 */ + ss->ss2.width = ((num_entries - 1) & 0x7f); + ss->ss2.height = (((num_entries - 1) >> 7) & 0x3fff); + /* ss3 */ + ss->ss3.depth = (((num_entries - 1) >> 21) & 0x3f); + ss->ss3.pitch = buffer_surface->pitch - 1; +} + +void +gen7_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen7_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct gen7_surface_state *)((char *)bo->virtual + surface_state_offset); + gen7_gpe_set_buffer_surface_state(ctx, buffer_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + surface_state_offset + offsetof(struct gen7_surface_state, ss1), + buffer_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +gen8_gpe_set_surface2_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen8_surface_state2 *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + assert(obj_surface->bo); + assert(obj_surface->fourcc == VA_FOURCC_NV12); + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss6.base_addr = obj_surface->bo->offset; + /* ss1 */ + ss->ss1.cbcr_pixel_offset_v_direction = 2; + ss->ss1.width = w - 1; + ss->ss1.height = h - 1; + /* ss2 */ + ss->ss2.surface_format = MFX_SURFACE_PLANAR_420_8; + ss->ss2.interleave_chroma = 1; + ss->ss2.pitch = w_pitch - 1; + ss->ss2.half_pitch_for_chroma = 0; + gen8_gpe_set_surface2_tiling(ss, tiling); + /* ss3: UV offset for interleave mode */ + ss->ss3.x_offset_for_cb = obj_surface->x_cb_offset; + ss->ss3.y_offset_for_cb = obj_surface->y_cb_offset; +} + +void +gen8_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen8_surface_state2 *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct gen8_surface_state2 *)((char *)bo->virtual + surface_state_offset); + gen8_gpe_set_surface2_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct gen8_surface_state2, ss6), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +gen8_gpe_set_media_rw_surface_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen8_surface_state *ss) +{ + int w, h, w_pitch; + unsigned int tiling, swizzle; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + h = obj_surface->orig_height; + w_pitch = obj_surface->width; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM; + /* ss1 */ + ss->ss8.base_addr = obj_surface->bo->offset; + /* ss2 */ + ss->ss2.width = w / 4 - 1; /* in DWORDs for media read & write message */ + ss->ss2.height = h - 1; + /* ss3 */ + ss->ss3.pitch = w_pitch - 1; + gen8_gpe_set_surface_tiling(ss, tiling); +} + +static void +gen8_gpe_set_media_chroma_surface_state(VADriverContextP ctx, + struct object_surface *obj_surface, + struct gen8_surface_state *ss) +{ + int w, w_pitch; + unsigned int tiling, swizzle; + int cbcr_offset; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + w = obj_surface->orig_width; + w_pitch = obj_surface->width; + + cbcr_offset = obj_surface->height * obj_surface->width; + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM; + /* ss1 */ + ss->ss8.base_addr = obj_surface->bo->offset + cbcr_offset; + /* ss2 */ + ss->ss2.width = w / 4 - 1; /* in DWORDs for media read & write message */ + ss->ss2.height = (obj_surface->height / 2) -1; + /* ss3 */ + ss->ss3.pitch = w_pitch - 1; + gen8_gpe_set_surface_tiling(ss, tiling); +} + +void +gen8_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen8_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + + ss = (struct gen8_surface_state *)((char *)bo->virtual + surface_state_offset); + gen8_gpe_set_media_rw_surface_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + 0, + surface_state_offset + offsetof(struct gen8_surface_state, ss8), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +void +gen8_gpe_media_chroma_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen8_surface_state *ss; + dri_bo *bo; + int cbcr_offset; + + assert(obj_surface->fourcc == VA_FOURCC_NV12); + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + + cbcr_offset = obj_surface->height * obj_surface->width; + ss = (struct gen8_surface_state *)((char *)bo->virtual + surface_state_offset); + gen8_gpe_set_media_chroma_surface_state(ctx, obj_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, 0, + cbcr_offset, + surface_state_offset + offsetof(struct gen8_surface_state, ss8), + obj_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + + +static void +gen8_gpe_set_buffer_surface_state(VADriverContextP ctx, + struct i965_buffer_surface *buffer_surface, + struct gen8_surface_state *ss) +{ + int num_entries; + + assert(buffer_surface->bo); + num_entries = buffer_surface->num_blocks * buffer_surface->size_block / buffer_surface->pitch; + + memset(ss, 0, sizeof(*ss)); + /* ss0 */ + ss->ss0.surface_type = I965_SURFACE_BUFFER; + /* ss1 */ + ss->ss8.base_addr = buffer_surface->bo->offset; + /* ss2 */ + ss->ss2.width = ((num_entries - 1) & 0x7f); + ss->ss2.height = (((num_entries - 1) >> 7) & 0x3fff); + /* ss3 */ + ss->ss3.depth = (((num_entries - 1) >> 21) & 0x3f); + ss->ss3.pitch = buffer_surface->pitch - 1; +} + +void +gen8_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset) +{ + struct gen8_surface_state *ss; + dri_bo *bo; + + bo = gpe_context->surface_state_binding_table.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + + ss = (struct gen8_surface_state *)((char *)bo->virtual + surface_state_offset); + gen8_gpe_set_buffer_surface_state(ctx, buffer_surface, ss); + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + surface_state_offset + offsetof(struct gen8_surface_state, ss8), + buffer_surface->bo); + + *((unsigned int *)((char *)bo->virtual + binding_table_offset)) = surface_state_offset; + dri_bo_unmap(bo); +} + +static void +gen8_gpe_state_base_address(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 16); + + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 14); + + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); //General State Base Address + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*DW4 Surface state base address */ + OUT_RELOC(batch, gpe_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, 0); + + /*DW6. Dynamic state base address */ + if (gpe_context->dynamic_state.bo) + OUT_RELOC(batch, gpe_context->dynamic_state.bo, + I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /*DW8. Indirect Object base address */ + if (gpe_context->indirect_state.bo) + OUT_RELOC(batch, gpe_context->indirect_state.bo, + I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /*DW10. Instruct base address */ + if (gpe_context->instruction_state.bo) + OUT_RELOC(batch, gpe_context->instruction_state.bo, + I915_GEM_DOMAIN_INSTRUCTION, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /* DW12. Size limitation */ + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //General State Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Dynamic State Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Indirect Object Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Instruction Access Upper Bound + + /* + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); //LLC Coherent Base Address + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY ); //LLC Coherent Upper Bound + */ + + ADVANCE_BATCH(batch); +} + +static void +gen8_gpe_vfe_state(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + + BEGIN_BATCH(batch, 9); + + OUT_BATCH(batch, CMD_MEDIA_VFE_STATE | (9 - 2)); + /* Scratch Space Base Pointer and Space */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, + gpe_context->vfe_state.max_num_threads << 16 | /* Maximum Number of Threads */ + gpe_context->vfe_state.num_urb_entries << 8 | /* Number of URB Entries */ + gpe_context->vfe_state.gpgpu_mode << 2); /* MEDIA Mode */ + OUT_BATCH(batch, 0); /* Debug: Object ID */ + OUT_BATCH(batch, + gpe_context->vfe_state.urb_entry_size << 16 | /* URB Entry Allocation Size */ + gpe_context->vfe_state.curbe_allocation_size); /* CURBE Allocation Size */ + + /* the vfe_desc5/6/7 will decide whether the scoreboard is used. */ + OUT_BATCH(batch, gpe_context->vfe_desc5.dword); + OUT_BATCH(batch, gpe_context->vfe_desc6.dword); + OUT_BATCH(batch, gpe_context->vfe_desc7.dword); + + ADVANCE_BATCH(batch); + +} + + +static void +gen8_gpe_curbe_load(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 4); + + OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, gpe_context->curbe_size); + OUT_BATCH(batch, gpe_context->curbe_offset); + + ADVANCE_BATCH(batch); +} + +static void +gen8_gpe_idrt(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 6); + + OUT_BATCH(batch, CMD_MEDIA_STATE_FLUSH); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, CMD_MEDIA_INTERFACE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, gpe_context->idrt_size); + OUT_BATCH(batch, gpe_context->idrt_offset); + + ADVANCE_BATCH(batch); +} + + +void +gen8_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + intel_batchbuffer_emit_mi_flush(batch); + + i965_gpe_select(ctx, gpe_context, batch); + gen8_gpe_state_base_address(ctx, gpe_context, batch); + gen8_gpe_vfe_state(ctx, gpe_context, batch); + gen8_gpe_curbe_load(ctx, gpe_context, batch); + gen8_gpe_idrt(ctx, gpe_context, batch); +} + +void +gen8_gpe_context_init(VADriverContextP ctx, + struct i965_gpe_context *gpe_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + int bo_size; + unsigned int start_offset, end_offset; + + dri_bo_unreference(gpe_context->surface_state_binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + gpe_context->surface_state_binding_table.length, + 4096); + assert(bo); + gpe_context->surface_state_binding_table.bo = bo; + + bo_size = gpe_context->idrt_size + gpe_context->curbe_size + gpe_context->sampler_size + 192; + dri_bo_unreference(gpe_context->dynamic_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + bo_size, + 4096); + assert(bo); + gpe_context->dynamic_state.bo = bo; + gpe_context->dynamic_state.bo_size = bo_size; + + end_offset = 0; + gpe_context->dynamic_state.end_offset = 0; + + /* Constant buffer offset */ + start_offset = ALIGN(end_offset, 64); + gpe_context->curbe_offset = start_offset; + end_offset = start_offset + gpe_context->curbe_size; + + /* Interface descriptor offset */ + start_offset = ALIGN(end_offset, 64); + gpe_context->idrt_offset = start_offset; + end_offset = start_offset + gpe_context->idrt_size; + + /* Sampler state offset */ + start_offset = ALIGN(end_offset, 64); + gpe_context->sampler_offset = start_offset; + end_offset = start_offset + gpe_context->sampler_size; + + /* update the end offset of dynamic_state */ + gpe_context->dynamic_state.end_offset = end_offset; +} + + +void +gen8_gpe_context_destroy(struct i965_gpe_context *gpe_context) +{ + dri_bo_unreference(gpe_context->surface_state_binding_table.bo); + gpe_context->surface_state_binding_table.bo = NULL; + + dri_bo_unreference(gpe_context->instruction_state.bo); + gpe_context->instruction_state.bo = NULL; + + dri_bo_unreference(gpe_context->dynamic_state.bo); + gpe_context->dynamic_state.bo = NULL; + + dri_bo_unreference(gpe_context->indirect_state.bo); + gpe_context->indirect_state.bo = NULL; + +} + + +void +gen8_gpe_load_kernels(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_kernel *kernel_list, + unsigned int num_kernels) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i, kernel_size; + unsigned int kernel_offset, end_offset; + unsigned char *kernel_ptr; + struct i965_kernel *kernel; + + assert(num_kernels <= MAX_GPE_KERNELS); + memcpy(gpe_context->kernels, kernel_list, sizeof(*kernel_list) * num_kernels); + gpe_context->num_kernels = num_kernels; + + kernel_size = num_kernels * 64; + for (i = 0; i < num_kernels; i++) { + kernel = &gpe_context->kernels[i]; + + kernel_size += kernel->size; + } + + gpe_context->instruction_state.bo = dri_bo_alloc(i965->intel.bufmgr, + "kernel shader", + kernel_size, + 0x1000); + if (gpe_context->instruction_state.bo == NULL) { + WARN_ONCE("failure to allocate the buffer space for kernel shader\n"); + return; + } + + assert(gpe_context->instruction_state.bo); + + gpe_context->instruction_state.bo_size = kernel_size; + gpe_context->instruction_state.end_offset = 0; + end_offset = 0; + + dri_bo_map(gpe_context->instruction_state.bo, 1); + kernel_ptr = (unsigned char *)(gpe_context->instruction_state.bo->virtual); + for (i = 0; i < num_kernels; i++) { + kernel_offset = ALIGN(end_offset, 64); + kernel = &gpe_context->kernels[i]; + kernel->kernel_offset = kernel_offset; + + if (kernel->size) { + memcpy(kernel_ptr + kernel_offset, kernel->bin, kernel->size); + + end_offset = kernel_offset + kernel->size; + } + } + + gpe_context->instruction_state.end_offset = end_offset; + + dri_bo_unmap(gpe_context->instruction_state.bo); + + return; +} + +static void +gen9_gpe_state_base_address(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 19); + + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (19 - 2)); + + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); //General State Base Address + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + /*DW4 Surface state base address */ + OUT_RELOC(batch, gpe_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, 0); + + /*DW6. Dynamic state base address */ + if (gpe_context->dynamic_state.bo) + OUT_RELOC(batch, gpe_context->dynamic_state.bo, + I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /*DW8. Indirect Object base address */ + if (gpe_context->indirect_state.bo) + OUT_RELOC(batch, gpe_context->indirect_state.bo, + I915_GEM_DOMAIN_SAMPLER, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /*DW10. Instruct base address */ + if (gpe_context->instruction_state.bo) + OUT_RELOC(batch, gpe_context->instruction_state.bo, + I915_GEM_DOMAIN_INSTRUCTION, + 0, BASE_ADDRESS_MODIFY); + else + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + OUT_BATCH(batch, 0); + + /* DW12. Size limitation */ + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //General State Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Dynamic State Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Indirect Object Access Upper Bound + OUT_BATCH(batch, 0xFFFFF000 | BASE_ADDRESS_MODIFY); //Instruction Access Upper Bound + + /* the bindless surface state address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0xFFFFF000); + + ADVANCE_BATCH(batch); +} + +static void +gen9_gpe_select(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA | + GEN9_PIPELINE_SELECTION_MASK | + GEN9_MEDIA_DOP_GATE_OFF | + GEN9_MEDIA_DOP_GATE_MASK | + GEN9_FORCE_MEDIA_AWAKE_ON | + GEN9_FORCE_MEDIA_AWAKE_MASK); + ADVANCE_BATCH(batch); +} + +void +gen9_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + intel_batchbuffer_emit_mi_flush(batch); + + gen9_gpe_select(ctx, gpe_context, batch); + gen9_gpe_state_base_address(ctx, gpe_context, batch); + gen8_gpe_vfe_state(ctx, gpe_context, batch); + gen8_gpe_curbe_load(ctx, gpe_context, batch); + gen8_gpe_idrt(ctx, gpe_context, batch); +} + +void +gen9_gpe_pipeline_end(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch) +{ + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA | + GEN9_PIPELINE_SELECTION_MASK | + GEN9_MEDIA_DOP_GATE_ON | + GEN9_MEDIA_DOP_GATE_MASK | + GEN9_FORCE_MEDIA_AWAKE_OFF | + GEN9_FORCE_MEDIA_AWAKE_MASK); + ADVANCE_BATCH(batch); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.h new file mode 100644 index 000000000..7e39d46ce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_gpe_utils.h @@ -0,0 +1,231 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#ifndef _I965_GPE_UTILS_H_ +#define _I965_GPE_UTILS_H_ + +#include +#include + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_structs.h" + +#define MAX_GPE_KERNELS 32 + +struct i965_buffer_surface +{ + dri_bo *bo; + unsigned int num_blocks; + unsigned int size_block; + unsigned int pitch; +}; + +struct i965_gpe_context +{ + struct { + dri_bo *bo; + unsigned int length; /* in bytes */ + } surface_state_binding_table; + + struct { + dri_bo *bo; + unsigned int max_entries; + unsigned int entry_size; /* in bytes */ + } idrt; + + struct { + dri_bo *bo; + unsigned int length; /* in bytes */ + } curbe; + + struct { + unsigned int gpgpu_mode : 1; + unsigned int pad0 : 7; + unsigned int max_num_threads : 16; + unsigned int num_urb_entries : 8; + unsigned int urb_entry_size : 16; + unsigned int curbe_allocation_size : 16; + } vfe_state; + + /* vfe_desc5/6/7 is used to determine whether the HW scoreboard is used. + * If scoreboard is not used, don't touch them + */ + union { + unsigned int dword; + struct { + unsigned int mask:8; + unsigned int pad:22; + unsigned int type:1; + unsigned int enable:1; + } scoreboard0; + }vfe_desc5; + + union { + unsigned int dword; + struct { + int delta_x0:4; + int delta_y0:4; + int delta_x1:4; + int delta_y1:4; + int delta_x2:4; + int delta_y2:4; + int delta_x3:4; + int delta_y3:4; + } scoreboard1; + } vfe_desc6; + + union { + unsigned int dword; + struct { + int delta_x4:4; + int delta_y4:4; + int delta_x5:4; + int delta_y5:4; + int delta_x6:4; + int delta_y6:4; + int delta_x7:4; + int delta_y7:4; + } scoreboard2; + } vfe_desc7; + + unsigned int num_kernels; + struct i965_kernel kernels[MAX_GPE_KERNELS]; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } instruction_state; + + struct { + dri_bo *bo; + } indirect_state; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } dynamic_state; + + unsigned int sampler_offset; + int sampler_size; + unsigned int idrt_offset; + int idrt_size; + unsigned int curbe_offset; + int curbe_size; +}; + +void i965_gpe_context_destroy(struct i965_gpe_context *gpe_context); +void i965_gpe_context_init(VADriverContextP ctx, + struct i965_gpe_context *gpe_context); +void i965_gpe_load_kernels(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_kernel *kernel_list, + unsigned int num_kernels); +void gen6_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch); +void i965_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void i965_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void i965_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void gen7_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void gen7_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void gen7_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +void gen75_gpe_media_chroma_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + +extern void gen8_gpe_surface2_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +extern void gen8_gpe_media_rw_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +extern void gen8_gpe_buffer_suface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_buffer_surface *buffer_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); +extern void gen8_gpe_media_chroma_surface_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct object_surface *obj_surface, + unsigned long binding_table_offset, + unsigned long surface_state_offset); + +void gen8_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch); + + +void gen8_gpe_context_destroy(struct i965_gpe_context *gpe_context); +void gen8_gpe_context_init(VADriverContextP ctx, + struct i965_gpe_context *gpe_context); + +void gen8_gpe_load_kernels(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct i965_kernel *kernel_list, + unsigned int num_kernels); + +void gen9_gpe_pipeline_setup(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch); + +void gen9_gpe_pipeline_end(VADriverContextP ctx, + struct i965_gpe_context *gpe_context, + struct intel_batchbuffer *batch); + +#endif /* _I965_GPE_UTILS_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.c new file mode 100644 index 000000000..3e33b9ba1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.c @@ -0,0 +1,398 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" + +#include "i965_media.h" +#include "i965_media_mpeg2.h" +#include "i965_media_h264.h" +#include "i965_decoder_utils.h" + +static void +i965_media_pipeline_select(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +i965_media_urb_layout(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = media_context->base.batch; + unsigned int vfe_fence, cs_fence; + + vfe_fence = media_context->urb.cs_start; + cs_fence = i965->intel.device_info->urb_size; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_URB_FENCE | UF0_VFE_REALLOC | UF0_CS_REALLOC | 1); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (vfe_fence << UF2_VFE_FENCE_SHIFT) | /* VFE_SIZE */ + (cs_fence << UF2_CS_FENCE_SHIFT)); /* CS_SIZE */ + ADVANCE_BATCH(batch); +} + +static void +i965_media_state_base_address(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = media_context->base.batch; + + if (IS_IRONLAKE(i965->intel.device_info)) { + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 6); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + if (media_context->indirect_object.bo) { + OUT_RELOC(batch, media_context->indirect_object.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, + media_context->indirect_object.offset | BASE_ADDRESS_MODIFY); + } else { + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + } + + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } else { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 4); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + + if (media_context->indirect_object.bo) { + OUT_RELOC(batch, media_context->indirect_object.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, + media_context->indirect_object.offset | BASE_ADDRESS_MODIFY); + } else { + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + } + + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } +} + +static void +i965_media_state_pointers(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_MEDIA_STATE_POINTERS | 1); + + if (media_context->extended_state.enabled) + OUT_RELOC(batch, media_context->extended_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); + else + OUT_BATCH(batch, 0); + + OUT_RELOC(batch, media_context->vfe_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_media_cs_urb_layout(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CS_URB_STATE | 0); + OUT_BATCH(batch, + ((media_context->urb.size_cs_entry - 1) << 4) | /* URB Entry Allocation Size */ + (media_context->urb.num_cs_entries << 0)); /* Number of URB Entries */ + ADVANCE_BATCH(batch); +} + +static void +i965_media_pipeline_state(VADriverContextP ctx, struct i965_media_context *media_context) +{ + i965_media_state_base_address(ctx, media_context); + i965_media_state_pointers(ctx, media_context); + i965_media_cs_urb_layout(ctx, media_context); +} + +static void +i965_media_constant_buffer(VADriverContextP ctx, struct decode_state *decode_state, struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CONSTANT_BUFFER | (1 << 8) | (2 - 2)); + OUT_RELOC(batch, media_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + media_context->urb.size_cs_entry - 1); + ADVANCE_BATCH(batch); +} + +static void +i965_media_depth_buffer(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_DEPTH_BUFFER | 4); + OUT_BATCH(batch, (I965_DEPTHFORMAT_D32_FLOAT << 18) | + (I965_SURFACE_NULL << 29)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_media_pipeline_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); /* step 1 */ + i965_media_depth_buffer(ctx, media_context); + i965_media_pipeline_select(ctx, media_context); /* step 2 */ + i965_media_urb_layout(ctx, media_context); /* step 3 */ + i965_media_pipeline_state(ctx, media_context); /* step 4 */ + i965_media_constant_buffer(ctx, decode_state, media_context); /* step 5 */ + assert(media_context->media_objects); + media_context->media_objects(ctx, decode_state, media_context); /* step 6 */ + intel_batchbuffer_end_atomic(batch); +} + +static void +i965_media_decode_init(VADriverContextP ctx, + VAProfile profile, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + int i; + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + + /* constant buffer */ + dri_bo_unreference(media_context->curbe.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, 64); + assert(bo); + media_context->curbe.bo = bo; + + /* surface state */ + for (i = 0; i < MAX_MEDIA_SURFACES; i++) { + dri_bo_unreference(media_context->surface_state[i].bo); + media_context->surface_state[i].bo = NULL; + } + + /* binding table */ + dri_bo_unreference(media_context->binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "binding table", + MAX_MEDIA_SURFACES * sizeof(unsigned int), 32); + assert(bo); + media_context->binding_table.bo = bo; + + /* interface descriptor remapping table */ + dri_bo_unreference(media_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface discriptor", + MAX_INTERFACE_DESC * sizeof(struct i965_interface_descriptor), 16); + assert(bo); + media_context->idrt.bo = bo; + + /* vfe state */ + dri_bo_unreference(media_context->vfe_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vfe state", + sizeof(struct i965_vfe_state), 32); + assert(bo); + media_context->vfe_state.bo = bo; + + /* extended state */ + media_context->extended_state.enabled = 0; + + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + i965_media_mpeg2_decode_init(ctx, decode_state, media_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + i965_media_h264_decode_init(ctx, decode_state, media_context); + break; + + default: + assert(0); + break; + } +} + +static VAStatus +i965_media_decode_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + struct i965_media_context *media_context = (struct i965_media_context *)hw_context; + struct decode_state *decode_state = &codec_state->decode; + VAStatus vaStatus; + + vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state); + + if (vaStatus != VA_STATUS_SUCCESS) + goto out; + + i965_media_decode_init(ctx, profile, decode_state, media_context); + assert(media_context->media_states_setup); + media_context->media_states_setup(ctx, decode_state, media_context); + i965_media_pipeline_setup(ctx, decode_state, media_context); + intel_batchbuffer_flush(hw_context->batch); + + vaStatus = VA_STATUS_SUCCESS; + +out: + return vaStatus; +} + +static void +i965_media_context_destroy(void *hw_context) +{ + struct i965_media_context *media_context = (struct i965_media_context *)hw_context; + int i; + + if (media_context->free_private_context) + media_context->free_private_context(&media_context->private_context); + + for (i = 0; i < MAX_MEDIA_SURFACES; i++) { + dri_bo_unreference(media_context->surface_state[i].bo); + media_context->surface_state[i].bo = NULL; + } + + dri_bo_unreference(media_context->extended_state.bo); + media_context->extended_state.bo = NULL; + + dri_bo_unreference(media_context->vfe_state.bo); + media_context->vfe_state.bo = NULL; + + dri_bo_unreference(media_context->idrt.bo); + media_context->idrt.bo = NULL; + + dri_bo_unreference(media_context->binding_table.bo); + media_context->binding_table.bo = NULL; + + dri_bo_unreference(media_context->curbe.bo); + media_context->curbe.bo = NULL; + + dri_bo_unreference(media_context->indirect_object.bo); + media_context->indirect_object.bo = NULL; + + intel_batchbuffer_free(media_context->base.batch); + free(media_context); +} + +struct hw_context * +g4x_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct i965_media_context *media_context = calloc(1, sizeof(struct i965_media_context)); + + assert(media_context); + media_context->base.destroy = i965_media_context_destroy; + media_context->base.run = i965_media_decode_picture; + media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + i965_media_mpeg2_dec_context_init(ctx, media_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + default: + assert(0); + break; + } + + return (struct hw_context *)media_context; +} + +struct hw_context * +ironlake_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct i965_media_context *media_context = calloc(1, sizeof(struct i965_media_context)); + + assert(media_context); + media_context->base.destroy = i965_media_context_destroy; + media_context->base.run = i965_media_decode_picture; + media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + + switch (obj_config->profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + i965_media_mpeg2_dec_context_init(ctx, media_context); + break; + + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + i965_media_h264_dec_context_init(ctx, media_context); + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + default: + assert(0); + break; + } + + return (struct hw_context *)media_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.h new file mode 100644 index 000000000..e309d5b5c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media.h @@ -0,0 +1,96 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#ifndef _I965_MEDIA_H_ +#define _I965_MEDIA_H_ + +#include +#include +#include +#include + +#include "i965_structs.h" + +#define MAX_INTERFACE_DESC 16 +#define MAX_MEDIA_SURFACES 34 + +struct decode_state; + +struct i965_media_context +{ + struct hw_context base; + + struct { + dri_bo *bo; + } surface_state[MAX_MEDIA_SURFACES]; + + struct { + dri_bo *bo; + } binding_table; + + struct { + dri_bo *bo; + } idrt; /* interface descriptor remap table */ + + struct { + dri_bo *bo; + int enabled; + } extended_state; + + struct { + dri_bo *bo; + } vfe_state; + + struct { + dri_bo *bo; + } curbe; + + struct { + dri_bo *bo; + unsigned long offset; + } indirect_object; + + struct { + unsigned int vfe_start; + unsigned int cs_start; + + unsigned int num_vfe_entries; + unsigned int num_cs_entries; + + unsigned int size_vfe_entry; + unsigned int size_cs_entry; + } urb; + + void *private_context; + void (*media_states_setup)(VADriverContextP ctx, struct decode_state *decode_state, struct i965_media_context *media_context); + void (*media_objects)(VADriverContextP ctx, struct decode_state *decode_state, struct i965_media_context *media_context); + void (*free_private_context)(void **data); +}; + +#endif /* _I965_MEDIA_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.c new file mode 100644 index 000000000..5b05ac0ee --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.c @@ -0,0 +1,902 @@ +#include +#include +#include +#include + + +#include "intel_batchbuffer.h" +#include "intel_driver.h" + +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_media.h" +#include "i965_media_h264.h" +#include "i965_decoder_utils.h" + +enum { + INTRA_16X16 = 0, + INTRA_8X8, + INTRA_4X4, + INTRA_PCM, + FRAMEMB_MOTION, + FIELDMB_MOTION, + MBAFF_MOTION, +}; + +struct intra_kernel_header +{ + /* R1.0 */ + unsigned char intra_4x4_luma_mode_0_offset; + unsigned char intra_4x4_luma_mode_1_offset; + unsigned char intra_4x4_luma_mode_2_offset; + unsigned char intra_4x4_luma_mode_3_offset; + /* R1.1 */ + unsigned char intra_4x4_luma_mode_4_offset; + unsigned char intra_4x4_luma_mode_5_offset; + unsigned char intra_4x4_luma_mode_6_offset; + unsigned char intra_4x4_luma_mode_7_offset; + /* R1.2 */ + unsigned char intra_4x4_luma_mode_8_offset; + unsigned char pad0; + unsigned short top_reference_offset; + /* R1.3 */ + unsigned char intra_8x8_luma_mode_0_offset; + unsigned char intra_8x8_luma_mode_1_offset; + unsigned char intra_8x8_luma_mode_2_offset; + unsigned char intra_8x8_luma_mode_3_offset; + /* R1.4 */ + unsigned char intra_8x8_luma_mode_4_offset; + unsigned char intra_8x8_luma_mode_5_offset; + unsigned char intra_8x8_luma_mode_6_offset; + unsigned char intra_8x8_luma_mode_7_offset; + /* R1.5 */ + unsigned char intra_8x8_luma_mode_8_offset; + unsigned char pad1; + unsigned short const_reverse_data_transfer_intra_8x8; + /* R1.6 */ + unsigned char intra_16x16_luma_mode_0_offset; + unsigned char intra_16x16_luma_mode_1_offset; + unsigned char intra_16x16_luma_mode_2_offset; + unsigned char intra_16x16_luma_mode_3_offset; + /* R1.7 */ + unsigned char intra_chroma_mode_0_offset; + unsigned char intra_chroma_mode_1_offset; + unsigned char intra_chroma_mode_2_offset; + unsigned char intra_chroma_mode_3_offset; + /* R2.0 */ + unsigned int const_intra_16x16_plane_0; + /* R2.1 */ + unsigned int const_intra_16x16_chroma_plane_0; + /* R2.2 */ + unsigned int const_intra_16x16_chroma_plane_1; + /* R2.3 */ + unsigned int const_intra_16x16_plane_1; + /* R2.4 */ + unsigned int left_shift_count_reverse_dw_ordering; + /* R2.5 */ + unsigned int const_reverse_data_transfer_intra_4x4; + /* R2.6 */ + unsigned int intra_4x4_pred_mode_offset; +}; + +struct inter_kernel_header +{ + unsigned short weight_offset; + unsigned char weight_offset_flag; + unsigned char pad0; +}; + +#include "shaders/h264/mc/export.inc" +static unsigned long avc_mc_kernel_offset_gen4[] = { + INTRA_16x16_IP * INST_UNIT_GEN4, + INTRA_8x8_IP * INST_UNIT_GEN4, + INTRA_4x4_IP * INST_UNIT_GEN4, + INTRA_PCM_IP * INST_UNIT_GEN4, + FRAME_MB_IP * INST_UNIT_GEN4, + FIELD_MB_IP * INST_UNIT_GEN4, + MBAFF_MB_IP * INST_UNIT_GEN4 +}; + +struct intra_kernel_header intra_kernel_header_gen4 = { + 0, + (INTRA_4X4_HORIZONTAL_IP - INTRA_4X4_VERTICAL_IP), + (INTRA_4X4_DC_IP - INTRA_4X4_VERTICAL_IP), + (INTRA_4X4_DIAG_DOWN_LEFT_IP - INTRA_4X4_VERTICAL_IP), + + (INTRA_4X4_DIAG_DOWN_RIGHT_IP - INTRA_4X4_VERTICAL_IP), + (INTRA_4X4_VERT_RIGHT_IP - INTRA_4X4_VERTICAL_IP), + (INTRA_4X4_HOR_DOWN_IP - INTRA_4X4_VERTICAL_IP), + (INTRA_4X4_VERT_LEFT_IP - INTRA_4X4_VERTICAL_IP), + + (INTRA_4X4_HOR_UP_IP - INTRA_4X4_VERTICAL_IP), + 0, + 0xFFFC, + + 0, + (INTRA_8X8_HORIZONTAL_IP - INTRA_8X8_VERTICAL_IP), + (INTRA_8X8_DC_IP - INTRA_8X8_VERTICAL_IP), + (INTRA_8X8_DIAG_DOWN_LEFT_IP - INTRA_8X8_VERTICAL_IP), + + (INTRA_8X8_DIAG_DOWN_RIGHT_IP - INTRA_8X8_VERTICAL_IP), + (INTRA_8X8_VERT_RIGHT_IP - INTRA_8X8_VERTICAL_IP), + (INTRA_8X8_HOR_DOWN_IP - INTRA_8X8_VERTICAL_IP), + (INTRA_8X8_VERT_LEFT_IP - INTRA_8X8_VERTICAL_IP), + + (INTRA_8X8_HOR_UP_IP - INTRA_8X8_VERTICAL_IP), + 0, + 0x0001, + + 0, + (INTRA_16x16_HORIZONTAL_IP - INTRA_16x16_VERTICAL_IP), + (INTRA_16x16_DC_IP - INTRA_16x16_VERTICAL_IP), + (INTRA_16x16_PLANE_IP - INTRA_16x16_VERTICAL_IP), + + 0, + (INTRA_CHROMA_HORIZONTAL_IP - INTRA_CHROMA_DC_IP), + (INTRA_CHROMA_VERTICAL_IP - INTRA_CHROMA_DC_IP), + (INTRA_Chroma_PLANE_IP - INTRA_CHROMA_DC_IP), + + 0xFCFBFAF9, + + 0x00FFFEFD, + + 0x04030201, + + 0x08070605, + + 0x18100800, + + 0x00020406, + + (intra_Pred_4x4_Y_IP - ADD_ERROR_SB3_IP) * 0x1000000 + + (intra_Pred_4x4_Y_IP - ADD_ERROR_SB2_IP) * 0x10000 + + (intra_Pred_4x4_Y_IP - ADD_ERROR_SB1_IP) * 0x100 + + (intra_Pred_4x4_Y_IP - ADD_ERROR_SB0_IP) +}; + +static const uint32_t h264_avc_combined_gen4[][4] = { +#include "shaders/h264/mc/avc_mc.g4b" +}; + +static const uint32_t h264_avc_null_gen4[][4] = { +#include "shaders/h264/mc/null.g4b" +}; + +static struct i965_kernel h264_avc_kernels_gen4[] = { + { + "AVC combined kernel", + H264_AVC_COMBINED, + h264_avc_combined_gen4, + sizeof(h264_avc_combined_gen4), + NULL + }, + + { + "NULL kernel", + H264_AVC_NULL, + h264_avc_null_gen4, + sizeof(h264_avc_null_gen4), + NULL + } +}; + +/* On Ironlake */ +#include "shaders/h264/mc/export.inc.gen5" +static unsigned long avc_mc_kernel_offset_gen5[] = { + INTRA_16x16_IP_GEN5 * INST_UNIT_GEN5, + INTRA_8x8_IP_GEN5 * INST_UNIT_GEN5, + INTRA_4x4_IP_GEN5 * INST_UNIT_GEN5, + INTRA_PCM_IP_GEN5 * INST_UNIT_GEN5, + FRAME_MB_IP_GEN5 * INST_UNIT_GEN5, + FIELD_MB_IP_GEN5 * INST_UNIT_GEN5, + MBAFF_MB_IP_GEN5 * INST_UNIT_GEN5 +}; + +struct intra_kernel_header intra_kernel_header_gen5 = { + 0, + (INTRA_4X4_HORIZONTAL_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + (INTRA_4X4_DC_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + (INTRA_4X4_DIAG_DOWN_LEFT_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + + (INTRA_4X4_DIAG_DOWN_RIGHT_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + (INTRA_4X4_VERT_RIGHT_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + (INTRA_4X4_HOR_DOWN_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + (INTRA_4X4_VERT_LEFT_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + + (INTRA_4X4_HOR_UP_IP_GEN5 - INTRA_4X4_VERTICAL_IP_GEN5), + 0, + 0xFFFC, + + 0, + (INTRA_8X8_HORIZONTAL_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + (INTRA_8X8_DC_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + (INTRA_8X8_DIAG_DOWN_LEFT_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + + (INTRA_8X8_DIAG_DOWN_RIGHT_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + (INTRA_8X8_VERT_RIGHT_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + (INTRA_8X8_HOR_DOWN_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + (INTRA_8X8_VERT_LEFT_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + + (INTRA_8X8_HOR_UP_IP_GEN5 - INTRA_8X8_VERTICAL_IP_GEN5), + 0, + 0x0001, + + 0, + (INTRA_16x16_HORIZONTAL_IP_GEN5 - INTRA_16x16_VERTICAL_IP_GEN5), + (INTRA_16x16_DC_IP_GEN5 - INTRA_16x16_VERTICAL_IP_GEN5), + (INTRA_16x16_PLANE_IP_GEN5 - INTRA_16x16_VERTICAL_IP_GEN5), + + 0, + (INTRA_CHROMA_HORIZONTAL_IP_GEN5 - INTRA_CHROMA_DC_IP_GEN5), + (INTRA_CHROMA_VERTICAL_IP_GEN5 - INTRA_CHROMA_DC_IP_GEN5), + (INTRA_Chroma_PLANE_IP_GEN5 - INTRA_CHROMA_DC_IP_GEN5), + + 0xFCFBFAF9, + + 0x00FFFEFD, + + 0x04030201, + + 0x08070605, + + 0x18100800, + + 0x00020406, + + (intra_Pred_4x4_Y_IP_GEN5 - ADD_ERROR_SB3_IP_GEN5) * 0x1000000 + + (intra_Pred_4x4_Y_IP_GEN5 - ADD_ERROR_SB2_IP_GEN5) * 0x10000 + + (intra_Pred_4x4_Y_IP_GEN5 - ADD_ERROR_SB1_IP_GEN5) * 0x100 + + (intra_Pred_4x4_Y_IP_GEN5 - ADD_ERROR_SB0_IP_GEN5) +}; + +static const uint32_t h264_avc_combined_gen5[][4] = { +#include "shaders/h264/mc/avc_mc.g4b.gen5" +}; + +static const uint32_t h264_avc_null_gen5[][4] = { +#include "shaders/h264/mc/null.g4b.gen5" +}; + +static struct i965_kernel h264_avc_kernels_gen5[] = { + { + "AVC combined kernel", + H264_AVC_COMBINED, + h264_avc_combined_gen5, + sizeof(h264_avc_combined_gen5), + NULL + }, + + { + "NULL kernel", + H264_AVC_NULL, + h264_avc_null_gen5, + sizeof(h264_avc_null_gen5), + NULL + } +}; + +#define NUM_AVC_MC_INTERFACES (sizeof(avc_mc_kernel_offset_gen4) / sizeof(avc_mc_kernel_offset_gen4[0])) +static unsigned long *avc_mc_kernel_offset = NULL; + +static struct intra_kernel_header *intra_kernel_header = NULL; + +static void +i965_media_h264_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + unsigned long offset, + int w, int h, int pitch, + Bool is_dst, + int vert_line_stride, + int vert_line_stride_ofs, + int format, + struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_surface_state *ss; + dri_bo *bo; + uint32_t write_domain, read_domain; + + assert(obj_surface->bo); + + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state", + sizeof(struct i965_surface_state), 32); + assert(bo); + dri_bo_map(bo, 1); + assert(bo->virtual); + ss = bo->virtual; + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + ss->ss0.vert_line_stride = vert_line_stride; + ss->ss0.vert_line_stride_ofs = vert_line_stride_ofs; + ss->ss1.base_addr = obj_surface->bo->offset + offset; + ss->ss2.width = w - 1; + ss->ss2.height = h - 1; + ss->ss3.pitch = pitch - 1; + + if (is_dst) { + write_domain = I915_GEM_DOMAIN_RENDER; + read_domain = I915_GEM_DOMAIN_RENDER; + } else { + write_domain = 0; + read_domain = I915_GEM_DOMAIN_SAMPLER; + } + + dri_bo_emit_reloc(bo, + read_domain, write_domain, + offset, + offsetof(struct i965_surface_state, ss1), + obj_surface->bo); + dri_bo_unmap(bo); + + assert(index < MAX_MEDIA_SURFACES); + media_context->surface_state[index].bo = bo; +} + +static void +i965_media_h264_surfaces_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_h264_context *i965_h264_context; + struct object_surface *obj_surface; + VAPictureParameterBufferH264 *pic_param; + VAPictureH264 *va_pic; + int i, w, h; + int field_picture; + + assert(media_context->private_context); + i965_h264_context = (struct i965_h264_context *)media_context->private_context; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + + /* Target Picture */ + va_pic = &pic_param->CurrPic; + obj_surface = decode_state->render_object; + w = obj_surface->width; + h = obj_surface->height; + field_picture = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + i965_media_h264_surface_state(ctx, 0, obj_surface, + 0, w / 4, h / (1 + field_picture), w, + 1, + field_picture, + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD), + I965_SURFACEFORMAT_R8_SINT, /* Y */ + media_context); + i965_media_h264_surface_state(ctx, 1, obj_surface, + w * h, w / 4, h / 2 / (1 + field_picture), w, + 1, + field_picture, + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD), + I965_SURFACEFORMAT_R8G8_SINT, /* INTERLEAVED U/V */ + media_context); + + /* Reference Pictures */ + for (i = 0; i < ARRAY_ELEMS(i965_h264_context->fsid_list); i++) { + struct object_surface * const obj_surface = + i965_h264_context->fsid_list[i].obj_surface; + + if (obj_surface) { + const VAPictureH264 * const va_pic = avc_find_picture( + obj_surface->base.id, pic_param->ReferenceFrames, + ARRAY_ELEMS(pic_param->ReferenceFrames)); + + assert(va_pic != NULL); + w = obj_surface->width; + h = obj_surface->height; + field_picture = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)); + i965_media_h264_surface_state(ctx, 2 + i, obj_surface, + 0, w / 4, h / (1 + field_picture), w, + 0, + field_picture, + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD), + I965_SURFACEFORMAT_R8_SINT, /* Y */ + media_context); + i965_media_h264_surface_state(ctx, 18 + i, obj_surface, + w * h, w / 4, h / 2 / (1 + field_picture), w, + 0, + field_picture, + !!(va_pic->flags & VA_PICTURE_H264_BOTTOM_FIELD), + I965_SURFACEFORMAT_R8G8_SINT, /* INTERLEAVED U/V */ + media_context); + } + } +} + +static void +i965_media_h264_binding_table(VADriverContextP ctx, struct i965_media_context *media_context) +{ + int i; + unsigned int *binding_table; + dri_bo *bo = media_context->binding_table.bo; + + dri_bo_map(bo, 1); + assert(bo->virtual); + binding_table = bo->virtual; + memset(binding_table, 0, bo->size); + + for (i = 0; i < MAX_MEDIA_SURFACES; i++) { + if (media_context->surface_state[i].bo) { + binding_table[i] = media_context->surface_state[i].bo->offset; + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*binding_table), + media_context->surface_state[i].bo); + } + } + + dri_bo_unmap(media_context->binding_table.bo); +} + +static void +i965_media_h264_interface_descriptor_remap_table(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_h264_context *i965_h264_context = (struct i965_h264_context *)media_context->private_context; + struct i965_interface_descriptor *desc; + int i; + dri_bo *bo; + + bo = media_context->idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < NUM_AVC_MC_INTERFACES; i++) { + int kernel_offset = avc_mc_kernel_offset[i]; + memset(desc, 0, sizeof(*desc)); + desc->desc0.grf_reg_blocks = 7; + desc->desc0.kernel_start_pointer = (i965_h264_context->avc_kernels[H264_AVC_COMBINED].bo->offset + kernel_offset) >> 6; /* reloc */ + desc->desc1.const_urb_entry_read_offset = 0; + desc->desc1.const_urb_entry_read_len = 2; + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = + media_context->binding_table.bo->offset >> 5; /*reloc */ + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc0.grf_reg_blocks + kernel_offset, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc0), + i965_h264_context->avc_kernels[H264_AVC_COMBINED].bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc3.binding_table_entry_count, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc3), + media_context->binding_table.bo); + desc++; + } + + dri_bo_unmap(bo); +} + +static void +i965_media_h264_vfe_state(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_vfe_state *vfe_state; + dri_bo *bo; + + bo = media_context->vfe_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + vfe_state = bo->virtual; + memset(vfe_state, 0, sizeof(*vfe_state)); + vfe_state->vfe0.extend_vfe_state_present = 1; + vfe_state->vfe1.max_threads = media_context->urb.num_vfe_entries - 1; + vfe_state->vfe1.urb_entry_alloc_size = media_context->urb.size_vfe_entry - 1; + vfe_state->vfe1.num_urb_entries = media_context->urb.num_vfe_entries; + vfe_state->vfe1.vfe_mode = VFE_AVC_IT_MODE; + vfe_state->vfe1.children_present = 0; + vfe_state->vfe2.interface_descriptor_base = + media_context->idrt.bo->offset >> 4; /* reloc */ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_vfe_state, vfe2), + media_context->idrt.bo); + dri_bo_unmap(bo); +} + +static void +i965_media_h264_vfe_state_extension(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_h264_context *i965_h264_context; + struct i965_vfe_state_ex *vfe_state_ex; + VAPictureParameterBufferH264 *pic_param; + int mbaff_frame_flag; + + assert(media_context->private_context); + i965_h264_context = (struct i965_h264_context *)media_context->private_context; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + + assert(media_context->extended_state.bo); + dri_bo_map(media_context->extended_state.bo, 1); + assert(media_context->extended_state.bo->virtual); + vfe_state_ex = media_context->extended_state.bo->virtual; + memset(vfe_state_ex, 0, sizeof(*vfe_state_ex)); + + /* + * Indirect data buffer: + * -------------------------------------------------------- + * | Motion Vectors | Weight/Offset data | Residual data | + * -------------------------------------------------------- + * R4-R7: Motion Vectors + * R8-R9: Weight/Offset + * R10-R33: Residual data + */ + vfe_state_ex->vfex1.avc.residual_data_fix_offset_flag = !!RESIDUAL_DATA_OFFSET; + vfe_state_ex->vfex1.avc.residual_data_offset = RESIDUAL_DATA_OFFSET; + + if (i965_h264_context->picture.i_flag) { + vfe_state_ex->vfex1.avc.sub_field_present_flag = PRESENT_NOMV; /* NoMV */ + vfe_state_ex->vfex1.avc.weight_grf_offset = 0; + vfe_state_ex->vfex1.avc.residual_grf_offset = 0; + } else { + vfe_state_ex->vfex1.avc.sub_field_present_flag = PRESENT_MV_WO; /* Both MV and W/O */ + vfe_state_ex->vfex1.avc.weight_grf_offset = 4; + vfe_state_ex->vfex1.avc.residual_grf_offset = 6; + } + + if (!pic_param->pic_fields.bits.field_pic_flag) { + if (mbaff_frame_flag) { + vfe_state_ex->remap_table0.remap_index_0 = INTRA_16X16; + vfe_state_ex->remap_table0.remap_index_1 = INTRA_8X8; + vfe_state_ex->remap_table0.remap_index_2 = INTRA_4X4; + vfe_state_ex->remap_table0.remap_index_3 = INTRA_PCM; + vfe_state_ex->remap_table0.remap_index_4 = MBAFF_MOTION; + vfe_state_ex->remap_table0.remap_index_5 = MBAFF_MOTION; + vfe_state_ex->remap_table0.remap_index_6 = MBAFF_MOTION; + vfe_state_ex->remap_table0.remap_index_7 = MBAFF_MOTION; + + vfe_state_ex->remap_table1.remap_index_8 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_9 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_10 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_11 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_12 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_13 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_14 = MBAFF_MOTION; + vfe_state_ex->remap_table1.remap_index_15 = MBAFF_MOTION; + } else { + vfe_state_ex->remap_table0.remap_index_0 = INTRA_16X16; + vfe_state_ex->remap_table0.remap_index_1 = INTRA_8X8; + vfe_state_ex->remap_table0.remap_index_2 = INTRA_4X4; + vfe_state_ex->remap_table0.remap_index_3 = INTRA_PCM; + vfe_state_ex->remap_table0.remap_index_4 = FRAMEMB_MOTION; + vfe_state_ex->remap_table0.remap_index_5 = FRAMEMB_MOTION; + vfe_state_ex->remap_table0.remap_index_6 = FRAMEMB_MOTION; + vfe_state_ex->remap_table0.remap_index_7 = FRAMEMB_MOTION; + + vfe_state_ex->remap_table1.remap_index_8 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_9 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_10 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_11 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_12 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_13 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_14 = FRAMEMB_MOTION; + vfe_state_ex->remap_table1.remap_index_15 = FRAMEMB_MOTION; + } + } else { + vfe_state_ex->remap_table0.remap_index_0 = INTRA_16X16; + vfe_state_ex->remap_table0.remap_index_1 = INTRA_8X8; + vfe_state_ex->remap_table0.remap_index_2 = INTRA_4X4; + vfe_state_ex->remap_table0.remap_index_3 = INTRA_PCM; + vfe_state_ex->remap_table0.remap_index_4 = FIELDMB_MOTION; + vfe_state_ex->remap_table0.remap_index_5 = FIELDMB_MOTION; + vfe_state_ex->remap_table0.remap_index_6 = FIELDMB_MOTION; + vfe_state_ex->remap_table0.remap_index_7 = FIELDMB_MOTION; + + vfe_state_ex->remap_table1.remap_index_8 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_9 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_10 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_11 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_12 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_13 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_14 = FIELDMB_MOTION; + vfe_state_ex->remap_table1.remap_index_15 = FIELDMB_MOTION; + } + + if (i965_h264_context->use_avc_hw_scoreboard) { + vfe_state_ex->scoreboard0.enable = 1; + vfe_state_ex->scoreboard0.type = SCOREBOARD_STALLING; + vfe_state_ex->scoreboard0.mask = 0xff; + + vfe_state_ex->scoreboard1.delta_x0 = -1; + vfe_state_ex->scoreboard1.delta_y0 = 0; + vfe_state_ex->scoreboard1.delta_x1 = 0; + vfe_state_ex->scoreboard1.delta_y1 = -1; + vfe_state_ex->scoreboard1.delta_x2 = 1; + vfe_state_ex->scoreboard1.delta_y2 = -1; + vfe_state_ex->scoreboard1.delta_x3 = -1; + vfe_state_ex->scoreboard1.delta_y3 = -1; + + vfe_state_ex->scoreboard2.delta_x4 = -1; + vfe_state_ex->scoreboard2.delta_y4 = 1; + vfe_state_ex->scoreboard2.delta_x5 = 0; + vfe_state_ex->scoreboard2.delta_y5 = -2; + vfe_state_ex->scoreboard2.delta_x6 = 1; + vfe_state_ex->scoreboard2.delta_y6 = -2; + vfe_state_ex->scoreboard2.delta_x7 = -1; + vfe_state_ex->scoreboard2.delta_y7 = -2; + } + + dri_bo_unmap(media_context->extended_state.bo); +} + +static void +i965_media_h264_upload_constants(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_h264_context *i965_h264_context; + unsigned char *constant_buffer; + VASliceParameterBufferH264 *slice_param; + + assert(media_context->private_context); + i965_h264_context = (struct i965_h264_context *)media_context->private_context; + + assert(decode_state->slice_params[0] && decode_state->slice_params[0]->buffer); + slice_param = (VASliceParameterBufferH264 *)decode_state->slice_params[0]->buffer; + + dri_bo_map(media_context->curbe.bo, 1); + assert(media_context->curbe.bo->virtual); + constant_buffer = media_context->curbe.bo->virtual; + + /* HW solution for W=128 */ + if (i965_h264_context->use_hw_w128) { + memcpy(constant_buffer, intra_kernel_header, sizeof(*intra_kernel_header)); + } else { + if (slice_param->slice_type == SLICE_TYPE_I || + slice_param->slice_type == SLICE_TYPE_SI) { + memcpy(constant_buffer, intra_kernel_header, sizeof(*intra_kernel_header)); + } else { + /* FIXME: Need to upload CURBE data to inter kernel interface + * to support weighted prediction work-around + */ + *(short *)constant_buffer = i965_h264_context->weight128_offset0; + constant_buffer += 2; + *(char *)constant_buffer = i965_h264_context->weight128_offset0_flag; + constant_buffer++; + *constant_buffer = 0; + } + } + + dri_bo_unmap(media_context->curbe.bo); +} + +static void +i965_media_h264_states_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_h264_context *i965_h264_context; + + assert(media_context->private_context); + i965_h264_context = (struct i965_h264_context *)media_context->private_context; + + i965_avc_bsd_pipeline(ctx, decode_state, i965_h264_context); + + if (i965_h264_context->use_avc_hw_scoreboard) + i965_avc_hw_scoreboard(ctx, decode_state, i965_h264_context); + + i965_media_h264_surfaces_setup(ctx, decode_state, media_context); + i965_media_h264_binding_table(ctx, media_context); + i965_media_h264_interface_descriptor_remap_table(ctx, media_context); + i965_media_h264_vfe_state_extension(ctx, decode_state, media_context); + i965_media_h264_vfe_state(ctx, media_context); + i965_media_h264_upload_constants(ctx, decode_state, media_context); +} + +static void +i965_media_h264_objects(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct intel_batchbuffer *batch = media_context->base.batch; + struct i965_h264_context *i965_h264_context; + unsigned int *object_command; + + assert(media_context->private_context); + i965_h264_context = (struct i965_h264_context *)media_context->private_context; + + dri_bo_map(i965_h264_context->avc_it_command_mb_info.bo, True); + assert(i965_h264_context->avc_it_command_mb_info.bo->virtual); + object_command = i965_h264_context->avc_it_command_mb_info.bo->virtual; + memset(object_command, 0, i965_h264_context->avc_it_command_mb_info.mbs * i965_h264_context->use_avc_hw_scoreboard * MB_CMD_IN_BYTES); + object_command += i965_h264_context->avc_it_command_mb_info.mbs * (1 + i965_h264_context->use_avc_hw_scoreboard) * MB_CMD_IN_DWS; + *object_command++ = 0; + *object_command = MI_BATCH_BUFFER_END; + dri_bo_unmap(i965_h264_context->avc_it_command_mb_info.bo); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (2 << 6)); + OUT_RELOC(batch, i965_h264_context->avc_it_command_mb_info.bo, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + /* Have to execute the batch buffer here becuase MI_BATCH_BUFFER_END + * will cause control to pass back to ring buffer + */ + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); + intel_batchbuffer_start_atomic(batch, 0x1000); + i965_avc_ildb(ctx, decode_state, i965_h264_context); +} + +static void +i965_media_h264_free_private_context(void **data) +{ + struct i965_h264_context *i965_h264_context = *data; + int i; + + if (i965_h264_context == NULL) + return; + + i965_avc_ildb_ternimate(&i965_h264_context->avc_ildb_context); + i965_avc_hw_scoreboard_ternimate(&i965_h264_context->avc_hw_scoreboard_context); + i965_avc_bsd_ternimate(&i965_h264_context->i965_avc_bsd_context); + dri_bo_unreference(i965_h264_context->avc_it_command_mb_info.bo); + dri_bo_unreference(i965_h264_context->avc_it_data.bo); + dri_bo_unreference(i965_h264_context->avc_ildb_data.bo); + + for (i = 0; i < NUM_H264_AVC_KERNELS; i++) { + struct i965_kernel *kernel = &i965_h264_context->avc_kernels[i]; + + dri_bo_unreference(kernel->bo); + kernel->bo = NULL; + } + + free(i965_h264_context); + *data = NULL; +} + +void +i965_media_h264_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_h264_context *i965_h264_context = media_context->private_context; + dri_bo *bo; + VAPictureParameterBufferH264 *pic_param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer; + i965_h264_context->picture.width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff); + i965_h264_context->picture.height_in_mbs = ((pic_param->picture_height_in_mbs_minus1 + 1) & 0xff) / + (1 + !!pic_param->pic_fields.bits.field_pic_flag); /* picture height */ + i965_h264_context->picture.mbaff_frame_flag = (pic_param->seq_fields.bits.mb_adaptive_frame_field_flag && + !pic_param->pic_fields.bits.field_pic_flag); + i965_h264_context->avc_it_command_mb_info.mbs = (i965_h264_context->picture.width_in_mbs * + i965_h264_context->picture.height_in_mbs); + + dri_bo_unreference(i965_h264_context->avc_it_command_mb_info.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "avc it command mb info", + i965_h264_context->avc_it_command_mb_info.mbs * MB_CMD_IN_BYTES * (1 + i965_h264_context->use_avc_hw_scoreboard) + 8, + 0x1000); + assert(bo); + i965_h264_context->avc_it_command_mb_info.bo = bo; + + dri_bo_unreference(i965_h264_context->avc_it_data.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "avc it data", + i965_h264_context->avc_it_command_mb_info.mbs * + 0x800 * + (1 + !!pic_param->pic_fields.bits.field_pic_flag), + 0x1000); + assert(bo); + i965_h264_context->avc_it_data.bo = bo; + i965_h264_context->avc_it_data.write_offset = 0; + dri_bo_unreference(media_context->indirect_object.bo); + media_context->indirect_object.bo = bo; + dri_bo_reference(media_context->indirect_object.bo); + media_context->indirect_object.offset = i965_h264_context->avc_it_data.write_offset; + + dri_bo_unreference(i965_h264_context->avc_ildb_data.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "AVC-ILDB Data Buffer", + i965_h264_context->avc_it_command_mb_info.mbs * 64 * 2, + 0x1000); + assert(bo); + i965_h264_context->avc_ildb_data.bo = bo; + + /* bsd pipeline */ + i965_avc_bsd_decode_init(ctx, i965_h264_context); + + /* HW scoreboard */ + if (i965_h264_context->use_avc_hw_scoreboard) + i965_avc_hw_scoreboard_decode_init(ctx, i965_h264_context); + + /* ILDB */ + i965_avc_ildb_decode_init(ctx, i965_h264_context); + + /* for Media pipeline */ + media_context->extended_state.enabled = 1; + dri_bo_unreference(media_context->extended_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "extened vfe state", + sizeof(struct i965_vfe_state_ex), 32); + assert(bo); + media_context->extended_state.bo = bo; +} + +void +i965_media_h264_dec_context_init(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_h264_context *i965_h264_context; + int i; + + i965_h264_context = calloc(1, sizeof(struct i965_h264_context)); + + /* kernel */ + assert(NUM_H264_AVC_KERNELS == (sizeof(h264_avc_kernels_gen5) / + sizeof(h264_avc_kernels_gen5[0]))); + assert(NUM_AVC_MC_INTERFACES == (sizeof(avc_mc_kernel_offset_gen5) / + sizeof(avc_mc_kernel_offset_gen5[0]))); + assert(i965_h264_context); + if (IS_IRONLAKE(i965->intel.device_info)) { + memcpy(i965_h264_context->avc_kernels, h264_avc_kernels_gen5, sizeof(i965_h264_context->avc_kernels)); + avc_mc_kernel_offset = avc_mc_kernel_offset_gen5; + intra_kernel_header = &intra_kernel_header_gen5; + i965_h264_context->use_avc_hw_scoreboard = 1; + i965_h264_context->use_hw_w128 = 1; + } else { + memcpy(i965_h264_context->avc_kernels, h264_avc_kernels_gen4, sizeof(i965_h264_context->avc_kernels)); + avc_mc_kernel_offset = avc_mc_kernel_offset_gen4; + intra_kernel_header = &intra_kernel_header_gen4; + i965_h264_context->use_avc_hw_scoreboard = 0; + i965_h264_context->use_hw_w128 = 0; + } + + for (i = 0; i < NUM_H264_AVC_KERNELS; i++) { + struct i965_kernel *kernel = &i965_h264_context->avc_kernels[i]; + kernel->bo = dri_bo_alloc(i965->intel.bufmgr, + kernel->name, + kernel->size, 0x1000); + assert(kernel->bo); + dri_bo_subdata(kernel->bo, 0, kernel->size, kernel->bin); + } + + for (i = 0; i < 16; i++) { + i965_h264_context->fsid_list[i].surface_id = VA_INVALID_ID; + i965_h264_context->fsid_list[i].frame_store_id = -1; + } + + i965_h264_context->batch = media_context->base.batch; + + media_context->private_context = i965_h264_context; + media_context->free_private_context = i965_media_h264_free_private_context; + + /* URB */ + if (IS_IRONLAKE(i965->intel.device_info)) { + media_context->urb.num_vfe_entries = 63; + } else { + media_context->urb.num_vfe_entries = 23; + } + + media_context->urb.size_vfe_entry = 16; + + media_context->urb.num_cs_entries = 1; + media_context->urb.size_cs_entry = 1; + + media_context->urb.vfe_start = 0; + media_context->urb.cs_start = media_context->urb.vfe_start + + media_context->urb.num_vfe_entries * media_context->urb.size_vfe_entry; + assert(media_context->urb.cs_start + + media_context->urb.num_cs_entries * media_context->urb.size_cs_entry <= i965->intel.device_info->urb_size); + + /* hook functions */ + media_context->media_states_setup = i965_media_h264_states_setup; + media_context->media_objects = i965_media_h264_objects; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.h new file mode 100644 index 000000000..e507e1d11 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_h264.h @@ -0,0 +1,74 @@ +#ifndef _I965_MEDIA_H264_H_ +#define _I965_MEDIA_H264_H_ + +#include "i965_avc_bsd.h" +#include "i965_avc_hw_scoreboard.h" +#include "i965_avc_ildb.h" +#include "i965_decoder.h" + +struct decode_state; +struct i965_media_context; + +#define INST_UNIT_GEN4 16 +#define INST_UNIT_GEN5 8 + +#define MB_CMD_IN_BYTES 64 +#define MB_CMD_IN_DWS 16 +#define MB_CMD_IN_OWS 4 + +enum { + H264_AVC_COMBINED = 0, + H264_AVC_NULL +}; + +#define NUM_H264_AVC_KERNELS 2 + +struct i965_h264_context +{ + struct { + dri_bo *bo; + unsigned int mbs; + } avc_it_command_mb_info; + + struct { + dri_bo *bo; + long write_offset; + } avc_it_data; + + struct { + dri_bo *bo; + } avc_ildb_data; + + struct { + unsigned int width_in_mbs; + unsigned int height_in_mbs; + int mbaff_frame_flag; + int i_flag; + } picture; + + int enable_avc_ildb; + int use_avc_hw_scoreboard; + + int use_hw_w128; + unsigned int weight128_luma_l0; + unsigned int weight128_luma_l1; + unsigned int weight128_chroma_l0; + unsigned int weight128_chroma_l1; + char weight128_offset0_flag; + short weight128_offset0; + + struct i965_avc_bsd_context i965_avc_bsd_context; + struct i965_avc_hw_scoreboard_context avc_hw_scoreboard_context; + struct i965_avc_ildb_context avc_ildb_context; + + GenFrameStoreContext fs_ctx; + GenFrameStore fsid_list[MAX_GEN_REFERENCE_FRAMES]; + + struct i965_kernel avc_kernels[NUM_H264_AVC_KERNELS]; + struct intel_batchbuffer *batch; +}; + +void i965_media_h264_decode_init(VADriverContextP ctx, struct decode_state *decode_state, struct i965_media_context *media_context); +void i965_media_h264_dec_context_init(VADriverContextP ctx, struct i965_media_context *media_context); + +#endif /* _I965_MEDIA_H264_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.c new file mode 100644 index 000000000..2980bdcdc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.c @@ -0,0 +1,1024 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_decoder_utils.h" + +#include "i965_media.h" +#include "i965_media_mpeg2.h" + +#define SURFACE_TARGET 0 +#define SURFACE_FORWARD 1 +#define SURFACE_BACKWARD 2 +#define SURFACE_BIDIRECT 3 + +enum interface { + FRAME_INTRA = 0, + FRAME_FRAME_PRED_FORWARD, + FRAME_FRAME_PRED_BACKWARD, + FRAME_FRAME_PRED_BIDIRECT, + FRAME_FIELD_PRED_FORWARD, + FRAME_FIELD_PRED_BACKWARD, + FRAME_FIELD_PRED_BIDIRECT, + LIB_INTERFACE, + FIELD_INTRA, + FIELD_FORWARD, + FIELD_FORWARD_16X8, + FIELD_BACKWARD, + FIELD_BACKWARD_16X8, + FIELD_BIDIRECT, + FIELD_BIDIRECT_16X8 +}; + +/* idct table */ +#define C0 23170 +#define C1 22725 +#define C2 21407 +#define C3 19266 +#define C4 16383 +#define C5 12873 +#define C6 8867 +#define C7 4520 +const uint32_t idct_table[] = { + C4, C1, C2, C3, C4, C5, C6, C7, //g5 + C4, C1, C2, C3, C4, C5, C6, C7, + C4, C3, C6,-C7,-C4,-C1,-C2,-C5, + C4, C3, C6,-C7,-C4,-C1,-C2,-C5, + C4, C5,-C6,-C1,-C4, C7, C2, C3, + C4, C5,-C6,-C1,-C4, C7, C2, C3, + C4, C7,-C2,-C5, C4, C3,-C6,-C1, + C4, C7,-C2,-C5, C4, C3,-C6,-C1, + C4,-C7,-C2, C5, C4,-C3,-C6, C1, + C4,-C7,-C2, C5, C4,-C3,-C6, C1, + C4,-C5,-C6, C1,-C4,-C7, C2,-C3, + C4,-C5,-C6, C1,-C4,-C7, C2,-C3, + C4,-C3, C6, C7,-C4, C1,-C2, C5, + C4,-C3, C6, C7,-C4, C1,-C2, C5, + C4,-C1, C2,-C3, C4,-C5, C6,-C7, + C4,-C1, C2,-C3, C4,-C5, C6,-C7 //g20 +}; +#undef C0 +#undef C1 +#undef C2 +#undef C3 +#undef C4 +#undef C5 +#undef C6 +#undef C7 + +const uint32_t zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static const uint32_t frame_intra_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_intra.g4b" +}; +static const uint32_t frame_frame_pred_forward_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_forward.g4b" +}; +static const uint32_t frame_frame_pred_backward_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_backward.g4b" +}; +static const uint32_t frame_frame_pred_bidirect_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b" +}; +static const uint32_t frame_field_pred_forward_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_forward.g4b" +}; +static const uint32_t frame_field_pred_backward_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_backward.g4b" +}; +static const uint32_t frame_field_pred_bidirect_kernel[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_bidirect.g4b" +}; +static const uint32_t lib_kernel[][4] = { + #include "shaders/mpeg2/vld/lib.g4b" +}; +/*field picture*/ +static const uint32_t field_intra_kernel[][4] = { + #include "shaders/mpeg2/vld/field_intra.g4b" +}; +static const uint32_t field_forward_kernel[][4] = { + #include "shaders/mpeg2/vld/field_forward.g4b" +}; +static const uint32_t field_forward_16x8_kernel[][4] = { + #include "shaders/mpeg2/vld/field_forward_16x8.g4b" +}; +static const uint32_t field_backward_kernel[][4] = { + #include "shaders/mpeg2/vld/field_backward.g4b" +}; +static const uint32_t field_backward_16x8_kernel[][4] = { + #include "shaders/mpeg2/vld/field_backward_16x8.g4b" +}; +static const uint32_t field_bidirect_kernel[][4] = { + #include "shaders/mpeg2/vld/field_bidirect.g4b" +}; +static const uint32_t field_bidirect_16x8_kernel[][4] = { + #include "shaders/mpeg2/vld/field_bidirect_16x8.g4b" +}; + +static struct i965_kernel mpeg2_vld_kernels_gen4[] = { + { + "FRAME_INTRA", + FRAME_INTRA, + frame_intra_kernel, + sizeof(frame_intra_kernel), + NULL + }, + + { + "FRAME_FRAME_PRED_FORWARD", + FRAME_FRAME_PRED_FORWARD, + frame_frame_pred_forward_kernel, + sizeof(frame_frame_pred_forward_kernel), + NULL + }, + + { + "FRAME_FRAME_PRED_BACKWARD", + FRAME_FRAME_PRED_BACKWARD, + frame_frame_pred_backward_kernel, + sizeof(frame_frame_pred_backward_kernel), + NULL + }, + + { + "FRAME_FRAME_PRED_BIDIRECT", + FRAME_FRAME_PRED_BIDIRECT, + frame_frame_pred_bidirect_kernel, + sizeof(frame_frame_pred_bidirect_kernel), + NULL + }, + + { + "FRAME_FIELD_PRED_FORWARD", + FRAME_FIELD_PRED_FORWARD, + frame_field_pred_forward_kernel, + sizeof(frame_field_pred_forward_kernel), + NULL + }, + + { + "FRAME_FIELD_PRED_BACKWARD", + FRAME_FIELD_PRED_BACKWARD, + frame_field_pred_backward_kernel, + sizeof(frame_field_pred_backward_kernel), + NULL + }, + + { + "FRAME_FIELD_PRED_BIDIRECT", + FRAME_FIELD_PRED_BIDIRECT, + frame_field_pred_bidirect_kernel, + sizeof(frame_field_pred_bidirect_kernel), + NULL + }, + + { + "LIB", + LIB_INTERFACE, + lib_kernel, + sizeof(lib_kernel), + NULL + }, + + { + "FIELD_INTRA", + FIELD_INTRA, + field_intra_kernel, + sizeof(field_intra_kernel), + NULL + }, + + { + "FIELD_FORWARD", + FIELD_FORWARD, + field_forward_kernel, + sizeof(field_forward_kernel), + NULL + }, + + { + "FIELD_FORWARD_16X8", + FIELD_FORWARD_16X8, + field_forward_16x8_kernel, + sizeof(field_forward_16x8_kernel), + NULL + }, + + { + "FIELD_BACKWARD", + FIELD_BACKWARD, + field_backward_kernel, + sizeof(field_backward_kernel), + NULL + }, + + { + "FIELD_BACKWARD_16X8", + FIELD_BACKWARD_16X8, + field_backward_16x8_kernel, + sizeof(field_backward_16x8_kernel), + NULL + }, + + { + "FIELD_BIDIRECT", + FIELD_BIDIRECT, + field_bidirect_kernel, + sizeof(field_bidirect_kernel), + NULL + }, + + { + "FIELD_BIDIRECT_16X8", + FIELD_BIDIRECT_16X8, + field_bidirect_16x8_kernel, + sizeof(field_bidirect_16x8_kernel), + NULL + } +}; + +/* On IRONLAKE */ +static const uint32_t frame_intra_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_intra.g4b.gen5" +}; +static const uint32_t frame_frame_pred_forward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_forward.g4b.gen5" +}; +static const uint32_t frame_frame_pred_backward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_backward.g4b.gen5" +}; +static const uint32_t frame_frame_pred_bidirect_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b.gen5" +}; +static const uint32_t frame_field_pred_forward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_forward.g4b.gen5" +}; +static const uint32_t frame_field_pred_backward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_backward.g4b.gen5" +}; +static const uint32_t frame_field_pred_bidirect_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/frame_field_pred_bidirect.g4b.gen5" +}; +static const uint32_t lib_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/lib.g4b.gen5" +}; +/*field picture*/ +static const uint32_t field_intra_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_intra.g4b.gen5" +}; +static const uint32_t field_forward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_forward.g4b.gen5" +}; +static const uint32_t field_forward_16x8_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_forward_16x8.g4b.gen5" +}; +static const uint32_t field_backward_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_backward.g4b.gen5" +}; +static const uint32_t field_backward_16x8_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_backward_16x8.g4b.gen5" +}; +static const uint32_t field_bidirect_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_bidirect.g4b.gen5" +}; +static const uint32_t field_bidirect_16x8_kernel_gen5[][4] = { + #include "shaders/mpeg2/vld/field_bidirect_16x8.g4b.gen5" +}; + +static struct i965_kernel mpeg2_vld_kernels_gen5[] = { + { + "FRAME_INTRA", + FRAME_INTRA, + frame_intra_kernel_gen5, + sizeof(frame_intra_kernel_gen5), + NULL + }, + + { + "FRAME_FRAME_PRED_FORWARD", + FRAME_FRAME_PRED_FORWARD, + frame_frame_pred_forward_kernel_gen5, + sizeof(frame_frame_pred_forward_kernel_gen5), + NULL + }, + + { + "FRAME_FRAME_PRED_BACKWARD", + FRAME_FRAME_PRED_BACKWARD, + frame_frame_pred_backward_kernel_gen5, + sizeof(frame_frame_pred_backward_kernel_gen5), + NULL + }, + + { + "FRAME_FRAME_PRED_BIDIRECT", + FRAME_FRAME_PRED_BIDIRECT, + frame_frame_pred_bidirect_kernel_gen5, + sizeof(frame_frame_pred_bidirect_kernel_gen5), + NULL + }, + + { + "FRAME_FIELD_PRED_FORWARD", + FRAME_FIELD_PRED_FORWARD, + frame_field_pred_forward_kernel_gen5, + sizeof(frame_field_pred_forward_kernel_gen5), + NULL + }, + + { + "FRAME_FIELD_PRED_BACKWARD", + FRAME_FIELD_PRED_BACKWARD, + frame_field_pred_backward_kernel_gen5, + sizeof(frame_field_pred_backward_kernel_gen5), + NULL + }, + + { + "FRAME_FIELD_PRED_BIDIRECT", + FRAME_FIELD_PRED_BIDIRECT, + frame_field_pred_bidirect_kernel_gen5, + sizeof(frame_field_pred_bidirect_kernel_gen5), + NULL + }, + + { + "LIB", + LIB_INTERFACE, + lib_kernel_gen5, + sizeof(lib_kernel_gen5), + NULL + }, + + { + "FIELD_INTRA", + FIELD_INTRA, + field_intra_kernel_gen5, + sizeof(field_intra_kernel_gen5), + NULL + }, + + { + "FIELD_FORWARD", + FIELD_FORWARD, + field_forward_kernel_gen5, + sizeof(field_forward_kernel_gen5), + NULL + }, + + { + "FIELD_FORWARD_16X8", + FIELD_FORWARD_16X8, + field_forward_16x8_kernel_gen5, + sizeof(field_forward_16x8_kernel_gen5), + NULL + }, + + { + "FIELD_BACKWARD", + FIELD_BACKWARD, + field_backward_kernel_gen5, + sizeof(field_backward_kernel_gen5), + NULL + }, + + { + "FIELD_BACKWARD_16X8", + FIELD_BACKWARD_16X8, + field_backward_16x8_kernel_gen5, + sizeof(field_backward_16x8_kernel_gen5), + NULL + }, + + { + "FIELD_BIDIRECT", + FIELD_BIDIRECT, + field_bidirect_kernel_gen5, + sizeof(field_bidirect_kernel_gen5), + NULL + }, + + { + "FIELD_BIDIRECT_16X8", + FIELD_BIDIRECT_16X8, + field_bidirect_16x8_kernel_gen5, + sizeof(field_bidirect_16x8_kernel_gen5), + NULL + } +}; + +static void +i965_media_mpeg2_surface_state(VADriverContextP ctx, + int index, + struct object_surface *obj_surface, + unsigned long offset, + int w, int h, + Bool is_dst, + int vert_line_stride, + int vert_line_stride_ofs, + struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_surface_state *ss; + dri_bo *bo; + uint32_t write_domain, read_domain; + + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state", + sizeof(struct i965_surface_state), 32); + assert(bo); + dri_bo_map(bo, 1); + assert(bo->virtual); + ss = bo->virtual; + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = I965_SURFACEFORMAT_R8_SINT; + ss->ss0.vert_line_stride = vert_line_stride; + ss->ss0.vert_line_stride_ofs = vert_line_stride_ofs; + ss->ss1.base_addr = obj_surface->bo->offset + offset; + ss->ss2.width = w - 1; + ss->ss2.height = h - 1; + ss->ss3.pitch = w - 1; + + if (is_dst) { + write_domain = I915_GEM_DOMAIN_RENDER; + read_domain = I915_GEM_DOMAIN_RENDER; + } else { + write_domain = 0; + read_domain = I915_GEM_DOMAIN_SAMPLER; + } + + dri_bo_emit_reloc(bo, + read_domain, write_domain, + offset, + offsetof(struct i965_surface_state, ss1), + obj_surface->bo); + dri_bo_unmap(bo); + + assert(index < MAX_MEDIA_SURFACES); +// assert(media_context->surface_state[index].bo == NULL); + media_context->surface_state[index].bo = bo; +} + +static void +i965_media_mpeg2_surface_setup(VADriverContextP ctx, + int base_index, + struct object_surface *obj_surface, + Bool is_dst, + int picture_structure, + int surface, + struct i965_media_context *media_context) +{ + int w = obj_surface->width; + int h = obj_surface->height; + + i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC_I420, SUBSAMPLE_YUV420); + + if (picture_structure == MPEG_FRAME) { + i965_media_mpeg2_surface_state(ctx, base_index + 0, obj_surface, + 0, w, h, + is_dst, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 1, obj_surface, + w * h, w / 2, h / 2, + is_dst, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 2, obj_surface, + w * h + w * h / 4, w / 2, h / 2, + is_dst, 0, 0, + media_context); + } else { + if (surface == SURFACE_TARGET) { + i965_media_mpeg2_surface_state(ctx, 3, obj_surface, + 0, w, h, + False, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, 10, obj_surface, + w * h, w / 2, h / 2, + False, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, 11, obj_surface, + w * h + w * h / 4, w / 2, h / 2, + False, 0, 0, + media_context); + if (picture_structure == MPEG_TOP_FIELD) { + i965_media_mpeg2_surface_state(ctx, base_index + 0, obj_surface, + 0, w, h, + True, 1, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 1, obj_surface, + w * h, w / 2, h / 2, + True, 1, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 2, obj_surface, + w * h + w * h / 4, w / 2, h / 2, + True, 1, 0, + media_context); + } else { + assert(picture_structure == MPEG_BOTTOM_FIELD); + i965_media_mpeg2_surface_state(ctx, base_index + 0, obj_surface, + 0, w, h, + True, 1, 1, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 1, obj_surface, + w * h, w / 2, h / 2, + True, 1, 1, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 2, obj_surface, + w * h + w * h / 4, w / 2, h / 2, + True, 1, 1, + media_context); + } + } else { + i965_media_mpeg2_surface_state(ctx, base_index + 0, obj_surface, + 0, w, h, + is_dst, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 1, obj_surface, + w * h, w / 2, h / 2, + is_dst, 0, 0, + media_context); + i965_media_mpeg2_surface_state(ctx, base_index + 2, obj_surface, + w * h + w * h / 4, w / 2, h / 2, + is_dst, 0, 0, + media_context); + } + } +} + +void +i965_media_mpeg2_surfaces_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct object_surface *obj_surface; + VAPictureParameterBufferMPEG2 *param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + obj_surface = decode_state->render_object; + + i965_media_mpeg2_surface_setup(ctx, 0, obj_surface, True, + param->picture_coding_extension.bits.picture_structure, + SURFACE_TARGET, + media_context); + + obj_surface = decode_state->reference_objects[0]; + + if (!obj_surface) { +// assert(param->picture_coding_type == 1); /* I-picture */ + } else { + i965_media_mpeg2_surface_setup(ctx, 4, obj_surface, False, + param->picture_coding_extension.bits.picture_structure, + SURFACE_FORWARD, + media_context); + + obj_surface = decode_state->reference_objects[1]; + + if (!obj_surface) { + assert(param->picture_coding_type == 2); /* P-picture */ + + obj_surface = decode_state->reference_objects[0]; + i965_media_mpeg2_surface_setup(ctx, 7, obj_surface, False, + param->picture_coding_extension.bits.picture_structure, + SURFACE_BACKWARD, + media_context); + } else { + assert(param->picture_coding_type == 3); /* B-picture */ + i965_media_mpeg2_surface_setup(ctx, 7, obj_surface, False, + param->picture_coding_extension.bits.picture_structure, + SURFACE_BIDIRECT, + media_context); + } + } +} + +static void +i965_media_mpeg2_binding_table(VADriverContextP ctx, struct i965_media_context *media_context) +{ + int i; + unsigned int *binding_table; + dri_bo *bo = media_context->binding_table.bo; + + dri_bo_map(bo, 1); + assert(bo->virtual); + binding_table = bo->virtual; + memset(binding_table, 0, bo->size); + + for (i = 0; i < MAX_MEDIA_SURFACES; i++) { + if (media_context->surface_state[i].bo) { + binding_table[i] = media_context->surface_state[i].bo->offset; + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + i * sizeof(*binding_table), + media_context->surface_state[i].bo); + } + } + + dri_bo_unmap(media_context->binding_table.bo); +} + +static void +i965_media_mpeg2_vfe_state(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_vfe_state *vfe_state; + dri_bo *bo; + + bo = media_context->vfe_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + vfe_state = bo->virtual; + memset(vfe_state, 0, sizeof(*vfe_state)); + vfe_state->vfe0.extend_vfe_state_present = 1; + vfe_state->vfe1.vfe_mode = VFE_VLD_MODE; + vfe_state->vfe1.num_urb_entries = media_context->urb.num_vfe_entries; + vfe_state->vfe1.children_present = 0; + vfe_state->vfe1.urb_entry_alloc_size = media_context->urb.size_vfe_entry - 1; + vfe_state->vfe1.max_threads = media_context->urb.num_vfe_entries - 1; + vfe_state->vfe2.interface_descriptor_base = + media_context->idrt.bo->offset >> 4; /* reloc */ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_vfe_state, vfe2), + media_context->idrt.bo); + dri_bo_unmap(bo); +} + +static void +i965_media_mpeg2_interface_descriptor_remap_table(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_mpeg2_context *i965_mpeg2_context = (struct i965_mpeg2_context *)media_context->private_context; + struct i965_interface_descriptor *desc; + int i; + dri_bo *bo; + + bo = media_context->idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + + for (i = 0; i < NUM_MPEG2_VLD_KERNELS; i++) { + memset(desc, 0, sizeof(*desc)); + desc->desc0.grf_reg_blocks = 15; + desc->desc0.kernel_start_pointer = i965_mpeg2_context->vld_kernels[i].bo->offset >> 6; /* reloc */ + desc->desc1.const_urb_entry_read_offset = 0; + desc->desc1.const_urb_entry_read_len = 30; + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = + media_context->binding_table.bo->offset >> 5; /*reloc */ + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc0.grf_reg_blocks, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc0), + i965_mpeg2_context->vld_kernels[i].bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc3.binding_table_entry_count, + i * sizeof(*desc) + offsetof(struct i965_interface_descriptor, desc3), + media_context->binding_table.bo); + desc++; + } + + dri_bo_unmap(bo); +} + +void +i965_media_mpeg2_vld_state(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_vld_state *vld_state; + VAPictureParameterBufferMPEG2 *param; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + assert(media_context->extended_state.bo); + dri_bo_map(media_context->extended_state.bo, 1); + assert(media_context->extended_state.bo->virtual); + vld_state = media_context->extended_state.bo->virtual; + memset(vld_state, 0, sizeof(*vld_state)); + + vld_state->vld0.f_code_0_0 = ((param->f_code >> 12) & 0xf); + vld_state->vld0.f_code_0_1 = ((param->f_code >> 8) & 0xf); + vld_state->vld0.f_code_1_0 = ((param->f_code >> 4) & 0xf); + vld_state->vld0.f_code_1_1 = (param->f_code & 0xf); + vld_state->vld0.intra_dc_precision = param->picture_coding_extension.bits.intra_dc_precision; + vld_state->vld0.picture_structure = param->picture_coding_extension.bits.picture_structure; + vld_state->vld0.top_field_first = param->picture_coding_extension.bits.top_field_first; + vld_state->vld0.frame_predict_frame_dct = param->picture_coding_extension.bits.frame_pred_frame_dct; + vld_state->vld0.concealment_motion_vector = param->picture_coding_extension.bits.concealment_motion_vectors; + vld_state->vld0.quantizer_scale_type = param->picture_coding_extension.bits.q_scale_type; + vld_state->vld0.intra_vlc_format = param->picture_coding_extension.bits.intra_vlc_format; + vld_state->vld0.scan_order = param->picture_coding_extension.bits.alternate_scan; + + vld_state->vld1.picture_coding_type = param->picture_coding_type; + + if (vld_state->vld0.picture_structure == MPEG_FRAME) { + /*frame picture*/ + vld_state->desc_remap_table0.index_0 = FRAME_INTRA; + vld_state->desc_remap_table0.index_1 = FRAME_FRAME_PRED_FORWARD; + vld_state->desc_remap_table0.index_2 = FRAME_FIELD_PRED_FORWARD; + vld_state->desc_remap_table0.index_3 = FRAME_FIELD_PRED_BIDIRECT; /* dual prime */ + vld_state->desc_remap_table0.index_4 = FRAME_FRAME_PRED_BACKWARD; + vld_state->desc_remap_table0.index_5 = FRAME_FIELD_PRED_BACKWARD; + vld_state->desc_remap_table0.index_6 = FRAME_FRAME_PRED_BIDIRECT; + vld_state->desc_remap_table0.index_7 = FRAME_FIELD_PRED_BIDIRECT; + + vld_state->desc_remap_table1.index_8 = FRAME_INTRA; + vld_state->desc_remap_table1.index_9 = FRAME_FRAME_PRED_FORWARD; + vld_state->desc_remap_table1.index_10 = FRAME_FIELD_PRED_FORWARD; + vld_state->desc_remap_table1.index_11 = FRAME_FIELD_PRED_BIDIRECT; + vld_state->desc_remap_table1.index_12 = FRAME_FRAME_PRED_BACKWARD; + vld_state->desc_remap_table1.index_13 = FRAME_FIELD_PRED_BACKWARD; + vld_state->desc_remap_table1.index_14 = FRAME_FRAME_PRED_BIDIRECT; + vld_state->desc_remap_table1.index_15 = FRAME_FIELD_PRED_BIDIRECT; + } else { + /*field picture*/ + vld_state->desc_remap_table0.index_0 = FIELD_INTRA; + vld_state->desc_remap_table0.index_1 = FIELD_FORWARD; + vld_state->desc_remap_table0.index_2 = FIELD_FORWARD_16X8; + vld_state->desc_remap_table0.index_3 = FIELD_BIDIRECT; /* dual prime */ + vld_state->desc_remap_table0.index_4 = FIELD_BACKWARD; + vld_state->desc_remap_table0.index_5 = FIELD_BACKWARD_16X8; + vld_state->desc_remap_table0.index_6 = FIELD_BIDIRECT; + vld_state->desc_remap_table0.index_7 = FIELD_BIDIRECT_16X8; + } + + dri_bo_unmap(media_context->extended_state.bo); +} + +static void +i965_media_mpeg2_upload_constants(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_mpeg2_context *i965_mpeg2_context = (struct i965_mpeg2_context *)media_context->private_context; + VAIQMatrixBufferMPEG2 * const gen_iq_matrix = &i965_mpeg2_context->iq_matrix; + int i; + unsigned char *constant_buffer; + unsigned int *lib_reloc; + int lib_reloc_offset = 0; + + dri_bo_map(media_context->curbe.bo, 1); + assert(media_context->curbe.bo->virtual); + constant_buffer = media_context->curbe.bo->virtual; + + /* iq_matrix */ + if (decode_state->iq_matrix && decode_state->iq_matrix->buffer) { + VAIQMatrixBufferMPEG2 * const iq_matrix = + (VAIQMatrixBufferMPEG2 *)decode_state->iq_matrix->buffer; + + gen_iq_matrix->load_intra_quantiser_matrix = + iq_matrix->load_intra_quantiser_matrix; + if (iq_matrix->load_intra_quantiser_matrix) { + for (i = 0; i < 64; i++) + gen_iq_matrix->intra_quantiser_matrix[zigzag_direct[i]] = + iq_matrix->intra_quantiser_matrix[i]; + } + + gen_iq_matrix->load_non_intra_quantiser_matrix = + iq_matrix->load_non_intra_quantiser_matrix; + if (iq_matrix->load_non_intra_quantiser_matrix) { + for (i = 0; i < 64; i++) + gen_iq_matrix->non_intra_quantiser_matrix[zigzag_direct[i]] = + iq_matrix->non_intra_quantiser_matrix[i]; + } + + /* no chroma quantisation matrices for 4:2:0 data */ + } + + if (gen_iq_matrix->load_intra_quantiser_matrix) { + unsigned char * const qm = constant_buffer; + memcpy(qm, gen_iq_matrix->intra_quantiser_matrix, 64); + } + + if (gen_iq_matrix->load_non_intra_quantiser_matrix) { + unsigned char * const qm = constant_buffer + 64; + memcpy(qm, gen_iq_matrix->non_intra_quantiser_matrix, 64); + } + + /* idct table */ + memcpy(constant_buffer + 128, idct_table, sizeof(idct_table)); + + /* idct lib reloc */ + lib_reloc_offset = 128 + sizeof(idct_table); + lib_reloc = (unsigned int *)(constant_buffer + lib_reloc_offset); + for (i = 0; i < 8; i++) { + lib_reloc[i] = i965_mpeg2_context->vld_kernels[LIB_INTERFACE].bo->offset; + dri_bo_emit_reloc(media_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + lib_reloc_offset + i * sizeof(unsigned int), + i965_mpeg2_context->vld_kernels[LIB_INTERFACE].bo); + } + + dri_bo_unmap(media_context->curbe.bo); +} + +static void +i965_media_mpeg2_states_setup(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + i965_media_mpeg2_surfaces_setup(ctx, decode_state, media_context); + i965_media_mpeg2_binding_table(ctx, media_context); + i965_media_mpeg2_interface_descriptor_remap_table(ctx, media_context); + i965_media_mpeg2_vld_state(ctx, decode_state, media_context); + i965_media_mpeg2_vfe_state(ctx, media_context); + i965_media_mpeg2_upload_constants(ctx, decode_state, media_context); +} + +static void +i965_media_mpeg2_objects(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_mpeg2_context * const i965_mpeg2_context = media_context->private_context; + struct intel_batchbuffer *batch = media_context->base.batch; + VASliceParameterBufferMPEG2 *slice_param; + VAPictureParameterBufferMPEG2 *pic_param; + int i, j; + + assert(decode_state->pic_param && decode_state->pic_param->buffer); + pic_param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer; + + if (i965_mpeg2_context->wa_slice_vertical_position < 0) + i965_mpeg2_context->wa_slice_vertical_position = + mpeg2_wa_slice_vertical_position(decode_state, pic_param); + + for (j = 0; j < decode_state->num_slice_params; j++) { + assert(decode_state->slice_params[j] && decode_state->slice_params[j]->buffer); + assert(decode_state->slice_datas[j] && decode_state->slice_datas[j]->bo); + slice_param = (VASliceParameterBufferMPEG2 *)decode_state->slice_params[j]->buffer; + + for (i = 0; i < decode_state->slice_params[j]->num_elements; i++) { + int vpos, hpos, is_field_pic = 0; + + if (i965_mpeg2_context->wa_slice_vertical_position > 0 && + (pic_param->picture_coding_extension.bits.picture_structure == MPEG_TOP_FIELD || + pic_param->picture_coding_extension.bits.picture_structure == MPEG_BOTTOM_FIELD)) + is_field_pic = 1; + + assert(slice_param->slice_data_flag == VA_SLICE_DATA_FLAG_ALL); + vpos = slice_param->slice_vertical_position / (1 + is_field_pic); + hpos = slice_param->slice_horizontal_position; + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_MEDIA_OBJECT | 4); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, slice_param->slice_data_size - (slice_param->macroblock_offset >> 3)); + OUT_RELOC(batch, decode_state->slice_datas[j]->bo, + I915_GEM_DOMAIN_SAMPLER, 0, + slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3)); + OUT_BATCH(batch, + ((hpos << 24) | + (vpos << 16) | + (127 << 8) | + (slice_param->macroblock_offset & 0x7))); + OUT_BATCH(batch, slice_param->quantiser_scale_code << 24); + ADVANCE_BATCH(batch); + slice_param++; + } + } +} + +static void +i965_media_mpeg2_free_private_context(void **data) +{ + struct i965_mpeg2_context *i965_mpeg2_context = *data; + int i; + + if (i965_mpeg2_context == NULL) + return; + + for (i = 0; i < NUM_MPEG2_VLD_KERNELS; i++) { + struct i965_kernel *kernel = &i965_mpeg2_context->vld_kernels[i]; + + dri_bo_unreference(kernel->bo); + kernel->bo = NULL; + } + + free(i965_mpeg2_context); + *data = NULL; +} + +void +i965_media_mpeg2_decode_init(VADriverContextP ctx, + struct decode_state *decode_state, + struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + dri_bo *bo; + + dri_bo_unreference(media_context->indirect_object.bo); + media_context->indirect_object.bo = NULL; + + media_context->extended_state.enabled = 1; + dri_bo_unreference(media_context->extended_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vld state", + sizeof(struct i965_vld_state), 32); + assert(bo); + media_context->extended_state.bo = bo; +} + +void +i965_media_mpeg2_dec_context_init(VADriverContextP ctx, struct i965_media_context *media_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_mpeg2_context *i965_mpeg2_context; + int i; + + i965_mpeg2_context = calloc(1, sizeof(struct i965_mpeg2_context)); + assert(i965_mpeg2_context); + i965_mpeg2_context->wa_slice_vertical_position = -1; + + /* kernel */ + assert(NUM_MPEG2_VLD_KERNELS == (sizeof(mpeg2_vld_kernels_gen4) / + sizeof(mpeg2_vld_kernels_gen4[0]))); + assert(NUM_MPEG2_VLD_KERNELS == (sizeof(mpeg2_vld_kernels_gen5) / + sizeof(mpeg2_vld_kernels_gen5[0]))); + assert(NUM_MPEG2_VLD_KERNELS <= MAX_INTERFACE_DESC); + + if (IS_IRONLAKE(i965->intel.device_info)) + memcpy(i965_mpeg2_context->vld_kernels, mpeg2_vld_kernels_gen5, sizeof(i965_mpeg2_context->vld_kernels)); + else + memcpy(i965_mpeg2_context->vld_kernels, mpeg2_vld_kernels_gen4, sizeof(i965_mpeg2_context->vld_kernels)); + + for (i = 0; i < NUM_MPEG2_VLD_KERNELS; i++) { + struct i965_kernel *kernel = &i965_mpeg2_context->vld_kernels[i]; + kernel->bo = dri_bo_alloc(i965->intel.bufmgr, + kernel->name, + kernel->size, 64); + assert(kernel->bo); + dri_bo_subdata(kernel->bo, 0, kernel->size, kernel->bin); + } + + /* URB */ + media_context->urb.num_vfe_entries = 28; + media_context->urb.size_vfe_entry = 13; + + media_context->urb.num_cs_entries = 1; + media_context->urb.size_cs_entry = 16; + + media_context->urb.vfe_start = 0; + media_context->urb.cs_start = media_context->urb.vfe_start + + media_context->urb.num_vfe_entries * media_context->urb.size_vfe_entry; + assert(media_context->urb.cs_start + + media_context->urb.num_cs_entries * media_context->urb.size_cs_entry <= i965->intel.device_info->urb_size); + + /* hook functions */ + media_context->media_states_setup = i965_media_mpeg2_states_setup; + media_context->media_objects = i965_media_mpeg2_objects; + media_context->private_context = i965_mpeg2_context; + media_context->free_private_context = i965_media_mpeg2_free_private_context; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.h new file mode 100644 index 000000000..5b8867e61 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_media_mpeg2.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#ifndef _I965_MEDIA_MPEG2_H_ +#define _I965_MEDIA_MPEG2_H_ + +#include +#include +#include +#include + +struct decode_state; +struct i965_media_context; + +#define NUM_MPEG2_VLD_KERNELS 15 + +struct i965_mpeg2_context +{ + struct i965_kernel vld_kernels[NUM_MPEG2_VLD_KERNELS]; + VAIQMatrixBufferMPEG2 iq_matrix; + int wa_slice_vertical_position; +}; + +void i965_media_mpeg2_decode_init(VADriverContextP ctx, struct decode_state * decode_state, struct i965_media_context *media_context); +void i965_media_mpeg2_dec_context_init(VADriverContextP ctx, struct i965_media_context *media_context); + +#endif /* _I965_MEDIA_MPEG2_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_mutext.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_mutext.h new file mode 100644 index 000000000..57d437296 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_mutext.h @@ -0,0 +1,52 @@ +#ifndef _I965_MUTEX_H_ +#define _I965_MUTEX_H_ + +#include "intel_compiler.h" + +#if defined PTHREADS +#include + +typedef pthread_mutex_t _I965Mutex; + +static INLINE void _i965InitMutex(_I965Mutex *m) +{ + pthread_mutex_init(m, NULL); +} + +static INLINE void +_i965DestroyMutex(_I965Mutex *m) +{ + pthread_mutex_destroy(m); +} + +static INLINE void +_i965LockMutex(_I965Mutex *m) +{ + pthread_mutex_lock(m); +} + +static INLINE void +_i965UnlockMutex(_I965Mutex *m) +{ + pthread_mutex_unlock(m); +} + +#define _I965_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +#define _I965_DECLARE_MUTEX(m) \ + _I965Mutex m = _I965_MUTEX_INITIALIZER + +#else + +typedef int _I965Mutex; +static INLINE void _i965InitMutex(_I965Mutex *m) { (void) m; } +static INLINE void _i965DestroyMutex(_I965Mutex *m) { (void) m; } +static INLINE void _i965LockMutex(_I965Mutex *m) { (void) m; } +static INLINE void _i965UnlockMutex(_I965Mutex *m) { (void) m; } + +#define _I965_MUTEX_INITIALIZER 0 +#define _I965_DECLARE_MUTEX(m) \ + _I965Mutex m = _I965_MUTEX_INITIALIZER + +#endif + +#endif /* _I965_MUTEX_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.c new file mode 100644 index 000000000..d36fec5b1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.c @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" + +#include + +#include "i965_drv_video.h" +#include "i965_output_dri.h" +#include "dso_utils.h" + +#define LIBVA_X11_NAME "libva-x11.so.1" + +typedef struct dri_drawable *(*dri_get_drawable_func)( + VADriverContextP ctx, XID drawable); +typedef union dri_buffer *(*dri_get_rendering_buffer_func)( + VADriverContextP ctx, struct dri_drawable *d); +typedef void (*dri_swap_buffer_func)( + VADriverContextP ctx, struct dri_drawable *d); + +struct dri_vtable { + dri_get_drawable_func get_drawable; + dri_get_rendering_buffer_func get_rendering_buffer; + dri_swap_buffer_func swap_buffer; +}; + +struct va_dri_output { + struct dso_handle *handle; + struct dri_vtable vtable; +}; + +bool +i965_output_dri_init(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct dso_handle *dso_handle; + struct dri_vtable *dri_vtable; + + static const struct dso_symbol symbols[] = { + { "dri_get_drawable", + offsetof(struct dri_vtable, get_drawable) }, + { "dri_get_rendering_buffer", + offsetof(struct dri_vtable, get_rendering_buffer) }, + { "dri_swap_buffer", + offsetof(struct dri_vtable, swap_buffer) }, + { NULL, } + }; + + i965->dri_output = calloc(1, sizeof(struct va_dri_output)); + if (!i965->dri_output) + goto error; + + i965->dri_output->handle = dso_open(LIBVA_X11_NAME); + if (!i965->dri_output->handle) + goto error; + + dso_handle = i965->dri_output->handle; + dri_vtable = &i965->dri_output->vtable; + if (!dso_get_symbols(dso_handle, dri_vtable, sizeof(*dri_vtable), symbols)) + goto error; + return true; + +error: + i965_output_dri_terminate(ctx); + return false; +} + +void +i965_output_dri_terminate(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct va_dri_output * const dri_output = i965->dri_output; + + if (!dri_output) + return; + + if (dri_output->handle) { + dso_close(dri_output->handle); + dri_output->handle = NULL; + } + + free(dri_output); + i965->dri_output = NULL; +} + +VAStatus +i965_put_surface_dri( + VADriverContextP ctx, + VASurfaceID surface, + void *draw, + const VARectangle *src_rect, + const VARectangle *dst_rect, + const VARectangle *cliprects, + unsigned int num_cliprects, + unsigned int flags +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct dri_vtable * const dri_vtable = &i965->dri_output->vtable; + struct i965_render_state * const render_state = &i965->render_state; + struct dri_drawable *dri_drawable; + union dri_buffer *buffer; + struct intel_region *dest_region; + struct object_surface *obj_surface; + uint32_t name; + int i, ret; + + /* Currently don't support DRI1 */ + if (!VA_CHECK_DRM_AUTH_TYPE(ctx, VA_DRM_AUTH_DRI2)) + return VA_STATUS_ERROR_UNKNOWN; + + /* Some broken sources such as H.264 conformance case FM2_SVA_C + * will get here + */ + obj_surface = SURFACE(surface); + ASSERT_RET(obj_surface && obj_surface->bo, VA_STATUS_SUCCESS); + + _i965LockMutex(&i965->render_mutex); + + dri_drawable = dri_vtable->get_drawable(ctx, (Drawable)draw); + assert(dri_drawable); + + buffer = dri_vtable->get_rendering_buffer(ctx, dri_drawable); + assert(buffer); + + dest_region = render_state->draw_region; + if (dest_region == NULL) { + dest_region = (struct intel_region *)calloc(1, sizeof(*dest_region)); + assert(dest_region); + render_state->draw_region = dest_region; + } + + if (dest_region->bo) { + dri_bo_flink(dest_region->bo, &name); + if (buffer->dri2.name != name) { + dri_bo_unreference(dest_region->bo); + dest_region->bo = NULL; + } + } + + if (dest_region->bo == NULL) { + dest_region->cpp = buffer->dri2.cpp; + dest_region->pitch = buffer->dri2.pitch; + + dest_region->bo = intel_bo_gem_create_from_name(i965->intel.bufmgr, "rendering buffer", buffer->dri2.name); + assert(dest_region->bo); + + ret = dri_bo_get_tiling(dest_region->bo, &(dest_region->tiling), &(dest_region->swizzle)); + assert(ret == 0); + } + + dest_region->x = dri_drawable->x; + dest_region->y = dri_drawable->y; + dest_region->width = dri_drawable->width; + dest_region->height = dri_drawable->height; + + if (!(flags & VA_SRC_COLOR_MASK)) + flags |= VA_SRC_BT601; + + intel_render_put_surface(ctx, obj_surface, src_rect, dst_rect, flags); + + for (i = 0; i < I965_MAX_SUBPIC_SUM; i++) { + if (obj_surface->obj_subpic[i] != NULL) { + assert(obj_surface->subpic[i] != VA_INVALID_ID); + obj_surface->subpic_render_idx = i; + intel_render_put_subpicture(ctx, obj_surface, src_rect, dst_rect); + } + } + + if (!(g_intel_debug_option_flags & VA_INTEL_DEBUG_OPTION_BENCH)) + dri_vtable->swap_buffer(ctx, dri_drawable); + + _i965UnlockMutex(&i965->render_mutex); + + return VA_STATUS_SUCCESS; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.h new file mode 100644 index 000000000..cf37b14fe --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_dri.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef I965_OUTPUT_DRI_H +#define I965_OUTPUT_DRI_H + +#include +#include + +bool +i965_output_dri_init(VADriverContextP ctx); + +void +i965_output_dri_terminate(VADriverContextP ctx); + +VAStatus +i965_put_surface_dri( + VADriverContextP ctx, + VASurfaceID surface, + void *draw, + const VARectangle *src_rect, + const VARectangle *dst_rect, + const VARectangle *cliprects, + unsigned int num_cliprects, + unsigned int flags +); + +#endif /* I965_OUTPUT_DRI_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.c new file mode 100644 index 000000000..5a75397c9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.c @@ -0,0 +1,424 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "intel_driver.h" +#include "i965_output_wayland.h" +#include "i965_drv_video.h" +#include "i965_defines.h" +#include "dso_utils.h" + +#define LIBEGL_NAME "libEGL.so.1" +#define LIBWAYLAND_CLIENT_NAME "libwayland-client.so.0" + +typedef uint32_t (*wl_display_get_global_func)(struct wl_display *display, + const char *interface, uint32_t version); +typedef void (*wl_display_roundtrip_func)(struct wl_display *display); + +typedef struct wl_proxy *(*wl_proxy_create_func)(struct wl_proxy *factory, + const struct wl_interface *interface); +typedef void (*wl_proxy_destroy_func)(struct wl_proxy *proxy); +typedef void (*wl_proxy_marshal_func)(struct wl_proxy *p, uint32_t opcode, ...); +typedef int (*wl_proxy_add_listener_func) (struct wl_proxy *proxy, + void (**implementation)(void), void *data); + +struct wl_vtable { + const struct wl_interface *buffer_interface; + const struct wl_interface *drm_interface; + const struct wl_interface *registry_interface; + wl_display_roundtrip_func display_roundtrip; + wl_proxy_create_func proxy_create; + wl_proxy_destroy_func proxy_destroy; + wl_proxy_marshal_func proxy_marshal; + wl_proxy_add_listener_func proxy_add_listener; +}; + +struct va_wl_output { + struct dso_handle *libegl_handle; + struct dso_handle *libwl_client_handle; + struct wl_vtable vtable; + struct wl_drm *wl_drm; + struct wl_registry *wl_registry; +}; + +/* These function are copied and adapted from the version inside + * wayland-client-protocol.h + */ +static void * +registry_bind( + struct wl_vtable *wl_vtable, + struct wl_registry *wl_registry, + uint32_t name, + const struct wl_interface *interface, + uint32_t version +) +{ + struct wl_proxy *id; + + id = wl_vtable->proxy_create((struct wl_proxy *) wl_registry, + interface); + if (!id) + return NULL; + + wl_vtable->proxy_marshal((struct wl_proxy *) wl_registry, + WL_REGISTRY_BIND, name, interface->name, + version, id); + + return (void *) id; +} + +static struct wl_registry * +display_get_registry( + struct wl_vtable *wl_vtable, + struct wl_display *wl_display +) +{ + struct wl_proxy *callback; + + callback = wl_vtable->proxy_create((struct wl_proxy *) wl_display, + wl_vtable->registry_interface); + if (!callback) + return NULL; + + wl_vtable->proxy_marshal((struct wl_proxy *) wl_display, + WL_DISPLAY_GET_REGISTRY, callback); + + return (struct wl_registry *) callback; +} + +static int +registry_add_listener( + struct wl_vtable *wl_vtable, + struct wl_registry *wl_registry, + const struct wl_registry_listener *listener, + void *data +) +{ + return wl_vtable->proxy_add_listener((struct wl_proxy *) wl_registry, + (void (**)(void)) listener, data); +} + +static void +registry_handle_global( + void *data, + struct wl_registry *registry, + uint32_t id, + const char *interface, + uint32_t version +) +{ + VADriverContextP ctx = data; + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct va_wl_output * const wl_output = i965->wl_output; + struct wl_vtable * const wl_vtable = &wl_output->vtable; + + if (strcmp(interface, "wl_drm") == 0) { + wl_output->wl_drm = registry_bind(wl_vtable, wl_output->wl_registry, + id, wl_vtable->drm_interface, 1); + } +} + +static const struct wl_registry_listener registry_listener = { + registry_handle_global, + NULL +}; + +/* Ensure wl_drm instance is created */ +static bool +ensure_wl_output(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct va_wl_output * const wl_output = i965->wl_output; + struct wl_vtable * const wl_vtable = &wl_output->vtable; + + if (wl_output->wl_drm) + return true; + + wl_output->wl_registry = display_get_registry(wl_vtable, ctx->native_dpy); + registry_add_listener(wl_vtable, wl_output->wl_registry, + ®istry_listener, ctx); + wl_vtable->display_roundtrip(ctx->native_dpy); + if (!wl_output->wl_drm) + return false; + return true; +} + +/* Create planar YUV buffer */ +static struct wl_buffer * +create_planar_buffer( + struct va_wl_output *wl_output, + uint32_t name, + int32_t width, + int32_t height, + uint32_t format, + int32_t offsets[3], + int32_t pitches[3] +) +{ + struct wl_vtable * const wl_vtable = &wl_output->vtable; + struct wl_proxy *id; + + id = wl_vtable->proxy_create( + (struct wl_proxy *)wl_output->wl_drm, + wl_vtable->buffer_interface + ); + if (!id) + return NULL; + + wl_vtable->proxy_marshal( + (struct wl_proxy *)wl_output->wl_drm, + WL_DRM_CREATE_PLANAR_BUFFER, + id, + name, + width, height, format, + offsets[0], pitches[0], + offsets[1], pitches[1], + offsets[2], pitches[2] + ); + return (struct wl_buffer *)id; +} + +/* Hook to return Wayland buffer associated with the VA surface */ +static VAStatus +va_GetSurfaceBufferWl( + struct VADriverContext *ctx, + VASurfaceID surface, + unsigned int flags, + struct wl_buffer **out_buffer +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct object_surface *obj_surface; + struct wl_buffer *buffer; + uint32_t name, drm_format; + int offsets[3], pitches[3]; + + obj_surface = SURFACE(surface); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + if (flags != VA_FRAME_PICTURE) + return VA_STATUS_ERROR_FLAG_NOT_SUPPORTED; + + if (!out_buffer) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + if (!ensure_wl_output(ctx)) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + if (drm_intel_bo_flink(obj_surface->bo, &name) != 0) + return VA_STATUS_ERROR_INVALID_SURFACE; + + switch (obj_surface->fourcc) { + case VA_FOURCC_NV12: + drm_format = WL_DRM_FORMAT_NV12; + offsets[0] = 0; + pitches[0] = obj_surface->width; + offsets[1] = obj_surface->width * obj_surface->y_cb_offset; + pitches[1] = obj_surface->cb_cr_pitch; + offsets[2] = 0; + pitches[2] = 0; + break; + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + case VA_FOURCC_422H: + case VA_FOURCC_422V: + case VA_FOURCC_411P: + case VA_FOURCC_444P: + switch (obj_surface->subsampling) { + case SUBSAMPLE_YUV411: + drm_format = WL_DRM_FORMAT_YUV411; + break; + case SUBSAMPLE_YUV420: + drm_format = WL_DRM_FORMAT_YUV420; + break; + case SUBSAMPLE_YUV422H: + case SUBSAMPLE_YUV422V: + drm_format = WL_DRM_FORMAT_YUV422; + break; + case SUBSAMPLE_YUV444: + drm_format = WL_DRM_FORMAT_YUV444; + break; + default: + assert(0 && "unsupported subsampling"); + return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT; + } + offsets[0] = 0; + pitches[0] = obj_surface->width; + offsets[1] = obj_surface->width * obj_surface->y_cb_offset; + pitches[1] = obj_surface->cb_cr_pitch; + offsets[2] = obj_surface->width * obj_surface->y_cr_offset; + pitches[2] = obj_surface->cb_cr_pitch; + break; + default: + assert(0 && "unsupported format"); + return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT; + } + + buffer = create_planar_buffer( + i965->wl_output, + name, + obj_surface->orig_width, + obj_surface->orig_height, + drm_format, + offsets, + pitches + ); + if (!buffer) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + *out_buffer = buffer; + return VA_STATUS_SUCCESS; +} + +/* Hook to return Wayland buffer associated with the VA image */ +static VAStatus +va_GetImageBufferWl( + struct VADriverContext *ctx, + VAImageID image, + unsigned int flags, + struct wl_buffer **out_buffer +) +{ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +bool +ensure_driver_vtable(VADriverContextP ctx) +{ + struct VADriverVTableWayland * const vtable = ctx->vtable_wayland; + + if (!vtable) + return false; + + vtable->vaGetSurfaceBufferWl = va_GetSurfaceBufferWl; + vtable->vaGetImageBufferWl = va_GetImageBufferWl; + return true; +} + +bool +i965_output_wayland_init(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct dso_handle *dso_handle; + struct wl_vtable *wl_vtable; + + static const struct dso_symbol libegl_symbols[] = { + { "wl_drm_interface", + offsetof(struct wl_vtable, drm_interface) }, + { NULL, } + }; + + static const struct dso_symbol libwl_client_symbols[] = { + { "wl_buffer_interface", + offsetof(struct wl_vtable, buffer_interface) }, + { "wl_registry_interface", + offsetof(struct wl_vtable, registry_interface) }, + { "wl_display_roundtrip", + offsetof(struct wl_vtable, display_roundtrip) }, + { "wl_proxy_create", + offsetof(struct wl_vtable, proxy_create) }, + { "wl_proxy_destroy", + offsetof(struct wl_vtable, proxy_destroy) }, + { "wl_proxy_marshal", + offsetof(struct wl_vtable, proxy_marshal) }, + { "wl_proxy_add_listener", + offsetof(struct wl_vtable, proxy_add_listener) }, + { NULL, } + }; + + if (ctx->display_type != VA_DISPLAY_WAYLAND) + return false; + + i965->wl_output = calloc(1, sizeof(struct va_wl_output)); + if (!i965->wl_output) + goto error; + + i965->wl_output->libegl_handle = dso_open(LIBEGL_NAME); + if (!i965->wl_output->libegl_handle) + goto error; + + dso_handle = i965->wl_output->libegl_handle; + wl_vtable = &i965->wl_output->vtable; + if (!dso_get_symbols(dso_handle, wl_vtable, sizeof(*wl_vtable), + libegl_symbols)) + goto error; + + i965->wl_output->libwl_client_handle = dso_open(LIBWAYLAND_CLIENT_NAME); + if (!i965->wl_output->libwl_client_handle) + goto error; + + dso_handle = i965->wl_output->libwl_client_handle; + wl_vtable = &i965->wl_output->vtable; + if (!dso_get_symbols(dso_handle, wl_vtable, sizeof(*wl_vtable), + libwl_client_symbols)) + goto error; + + if (!ensure_driver_vtable(ctx)) + goto error; + return true; + +error: + i965_output_wayland_terminate(ctx); + return false; +} + +void +i965_output_wayland_terminate(VADriverContextP ctx) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct va_wl_output *wl_output; + + if (ctx->display_type != VA_DISPLAY_WAYLAND) + return; + + wl_output = i965->wl_output; + if (!wl_output) + return; + + if (wl_output->wl_drm) { + wl_output->vtable.proxy_destroy((struct wl_proxy *)wl_output->wl_drm); + wl_output->wl_drm = NULL; + } + + if (wl_output->libegl_handle) { + dso_close(wl_output->libegl_handle); + wl_output->libegl_handle = NULL; + } + + if (wl_output->libwl_client_handle) { + dso_close(wl_output->libwl_client_handle); + wl_output->libwl_client_handle = NULL; + } + free(wl_output); + i965->wl_output = NULL; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.h new file mode 100644 index 000000000..acea8d998 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_output_wayland.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef I965_OUTPUT_WAYLAND_H +#define I965_OUTPUT_WAYLAND_H + +#include +#include + +bool +i965_output_wayland_init(VADriverContextP ctx); + +void +i965_output_wayland_terminate(VADriverContextP ctx); + +#endif /* I965_OUTPUT_WAYLAND_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_pciids.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_pciids.h new file mode 100644 index 000000000..cf46b9e01 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_pciids.h @@ -0,0 +1,160 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Copied and modified from (mesa) include/pci_ids/i965_pci_ids.h + */ + +CHIPSET(0x2A42, g4x, g4x, "Intel(R) GM45 Express Chipset") +CHIPSET(0x2E02, g4x, g4x, "Intel(R) Integrated Graphics Device") +CHIPSET(0x2E12, g4x, g4x, "Intel(R) Q45/Q43") +CHIPSET(0x2E22, g4x, g4x, "Intel(R) G45/G43") +CHIPSET(0x2E32, g4x, g4x, "Intel(R) G41") +CHIPSET(0x2E42, g4x, g4x, "Intel(R) B43") +CHIPSET(0x2E92, g4x, g4x, "Intel(R) B43") +CHIPSET(0x0042, ilk, ilk, "Intel(R) Ironlake Desktop") +CHIPSET(0x0046, ilk, ilk, "Intel(R) Ironlake Mobile") +CHIPSET(0x0102, snb, snb_gt1, "Intel(R) Sandybridge Desktop") +CHIPSET(0x0112, snb, snb_gt2, "Intel(R) Sandybridge Desktop") +CHIPSET(0x0122, snb, snb_gt2, "Intel(R) Sandybridge Desktop") +CHIPSET(0x0106, snb, snb_gt1, "Intel(R) Sandybridge Mobile") +CHIPSET(0x0116, snb, snb_gt2, "Intel(R) Sandybridge Mobile") +CHIPSET(0x0126, snb, snb_gt2, "Intel(R) Sandybridge Mobile") +CHIPSET(0x010A, snb, snb_gt1, "Intel(R) Sandybridge Server") +CHIPSET(0x0152, ivb, ivb_gt1, "Intel(R) Ivybridge Desktop") +CHIPSET(0x0162, ivb, ivb_gt2, "Intel(R) Ivybridge Desktop") +CHIPSET(0x0156, ivb, ivb_gt1, "Intel(R) Ivybridge Mobile") +CHIPSET(0x0166, ivb, ivb_gt2, "Intel(R) Ivybridge Mobile") +CHIPSET(0x015A, ivb, ivb_gt1, "Intel(R) Ivybridge Server") +CHIPSET(0x016A, ivb, ivb_gt2, "Intel(R) Ivybridge Server") +CHIPSET(0x0F31, ivb, byt, "Intel(R) Bay Trail") +CHIPSET(0x0F32, ivb, byt, "Intel(R) Bay Trail") +CHIPSET(0x0F33, ivb, byt, "Intel(R) Bay Trail") +CHIPSET(0x0157, ivb, byt, "Intel(R) Bay Trail") +CHIPSET(0x0155, ivb, byt, "Intel(R) Bay Trail") +CHIPSET(0x0402, hsw, hsw_gt1, "Intel(R) Haswell Desktop") +CHIPSET(0x0412, hsw, hsw_gt2, "Intel(R) Haswell Desktop") +CHIPSET(0x0422, hsw, hsw_gt3, "Intel(R) Haswell Desktop") +CHIPSET(0x0406, hsw, hsw_gt1, "Intel(R) Haswell Mobile") +CHIPSET(0x0416, hsw, hsw_gt2, "Intel(R) Haswell Mobile") +CHIPSET(0x0426, hsw, hsw_gt3, "Intel(R) Haswell Mobile") +CHIPSET(0x040A, hsw, hsw_gt1, "Intel(R) Haswell Server") +CHIPSET(0x041A, hsw, hsw_gt2, "Intel(R) Haswell Server") +CHIPSET(0x042A, hsw, hsw_gt3, "Intel(R) Haswell Server") +CHIPSET(0x040B, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x041B, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x042B, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x040E, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x041E, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x042E, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0C02, hsw, hsw_gt1, "Intel(R) Haswell Desktop") +CHIPSET(0x0C12, hsw, hsw_gt2, "Intel(R) Haswell Desktop") +CHIPSET(0x0C22, hsw, hsw_gt3, "Intel(R) Haswell Desktop") +CHIPSET(0x0C06, hsw, hsw_gt1, "Intel(R) Haswell Mobile") +CHIPSET(0x0C16, hsw, hsw_gt2, "Intel(R) Haswell Mobile") +CHIPSET(0x0C26, hsw, hsw_gt3, "Intel(R) Haswell Mobile") +CHIPSET(0x0C0A, hsw, hsw_gt1, "Intel(R) Haswell Server") +CHIPSET(0x0C1A, hsw, hsw_gt2, "Intel(R) Haswell Server") +CHIPSET(0x0C2A, hsw, hsw_gt3, "Intel(R) Haswell Server") +CHIPSET(0x0C0B, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0C1B, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0C2B, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0C0E, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0C1E, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0C2E, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0A02, hsw, hsw_gt1, "Intel(R) Haswell Desktop") +CHIPSET(0x0A12, hsw, hsw_gt2, "Intel(R) Haswell Desktop") +CHIPSET(0x0A22, hsw, hsw_gt3, "Intel(R) Haswell Desktop") +CHIPSET(0x0A06, hsw, hsw_gt1, "Intel(R) Haswell Mobile") +CHIPSET(0x0A16, hsw, hsw_gt2, "Intel(R) Haswell Mobile") +CHIPSET(0x0A26, hsw, hsw_gt3, "Intel(R) Haswell Mobile") +CHIPSET(0x0A0A, hsw, hsw_gt1, "Intel(R) Haswell Server") +CHIPSET(0x0A1A, hsw, hsw_gt2, "Intel(R) Haswell Server") +CHIPSET(0x0A2A, hsw, hsw_gt3, "Intel(R) Haswell Server") +CHIPSET(0x0A0B, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0A1B, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0A2B, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0A0E, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0A1E, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0A2E, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0D02, hsw, hsw_gt1, "Intel(R) Haswell Desktop") +CHIPSET(0x0D12, hsw, hsw_gt2, "Intel(R) Haswell Desktop") +CHIPSET(0x0D22, hsw, hsw_gt3, "Intel(R) Haswell Desktop") +CHIPSET(0x0D06, hsw, hsw_gt1, "Intel(R) Haswell Mobile") +CHIPSET(0x0D16, hsw, hsw_gt2, "Intel(R) Haswell Mobile") +CHIPSET(0x0D26, hsw, hsw_gt3, "Intel(R) Haswell Mobile") +CHIPSET(0x0D0A, hsw, hsw_gt1, "Intel(R) Haswell Server") +CHIPSET(0x0D1A, hsw, hsw_gt2, "Intel(R) Haswell Server") +CHIPSET(0x0D2A, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0D0B, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0D1B, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0D2B, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x0D0E, hsw, hsw_gt1, "Intel(R) Haswell") +CHIPSET(0x0D1E, hsw, hsw_gt2, "Intel(R) Haswell") +CHIPSET(0x0D2E, hsw, hsw_gt3, "Intel(R) Haswell") +CHIPSET(0x1602, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x1606, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x160A, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x160B, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x160D, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x160E, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x1612, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x1616, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x161A, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x161B, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x161D, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x161E, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x1622, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x1626, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x162A, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x162B, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x162D, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x162E, bdw, bdw, "Intel(R) Broadwell") +CHIPSET(0x22B0, chv, chv, "Intel(R) CherryView") +CHIPSET(0x22B1, chv, chv, "Intel(R) CherryView") +CHIPSET(0x22B2, chv, chv, "Intel(R) CherryView") +CHIPSET(0x22B3, chv, chv, "Intel(R) CherryView") +CHIPSET(0x1902, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1906, skl, skl, "Intel(R) Skylake") +CHIPSET(0x190A, skl, skl, "Intel(R) Skylake") +CHIPSET(0x190B, skl, skl, "Intel(R) Skylake") +CHIPSET(0x190E, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1912, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1913, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1915, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1916, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1917, skl, skl, "Intel(R) Skylake") +CHIPSET(0x191A, skl, skl, "Intel(R) Skylake") +CHIPSET(0x191B, skl, skl, "Intel(R) Skylake") +CHIPSET(0x191D, skl, skl, "Intel(R) Skylake") +CHIPSET(0x191E, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1921, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1926, skl, skl, "Intel(R) Skylake") +CHIPSET(0x192A, skl, skl, "Intel(R) Skylake") +CHIPSET(0x192B, skl, skl, "Intel(R) Skylake") +CHIPSET(0x1932, skl, skl, "Intel(R) Skylake") +CHIPSET(0x193A, skl, skl, "Intel(R) Skylake") +CHIPSET(0x193B, skl, skl, "Intel(R) Skylake") +CHIPSET(0x193D, skl, skl, "Intel(R) Skylake") +CHIPSET(0x0A84, bxt, bxt, "Intel(R) Broxton") +CHIPSET(0x1A84, bxt, bxt, "Intel(R) Broxton") +CHIPSET(0x5A84, bxt, bxt, "Intel(R) Broxton") diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.c new file mode 100644 index 000000000..ea35b36a9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.c @@ -0,0 +1,6100 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#include +#include +#include +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_structs.h" +#include "i965_drv_video.h" +#include "i965_post_processing.h" +#include "i965_render.h" +#include "i965_yuv_coefs.h" +#include "intel_media.h" + +extern VAStatus +vpp_surface_convert(VADriverContextP ctx, + struct object_surface *src_obj_surf, + struct object_surface *dst_obj_surf); + +#define HAS_VPP(ctx) ((ctx)->codec_info->has_vpp) + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN8,\ + MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7)) + +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET SURFACE_STATE_OFFSET(MAX_PP_SURFACES) + +#define GPU_ASM_BLOCK_WIDTH 16 +#define GPU_ASM_BLOCK_HEIGHT 8 +#define GPU_ASM_X_OFFSET_ALIGNMENT 4 + +#define VA_STATUS_SUCCESS_1 0xFFFFFFFE + +static const uint32_t pp_null_gen5[][4] = { +#include "shaders/post_processing/gen5_6/null.g4b.gen5" +}; + +static const uint32_t pp_nv12_load_save_nv12_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_pl3.g4b.gen5" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_nv12.g4b.gen5" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_pl3.g4b.gen5" +}; + +static const uint32_t pp_nv12_scaling_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_scaling_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_avs_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_avs_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_dndi_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_dndi_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_dn_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_dn_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_load_save_pa_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_pa.g4b.gen5" +}; + +static const uint32_t pp_pl3_load_save_pa_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_pa.g4b.gen5" +}; + +static const uint32_t pp_pa_load_save_nv12_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_nv12.g4b.gen5" +}; + +static const uint32_t pp_pa_load_save_pl3_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pl3.g4b.gen5" +}; + +static const uint32_t pp_pa_load_save_pa_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pa.g4b.gen5" +}; + +static const uint32_t pp_rgbx_load_save_nv12_gen5[][4] = { +#include "shaders/post_processing/gen5_6/rgbx_load_save_nv12.g4b.gen5" +}; + +static const uint32_t pp_nv12_load_save_rgbx_gen5[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_rgbx.g4b.gen5" +}; + +static VAStatus pp_null_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus +pp_nv12_avs_initialize(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, const VARectangle *src_rect, + struct i965_surface *dst_surface, const VARectangle *dst_rect, + void *filter_param); +static VAStatus pp_nv12_scaling_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus gen6_nv12_scaling_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus pp_plx_load_save_plx_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus pp_nv12_dndi_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus pp_nv12_dn_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +static struct pp_module pp_modules_gen5[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen5, + sizeof(pp_null_gen5), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen5, + sizeof(pp_nv12_load_save_nv12_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen5, + sizeof(pp_nv12_load_save_pl3_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen5, + sizeof(pp_pl3_load_save_nv12_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen5, + sizeof(pp_pl3_load_save_pl3_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen5, + sizeof(pp_nv12_scaling_gen5), + NULL, + }, + + pp_nv12_scaling_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen5, + sizeof(pp_nv12_avs_gen5), + NULL, + }, + + pp_nv12_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen5, + sizeof(pp_nv12_dndi_gen5), + NULL, + }, + + pp_nv12_dndi_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen5, + sizeof(pp_nv12_dn_gen5), + NULL, + }, + + pp_nv12_dn_initialize, + }, + + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen5, + sizeof(pp_nv12_load_save_pa_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen5, + sizeof(pp_pl3_load_save_pa_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen5, + sizeof(pp_pa_load_save_nv12_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen5, + sizeof(pp_pa_load_save_pl3_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen5, + sizeof(pp_pa_load_save_pa_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen5, + sizeof(pp_rgbx_load_save_nv12_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen5, + sizeof(pp_nv12_load_save_rgbx_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, +}; + +static const uint32_t pp_null_gen6[][4] = { +#include "shaders/post_processing/gen5_6/null.g6b" +}; + +static const uint32_t pp_nv12_load_save_nv12_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_nv12.g6b" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_pl3.g6b" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_nv12.g6b" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_pl3.g6b" +}; + +static const uint32_t pp_nv12_scaling_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_avs_nv12.g6b" +}; + +static const uint32_t pp_nv12_avs_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_avs_nv12.g6b" +}; + +static const uint32_t pp_nv12_dndi_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_dndi_nv12.g6b" +}; + +static const uint32_t pp_nv12_dn_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_dn_nv12.g6b" +}; + +static const uint32_t pp_nv12_load_save_pa_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_pa.g6b" +}; + +static const uint32_t pp_pl3_load_save_pa_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pl3_load_save_pa.g6b" +}; + +static const uint32_t pp_pa_load_save_nv12_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_nv12.g6b" +}; + +static const uint32_t pp_pa_load_save_pl3_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pl3.g6b" +}; + +static const uint32_t pp_pa_load_save_pa_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pa.g6b" +}; + +static const uint32_t pp_rgbx_load_save_nv12_gen6[][4] = { +#include "shaders/post_processing/gen5_6/rgbx_load_save_nv12.g6b" +}; + +static const uint32_t pp_nv12_load_save_rgbx_gen6[][4] = { +#include "shaders/post_processing/gen5_6/nv12_load_save_rgbx.g6b" +}; + +static struct pp_module pp_modules_gen6[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen6, + sizeof(pp_null_gen6), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen6, + sizeof(pp_nv12_load_save_nv12_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen6, + sizeof(pp_nv12_load_save_pl3_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen6, + sizeof(pp_pl3_load_save_nv12_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen6, + sizeof(pp_pl3_load_save_pl3_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen6, + sizeof(pp_nv12_scaling_gen6), + NULL, + }, + + gen6_nv12_scaling_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen6, + sizeof(pp_nv12_avs_gen6), + NULL, + }, + + pp_nv12_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen6, + sizeof(pp_nv12_dndi_gen6), + NULL, + }, + + pp_nv12_dndi_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen6, + sizeof(pp_nv12_dn_gen6), + NULL, + }, + + pp_nv12_dn_initialize, + }, + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen6, + sizeof(pp_nv12_load_save_pa_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen6, + sizeof(pp_pl3_load_save_pa_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen6, + sizeof(pp_pa_load_save_nv12_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen6, + sizeof(pp_pa_load_save_pl3_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen6, + sizeof(pp_pa_load_save_pa_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen6, + sizeof(pp_rgbx_load_save_nv12_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen6, + sizeof(pp_nv12_load_save_rgbx_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, +}; + +static const uint32_t pp_null_gen7[][4] = { +}; + +static const uint32_t pp_nv12_load_save_nv12_gen7[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pl2.g7b" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen7[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pl3.g7b" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen7[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pl2.g7b" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen7[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pl3.g7b" +}; + +static const uint32_t pp_nv12_scaling_gen7[][4] = { +#include "shaders/post_processing/gen7/avs.g7b" +}; + +static const uint32_t pp_nv12_avs_gen7[][4] = { +#include "shaders/post_processing/gen7/avs.g7b" +}; + +static const uint32_t pp_nv12_dndi_gen7[][4] = { +#include "shaders/post_processing/gen7/dndi.g7b" +}; + +static const uint32_t pp_nv12_dn_gen7[][4] = { +#include "shaders/post_processing/gen7/nv12_dn_nv12.g7b" +}; +static const uint32_t pp_nv12_load_save_pa_gen7[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pa.g7b" +}; +static const uint32_t pp_pl3_load_save_pa_gen7[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pa.g7b" +}; +static const uint32_t pp_pa_load_save_nv12_gen7[][4] = { +#include "shaders/post_processing/gen7/pa_to_pl2.g7b" +}; +static const uint32_t pp_pa_load_save_pl3_gen7[][4] = { +#include "shaders/post_processing/gen7/pa_to_pl3.g7b" +}; +static const uint32_t pp_pa_load_save_pa_gen7[][4] = { +#include "shaders/post_processing/gen7/pa_to_pa.g7b" +}; +static const uint32_t pp_rgbx_load_save_nv12_gen7[][4] = { +#include "shaders/post_processing/gen7/rgbx_to_nv12.g7b" +}; +static const uint32_t pp_nv12_load_save_rgbx_gen7[][4] = { +#include "shaders/post_processing/gen7/pl2_to_rgbx.g7b" +}; + +static VAStatus gen7_pp_plx_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus gen7_pp_nv12_dndi_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +static VAStatus gen7_pp_nv12_dn_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); + +static struct pp_module pp_modules_gen7[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen7, + sizeof(pp_null_gen7), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen7, + sizeof(pp_nv12_load_save_nv12_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen7, + sizeof(pp_nv12_load_save_pl3_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen7, + sizeof(pp_pl3_load_save_nv12_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen7, + sizeof(pp_pl3_load_save_pl3_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen7, + sizeof(pp_nv12_scaling_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen7, + sizeof(pp_nv12_avs_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen7, + sizeof(pp_nv12_dndi_gen7), + NULL, + }, + + gen7_pp_nv12_dndi_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen7, + sizeof(pp_nv12_dn_gen7), + NULL, + }, + + gen7_pp_nv12_dn_initialize, + }, + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen7, + sizeof(pp_nv12_load_save_pa_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen7, + sizeof(pp_pl3_load_save_pa_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen7, + sizeof(pp_pa_load_save_nv12_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen7, + sizeof(pp_pa_load_save_pl3_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen7, + sizeof(pp_pa_load_save_pa_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen7, + sizeof(pp_rgbx_load_save_nv12_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen7, + sizeof(pp_nv12_load_save_rgbx_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + +}; + +static const uint32_t pp_null_gen75[][4] = { +}; + +static const uint32_t pp_nv12_load_save_nv12_gen75[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pl2.g75b" +}; + +static const uint32_t pp_nv12_load_save_pl3_gen75[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pl3.g75b" +}; + +static const uint32_t pp_pl3_load_save_nv12_gen75[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pl2.g75b" +}; + +static const uint32_t pp_pl3_load_save_pl3_gen75[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pl3.g75b" +}; + +static const uint32_t pp_nv12_scaling_gen75[][4] = { +#include "shaders/post_processing/gen7/avs.g75b" +}; + +static const uint32_t pp_nv12_avs_gen75[][4] = { +#include "shaders/post_processing/gen7/avs.g75b" +}; + +static const uint32_t pp_nv12_dndi_gen75[][4] = { +// #include "shaders/post_processing/gen7/dndi.g75b" +}; + +static const uint32_t pp_nv12_dn_gen75[][4] = { +// #include "shaders/post_processing/gen7/nv12_dn_nv12.g75b" +}; +static const uint32_t pp_nv12_load_save_pa_gen75[][4] = { +#include "shaders/post_processing/gen7/pl2_to_pa.g75b" +}; +static const uint32_t pp_pl3_load_save_pa_gen75[][4] = { +#include "shaders/post_processing/gen7/pl3_to_pa.g75b" +}; +static const uint32_t pp_pa_load_save_nv12_gen75[][4] = { +#include "shaders/post_processing/gen7/pa_to_pl2.g75b" +}; +static const uint32_t pp_pa_load_save_pl3_gen75[][4] = { +#include "shaders/post_processing/gen7/pa_to_pl3.g75b" +}; +static const uint32_t pp_pa_load_save_pa_gen75[][4] = { +#include "shaders/post_processing/gen7/pa_to_pa.g75b" +}; +static const uint32_t pp_rgbx_load_save_nv12_gen75[][4] = { +#include "shaders/post_processing/gen7/rgbx_to_nv12.g75b" +}; +static const uint32_t pp_nv12_load_save_rgbx_gen75[][4] = { +#include "shaders/post_processing/gen7/pl2_to_rgbx.g75b" +}; + +static struct pp_module pp_modules_gen75[] = { + { + { + "NULL module (for testing)", + PP_NULL, + pp_null_gen75, + sizeof(pp_null_gen75), + NULL, + }, + + pp_null_initialize, + }, + + { + { + "NV12_NV12", + PP_NV12_LOAD_SAVE_N12, + pp_nv12_load_save_nv12_gen75, + sizeof(pp_nv12_load_save_nv12_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12_PL3", + PP_NV12_LOAD_SAVE_PL3, + pp_nv12_load_save_pl3_gen75, + sizeof(pp_nv12_load_save_pl3_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_NV12", + PP_PL3_LOAD_SAVE_N12, + pp_pl3_load_save_nv12_gen75, + sizeof(pp_pl3_load_save_nv12_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_PL3", + PP_PL3_LOAD_SAVE_PL3, + pp_pl3_load_save_pl3_gen75, + sizeof(pp_pl3_load_save_pl3_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 Scaling module", + PP_NV12_SCALING, + pp_nv12_scaling_gen75, + sizeof(pp_nv12_scaling_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 AVS module", + PP_NV12_AVS, + pp_nv12_avs_gen75, + sizeof(pp_nv12_avs_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12 DNDI module", + PP_NV12_DNDI, + pp_nv12_dndi_gen75, + sizeof(pp_nv12_dndi_gen75), + NULL, + }, + + gen7_pp_nv12_dn_initialize, + }, + + { + { + "NV12 DN module", + PP_NV12_DN, + pp_nv12_dn_gen75, + sizeof(pp_nv12_dn_gen75), + NULL, + }, + + gen7_pp_nv12_dn_initialize, + }, + + { + { + "NV12_PA module", + PP_NV12_LOAD_SAVE_PA, + pp_nv12_load_save_pa_gen75, + sizeof(pp_nv12_load_save_pa_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PL3_PA module", + PP_PL3_LOAD_SAVE_PA, + pp_pl3_load_save_pa_gen75, + sizeof(pp_pl3_load_save_pa_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_NV12 module", + PP_PA_LOAD_SAVE_NV12, + pp_pa_load_save_nv12_gen75, + sizeof(pp_pa_load_save_nv12_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_PL3 module", + PP_PA_LOAD_SAVE_PL3, + pp_pa_load_save_pl3_gen75, + sizeof(pp_pa_load_save_pl3_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen75, + sizeof(pp_pa_load_save_pa_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "RGBX_NV12 module", + PP_RGBX_LOAD_SAVE_NV12, + pp_rgbx_load_save_nv12_gen75, + sizeof(pp_rgbx_load_save_nv12_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + + { + { + "NV12_RGBX module", + PP_NV12_LOAD_SAVE_RGBX, + pp_nv12_load_save_rgbx_gen75, + sizeof(pp_nv12_load_save_rgbx_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, + +}; + +static void +pp_dndi_frame_store_reset(DNDIFrameStore *fs) +{ + fs->obj_surface = NULL; + fs->surface_id = VA_INVALID_ID; + fs->is_scratch_surface = 0; +} + +static inline void +pp_dndi_frame_store_swap(DNDIFrameStore *fs1, DNDIFrameStore *fs2) +{ + const DNDIFrameStore tmpfs = *fs1; + *fs1 = *fs2; + *fs2 = tmpfs; +} + +static inline void +pp_dndi_frame_store_clear(DNDIFrameStore *fs, VADriverContextP ctx) +{ + if (fs->obj_surface && fs->is_scratch_surface) { + VASurfaceID va_surface = fs->obj_surface->base.id; + i965_DestroySurfaces(ctx, &va_surface, 1); + } + pp_dndi_frame_store_reset(fs); +} + +static void +pp_dndi_context_init(struct pp_dndi_context *dndi_ctx) +{ + int i; + + memset(dndi_ctx, 0, sizeof(*dndi_ctx)); + for (i = 0; i < ARRAY_ELEMS(dndi_ctx->frame_store); i++) + pp_dndi_frame_store_reset(&dndi_ctx->frame_store[i]); +} + +static VAStatus +pp_dndi_context_init_surface_params(struct pp_dndi_context *dndi_ctx, + struct object_surface *obj_surface, + const VAProcPipelineParameterBuffer *pipe_params, + const VAProcFilterParameterBufferDeinterlacing *deint_params) +{ + DNDIFrameStore *fs; + + dndi_ctx->is_di_enabled = 1; + dndi_ctx->is_di_adv_enabled = 0; + dndi_ctx->is_first_frame = 0; + dndi_ctx->is_second_field = 0; + + /* Check whether we are deinterlacing the second field */ + if (dndi_ctx->is_di_enabled) { + const unsigned int tff = + !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD_FIRST); + const unsigned int is_top_field = + !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD); + + if ((tff ^ is_top_field) != 0) { + fs = &dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT]; + if (fs->surface_id != obj_surface->base.id) { + WARN_ONCE("invalid surface provided for second field\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + dndi_ctx->is_second_field = 1; + } + } + + /* Check whether we are deinterlacing the first frame */ + if (dndi_ctx->is_di_enabled) { + switch (deint_params->algorithm) { + case VAProcDeinterlacingBob: + dndi_ctx->is_first_frame = 1; + break; + case VAProcDeinterlacingMotionAdaptive: + case VAProcDeinterlacingMotionCompensated: + fs = &dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT]; + if (fs->surface_id == VA_INVALID_ID) + dndi_ctx->is_first_frame = 1; + else if (dndi_ctx->is_second_field) { + /* At this stage, we have already deinterlaced the + first field successfully. So, the first frame flag + is trigerred if the previous field was deinterlaced + without reference frame */ + fs = &dndi_ctx->frame_store[DNDI_FRAME_IN_PREVIOUS]; + if (fs->surface_id == VA_INVALID_ID) + dndi_ctx->is_first_frame = 1; + } + else { + if (pipe_params->num_forward_references < 1 || + pipe_params->forward_references[0] == VA_INVALID_ID) { + WARN_ONCE("A forward temporal reference is needed for Motion adaptive/compensated deinterlacing !!!\n"); + return VA_STATUS_ERROR_INVALID_PARAMETER; + } + } + dndi_ctx->is_di_adv_enabled = 1; + break; + default: + WARN_ONCE("unsupported deinterlacing algorithm (%d)\n", + deint_params->algorithm); + return VA_STATUS_ERROR_UNSUPPORTED_FILTER; + } + } + return VA_STATUS_SUCCESS; +} + +static VAStatus +pp_dndi_context_ensure_surfaces_storage(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + struct object_surface *src_surface, struct object_surface *dst_surface) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct pp_dndi_context * const dndi_ctx = &pp_context->pp_dndi_context; + unsigned int src_fourcc, dst_fourcc; + unsigned int src_sampling, dst_sampling; + unsigned int src_tiling, dst_tiling; + unsigned int i, swizzle; + VAStatus status; + + /* Determine input surface info. Always use NV12 Y-tiled */ + if (src_surface->bo) { + src_fourcc = src_surface->fourcc; + src_sampling = src_surface->subsampling; + dri_bo_get_tiling(src_surface->bo, &src_tiling, &swizzle); + src_tiling = !!src_tiling; + } + else { + src_fourcc = VA_FOURCC_NV12; + src_sampling = SUBSAMPLE_YUV420; + src_tiling = 1; + status = i965_check_alloc_surface_bo(ctx, src_surface, + src_tiling, src_fourcc, src_sampling); + if (status != VA_STATUS_SUCCESS) + return status; + } + + /* Determine output surface info. Always use NV12 Y-tiled */ + if (dst_surface->bo) { + dst_fourcc = dst_surface->fourcc; + dst_sampling = dst_surface->subsampling; + dri_bo_get_tiling(dst_surface->bo, &dst_tiling, &swizzle); + dst_tiling = !!dst_tiling; + } + else { + dst_fourcc = VA_FOURCC_NV12; + dst_sampling = SUBSAMPLE_YUV420; + dst_tiling = 1; + status = i965_check_alloc_surface_bo(ctx, dst_surface, + dst_tiling, dst_fourcc, dst_sampling); + if (status != VA_STATUS_SUCCESS) + return status; + } + + /* Create pipeline surfaces */ + for (i = 0; i < ARRAY_ELEMS(dndi_ctx->frame_store); i ++) { + struct object_surface *obj_surface; + VASurfaceID new_surface; + unsigned int width, height; + + if (dndi_ctx->frame_store[i].obj_surface && + dndi_ctx->frame_store[i].obj_surface->bo) + continue; // user allocated surface, not VPP internal + + if (dndi_ctx->frame_store[i].obj_surface) { + obj_surface = dndi_ctx->frame_store[i].obj_surface; + dndi_ctx->frame_store[i].is_scratch_surface = 0; + } else { + if (i <= DNDI_FRAME_IN_STMM) { + width = src_surface->orig_width; + height = src_surface->orig_height; + } + else { + width = dst_surface->orig_width; + height = dst_surface->orig_height; + } + + status = i965_CreateSurfaces(ctx, width, height, VA_RT_FORMAT_YUV420, + 1, &new_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + obj_surface = SURFACE(new_surface); + assert(obj_surface != NULL); + dndi_ctx->frame_store[i].is_scratch_surface = 1; + } + + if (i <= DNDI_FRAME_IN_PREVIOUS) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + src_tiling, src_fourcc, src_sampling); + } + else if (i == DNDI_FRAME_IN_STMM || i == DNDI_FRAME_OUT_STMM) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + 1, VA_FOURCC_Y800, SUBSAMPLE_YUV400); + } + else if (i >= DNDI_FRAME_OUT_CURRENT) { + status = i965_check_alloc_surface_bo(ctx, obj_surface, + dst_tiling, dst_fourcc, dst_sampling); + } + if (status != VA_STATUS_SUCCESS) + return status; + + dndi_ctx->frame_store[i].obj_surface = obj_surface; + } + return VA_STATUS_SUCCESS; +} + +static VAStatus +pp_dndi_context_ensure_surfaces(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + struct object_surface *src_surface, struct object_surface *dst_surface) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct pp_dndi_context * const dndi_ctx = &pp_context->pp_dndi_context; + DNDIFrameStore *ifs, *ofs; + bool is_new_frame = false; + + /* Update the previous input surface */ + is_new_frame = dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT].surface_id != + src_surface->base.id; + if (is_new_frame) { + ifs = &dndi_ctx->frame_store[DNDI_FRAME_IN_PREVIOUS]; + ofs = &dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT]; + do { + const VAProcPipelineParameterBuffer * const pipe_params = + pp_context->pipeline_param; + struct object_surface *obj_surface; + + if (pipe_params->num_forward_references < 1) + break; + if (pipe_params->forward_references[0] == VA_INVALID_ID) + break; + + obj_surface = SURFACE(pipe_params->forward_references[0]); + if (!obj_surface || obj_surface->base.id == ifs->surface_id) + break; + + pp_dndi_frame_store_clear(ifs, ctx); + if (obj_surface->base.id == ofs->surface_id) { + *ifs = *ofs; + pp_dndi_frame_store_reset(ofs); + } + else { + ifs->obj_surface = obj_surface; + ifs->surface_id = obj_surface->base.id; + } + } while (0); + } + + /* Update the input surface */ + ifs = &dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT]; + pp_dndi_frame_store_clear(ifs, ctx); + ifs->obj_surface = src_surface; + ifs->surface_id = src_surface->base.id; + + /* Update the Spatial Temporal Motion Measure (STMM) surfaces */ + if (is_new_frame) + pp_dndi_frame_store_swap(&dndi_ctx->frame_store[DNDI_FRAME_IN_STMM], + &dndi_ctx->frame_store[DNDI_FRAME_OUT_STMM]); + + /* Update the output surfaces */ + ofs = &dndi_ctx->frame_store[DNDI_FRAME_OUT_CURRENT]; + if (dndi_ctx->is_di_adv_enabled && !dndi_ctx->is_first_frame) { + pp_dndi_frame_store_swap(ofs, + &dndi_ctx->frame_store[DNDI_FRAME_OUT_PREVIOUS]); + if (!dndi_ctx->is_second_field) + ofs = &dndi_ctx->frame_store[DNDI_FRAME_OUT_PREVIOUS]; + } + pp_dndi_frame_store_clear(ofs, ctx); + ofs->obj_surface = dst_surface; + ofs->surface_id = dst_surface->base.id; + + return VA_STATUS_SUCCESS; +} + +static int +pp_get_surface_fourcc(VADriverContextP ctx, const struct i965_surface *surface) +{ + int fourcc; + + if (surface->type == I965_SURFACE_TYPE_IMAGE) { + struct object_image *obj_image = (struct object_image *)surface->base; + fourcc = obj_image->image.format.fourcc; + } else { + struct object_surface *obj_surface = (struct object_surface *)surface->base; + fourcc = obj_surface->fourcc; + } + + return fourcc; +} + +static void +pp_get_surface_size(VADriverContextP ctx, const struct i965_surface *surface, int *width, int *height) +{ + if (surface->type == I965_SURFACE_TYPE_IMAGE) { + struct object_image *obj_image = (struct object_image *)surface->base; + + *width = obj_image->image.width; + *height = obj_image->image.height; + } else { + struct object_surface *obj_surface = (struct object_surface *)surface->base; + + *width = obj_surface->orig_width; + *height = obj_surface->orig_height; + } +} + +static void +pp_set_surface_tiling(struct i965_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss3.tiled_surface = 0; + ss->ss3.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +pp_set_surface2_tiling(struct i965_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen7_pp_set_surface_tiling(struct gen7_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +gen7_pp_set_surface2_tiling(struct gen7_surface_state2 *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss2.tiled_surface = 0; + ss->ss2.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss2.tiled_surface = 1; + ss->ss2.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +ironlake_pp_interface_descriptor_table(struct i965_post_processing_context *pp_context) +{ + struct i965_interface_descriptor *desc; + dri_bo *bo; + int pp_index = pp_context->current_pp; + + bo = pp_context->idrt.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + desc = bo->virtual; + memset(desc, 0, sizeof(*desc)); + desc->desc0.grf_reg_blocks = 10; + desc->desc0.kernel_start_pointer = pp_context->pp_modules[pp_index].kernel.bo->offset >> 6; /* reloc */ + desc->desc1.const_urb_entry_read_offset = 0; + desc->desc1.const_urb_entry_read_len = 4; /* grf 1-4 */ + desc->desc2.sampler_state_pointer = pp_context->sampler_state_table.bo->offset >> 5; + desc->desc2.sampler_count = 0; + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET >> 5); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc0.grf_reg_blocks, + offsetof(struct i965_interface_descriptor, desc0), + pp_context->pp_modules[pp_index].kernel.bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc2.sampler_count << 2, + offsetof(struct i965_interface_descriptor, desc2), + pp_context->sampler_state_table.bo); + + dri_bo_unmap(bo); + pp_context->idrt.num_interface_descriptors++; +} + +static void +ironlake_pp_vfe_state(struct i965_post_processing_context *pp_context) +{ + struct i965_vfe_state *vfe_state; + dri_bo *bo; + + bo = pp_context->vfe_state.bo; + dri_bo_map(bo, 1); + assert(bo->virtual); + vfe_state = bo->virtual; + memset(vfe_state, 0, sizeof(*vfe_state)); + vfe_state->vfe1.max_threads = pp_context->urb.num_vfe_entries - 1; + vfe_state->vfe1.urb_entry_alloc_size = pp_context->urb.size_vfe_entry - 1; + vfe_state->vfe1.num_urb_entries = pp_context->urb.num_vfe_entries; + vfe_state->vfe1.vfe_mode = VFE_GENERIC_MODE; + vfe_state->vfe1.children_present = 0; + vfe_state->vfe2.interface_descriptor_base = + pp_context->idrt.bo->offset >> 4; /* reloc */ + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_vfe_state, vfe2), + pp_context->idrt.bo); + dri_bo_unmap(bo); +} + +static void +ironlake_pp_upload_constants(struct i965_post_processing_context *pp_context) +{ + unsigned char *constant_buffer; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + + assert(sizeof(*pp_static_parameter) == 128); + dri_bo_map(pp_context->curbe.bo, 1); + assert(pp_context->curbe.bo->virtual); + constant_buffer = pp_context->curbe.bo->virtual; + memcpy(constant_buffer, pp_static_parameter, sizeof(*pp_static_parameter)); + dri_bo_unmap(pp_context->curbe.bo); +} + +static void +ironlake_pp_states_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + ironlake_pp_interface_descriptor_table(pp_context); + ironlake_pp_vfe_state(pp_context); + ironlake_pp_upload_constants(pp_context); +} + +static void +ironlake_pp_pipeline_select(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_urb_layout(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + unsigned int vfe_fence, cs_fence; + + vfe_fence = pp_context->urb.cs_start; + cs_fence = pp_context->urb.size; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_URB_FENCE | UF0_VFE_REALLOC | UF0_CS_REALLOC | 1); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (vfe_fence << UF2_VFE_FENCE_SHIFT) | /* VFE_SIZE */ + (cs_fence << UF2_CS_FENCE_SHIFT)); /* CS_SIZE */ + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_state_base_address(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 6); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_RELOC(batch, pp_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_state_pointers(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, CMD_MEDIA_STATE_POINTERS | 1); + OUT_BATCH(batch, 0); + OUT_RELOC(batch, pp_context->vfe_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_cs_urb_layout(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CS_URB_STATE | 0); + OUT_BATCH(batch, + ((pp_context->urb.size_cs_entry - 1) << 4) | /* URB Entry Allocation Size */ + (pp_context->urb.num_cs_entries << 0)); /* Number of URB Entries */ + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_constant_buffer(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CONSTANT_BUFFER | (1 << 8) | (2 - 2)); + OUT_RELOC(batch, pp_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + pp_context->urb.size_cs_entry - 1); + ADVANCE_BATCH(batch); +} + +static void +ironlake_pp_object_walker(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + int x, x_steps, y, y_steps; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + x_steps = pp_context->pp_x_steps(pp_context->private_context); + y_steps = pp_context->pp_y_steps(pp_context->private_context); + + for (y = 0; y < y_steps; y++) { + for (x = 0; x < x_steps; x++) { + if (!pp_context->pp_set_block_parameter(pp_context, x, y)) { + BEGIN_BATCH(batch, 20); + OUT_BATCH(batch, CMD_MEDIA_OBJECT | 18); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* no indirect data */ + OUT_BATCH(batch, 0); + + /* inline data grf 5-6 */ + assert(sizeof(*pp_inline_parameter) == 64); + intel_batchbuffer_data(batch, pp_inline_parameter, sizeof(*pp_inline_parameter)); + + ADVANCE_BATCH(batch); + } + } + } +} + +static void +ironlake_pp_pipeline_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + ironlake_pp_pipeline_select(ctx, pp_context); + ironlake_pp_state_base_address(ctx, pp_context); + ironlake_pp_state_pointers(ctx, pp_context); + ironlake_pp_urb_layout(ctx, pp_context); + ironlake_pp_cs_urb_layout(ctx, pp_context); + ironlake_pp_constant_buffer(ctx, pp_context); + ironlake_pp_object_walker(ctx, pp_context); + intel_batchbuffer_end_atomic(batch); +} + +// update u/v offset when the surface format are packed yuv +static void i965_update_src_surface_static_parameter( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *surface) +{ + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + int fourcc = pp_get_surface_fourcc(ctx, surface); + + switch (fourcc) { + case VA_FOURCC_YUY2: + pp_static_parameter->grf1.source_packed_u_offset = 1; + pp_static_parameter->grf1.source_packed_v_offset = 3; + break; + case VA_FOURCC_UYVY: + pp_static_parameter->grf1.source_packed_y_offset = 1; + pp_static_parameter->grf1.source_packed_v_offset = 2; + break; + case VA_FOURCC_BGRX: + case VA_FOURCC_BGRA: + pp_static_parameter->grf1.source_rgb_layout = 0; + break; + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + pp_static_parameter->grf1.source_rgb_layout = 1; + break; + default: + break; + } + +} + +static void i965_update_dst_surface_static_parameter( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *surface) +{ + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + int fourcc = pp_get_surface_fourcc(ctx, surface); + + switch (fourcc) { + case VA_FOURCC_YUY2: + pp_static_parameter->grf1.r1_2.load_and_save.destination_packed_u_offset = 1; + pp_static_parameter->grf1.r1_2.load_and_save.destination_packed_v_offset = 3; + break; + case VA_FOURCC_UYVY: + pp_static_parameter->grf1.r1_2.load_and_save.destination_packed_y_offset = 1; + pp_static_parameter->grf1.r1_2.load_and_save.destination_packed_v_offset = 2; + break; + case VA_FOURCC_BGRX: + case VA_FOURCC_BGRA: + pp_static_parameter->grf1.r1_2.csc.destination_rgb_layout = 0; + break; + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + pp_static_parameter->grf1.r1_2.csc.destination_rgb_layout = 1; + break; + default: + break; + } + +} + +static void +i965_pp_set_surface_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int pitch, int format, + int index, int is_target) +{ + struct i965_surface_state *ss; + dri_bo *ss_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss_bo = pp_context->surface_state_binding_table.bo; + assert(ss_bo); + + dri_bo_map(ss_bo, True); + assert(ss_bo->virtual); + ss = (struct i965_surface_state *)((char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + ss->ss1.base_addr = surf_bo->offset + surf_bo_offset; + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + ss->ss3.pitch = pitch - 1; + pp_set_surface_tiling(ss, tiling); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, is_target ? I915_GEM_DOMAIN_RENDER : 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct i965_surface_state, ss1), + surf_bo); + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + +static void +i965_pp_set_surface2_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int wpitch, + int xoffset, int yoffset, + int format, int interleave_chroma, + int index) +{ + struct i965_surface_state2 *ss2; + dri_bo *ss2_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss2_bo = pp_context->surface_state_binding_table.bo; + assert(ss2_bo); + + dri_bo_map(ss2_bo, True); + assert(ss2_bo->virtual); + ss2 = (struct i965_surface_state2 *)((char *)ss2_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss2, 0, sizeof(*ss2)); + ss2->ss0.surface_base_address = surf_bo->offset + surf_bo_offset; + ss2->ss1.cbcr_pixel_offset_v_direction = 0; + ss2->ss1.width = width - 1; + ss2->ss1.height = height - 1; + ss2->ss2.pitch = wpitch - 1; + ss2->ss2.interleave_chroma = interleave_chroma; + ss2->ss2.surface_format = format; + ss2->ss3.x_offset_for_cb = xoffset; + ss2->ss3.y_offset_for_cb = yoffset; + pp_set_surface2_tiling(ss2, tiling); + dri_bo_emit_reloc(ss2_bo, + I915_GEM_DOMAIN_RENDER, 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct i965_surface_state2, ss0), + surf_bo); + ((unsigned int *)((char *)ss2_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss2_bo); +} + +static void +gen7_pp_set_surface_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int pitch, int format, + int index, int is_target) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + struct gen7_surface_state *ss; + dri_bo *ss_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss_bo = pp_context->surface_state_binding_table.bo; + assert(ss_bo); + + dri_bo_map(ss_bo, True); + assert(ss_bo->virtual); + ss = (struct gen7_surface_state *)((char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss, 0, sizeof(*ss)); + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + ss->ss1.base_addr = surf_bo->offset + surf_bo_offset; + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + ss->ss3.pitch = pitch - 1; + gen7_pp_set_surface_tiling(ss, tiling); + if (IS_HASWELL(i965->intel.device_info)) + gen7_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, is_target ? I915_GEM_DOMAIN_RENDER : 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen7_surface_state, ss1), + surf_bo); + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + +static void +gen7_pp_set_surface2_state(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + dri_bo *surf_bo, unsigned long surf_bo_offset, + int width, int height, int wpitch, + int xoffset, int yoffset, + int format, int interleave_chroma, + int index) +{ + struct gen7_surface_state2 *ss2; + dri_bo *ss2_bo; + unsigned int tiling; + unsigned int swizzle; + + dri_bo_get_tiling(surf_bo, &tiling, &swizzle); + ss2_bo = pp_context->surface_state_binding_table.bo; + assert(ss2_bo); + + dri_bo_map(ss2_bo, True); + assert(ss2_bo->virtual); + ss2 = (struct gen7_surface_state2 *)((char *)ss2_bo->virtual + SURFACE_STATE_OFFSET(index)); + memset(ss2, 0, sizeof(*ss2)); + ss2->ss0.surface_base_address = surf_bo->offset + surf_bo_offset; + ss2->ss1.cbcr_pixel_offset_v_direction = 0; + ss2->ss1.width = width - 1; + ss2->ss1.height = height - 1; + ss2->ss2.pitch = wpitch - 1; + ss2->ss2.interleave_chroma = interleave_chroma; + ss2->ss2.surface_format = format; + ss2->ss3.x_offset_for_cb = xoffset; + ss2->ss3.y_offset_for_cb = yoffset; + gen7_pp_set_surface2_tiling(ss2, tiling); + dri_bo_emit_reloc(ss2_bo, + I915_GEM_DOMAIN_RENDER, 0, + surf_bo_offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen7_surface_state2, ss0), + surf_bo); + ((unsigned int *)((char *)ss2_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss2_bo); +} + +static void +pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *surface, + int base_index, int is_target, + int *width, int *height, int *pitch, int *offset) +{ + struct object_surface *obj_surface; + struct object_image *obj_image; + dri_bo *bo; + int fourcc = pp_get_surface_fourcc(ctx, surface); + const int Y = 0; + const int U = ((fourcc == VA_FOURCC_YV12) || + (fourcc == VA_FOURCC_YV16)) + ? 2 : 1; + const int V = ((fourcc == VA_FOURCC_YV12) || + (fourcc == VA_FOURCC_YV16)) + ? 1 : 2; + const int UV = 1; + int interleaved_uv = fourcc == VA_FOURCC_NV12; + int packed_yuv = (fourcc == VA_FOURCC_YUY2 || fourcc == VA_FOURCC_UYVY); + int full_packed_format = (fourcc == VA_FOURCC_RGBA || + fourcc == VA_FOURCC_RGBX || + fourcc == VA_FOURCC_BGRA || + fourcc == VA_FOURCC_BGRX); + int scale_factor_of_1st_plane_width_in_byte = 1; + + if (surface->type == I965_SURFACE_TYPE_SURFACE) { + obj_surface = (struct object_surface *)surface->base; + bo = obj_surface->bo; + width[0] = obj_surface->orig_width; + height[0] = obj_surface->orig_height; + pitch[0] = obj_surface->width; + offset[0] = 0; + + if (full_packed_format) { + scale_factor_of_1st_plane_width_in_byte = 4; + } + else if (packed_yuv ) { + scale_factor_of_1st_plane_width_in_byte = 2; + } + else if (interleaved_uv) { + width[1] = obj_surface->orig_width; + height[1] = obj_surface->orig_height / 2; + pitch[1] = obj_surface->width; + offset[1] = offset[0] + obj_surface->width * obj_surface->height; + } else { + width[1] = obj_surface->orig_width / 2; + height[1] = obj_surface->orig_height / 2; + pitch[1] = obj_surface->width / 2; + offset[1] = offset[0] + obj_surface->width * obj_surface->height; + width[2] = obj_surface->orig_width / 2; + height[2] = obj_surface->orig_height / 2; + pitch[2] = obj_surface->width / 2; + offset[2] = offset[1] + (obj_surface->width / 2) * (obj_surface->height / 2); + } + } else { + obj_image = (struct object_image *)surface->base; + bo = obj_image->bo; + width[0] = obj_image->image.width; + height[0] = obj_image->image.height; + pitch[0] = obj_image->image.pitches[0]; + offset[0] = obj_image->image.offsets[0]; + + if (full_packed_format) { + scale_factor_of_1st_plane_width_in_byte = 4; + } + else if (packed_yuv ) { + scale_factor_of_1st_plane_width_in_byte = 2; + } + else if (interleaved_uv) { + width[1] = obj_image->image.width; + height[1] = obj_image->image.height / 2; + pitch[1] = obj_image->image.pitches[1]; + offset[1] = obj_image->image.offsets[1]; + } else { + width[1] = obj_image->image.width / 2; + height[1] = obj_image->image.height / 2; + pitch[1] = obj_image->image.pitches[1]; + offset[1] = obj_image->image.offsets[1]; + width[2] = obj_image->image.width / 2; + height[2] = obj_image->image.height / 2; + pitch[2] = obj_image->image.pitches[2]; + offset[2] = obj_image->image.offsets[2]; + if (fourcc == VA_FOURCC_YV16) { + width[1] = obj_image->image.width / 2; + height[1] = obj_image->image.height; + width[2] = obj_image->image.width / 2; + height[2] = obj_image->image.height; + } + } + } + + /* Y surface */ + i965_pp_set_surface_state(ctx, pp_context, + bo, offset[Y], + ALIGN(width[Y] *scale_factor_of_1st_plane_width_in_byte, 4) / 4, height[Y], pitch[Y], I965_SURFACEFORMAT_R8_UNORM, + base_index, is_target); + + if (!packed_yuv && !full_packed_format) { + if (interleaved_uv) { + i965_pp_set_surface_state(ctx, pp_context, + bo, offset[UV], + ALIGN(width[UV], 4) / 4, height[UV], pitch[UV], I965_SURFACEFORMAT_R8_UNORM, + base_index + 1, is_target); + } else { + /* U surface */ + i965_pp_set_surface_state(ctx, pp_context, + bo, offset[U], + ALIGN(width[U], 4) / 4, height[U], pitch[U], I965_SURFACEFORMAT_R8_UNORM, + base_index + 1, is_target); + + /* V surface */ + i965_pp_set_surface_state(ctx, pp_context, + bo, offset[V], + ALIGN(width[V], 4) / 4, height[V], pitch[V], I965_SURFACEFORMAT_R8_UNORM, + base_index + 2, is_target); + } + } + +} + +static void +gen7_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *surface, + int base_index, int is_target, + const VARectangle *rect, + int *width, int *height, int *pitch, int *offset) +{ + struct object_surface *obj_surface; + struct object_image *obj_image; + dri_bo *bo; + int fourcc = pp_get_surface_fourcc(ctx, surface); + const i965_fourcc_info *fourcc_info = get_fourcc_info(fourcc); + + if (fourcc_info == NULL) + return; + + if (surface->type == I965_SURFACE_TYPE_SURFACE) { + obj_surface = (struct object_surface *)surface->base; + bo = obj_surface->bo; + width[0] = MIN(rect->x + rect->width, obj_surface->orig_width); + height[0] = MIN(rect->y + rect->height, obj_surface->orig_height); + pitch[0] = obj_surface->width; + offset[0] = 0; + + if (fourcc_info->num_planes == 1 && is_target) + width[0] = width[0] * (fourcc_info->bpp[0] / 8); /* surface format is R8 */ + + width[1] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_surface->cb_cr_width); + height[1] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_surface->cb_cr_height); + pitch[1] = obj_surface->cb_cr_pitch; + offset[1] = obj_surface->y_cb_offset * obj_surface->width; + + width[2] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_surface->cb_cr_width); + height[2] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_surface->cb_cr_height); + pitch[2] = obj_surface->cb_cr_pitch; + offset[2] = obj_surface->y_cr_offset * obj_surface->width; + } else { + int U = 0, V = 0; + + /* FIXME: add support for ARGB/ABGR image */ + obj_image = (struct object_image *)surface->base; + bo = obj_image->bo; + width[0] = MIN(rect->x + rect->width, obj_image->image.width); + height[0] = MIN(rect->y + rect->height, obj_image->image.height); + pitch[0] = obj_image->image.pitches[0]; + offset[0] = obj_image->image.offsets[0]; + + if (fourcc_info->num_planes == 1) { + if (is_target) + width[0] = width[0] * (fourcc_info->bpp[0] / 8); /* surface format is R8 */ + } else if (fourcc_info->num_planes == 2) { + U = 1, V = 1; + } else { + assert(fourcc_info->num_components == 3); + + U = fourcc_info->components[1].plane; + V = fourcc_info->components[2].plane; + assert((U == 1 && V == 2) || + (U == 2 && V == 1)); + } + + /* Always set width/height although they aren't used for fourcc_info->num_planes == 1 */ + width[1] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_image->image.width / fourcc_info->hfactor); + height[1] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_image->image.height / fourcc_info->vfactor); + pitch[1] = obj_image->image.pitches[U]; + offset[1] = obj_image->image.offsets[U]; + + width[2] = MIN(rect->x / fourcc_info->hfactor + rect->width / fourcc_info->hfactor, obj_image->image.width / fourcc_info->hfactor); + height[2] = MIN(rect->y / fourcc_info->vfactor + rect->height / fourcc_info->vfactor, obj_image->image.height / fourcc_info->vfactor); + pitch[2] = obj_image->image.pitches[V]; + offset[2] = obj_image->image.offsets[V]; + } + + if (is_target) { + gen7_pp_set_surface_state(ctx, pp_context, + bo, 0, + ALIGN(width[0], 4) / 4, height[0], pitch[0], + I965_SURFACEFORMAT_R8_UINT, + base_index, 1); + + if (fourcc_info->num_planes == 2) { + gen7_pp_set_surface_state(ctx, pp_context, + bo, offset[1], + ALIGN(width[1], 2) / 2, height[1], pitch[1], + I965_SURFACEFORMAT_R8G8_SINT, + base_index + 1, 1); + } else if (fourcc_info->num_planes == 3) { + gen7_pp_set_surface_state(ctx, pp_context, + bo, offset[1], + ALIGN(width[1], 4) / 4, height[1], pitch[1], + I965_SURFACEFORMAT_R8_SINT, + base_index + 1, 1); + gen7_pp_set_surface_state(ctx, pp_context, + bo, offset[2], + ALIGN(width[2], 4) / 4, height[2], pitch[2], + I965_SURFACEFORMAT_R8_SINT, + base_index + 2, 1); + } + + if (fourcc_info->format == I965_COLOR_RGB) { + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + /* the format is MSB: X-B-G-R */ + pp_static_parameter->grf2.save_avs_rgb_swap = 0; + if ((fourcc == VA_FOURCC_BGRA) || + (fourcc == VA_FOURCC_BGRX)) { + /* It is stored as MSB: X-R-G-B */ + pp_static_parameter->grf2.save_avs_rgb_swap = 1; + } + } + } else { + int format0 = SURFACE_FORMAT_Y8_UNORM; + + switch (fourcc) { + case VA_FOURCC_YUY2: + format0 = SURFACE_FORMAT_YCRCB_NORMAL; + break; + + case VA_FOURCC_UYVY: + format0 = SURFACE_FORMAT_YCRCB_SWAPY; + break; + + default: + break; + } + + if (fourcc_info->format == I965_COLOR_RGB) { + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + /* Only R8G8B8A8_UNORM is supported for BGRX or RGBX */ + format0 = SURFACE_FORMAT_R8G8B8A8_UNORM; + pp_static_parameter->grf2.src_avs_rgb_swap = 0; + if ((fourcc == VA_FOURCC_BGRA) || + (fourcc == VA_FOURCC_BGRX)) { + pp_static_parameter->grf2.src_avs_rgb_swap = 1; + } + } + + gen7_pp_set_surface2_state(ctx, pp_context, + bo, offset[0], + width[0], height[0], pitch[0], + 0, 0, + format0, 0, + base_index); + + if (fourcc_info->num_planes == 2) { + gen7_pp_set_surface2_state(ctx, pp_context, + bo, offset[1], + width[1], height[1], pitch[1], + 0, 0, + SURFACE_FORMAT_R8B8_UNORM, 0, + base_index + 1); + } else if (fourcc_info->num_planes == 3) { + gen7_pp_set_surface2_state(ctx, pp_context, + bo, offset[1], + width[1], height[1], pitch[1], + 0, 0, + SURFACE_FORMAT_R8_UNORM, 0, + base_index + 1); + gen7_pp_set_surface2_state(ctx, pp_context, + bo, offset[2], + width[2], height[2], pitch[2], + 0, 0, + SURFACE_FORMAT_R8_UNORM, 0, + base_index + 2); + } + } +} + +static int +pp_null_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_null_y_steps(void *private_context) +{ + return 1; +} + +static int +pp_null_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + return 0; +} + +static VAStatus +pp_null_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + /* private function & data */ + pp_context->pp_x_steps = pp_null_x_steps; + pp_context->pp_y_steps = pp_null_y_steps; + pp_context->private_context = NULL; + pp_context->pp_set_block_parameter = pp_null_set_block_parameter; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static int +pp_load_save_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_load_save_y_steps(void *private_context) +{ + struct pp_load_save_context *pp_load_save_context = private_context; + + return pp_load_save_context->dest_h / 8; +} + +static int +pp_load_save_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_load_save_context *pp_load_save_context = (struct pp_load_save_context *)pp_context->private_context; + + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16 + pp_load_save_context->dest_x; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 8 + pp_load_save_context->dest_y; + + return 0; +} + +static void calculate_boundary_block_mask(struct i965_post_processing_context *pp_context, const VARectangle *dst_rect) +{ + int i; + /* x offset of dest surface must be dword aligned. + * so we have to extend dst surface on left edge, and mask out pixels not interested + */ + if (dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT) { + pp_context->block_horizontal_mask_left = 0; + for (i=dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; iblock_horizontal_mask_left |= 1<block_horizontal_mask_left = 0xffff; + } + + int dst_width_adjust = dst_rect->width + dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + if (dst_width_adjust%GPU_ASM_BLOCK_WIDTH){ + pp_context->block_horizontal_mask_right = (1 << (dst_width_adjust%GPU_ASM_BLOCK_WIDTH)) - 1; + } + else { + pp_context->block_horizontal_mask_right = 0xffff; + } + + if (dst_rect->height%GPU_ASM_BLOCK_HEIGHT){ + pp_context->block_vertical_mask_bottom = (1 << (dst_rect->height%GPU_ASM_BLOCK_HEIGHT)) - 1; + } + else { + pp_context->block_vertical_mask_bottom = 0xff; + } + +} +static VAStatus +pp_plx_load_save_plx_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_load_save_context *pp_load_save_context = (struct pp_load_save_context *)&pp_context->pp_load_save_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + int width[3], height[3], pitch[3], offset[3]; + + /* source surface */ + pp_set_media_rw_message_surface(ctx, pp_context, src_surface, 1, 0, + width, height, pitch, offset); + + /* destination surface */ + pp_set_media_rw_message_surface(ctx, pp_context, dst_surface, 7, 1, + width, height, pitch, offset); + + /* private function & data */ + pp_context->pp_x_steps = pp_load_save_x_steps; + pp_context->pp_y_steps = pp_load_save_y_steps; + pp_context->private_context = &pp_context->pp_load_save_context; + pp_context->pp_set_block_parameter = pp_load_save_set_block_parameter; + + int dst_left_edge_extend = dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT;; + pp_load_save_context->dest_x = dst_rect->x - dst_left_edge_extend; + pp_load_save_context->dest_y = dst_rect->y; + pp_load_save_context->dest_h = ALIGN(dst_rect->height, 8); + pp_load_save_context->dest_w = ALIGN(dst_rect->width+dst_left_edge_extend, 16); + + pp_inline_parameter->grf5.block_count_x = pp_load_save_context->dest_w / 16; /* 1 x N */ + pp_inline_parameter->grf5.number_blocks = pp_load_save_context->dest_w / 16; + + pp_static_parameter->grf3.horizontal_origin_offset = src_rect->x; + pp_static_parameter->grf3.vertical_origin_offset = src_rect->y; + + // update u/v offset for packed yuv + i965_update_src_surface_static_parameter (ctx, pp_context, src_surface); + i965_update_dst_surface_static_parameter (ctx, pp_context, dst_surface); + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static int +pp_scaling_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_scaling_y_steps(void *private_context) +{ + struct pp_scaling_context *pp_scaling_context = private_context; + + return pp_scaling_context->dest_h / 8; +} + +static int +pp_scaling_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_scaling_context *pp_scaling_context = (struct pp_scaling_context *)pp_context->private_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + float src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + float src_y_steping = pp_static_parameter->grf1.r1_6.normalized_video_y_scaling_step; + + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin = src_x_steping * x * 16 + pp_scaling_context->src_normalized_x; + pp_inline_parameter->grf5.source_surface_block_normalized_vertical_origin = src_y_steping * y * 8 + pp_scaling_context->src_normalized_y; + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16 + pp_scaling_context->dest_x; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 8 + pp_scaling_context->dest_y; + + return 0; +} + +static VAStatus +pp_nv12_scaling_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_scaling_context *pp_scaling_context = (struct pp_scaling_context *)&pp_context->pp_scaling_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct object_surface *obj_surface; + struct i965_sampler_state *sampler_state; + int in_w, in_h, in_wpitch, in_hpitch; + int out_w, out_h, out_wpitch, out_hpitch; + + /* source surface */ + obj_surface = (struct object_surface *)src_surface->base; + in_w = obj_surface->orig_width; + in_h = obj_surface->orig_height; + in_wpitch = obj_surface->width; + in_hpitch = obj_surface->height; + + /* source Y surface index 1 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, 0, + in_w, in_h, in_wpitch, I965_SURFACEFORMAT_R8_UNORM, + 1, 0); + + /* source UV surface index 2 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, in_wpitch * in_hpitch, + ALIGN(in_w, 2) / 2, in_h / 2, in_wpitch, I965_SURFACEFORMAT_R8G8_UNORM, + 2, 0); + + /* destination surface */ + obj_surface = (struct object_surface *)dst_surface->base; + out_w = obj_surface->orig_width; + out_h = obj_surface->orig_height; + out_wpitch = obj_surface->width; + out_hpitch = obj_surface->height; + + /* destination Y surface index 7 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, 0, + ALIGN(out_w, 4) / 4, out_h, out_wpitch, I965_SURFACEFORMAT_R8_UNORM, + 7, 1); + + /* destination UV surface index 8 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, out_wpitch * out_hpitch, + ALIGN(out_w, 4) / 4, out_h / 2, out_wpitch, I965_SURFACEFORMAT_R8G8_UNORM, + 8, 1); + + /* sampler state */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + sampler_state = pp_context->sampler_state_table.bo->virtual; + + /* SIMD16 Y index 1 */ + sampler_state[1].ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state[1].ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state[1].ss1.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state[1].ss1.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state[1].ss1.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + + /* SIMD16 UV index 2 */ + sampler_state[2].ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state[2].ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state[2].ss1.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state[2].ss1.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state[2].ss1.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = pp_scaling_x_steps; + pp_context->pp_y_steps = pp_scaling_y_steps; + pp_context->private_context = &pp_context->pp_scaling_context; + pp_context->pp_set_block_parameter = pp_scaling_set_block_parameter; + + int dst_left_edge_extend = dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + float src_left_edge_extend = (float)dst_left_edge_extend*src_rect->width/dst_rect->width; + pp_scaling_context->dest_x = dst_rect->x - dst_left_edge_extend; + pp_scaling_context->dest_y = dst_rect->y; + pp_scaling_context->dest_w = ALIGN(dst_rect->width + dst_left_edge_extend, 16); + pp_scaling_context->dest_h = ALIGN(dst_rect->height, 8); + pp_scaling_context->src_normalized_x = (float)(src_rect->x - src_left_edge_extend)/ in_w; + pp_scaling_context->src_normalized_y = (float)src_rect->y / in_h; + + pp_static_parameter->grf1.r1_6.normalized_video_y_scaling_step = (float) src_rect->height / in_h / dst_rect->height; + + pp_inline_parameter->grf5.normalized_video_x_scaling_step = (float) (src_rect->width + src_left_edge_extend)/ in_w / (dst_rect->width + dst_left_edge_extend); + pp_inline_parameter->grf5.block_count_x = pp_scaling_context->dest_w / 16; /* 1 x N */ + pp_inline_parameter->grf5.number_blocks = pp_scaling_context->dest_w / 16; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static int +pp_avs_x_steps(void *private_context) +{ + struct pp_avs_context *pp_avs_context = private_context; + + return pp_avs_context->dest_w / 16; +} + +static int +pp_avs_y_steps(void *private_context) +{ + return 1; +} + +static int +pp_avs_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)pp_context->private_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + float src_x_steping, src_y_steping, video_step_delta; + int tmp_w = ALIGN(pp_avs_context->dest_h * pp_avs_context->src_w / pp_avs_context->src_h, 16); + + if (pp_static_parameter->grf4.r4_2.avs.nlas == 0) { + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin = src_x_steping * x * 16 + pp_avs_context->src_normalized_x; + } else if (tmp_w >= pp_avs_context->dest_w) { + pp_inline_parameter->grf5.normalized_video_x_scaling_step = 1.0 / tmp_w; + pp_inline_parameter->grf6.video_step_delta = 0; + + if (x == 0) { + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin = (float)(tmp_w - pp_avs_context->dest_w) / tmp_w / 2 + + pp_avs_context->src_normalized_x; + } else { + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + video_step_delta = pp_inline_parameter->grf6.video_step_delta; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin += src_x_steping * 16 + + 16 * 15 * video_step_delta / 2; + } + } else { + int n0, n1, n2, nls_left, nls_right; + int factor_a = 5, factor_b = 4; + float f; + + n0 = (pp_avs_context->dest_w - tmp_w) / (16 * 2); + n1 = (pp_avs_context->dest_w - tmp_w) / 16 - n0; + n2 = tmp_w / (16 * factor_a); + nls_left = n0 + n2; + nls_right = n1 + n2; + f = (float) n2 * 16 / tmp_w; + + if (n0 < 5) { + pp_inline_parameter->grf6.video_step_delta = 0.0; + + if (x == 0) { + pp_inline_parameter->grf5.normalized_video_x_scaling_step = 1.0 / pp_avs_context->dest_w; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin = pp_avs_context->src_normalized_x; + } else { + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + video_step_delta = pp_inline_parameter->grf6.video_step_delta; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin += src_x_steping * 16 + + 16 * 15 * video_step_delta / 2; + } + } else { + if (x < nls_left) { + /* f = a * nls_left * 16 + b * nls_left * 16 * (nls_left * 16 - 1) / 2 */ + float a = f / (nls_left * 16 * factor_b); + float b = (f - nls_left * 16 * a) * 2 / (nls_left * 16 * (nls_left * 16 - 1)); + + pp_inline_parameter->grf6.video_step_delta = b; + + if (x == 0) { + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin = pp_avs_context->src_normalized_x; + pp_inline_parameter->grf5.normalized_video_x_scaling_step = a; + } else { + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + video_step_delta = pp_inline_parameter->grf6.video_step_delta; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin += src_x_steping * 16 + + 16 * 15 * video_step_delta / 2; + pp_inline_parameter->grf5.normalized_video_x_scaling_step += 16 * b; + } + } else if (x < (pp_avs_context->dest_w / 16 - nls_right)) { + /* scale the center linearly */ + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + video_step_delta = pp_inline_parameter->grf6.video_step_delta; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin += src_x_steping * 16 + + 16 * 15 * video_step_delta / 2; + pp_inline_parameter->grf6.video_step_delta = 0.0; + pp_inline_parameter->grf5.normalized_video_x_scaling_step = 1.0 / tmp_w; + } else { + float a = f / (nls_right * 16 * factor_b); + float b = (f - nls_right * 16 * a) * 2 / (nls_right * 16 * (nls_right * 16 - 1)); + + src_x_steping = pp_inline_parameter->grf5.normalized_video_x_scaling_step; + video_step_delta = pp_inline_parameter->grf6.video_step_delta; + pp_inline_parameter->grf5.r5_1.source_surface_block_normalized_horizontal_origin += src_x_steping * 16 + + 16 * 15 * video_step_delta / 2; + pp_inline_parameter->grf6.video_step_delta = -b; + + if (x == (pp_avs_context->dest_w / 16 - nls_right)) + pp_inline_parameter->grf5.normalized_video_x_scaling_step = a + (nls_right * 16 - 1) * b; + else + pp_inline_parameter->grf5.normalized_video_x_scaling_step -= b * 16; + } + } + } + + src_y_steping = pp_static_parameter->grf1.r1_6.normalized_video_y_scaling_step; + pp_inline_parameter->grf5.source_surface_block_normalized_vertical_origin = src_y_steping * y * 8 + pp_avs_context->src_normalized_y; + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16 + pp_avs_context->dest_x; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 8 + pp_avs_context->dest_y; + + return 0; +} + +static const AVSConfig gen5_avs_config = { + .coeff_frac_bits = 6, + .coeff_epsilon = 1.0f / (1U << 6), + .num_phases = 16, + .num_luma_coeffs = 8, + .num_chroma_coeffs = 4, + + .coeff_range = { + .lower_bound = { + .y_k_h = { -0.25f, -0.5f, -1, 0, 0, -1, -0.5f, -0.25f }, + .y_k_v = { -0.25f, -0.5f, -1, 0, 0, -1, -0.5f, -0.25f }, + .uv_k_h = { -1, 0, 0, -1 }, + .uv_k_v = { -1, 0, 0, -1 }, + }, + .upper_bound = { + .y_k_h = { 0.25f, 0.5f, 1, 2, 2, 1, 0.5f, 0.25f }, + .y_k_v = { 0.25f, 0.5f, 1, 2, 2, 1, 0.5f, 0.25f }, + .uv_k_h = { 1, 2, 2, 1 }, + .uv_k_v = { 1, 2, 2, 1 }, + }, + }, +}; + +static const AVSConfig gen6_avs_config = { + .coeff_frac_bits = 6, + .coeff_epsilon = 1.0f / (1U << 6), + .num_phases = 16, + .num_luma_coeffs = 8, + .num_chroma_coeffs = 4, + + .coeff_range = { + .lower_bound = { + .y_k_h = { -0.25f, -0.5f, -1, -2, -2, -1, -0.5f, -0.25f }, + .y_k_v = { -0.25f, -0.5f, -1, -2, -2, -1, -0.5f, -0.25f }, + .uv_k_h = { -1, 0, 0, -1 }, + .uv_k_v = { -1, 0, 0, -1 }, + }, + .upper_bound = { + .y_k_h = { 0.25f, 0.5f, 1, 2, 2, 1, 0.5f, 0.25f }, + .y_k_v = { 0.25f, 0.5f, 1, 2, 2, 1, 0.5f, 0.25f }, + .uv_k_h = { 1, 2, 2, 1 }, + .uv_k_v = { 1, 2, 2, 1 }, + }, + }, +}; + +static VAStatus +pp_nv12_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)&pp_context->pp_avs_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct object_surface *obj_surface; + struct i965_sampler_8x8 *sampler_8x8; + struct i965_sampler_8x8_state *sampler_8x8_state; + int index; + int in_w, in_h, in_wpitch, in_hpitch; + int out_w, out_h, out_wpitch, out_hpitch; + int i; + AVSState * const avs = &pp_avs_context->state; + float sx, sy; + + const int nlas = (pp_context->filter_flags & VA_FILTER_SCALING_MASK) == + VA_FILTER_SCALING_NL_ANAMORPHIC; + + /* surface */ + obj_surface = (struct object_surface *)src_surface->base; + in_w = obj_surface->orig_width; + in_h = obj_surface->orig_height; + in_wpitch = obj_surface->width; + in_hpitch = obj_surface->height; + + /* source Y surface index 1 */ + i965_pp_set_surface2_state(ctx, pp_context, + obj_surface->bo, 0, + in_w, in_h, in_wpitch, + 0, 0, + SURFACE_FORMAT_Y8_UNORM, 0, + 1); + + /* source UV surface index 2 */ + i965_pp_set_surface2_state(ctx, pp_context, + obj_surface->bo, in_wpitch * in_hpitch, + in_w / 2, in_h / 2, in_wpitch, + 0, 0, + SURFACE_FORMAT_R8B8_UNORM, 0, + 2); + + /* destination surface */ + obj_surface = (struct object_surface *)dst_surface->base; + out_w = obj_surface->orig_width; + out_h = obj_surface->orig_height; + out_wpitch = obj_surface->width; + out_hpitch = obj_surface->height; + assert(out_w <= out_wpitch && out_h <= out_hpitch); + + /* destination Y surface index 7 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, 0, + ALIGN(out_w, 4) / 4, out_h, out_wpitch, I965_SURFACEFORMAT_R8_UNORM, + 7, 1); + + /* destination UV surface index 8 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, out_wpitch * out_hpitch, + ALIGN(out_w, 4) / 4, out_h / 2, out_wpitch, I965_SURFACEFORMAT_R8G8_UNORM, + 8, 1); + + /* sampler 8x8 state */ + dri_bo_map(pp_context->sampler_state_table.bo_8x8, True); + assert(pp_context->sampler_state_table.bo_8x8->virtual); + assert(sizeof(*sampler_8x8_state) == sizeof(int) * 138); + sampler_8x8_state = pp_context->sampler_state_table.bo_8x8->virtual; + memset(sampler_8x8_state, 0, sizeof(*sampler_8x8_state)); + + sx = (float)dst_rect->width / src_rect->width; + sy = (float)dst_rect->height / src_rect->height; + avs_update_coefficients(avs, sx, sy, pp_context->filter_flags); + + assert(avs->config->num_phases == 16); + for (i = 0; i <= 16; i++) { + const AVSCoeffs * const coeffs = &avs->coeffs[i]; + + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c0 = + intel_format_convert(coeffs->y_k_h[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c1 = + intel_format_convert(coeffs->y_k_h[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c2 = + intel_format_convert(coeffs->y_k_h[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c3 = + intel_format_convert(coeffs->y_k_h[3], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c4 = + intel_format_convert(coeffs->y_k_h[4], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c5 = + intel_format_convert(coeffs->y_k_h[5], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c6 = + intel_format_convert(coeffs->y_k_h[6], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c7 = + intel_format_convert(coeffs->y_k_h[7], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw4.table_1x_filter_c2 = + intel_format_convert(coeffs->uv_k_h[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw4.table_1x_filter_c3 = + intel_format_convert(coeffs->uv_k_h[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw5.table_1x_filter_c4 = + intel_format_convert(coeffs->uv_k_h[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw5.table_1x_filter_c5 = + intel_format_convert(coeffs->uv_k_h[3], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c0 = + intel_format_convert(coeffs->y_k_v[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c1 = + intel_format_convert(coeffs->y_k_v[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c2 = + intel_format_convert(coeffs->y_k_v[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c3 = + intel_format_convert(coeffs->y_k_v[3], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c4 = + intel_format_convert(coeffs->y_k_v[4], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c5 = + intel_format_convert(coeffs->y_k_v[5], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c6 = + intel_format_convert(coeffs->y_k_v[6], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c7 = + intel_format_convert(coeffs->y_k_v[7], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw6.table_1y_filter_c2 = + intel_format_convert(coeffs->uv_k_v[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw6.table_1y_filter_c3 = + intel_format_convert(coeffs->uv_k_v[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw7.table_1y_filter_c4 = + intel_format_convert(coeffs->uv_k_v[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw7.table_1y_filter_c5 = + intel_format_convert(coeffs->uv_k_v[3], 1, 6, 1); + } + + /* Adaptive filter for all channels (DW4.15) */ + sampler_8x8_state->coefficients[0].dw4.table_1x_filter_c1 = 1U << 7; + + sampler_8x8_state->dw136.default_sharpness_level = + -avs_is_needed(pp_context->filter_flags); + sampler_8x8_state->dw137.ilk.bypass_y_adaptive_filtering = 1; + sampler_8x8_state->dw137.ilk.bypass_x_adaptive_filtering = 1; + dri_bo_unmap(pp_context->sampler_state_table.bo_8x8); + + /* sampler 8x8 */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_8x8) == sizeof(int) * 16); + sampler_8x8 = pp_context->sampler_state_table.bo->virtual; + + /* sample_8x8 Y index 1 */ + index = 1; + memset(&sampler_8x8[index], 0, sizeof(*sampler_8x8)); + sampler_8x8[index].dw0.avs_filter_type = AVS_FILTER_ADAPTIVE_8_TAP; + sampler_8x8[index].dw0.ief_bypass = 1; + sampler_8x8[index].dw0.ief_filter_type = IEF_FILTER_DETAIL; + sampler_8x8[index].dw0.ief_filter_size = IEF_FILTER_SIZE_5X5; + sampler_8x8[index].dw1.sampler_8x8_state_pointer = pp_context->sampler_state_table.bo_8x8->offset >> 5; + sampler_8x8[index].dw2.global_noise_estimation = 22; + sampler_8x8[index].dw2.strong_edge_threshold = 8; + sampler_8x8[index].dw2.weak_edge_threshold = 1; + sampler_8x8[index].dw3.strong_edge_weight = 7; + sampler_8x8[index].dw3.regular_weight = 2; + sampler_8x8[index].dw3.non_edge_weight = 0; + sampler_8x8[index].dw3.gain_factor = 40; + sampler_8x8[index].dw4.steepness_boost = 0; + sampler_8x8[index].dw4.steepness_threshold = 0; + sampler_8x8[index].dw4.mr_boost = 0; + sampler_8x8[index].dw4.mr_threshold = 5; + sampler_8x8[index].dw5.pwl1_point_1 = 4; + sampler_8x8[index].dw5.pwl1_point_2 = 12; + sampler_8x8[index].dw5.pwl1_point_3 = 16; + sampler_8x8[index].dw5.pwl1_point_4 = 26; + sampler_8x8[index].dw6.pwl1_point_5 = 40; + sampler_8x8[index].dw6.pwl1_point_6 = 160; + sampler_8x8[index].dw6.pwl1_r3_bias_0 = 127; + sampler_8x8[index].dw6.pwl1_r3_bias_1 = 98; + sampler_8x8[index].dw7.pwl1_r3_bias_2 = 88; + sampler_8x8[index].dw7.pwl1_r3_bias_3 = 64; + sampler_8x8[index].dw7.pwl1_r3_bias_4 = 44; + sampler_8x8[index].dw7.pwl1_r3_bias_5 = 0; + sampler_8x8[index].dw8.pwl1_r3_bias_6 = 0; + sampler_8x8[index].dw8.pwl1_r5_bias_0 = 3; + sampler_8x8[index].dw8.pwl1_r5_bias_1 = 32; + sampler_8x8[index].dw8.pwl1_r5_bias_2 = 32; + sampler_8x8[index].dw9.pwl1_r5_bias_3 = 58; + sampler_8x8[index].dw9.pwl1_r5_bias_4 = 100; + sampler_8x8[index].dw9.pwl1_r5_bias_5 = 108; + sampler_8x8[index].dw9.pwl1_r5_bias_6 = 88; + sampler_8x8[index].dw10.pwl1_r3_slope_0 = -116; + sampler_8x8[index].dw10.pwl1_r3_slope_1 = -20; + sampler_8x8[index].dw10.pwl1_r3_slope_2 = -96; + sampler_8x8[index].dw10.pwl1_r3_slope_3 = -32; + sampler_8x8[index].dw11.pwl1_r3_slope_4 = -50; + sampler_8x8[index].dw11.pwl1_r3_slope_5 = 0; + sampler_8x8[index].dw11.pwl1_r3_slope_6 = 0; + sampler_8x8[index].dw11.pwl1_r5_slope_0 = 116; + sampler_8x8[index].dw12.pwl1_r5_slope_1 = 0; + sampler_8x8[index].dw12.pwl1_r5_slope_2 = 114; + sampler_8x8[index].dw12.pwl1_r5_slope_3 = 67; + sampler_8x8[index].dw12.pwl1_r5_slope_4 = 9; + sampler_8x8[index].dw13.pwl1_r5_slope_5 = -3; + sampler_8x8[index].dw13.pwl1_r5_slope_6 = -15; + sampler_8x8[index].dw13.limiter_boost = 0; + sampler_8x8[index].dw13.minimum_limiter = 10; + sampler_8x8[index].dw13.maximum_limiter = 11; + sampler_8x8[index].dw14.clip_limiter = 130; + dri_bo_emit_reloc(pp_context->sampler_state_table.bo, + I915_GEM_DOMAIN_RENDER, + 0, + 0, + sizeof(*sampler_8x8) * index + offsetof(struct i965_sampler_8x8, dw1), + pp_context->sampler_state_table.bo_8x8); + + /* sample_8x8 UV index 2 */ + index = 2; + memset(&sampler_8x8[index], 0, sizeof(*sampler_8x8)); + sampler_8x8[index].dw0.avs_filter_type = AVS_FILTER_ADAPTIVE_8_TAP; + sampler_8x8[index].dw0.ief_bypass = 1; + sampler_8x8[index].dw0.ief_filter_type = IEF_FILTER_DETAIL; + sampler_8x8[index].dw0.ief_filter_size = IEF_FILTER_SIZE_5X5; + sampler_8x8[index].dw1.sampler_8x8_state_pointer = pp_context->sampler_state_table.bo_8x8->offset >> 5; + sampler_8x8[index].dw2.global_noise_estimation = 22; + sampler_8x8[index].dw2.strong_edge_threshold = 8; + sampler_8x8[index].dw2.weak_edge_threshold = 1; + sampler_8x8[index].dw3.strong_edge_weight = 7; + sampler_8x8[index].dw3.regular_weight = 2; + sampler_8x8[index].dw3.non_edge_weight = 0; + sampler_8x8[index].dw3.gain_factor = 40; + sampler_8x8[index].dw4.steepness_boost = 0; + sampler_8x8[index].dw4.steepness_threshold = 0; + sampler_8x8[index].dw4.mr_boost = 0; + sampler_8x8[index].dw4.mr_threshold = 5; + sampler_8x8[index].dw5.pwl1_point_1 = 4; + sampler_8x8[index].dw5.pwl1_point_2 = 12; + sampler_8x8[index].dw5.pwl1_point_3 = 16; + sampler_8x8[index].dw5.pwl1_point_4 = 26; + sampler_8x8[index].dw6.pwl1_point_5 = 40; + sampler_8x8[index].dw6.pwl1_point_6 = 160; + sampler_8x8[index].dw6.pwl1_r3_bias_0 = 127; + sampler_8x8[index].dw6.pwl1_r3_bias_1 = 98; + sampler_8x8[index].dw7.pwl1_r3_bias_2 = 88; + sampler_8x8[index].dw7.pwl1_r3_bias_3 = 64; + sampler_8x8[index].dw7.pwl1_r3_bias_4 = 44; + sampler_8x8[index].dw7.pwl1_r3_bias_5 = 0; + sampler_8x8[index].dw8.pwl1_r3_bias_6 = 0; + sampler_8x8[index].dw8.pwl1_r5_bias_0 = 3; + sampler_8x8[index].dw8.pwl1_r5_bias_1 = 32; + sampler_8x8[index].dw8.pwl1_r5_bias_2 = 32; + sampler_8x8[index].dw9.pwl1_r5_bias_3 = 58; + sampler_8x8[index].dw9.pwl1_r5_bias_4 = 100; + sampler_8x8[index].dw9.pwl1_r5_bias_5 = 108; + sampler_8x8[index].dw9.pwl1_r5_bias_6 = 88; + sampler_8x8[index].dw10.pwl1_r3_slope_0 = -116; + sampler_8x8[index].dw10.pwl1_r3_slope_1 = -20; + sampler_8x8[index].dw10.pwl1_r3_slope_2 = -96; + sampler_8x8[index].dw10.pwl1_r3_slope_3 = -32; + sampler_8x8[index].dw11.pwl1_r3_slope_4 = -50; + sampler_8x8[index].dw11.pwl1_r3_slope_5 = 0; + sampler_8x8[index].dw11.pwl1_r3_slope_6 = 0; + sampler_8x8[index].dw11.pwl1_r5_slope_0 = 116; + sampler_8x8[index].dw12.pwl1_r5_slope_1 = 0; + sampler_8x8[index].dw12.pwl1_r5_slope_2 = 114; + sampler_8x8[index].dw12.pwl1_r5_slope_3 = 67; + sampler_8x8[index].dw12.pwl1_r5_slope_4 = 9; + sampler_8x8[index].dw13.pwl1_r5_slope_5 = -3; + sampler_8x8[index].dw13.pwl1_r5_slope_6 = -15; + sampler_8x8[index].dw13.limiter_boost = 0; + sampler_8x8[index].dw13.minimum_limiter = 10; + sampler_8x8[index].dw13.maximum_limiter = 11; + sampler_8x8[index].dw14.clip_limiter = 130; + dri_bo_emit_reloc(pp_context->sampler_state_table.bo, + I915_GEM_DOMAIN_RENDER, + 0, + 0, + sizeof(*sampler_8x8) * index + offsetof(struct i965_sampler_8x8, dw1), + pp_context->sampler_state_table.bo_8x8); + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = pp_avs_x_steps; + pp_context->pp_y_steps = pp_avs_y_steps; + pp_context->private_context = &pp_context->pp_avs_context; + pp_context->pp_set_block_parameter = pp_avs_set_block_parameter; + + int dst_left_edge_extend = dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + float src_left_edge_extend = (float)dst_left_edge_extend*src_rect->width/dst_rect->width; + pp_avs_context->dest_x = dst_rect->x - dst_left_edge_extend; + pp_avs_context->dest_y = dst_rect->y; + pp_avs_context->dest_w = ALIGN(dst_rect->width + dst_left_edge_extend, 16); + pp_avs_context->dest_h = ALIGN(dst_rect->height, 8); + pp_avs_context->src_normalized_x = (float)(src_rect->x - src_left_edge_extend)/ in_w; + pp_avs_context->src_normalized_y = (float)src_rect->y / in_h; + pp_avs_context->src_w = src_rect->width + src_left_edge_extend; + pp_avs_context->src_h = src_rect->height; + + pp_static_parameter->grf4.r4_2.avs.nlas = nlas; + pp_static_parameter->grf1.r1_6.normalized_video_y_scaling_step = (float) src_rect->height / in_h / dst_rect->height; + + pp_inline_parameter->grf5.normalized_video_x_scaling_step = (float) (src_rect->width + src_left_edge_extend)/ in_w / (dst_rect->width + dst_left_edge_extend); + pp_inline_parameter->grf5.block_count_x = 1; /* M x 1 */ + pp_inline_parameter->grf5.number_blocks = pp_avs_context->dest_h / 8; + pp_inline_parameter->grf6.video_step_delta = 0.0; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +gen6_nv12_scaling_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + return pp_nv12_avs_initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + filter_param); +} + +static int +gen7_pp_avs_x_steps(void *private_context) +{ + struct pp_avs_context *pp_avs_context = private_context; + + return pp_avs_context->dest_w / 16; +} + +static int +gen7_pp_avs_y_steps(void *private_context) +{ + struct pp_avs_context *pp_avs_context = private_context; + + return pp_avs_context->dest_h / 16; +} + +static int +gen7_pp_avs_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)pp_context->private_context; + struct gen7_pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf9.destination_block_horizontal_origin = x * 16 + pp_avs_context->dest_x; + pp_inline_parameter->grf9.destination_block_vertical_origin = y * 16 + pp_avs_context->dest_y; + pp_inline_parameter->grf9.constant_0 = 0xffffffff; + pp_inline_parameter->grf9.sampler_load_main_video_x_scaling_step = pp_avs_context->horiz_range / pp_avs_context->src_w; + + return 0; +} + +static void gen7_update_src_surface_uv_offset(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *surface) +{ + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + int fourcc = pp_get_surface_fourcc(ctx, surface); + + if (fourcc == VA_FOURCC_YUY2) { + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 3; + } else if (fourcc == VA_FOURCC_UYVY) { + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 2; + } +} + +static VAStatus +gen7_pp_plx_avs_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)&pp_context->pp_avs_context; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct gen7_sampler_8x8 *sampler_8x8; + struct i965_sampler_8x8_state *sampler_8x8_state; + int index, i; + int width[3], height[3], pitch[3], offset[3]; + int src_width, src_height; + AVSState * const avs = &pp_avs_context->state; + float sx, sy; + const float * yuv_to_rgb_coefs; + size_t yuv_to_rgb_coefs_size; + + /* source surface */ + gen7_pp_set_media_rw_message_surface(ctx, pp_context, src_surface, 0, 0, + src_rect, + width, height, pitch, offset); + src_width = width[0]; + src_height = height[0]; + + /* destination surface */ + gen7_pp_set_media_rw_message_surface(ctx, pp_context, dst_surface, 24, 1, + dst_rect, + width, height, pitch, offset); + + /* sampler 8x8 state */ + dri_bo_map(pp_context->sampler_state_table.bo_8x8, True); + assert(pp_context->sampler_state_table.bo_8x8->virtual); + assert(sizeof(*sampler_8x8_state) == sizeof(int) * 138); + sampler_8x8_state = pp_context->sampler_state_table.bo_8x8->virtual; + memset(sampler_8x8_state, 0, sizeof(*sampler_8x8_state)); + + sx = (float)dst_rect->width / src_rect->width; + sy = (float)dst_rect->height / src_rect->height; + avs_update_coefficients(avs, sx, sy, pp_context->filter_flags); + + assert(avs->config->num_phases == 16); + for (i = 0; i <= 16; i++) { + const AVSCoeffs * const coeffs = &avs->coeffs[i]; + + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c0 = + intel_format_convert(coeffs->y_k_h[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c1 = + intel_format_convert(coeffs->y_k_h[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c2 = + intel_format_convert(coeffs->y_k_h[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw0.table_0x_filter_c3 = + intel_format_convert(coeffs->y_k_h[3], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c4 = + intel_format_convert(coeffs->y_k_h[4], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c5 = + intel_format_convert(coeffs->y_k_h[5], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c6 = + intel_format_convert(coeffs->y_k_h[6], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw1.table_0x_filter_c7 = + intel_format_convert(coeffs->y_k_h[7], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw4.table_1x_filter_c2 = + intel_format_convert(coeffs->uv_k_h[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw4.table_1x_filter_c3 = + intel_format_convert(coeffs->uv_k_h[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw5.table_1x_filter_c4 = + intel_format_convert(coeffs->uv_k_h[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw5.table_1x_filter_c5 = + intel_format_convert(coeffs->uv_k_h[3], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c0 = + intel_format_convert(coeffs->y_k_v[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c1 = + intel_format_convert(coeffs->y_k_v[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c2 = + intel_format_convert(coeffs->y_k_v[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw2.table_0y_filter_c3 = + intel_format_convert(coeffs->y_k_v[3], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c4 = + intel_format_convert(coeffs->y_k_v[4], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c5 = + intel_format_convert(coeffs->y_k_v[5], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c6 = + intel_format_convert(coeffs->y_k_v[6], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw3.table_0y_filter_c7 = + intel_format_convert(coeffs->y_k_v[7], 1, 6, 1); + + sampler_8x8_state->coefficients[i].dw6.table_1y_filter_c2 = + intel_format_convert(coeffs->uv_k_v[0], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw6.table_1y_filter_c3 = + intel_format_convert(coeffs->uv_k_v[1], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw7.table_1y_filter_c4 = + intel_format_convert(coeffs->uv_k_v[2], 1, 6, 1); + sampler_8x8_state->coefficients[i].dw7.table_1y_filter_c5 = + intel_format_convert(coeffs->uv_k_v[3], 1, 6, 1); + } + + sampler_8x8_state->dw136.default_sharpness_level = + -avs_is_needed(pp_context->filter_flags); + if (IS_HASWELL(i965->intel.device_info)) { + sampler_8x8_state->dw137.hsw.adaptive_filter_for_all_channel = 1; + sampler_8x8_state->dw137.hsw.bypass_y_adaptive_filtering = 1; + sampler_8x8_state->dw137.hsw.bypass_x_adaptive_filtering = 1; + } + else { + sampler_8x8_state->coefficients[0].dw4.table_1x_filter_c1 = 1U << 7; + sampler_8x8_state->dw137.ilk.bypass_y_adaptive_filtering = 1; + sampler_8x8_state->dw137.ilk.bypass_x_adaptive_filtering = 1; + } + dri_bo_unmap(pp_context->sampler_state_table.bo_8x8); + + /* sampler 8x8 */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_8x8) == sizeof(int) * 4); + sampler_8x8 = pp_context->sampler_state_table.bo->virtual; + + /* sample_8x8 Y index 4 */ + index = 4; + memset(&sampler_8x8[index], 0, sizeof(*sampler_8x8)); + sampler_8x8[index].dw0.global_noise_estimation = 255; + sampler_8x8[index].dw0.ief_bypass = 1; + + sampler_8x8[index].dw1.sampler_8x8_state_pointer = pp_context->sampler_state_table.bo_8x8->offset >> 5; + + sampler_8x8[index].dw2.weak_edge_threshold = 1; + sampler_8x8[index].dw2.strong_edge_threshold = 8; + sampler_8x8[index].dw2.r5x_coefficient = 9; + sampler_8x8[index].dw2.r5cx_coefficient = 8; + sampler_8x8[index].dw2.r5c_coefficient = 3; + + sampler_8x8[index].dw3.r3x_coefficient = 27; + sampler_8x8[index].dw3.r3c_coefficient = 5; + sampler_8x8[index].dw3.gain_factor = 40; + sampler_8x8[index].dw3.non_edge_weight = 1; + sampler_8x8[index].dw3.regular_weight = 2; + sampler_8x8[index].dw3.strong_edge_weight = 7; + sampler_8x8[index].dw3.ief4_smooth_enable = 0; + + dri_bo_emit_reloc(pp_context->sampler_state_table.bo, + I915_GEM_DOMAIN_RENDER, + 0, + 0, + sizeof(*sampler_8x8) * index + offsetof(struct i965_sampler_8x8, dw1), + pp_context->sampler_state_table.bo_8x8); + + /* sample_8x8 UV index 8 */ + index = 8; + memset(&sampler_8x8[index], 0, sizeof(*sampler_8x8)); + sampler_8x8[index].dw0.disable_8x8_filter = 0; + sampler_8x8[index].dw0.global_noise_estimation = 255; + sampler_8x8[index].dw0.ief_bypass = 1; + sampler_8x8[index].dw1.sampler_8x8_state_pointer = pp_context->sampler_state_table.bo_8x8->offset >> 5; + sampler_8x8[index].dw2.weak_edge_threshold = 1; + sampler_8x8[index].dw2.strong_edge_threshold = 8; + sampler_8x8[index].dw2.r5x_coefficient = 9; + sampler_8x8[index].dw2.r5cx_coefficient = 8; + sampler_8x8[index].dw2.r5c_coefficient = 3; + sampler_8x8[index].dw3.r3x_coefficient = 27; + sampler_8x8[index].dw3.r3c_coefficient = 5; + sampler_8x8[index].dw3.gain_factor = 40; + sampler_8x8[index].dw3.non_edge_weight = 1; + sampler_8x8[index].dw3.regular_weight = 2; + sampler_8x8[index].dw3.strong_edge_weight = 7; + sampler_8x8[index].dw3.ief4_smooth_enable = 0; + + dri_bo_emit_reloc(pp_context->sampler_state_table.bo, + I915_GEM_DOMAIN_RENDER, + 0, + 0, + sizeof(*sampler_8x8) * index + offsetof(struct i965_sampler_8x8, dw1), + pp_context->sampler_state_table.bo_8x8); + + /* sampler_8x8 V, index 12 */ + index = 12; + memset(&sampler_8x8[index], 0, sizeof(*sampler_8x8)); + sampler_8x8[index].dw0.disable_8x8_filter = 0; + sampler_8x8[index].dw0.global_noise_estimation = 255; + sampler_8x8[index].dw0.ief_bypass = 1; + sampler_8x8[index].dw1.sampler_8x8_state_pointer = pp_context->sampler_state_table.bo_8x8->offset >> 5; + sampler_8x8[index].dw2.weak_edge_threshold = 1; + sampler_8x8[index].dw2.strong_edge_threshold = 8; + sampler_8x8[index].dw2.r5x_coefficient = 9; + sampler_8x8[index].dw2.r5cx_coefficient = 8; + sampler_8x8[index].dw2.r5c_coefficient = 3; + sampler_8x8[index].dw3.r3x_coefficient = 27; + sampler_8x8[index].dw3.r3c_coefficient = 5; + sampler_8x8[index].dw3.gain_factor = 40; + sampler_8x8[index].dw3.non_edge_weight = 1; + sampler_8x8[index].dw3.regular_weight = 2; + sampler_8x8[index].dw3.strong_edge_weight = 7; + sampler_8x8[index].dw3.ief4_smooth_enable = 0; + + dri_bo_emit_reloc(pp_context->sampler_state_table.bo, + I915_GEM_DOMAIN_RENDER, + 0, + 0, + sizeof(*sampler_8x8) * index + offsetof(struct i965_sampler_8x8, dw1), + pp_context->sampler_state_table.bo_8x8); + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = gen7_pp_avs_x_steps; + pp_context->pp_y_steps = gen7_pp_avs_y_steps; + pp_context->private_context = &pp_context->pp_avs_context; + pp_context->pp_set_block_parameter = gen7_pp_avs_set_block_parameter; + + int dst_left_edge_extend = dst_rect->x%GPU_ASM_X_OFFSET_ALIGNMENT; + pp_avs_context->dest_x = dst_rect->x - dst_left_edge_extend; + pp_avs_context->dest_y = dst_rect->y; + pp_avs_context->dest_w = ALIGN(dst_rect->width + dst_left_edge_extend, 16); + pp_avs_context->dest_h = ALIGN(dst_rect->height, 16); + pp_avs_context->src_w = src_rect->width; + pp_avs_context->src_h = src_rect->height; + pp_avs_context->horiz_range = (float)src_rect->width / src_width; + + int dw = (pp_avs_context->src_w - 1) / 16 + 1; + dw = MAX(dw, dst_rect->width + dst_left_edge_extend); + + pp_static_parameter->grf1.pointer_to_inline_parameter = 7; + pp_static_parameter->grf2.avs_wa_enable = 1; /* must be set for GEN7 */ + if (IS_HASWELL(i965->intel.device_info)) + pp_static_parameter->grf2.avs_wa_enable = 0; /* HSW don't use the WA */ + + if (pp_static_parameter->grf2.avs_wa_enable) { + int src_fourcc = pp_get_surface_fourcc(ctx, src_surface); + if ((src_fourcc == VA_FOURCC_RGBA) || + (src_fourcc == VA_FOURCC_RGBX) || + (src_fourcc == VA_FOURCC_BGRA) || + (src_fourcc == VA_FOURCC_BGRX)) { + pp_static_parameter->grf2.avs_wa_enable = 0; + } + } + + pp_static_parameter->grf2.avs_wa_width = src_width; + pp_static_parameter->grf2.avs_wa_one_div_256_width = (float) 1.0 / (256 * src_width); + pp_static_parameter->grf2.avs_wa_five_div_256_width = (float) 5.0 / (256 * src_width); + pp_static_parameter->grf2.alpha = 255; + + pp_static_parameter->grf3.sampler_load_horizontal_scaling_step_ratio = (float) pp_avs_context->src_w / dw; + pp_static_parameter->grf4.sampler_load_vertical_scaling_step = (float) src_rect->height / src_height / dst_rect->height; + pp_static_parameter->grf5.sampler_load_vertical_frame_origin = (float) src_rect->y / src_height - + (float) pp_avs_context->dest_y * pp_static_parameter->grf4.sampler_load_vertical_scaling_step; + pp_static_parameter->grf6.sampler_load_horizontal_frame_origin = (float) src_rect->x / src_width - + (float) pp_avs_context->dest_x * pp_avs_context->horiz_range / dw; + + gen7_update_src_surface_uv_offset(ctx, pp_context, dst_surface); + + yuv_to_rgb_coefs = i915_color_standard_to_coefs (i915_filter_to_color_standard (src_surface->flags & + VA_SRC_COLOR_MASK), + &yuv_to_rgb_coefs_size); + memcpy(&pp_static_parameter->grf7, yuv_to_rgb_coefs, yuv_to_rgb_coefs_size); + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static int +pp_dndi_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_dndi_y_steps(void *private_context) +{ + struct pp_dndi_context *pp_dndi_context = private_context; + + return pp_dndi_context->dest_h / 4; +} + +static int +pp_dndi_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 4; + + return 0; +} + +static VAStatus +pp_nv12_dndi_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_dndi_context * const dndi_ctx = &pp_context->pp_dndi_context; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + const VAProcPipelineParameterBuffer * const pipe_params = + pp_context->pipeline_param; + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + filter_param; + struct object_surface * const src_obj_surface = (struct object_surface *) + src_surface->base; + struct object_surface * const dst_obj_surface = (struct object_surface *) + dst_surface->base; + struct object_surface *obj_surface; + struct i965_sampler_dndi *sampler_dndi; + int index, dndi_top_first; + int w, h, orig_w, orig_h; + VAStatus status; + + status = pp_dndi_context_init_surface_params(dndi_ctx, src_obj_surface, + pipe_params, deint_params); + if (status != VA_STATUS_SUCCESS) + return status; + + status = pp_dndi_context_ensure_surfaces(ctx, pp_context, + src_obj_surface, dst_obj_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + status = pp_dndi_context_ensure_surfaces_storage(ctx, pp_context, + src_obj_surface, dst_obj_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + /* Current input surface (index = 4) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT].obj_surface; + i965_pp_set_surface2_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + 0, obj_surface->y_cb_offset, SURFACE_FORMAT_PLANAR_420_8, 1, 4); + + /* Previous input surface (index = 5) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_PREVIOUS].obj_surface; + i965_pp_set_surface2_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + 0, obj_surface->y_cb_offset, SURFACE_FORMAT_PLANAR_420_8, 1, 5); + + /* STMM input surface (index = 6) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_STMM].obj_surface; + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + I965_SURFACEFORMAT_R8_UNORM, 6, 1); + + /* Previous output surfaces (index = { 7, 8 }) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_PREVIOUS].obj_surface; + w = obj_surface->width; + h = obj_surface->height; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, 7, 1); + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, 8, 1); + + /* Current output surfaces (index = { 10, 11 }) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_CURRENT].obj_surface; + w = obj_surface->width; + h = obj_surface->height; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, 10, 1); + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, 11, 1); + + /* STMM output surface (index = 20) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_STMM].obj_surface; + i965_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + I965_SURFACEFORMAT_R8_UNORM, 20, 1); + + dndi_top_first = !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD); + + /* sampler dndi */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_dndi) == sizeof(int) * 8); + sampler_dndi = pp_context->sampler_state_table.bo->virtual; + + /* sample dndi index 1 */ + index = 0; + sampler_dndi[index].dw0.denoise_asd_threshold = 38; + sampler_dndi[index].dw0.denoise_history_delta = 7; // 0-15, default is 8 + sampler_dndi[index].dw0.denoise_maximum_history = 192; // 128-240 + sampler_dndi[index].dw0.denoise_stad_threshold = 140; + + sampler_dndi[index].dw1.denoise_threshold_for_sum_of_complexity_measure = 38; + sampler_dndi[index].dw1.denoise_moving_pixel_threshold = 1; + sampler_dndi[index].dw1.stmm_c2 = 1; + sampler_dndi[index].dw1.low_temporal_difference_threshold = 0; + sampler_dndi[index].dw1.temporal_difference_threshold = 0; + + sampler_dndi[index].dw2.block_noise_estimate_noise_threshold = 20; // 0-31 + sampler_dndi[index].dw2.block_noise_estimate_edge_threshold = 1; // 0-15 + sampler_dndi[index].dw2.denoise_edge_threshold = 7; // 0-15 + sampler_dndi[index].dw2.good_neighbor_threshold = 12; // 0-63 + + sampler_dndi[index].dw3.maximum_stmm = 150; + sampler_dndi[index].dw3.multipler_for_vecm = 30; + sampler_dndi[index].dw3.blending_constant_across_time_for_small_values_of_stmm = 125; + sampler_dndi[index].dw3.blending_constant_across_time_for_large_values_of_stmm = 64; + sampler_dndi[index].dw3.stmm_blending_constant_select = 0; + + sampler_dndi[index].dw4.sdi_delta = 5; + sampler_dndi[index].dw4.sdi_threshold = 100; + sampler_dndi[index].dw4.stmm_output_shift = 5; // stmm_max - stmm_min = 2 ^ stmm_output_shift + sampler_dndi[index].dw4.stmm_shift_up = 1; + sampler_dndi[index].dw4.stmm_shift_down = 3; + sampler_dndi[index].dw4.minimum_stmm = 118; + + sampler_dndi[index].dw5.fmd_temporal_difference_threshold = 175; + sampler_dndi[index].dw5.sdi_fallback_mode_2_constant = 37; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t2_constant = 100; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t1_constant = 50; + + sampler_dndi[index].dw6.dn_enable = 1; + sampler_dndi[index].dw6.di_enable = 1; + sampler_dndi[index].dw6.di_partial = 0; + sampler_dndi[index].dw6.dndi_top_first = dndi_top_first; + sampler_dndi[index].dw6.dndi_stream_id = 0; + sampler_dndi[index].dw6.dndi_first_frame = dndi_ctx->is_first_frame; + sampler_dndi[index].dw6.progressive_dn = 0; + sampler_dndi[index].dw6.fmd_tear_threshold = 2; + sampler_dndi[index].dw6.fmd2_vertical_difference_threshold = 100; + sampler_dndi[index].dw6.fmd1_vertical_difference_threshold = 16; + + sampler_dndi[index].dw7.fmd_for_1st_field_of_current_frame = 0; + sampler_dndi[index].dw7.fmd_for_2nd_field_of_previous_frame = 0; + sampler_dndi[index].dw7.vdi_walker_enable = 0; + sampler_dndi[index].dw7.column_width_minus1 = w / 16; + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = pp_dndi_x_steps; + pp_context->pp_y_steps = pp_dndi_y_steps; + pp_context->private_context = dndi_ctx; + pp_context->pp_set_block_parameter = pp_dndi_set_block_parameter; + + pp_static_parameter->grf1.statistics_surface_picth = w / 2; + pp_static_parameter->grf1.r1_6.di.top_field_first = dndi_top_first; + pp_static_parameter->grf4.r4_2.di.motion_history_coefficient_m2 = 0; + pp_static_parameter->grf4.r4_2.di.motion_history_coefficient_m1 = 0; + + pp_inline_parameter->grf5.block_count_x = w / 16; /* 1 x N */ + pp_inline_parameter->grf5.number_blocks = w / 16; + pp_inline_parameter->grf5.block_vertical_mask = 0xff; + pp_inline_parameter->grf5.block_horizontal_mask = 0xffff; + + dndi_ctx->dest_w = w; + dndi_ctx->dest_h = h; + + dst_surface->flags = I965_SURFACE_FLAG_FRAME; + return VA_STATUS_SUCCESS; +} + +static int +pp_dn_x_steps(void *private_context) +{ + return 1; +} + +static int +pp_dn_y_steps(void *private_context) +{ + struct pp_dn_context *pp_dn_context = private_context; + + return pp_dn_context->dest_h / 8; +} + +static int +pp_dn_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 8; + + return 0; +} + +static VAStatus +pp_nv12_dn_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct pp_dn_context *pp_dn_context = (struct pp_dn_context *)&pp_context->pp_dn_context; + struct object_surface *obj_surface; + struct i965_sampler_dndi *sampler_dndi; + struct pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + VAProcFilterParameterBuffer *dn_filter_param = filter_param; /* FIXME: parameter */ + int index; + int w, h; + int orig_w, orig_h; + int dn_strength = 15; + int dndi_top_first = 1; + int dn_progressive = 0; + + if (src_surface->flags == I965_SURFACE_FLAG_FRAME) { + dndi_top_first = 1; + dn_progressive = 1; + } else if (src_surface->flags == I965_SURFACE_FLAG_TOP_FIELD_FIRST) { + dndi_top_first = 1; + dn_progressive = 0; + } else { + dndi_top_first = 0; + dn_progressive = 0; + } + + if (dn_filter_param) { + float value = dn_filter_param->value; + + if (value > 1.0) + value = 1.0; + + if (value < 0.0) + value = 0.0; + + dn_strength = (int)(value * 31.0F); + } + + /* surface */ + obj_surface = (struct object_surface *)src_surface->base; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + w = obj_surface->width; + h = obj_surface->height; + + if (pp_dn_context->stmm_bo == NULL) { + pp_dn_context->stmm_bo = dri_bo_alloc(i965->intel.bufmgr, + "STMM surface", + w * h, + 4096); + assert(pp_dn_context->stmm_bo); + } + + /* source UV surface index 2 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, + 2, 0); + + /* source YUV surface index 4 */ + i965_pp_set_surface2_state(ctx, pp_context, + obj_surface->bo, 0, + orig_w, orig_h, w, + 0, h, + SURFACE_FORMAT_PLANAR_420_8, 1, + 4); + + /* source STMM surface index 20 */ + i965_pp_set_surface_state(ctx, pp_context, + pp_dn_context->stmm_bo, 0, + orig_w, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, + 20, 1); + + /* destination surface */ + obj_surface = (struct object_surface *)dst_surface->base; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + w = obj_surface->width; + h = obj_surface->height; + + /* destination Y surface index 7 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, + 7, 1); + + /* destination UV surface index 8 */ + i965_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, + 8, 1); + /* sampler dn */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_dndi) == sizeof(int) * 8); + sampler_dndi = pp_context->sampler_state_table.bo->virtual; + + /* sample dndi index 1 */ + index = 0; + sampler_dndi[index].dw0.denoise_asd_threshold = 0; + sampler_dndi[index].dw0.denoise_history_delta = 8; // 0-15, default is 8 + sampler_dndi[index].dw0.denoise_maximum_history = 128; // 128-240 + sampler_dndi[index].dw0.denoise_stad_threshold = 0; + + sampler_dndi[index].dw1.denoise_threshold_for_sum_of_complexity_measure = 64; + sampler_dndi[index].dw1.denoise_moving_pixel_threshold = 0; + sampler_dndi[index].dw1.stmm_c2 = 0; + sampler_dndi[index].dw1.low_temporal_difference_threshold = 8; + sampler_dndi[index].dw1.temporal_difference_threshold = 16; + + sampler_dndi[index].dw2.block_noise_estimate_noise_threshold = dn_strength; // 0-31 + sampler_dndi[index].dw2.block_noise_estimate_edge_threshold = 7; // 0-15 + sampler_dndi[index].dw2.denoise_edge_threshold = 7; // 0-15 + sampler_dndi[index].dw2.good_neighbor_threshold = 7; // 0-63 + + sampler_dndi[index].dw3.maximum_stmm = 128; + sampler_dndi[index].dw3.multipler_for_vecm = 2; + sampler_dndi[index].dw3.blending_constant_across_time_for_small_values_of_stmm = 0; + sampler_dndi[index].dw3.blending_constant_across_time_for_large_values_of_stmm = 64; + sampler_dndi[index].dw3.stmm_blending_constant_select = 0; + + sampler_dndi[index].dw4.sdi_delta = 8; + sampler_dndi[index].dw4.sdi_threshold = 128; + sampler_dndi[index].dw4.stmm_output_shift = 7; // stmm_max - stmm_min = 2 ^ stmm_output_shift + sampler_dndi[index].dw4.stmm_shift_up = 0; + sampler_dndi[index].dw4.stmm_shift_down = 0; + sampler_dndi[index].dw4.minimum_stmm = 0; + + sampler_dndi[index].dw5.fmd_temporal_difference_threshold = 0; + sampler_dndi[index].dw5.sdi_fallback_mode_2_constant = 0; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t2_constant = 0; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t1_constant = 0; + + sampler_dndi[index].dw6.dn_enable = 1; + sampler_dndi[index].dw6.di_enable = 0; + sampler_dndi[index].dw6.di_partial = 0; + sampler_dndi[index].dw6.dndi_top_first = dndi_top_first; + sampler_dndi[index].dw6.dndi_stream_id = 1; + sampler_dndi[index].dw6.dndi_first_frame = 1; + sampler_dndi[index].dw6.progressive_dn = dn_progressive; + sampler_dndi[index].dw6.fmd_tear_threshold = 32; + sampler_dndi[index].dw6.fmd2_vertical_difference_threshold = 32; + sampler_dndi[index].dw6.fmd1_vertical_difference_threshold = 32; + + sampler_dndi[index].dw7.fmd_for_1st_field_of_current_frame = 2; + sampler_dndi[index].dw7.fmd_for_2nd_field_of_previous_frame = 1; + sampler_dndi[index].dw7.vdi_walker_enable = 0; + sampler_dndi[index].dw7.column_width_minus1 = w / 16; + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = pp_dn_x_steps; + pp_context->pp_y_steps = pp_dn_y_steps; + pp_context->private_context = &pp_context->pp_dn_context; + pp_context->pp_set_block_parameter = pp_dn_set_block_parameter; + + pp_static_parameter->grf1.statistics_surface_picth = w / 2; + pp_static_parameter->grf1.r1_6.di.top_field_first = 0; + pp_static_parameter->grf4.r4_2.di.motion_history_coefficient_m2 = 64; + pp_static_parameter->grf4.r4_2.di.motion_history_coefficient_m1 = 192; + + pp_inline_parameter->grf5.block_count_x = w / 16; /* 1 x N */ + pp_inline_parameter->grf5.number_blocks = w / 16; + pp_inline_parameter->grf5.block_vertical_mask = 0xff; + pp_inline_parameter->grf5.block_horizontal_mask = 0xffff; + + pp_dn_context->dest_w = w; + pp_dn_context->dest_h = h; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static int +gen7_pp_dndi_x_steps(void *private_context) +{ + struct pp_dndi_context *pp_dndi_context = private_context; + + return pp_dndi_context->dest_w / 16; +} + +static int +gen7_pp_dndi_y_steps(void *private_context) +{ + struct pp_dndi_context *pp_dndi_context = private_context; + + return pp_dndi_context->dest_h / 4; +} + +static int +gen7_pp_dndi_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct gen7_pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf9.destination_block_horizontal_origin = x * 16; + pp_inline_parameter->grf9.destination_block_vertical_origin = y * 4; + + return 0; +} + +static VAStatus +gen7_pp_nv12_dndi_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct pp_dndi_context * const dndi_ctx = &pp_context->pp_dndi_context; + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + const VAProcPipelineParameterBuffer * const pipe_params = + pp_context->pipeline_param; + const VAProcFilterParameterBufferDeinterlacing * const deint_params = + filter_param; + struct object_surface * const src_obj_surface = (struct object_surface *) + src_surface->base; + struct object_surface * const dst_obj_surface = (struct object_surface *) + dst_surface->base; + struct object_surface *obj_surface; + struct gen7_sampler_dndi *sampler_dndi; + int index, dndi_top_first; + int w, h, orig_w, orig_h; + VAStatus status; + + status = pp_dndi_context_init_surface_params(dndi_ctx, src_obj_surface, + pipe_params, deint_params); + if (status != VA_STATUS_SUCCESS) + return status; + + status = pp_dndi_context_ensure_surfaces(ctx, pp_context, + src_obj_surface, dst_obj_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + status = pp_dndi_context_ensure_surfaces_storage(ctx, pp_context, + src_obj_surface, dst_obj_surface); + if (status != VA_STATUS_SUCCESS) + return status; + + /* Current input surface (index = 3) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_CURRENT].obj_surface; + gen7_pp_set_surface2_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + 0, obj_surface->y_cb_offset, SURFACE_FORMAT_PLANAR_420_8, 1, 3); + + /* Previous input surface (index = 4) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_PREVIOUS].obj_surface; + gen7_pp_set_surface2_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + 0, obj_surface->y_cb_offset, SURFACE_FORMAT_PLANAR_420_8, 1, 4); + + /* STMM input surface (index = 5) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_IN_STMM].obj_surface; + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + I965_SURFACEFORMAT_R8_UNORM, 5, 1); + + /* Previous output surfaces (index = { 27, 28 }) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_PREVIOUS].obj_surface; + w = obj_surface->width; + h = obj_surface->height; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, 27, 1); + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, 28, 1); + + /* Current output surfaces (index = { 30, 31 }) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_CURRENT].obj_surface; + w = obj_surface->width; + h = obj_surface->height; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, 30, 1); + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, 31, 1); + + /* STMM output surface (index = 33) */ + obj_surface = dndi_ctx->frame_store[DNDI_FRAME_OUT_STMM].obj_surface; + gen7_pp_set_surface_state(ctx, pp_context, obj_surface->bo, 0, + obj_surface->orig_width, obj_surface->orig_height, obj_surface->width, + I965_SURFACEFORMAT_R8_UNORM, 33, 1); + + dndi_top_first = !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD); + + /* sampler dndi */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_dndi) == sizeof(int) * 8); + sampler_dndi = pp_context->sampler_state_table.bo->virtual; + + /* sample dndi index 0 */ + index = 0; + sampler_dndi[index].dw0.denoise_asd_threshold = 38; + sampler_dndi[index].dw0.dnmh_delt = 7; + sampler_dndi[index].dw0.vdi_walker_y_stride = 0; + sampler_dndi[index].dw0.vdi_walker_frame_sharing_enable = 0; + sampler_dndi[index].dw0.denoise_maximum_history = 192; // 128-240 + sampler_dndi[index].dw0.denoise_stad_threshold = 140; + + sampler_dndi[index].dw1.denoise_threshold_for_sum_of_complexity_measure = 38; + sampler_dndi[index].dw1.denoise_moving_pixel_threshold = 1; + sampler_dndi[index].dw1.stmm_c2 = 2; + sampler_dndi[index].dw1.low_temporal_difference_threshold = 0; + sampler_dndi[index].dw1.temporal_difference_threshold = 0; + + sampler_dndi[index].dw2.block_noise_estimate_noise_threshold = 20; // 0-31 + sampler_dndi[index].dw2.bne_edge_th = 1; + sampler_dndi[index].dw2.smooth_mv_th = 0; + sampler_dndi[index].dw2.sad_tight_th = 5; + sampler_dndi[index].dw2.cat_slope_minus1 = 9; + sampler_dndi[index].dw2.good_neighbor_th = 12; + + sampler_dndi[index].dw3.maximum_stmm = 150; + sampler_dndi[index].dw3.multipler_for_vecm = 30; + sampler_dndi[index].dw3.blending_constant_across_time_for_small_values_of_stmm = 125; + sampler_dndi[index].dw3.blending_constant_across_time_for_large_values_of_stmm = 64; + sampler_dndi[index].dw3.stmm_blending_constant_select = 0; + + sampler_dndi[index].dw4.sdi_delta = 5; + sampler_dndi[index].dw4.sdi_threshold = 100; + sampler_dndi[index].dw4.stmm_output_shift = 5; // stmm_max - stmm_min = 2 ^ stmm_output_shift + sampler_dndi[index].dw4.stmm_shift_up = 1; + sampler_dndi[index].dw4.stmm_shift_down = 3; + sampler_dndi[index].dw4.minimum_stmm = 118; + + sampler_dndi[index].dw5.fmd_temporal_difference_threshold = 175; + sampler_dndi[index].dw5.sdi_fallback_mode_2_constant = 37; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t2_constant = 100; + sampler_dndi[index].dw5.sdi_fallback_mode_1_t1_constant = 50; + sampler_dndi[index].dw6.dn_enable = 0; + sampler_dndi[index].dw6.di_enable = 1; + sampler_dndi[index].dw6.di_partial = 0; + sampler_dndi[index].dw6.dndi_top_first = dndi_top_first; + sampler_dndi[index].dw6.dndi_stream_id = 1; + sampler_dndi[index].dw6.dndi_first_frame = dndi_ctx->is_first_frame; + sampler_dndi[index].dw6.progressive_dn = 0; + sampler_dndi[index].dw6.mcdi_enable = + (deint_params->algorithm == VAProcDeinterlacingMotionCompensated); + sampler_dndi[index].dw6.fmd_tear_threshold = 2; + sampler_dndi[index].dw6.cat_th1 = 0; + sampler_dndi[index].dw6.fmd2_vertical_difference_threshold = 100; + sampler_dndi[index].dw6.fmd1_vertical_difference_threshold = 16; + + sampler_dndi[index].dw7.sad_tha = 5; + sampler_dndi[index].dw7.sad_thb = 10; + sampler_dndi[index].dw7.fmd_for_1st_field_of_current_frame = 0; + sampler_dndi[index].dw7.mc_pixel_consistency_th = 25; + sampler_dndi[index].dw7.fmd_for_2nd_field_of_previous_frame = 0; + sampler_dndi[index].dw7.vdi_walker_enable = 0; + sampler_dndi[index].dw7.neighborpixel_th = 10; + sampler_dndi[index].dw7.column_width_minus1 = w / 16; + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = gen7_pp_dndi_x_steps; + pp_context->pp_y_steps = gen7_pp_dndi_y_steps; + pp_context->private_context = dndi_ctx; + pp_context->pp_set_block_parameter = gen7_pp_dndi_set_block_parameter; + + pp_static_parameter->grf1.di_statistics_surface_pitch_div2 = w / 2; + pp_static_parameter->grf1.di_statistics_surface_height_div4 = h / 4; + pp_static_parameter->grf1.di_top_field_first = 0; + pp_static_parameter->grf1.pointer_to_inline_parameter = 7; + + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 3; + + pp_static_parameter->grf4.di_hoffset_svf_from_dvf = 0; + pp_static_parameter->grf4.di_voffset_svf_from_dvf = 0; + + dndi_ctx->dest_w = w; + dndi_ctx->dest_h = h; + + dst_surface->flags = I965_SURFACE_FLAG_FRAME; + return VA_STATUS_SUCCESS; +} + +static int +gen7_pp_dn_x_steps(void *private_context) +{ + struct pp_dn_context *pp_dn_context = private_context; + + return pp_dn_context->dest_w / 16; +} + +static int +gen7_pp_dn_y_steps(void *private_context) +{ + struct pp_dn_context *pp_dn_context = private_context; + + return pp_dn_context->dest_h / 4; +} + +static int +gen7_pp_dn_set_block_parameter(struct i965_post_processing_context *pp_context, int x, int y) +{ + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf5.destination_block_horizontal_origin = x * 16; + pp_inline_parameter->grf5.destination_block_vertical_origin = y * 4; + + return 0; +} + +static VAStatus +gen7_pp_nv12_dn_initialize(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct pp_dn_context *pp_dn_context = (struct pp_dn_context *)&pp_context->pp_dn_context; + struct gen7_pp_static_parameter *pp_static_parameter = pp_context->pp_static_parameter; + struct object_surface *obj_surface; + struct gen7_sampler_dndi *sampler_dn; + VAProcFilterParameterBuffer *dn_filter_param = filter_param; /* FIXME: parameter */ + int index; + int w, h; + int orig_w, orig_h; + int dn_strength = 15; + int dndi_top_first = 1; + int dn_progressive = 0; + + if (src_surface->flags == I965_SURFACE_FLAG_FRAME) { + dndi_top_first = 1; + dn_progressive = 1; + } else if (src_surface->flags == I965_SURFACE_FLAG_TOP_FIELD_FIRST) { + dndi_top_first = 1; + dn_progressive = 0; + } else { + dndi_top_first = 0; + dn_progressive = 0; + } + + if (dn_filter_param) { + float value = dn_filter_param->value; + + if (value > 1.0) + value = 1.0; + + if (value < 0.0) + value = 0.0; + + dn_strength = (int)(value * 31.0F); + } + + /* surface */ + obj_surface = (struct object_surface *)src_surface->base; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + w = obj_surface->width; + h = obj_surface->height; + + if (pp_dn_context->stmm_bo == NULL) { + pp_dn_context->stmm_bo= dri_bo_alloc(i965->intel.bufmgr, + "STMM surface", + w * h, + 4096); + assert(pp_dn_context->stmm_bo); + } + + /* source UV surface index 1 */ + gen7_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, + 1, 0); + + /* source YUV surface index 3 */ + gen7_pp_set_surface2_state(ctx, pp_context, + obj_surface->bo, 0, + orig_w, orig_h, w, + 0, h, + SURFACE_FORMAT_PLANAR_420_8, 1, + 3); + + /* source (temporal reference) YUV surface index 4 */ + gen7_pp_set_surface2_state(ctx, pp_context, + obj_surface->bo, 0, + orig_w, orig_h, w, + 0, h, + SURFACE_FORMAT_PLANAR_420_8, 1, + 4); + + /* STMM / History Statistics input surface, index 5 */ + gen7_pp_set_surface_state(ctx, pp_context, + pp_dn_context->stmm_bo, 0, + orig_w, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, + 33, 1); + + /* destination surface */ + obj_surface = (struct object_surface *)dst_surface->base; + orig_w = obj_surface->orig_width; + orig_h = obj_surface->orig_height; + w = obj_surface->width; + h = obj_surface->height; + + /* destination Y surface index 24 */ + gen7_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, 0, + ALIGN(orig_w, 4) / 4, orig_h, w, I965_SURFACEFORMAT_R8_UNORM, + 24, 1); + + /* destination UV surface index 25 */ + gen7_pp_set_surface_state(ctx, pp_context, + obj_surface->bo, w * h, + ALIGN(orig_w, 4) / 4, orig_h / 2, w, I965_SURFACEFORMAT_R8G8_UNORM, + 25, 1); + + /* sampler dn */ + dri_bo_map(pp_context->sampler_state_table.bo, True); + assert(pp_context->sampler_state_table.bo->virtual); + assert(sizeof(*sampler_dn) == sizeof(int) * 8); + sampler_dn = pp_context->sampler_state_table.bo->virtual; + + /* sample dn index 1 */ + index = 0; + sampler_dn[index].dw0.denoise_asd_threshold = 0; + sampler_dn[index].dw0.dnmh_delt = 8; + sampler_dn[index].dw0.vdi_walker_y_stride = 0; + sampler_dn[index].dw0.vdi_walker_frame_sharing_enable = 0; + sampler_dn[index].dw0.denoise_maximum_history = 128; // 128-240 + sampler_dn[index].dw0.denoise_stad_threshold = 0; + + sampler_dn[index].dw1.denoise_threshold_for_sum_of_complexity_measure = 64; + sampler_dn[index].dw1.denoise_moving_pixel_threshold = 0; + sampler_dn[index].dw1.stmm_c2 = 0; + sampler_dn[index].dw1.low_temporal_difference_threshold = 8; + sampler_dn[index].dw1.temporal_difference_threshold = 16; + + sampler_dn[index].dw2.block_noise_estimate_noise_threshold = dn_strength; // 0-31 + sampler_dn[index].dw2.bne_edge_th = 1; + sampler_dn[index].dw2.smooth_mv_th = 0; + sampler_dn[index].dw2.sad_tight_th = 5; + sampler_dn[index].dw2.cat_slope_minus1 = 9; + sampler_dn[index].dw2.good_neighbor_th = 4; + + sampler_dn[index].dw3.maximum_stmm = 128; + sampler_dn[index].dw3.multipler_for_vecm = 2; + sampler_dn[index].dw3.blending_constant_across_time_for_small_values_of_stmm = 0; + sampler_dn[index].dw3.blending_constant_across_time_for_large_values_of_stmm = 64; + sampler_dn[index].dw3.stmm_blending_constant_select = 0; + + sampler_dn[index].dw4.sdi_delta = 8; + sampler_dn[index].dw4.sdi_threshold = 128; + sampler_dn[index].dw4.stmm_output_shift = 7; // stmm_max - stmm_min = 2 ^ stmm_output_shift + sampler_dn[index].dw4.stmm_shift_up = 0; + sampler_dn[index].dw4.stmm_shift_down = 0; + sampler_dn[index].dw4.minimum_stmm = 0; + + sampler_dn[index].dw5.fmd_temporal_difference_threshold = 0; + sampler_dn[index].dw5.sdi_fallback_mode_2_constant = 0; + sampler_dn[index].dw5.sdi_fallback_mode_1_t2_constant = 0; + sampler_dn[index].dw5.sdi_fallback_mode_1_t1_constant = 0; + + sampler_dn[index].dw6.dn_enable = 1; + sampler_dn[index].dw6.di_enable = 0; + sampler_dn[index].dw6.di_partial = 0; + sampler_dn[index].dw6.dndi_top_first = dndi_top_first; + sampler_dn[index].dw6.dndi_stream_id = 1; + sampler_dn[index].dw6.dndi_first_frame = 1; + sampler_dn[index].dw6.progressive_dn = dn_progressive; + sampler_dn[index].dw6.mcdi_enable = 0; + sampler_dn[index].dw6.fmd_tear_threshold = 32; + sampler_dn[index].dw6.cat_th1 = 0; + sampler_dn[index].dw6.fmd2_vertical_difference_threshold = 32; + sampler_dn[index].dw6.fmd1_vertical_difference_threshold = 32; + + sampler_dn[index].dw7.sad_tha = 5; + sampler_dn[index].dw7.sad_thb = 10; + sampler_dn[index].dw7.fmd_for_1st_field_of_current_frame = 2; + sampler_dn[index].dw7.mc_pixel_consistency_th = 25; + sampler_dn[index].dw7.fmd_for_2nd_field_of_previous_frame = 1; + sampler_dn[index].dw7.vdi_walker_enable = 0; + sampler_dn[index].dw7.neighborpixel_th = 10; + sampler_dn[index].dw7.column_width_minus1 = w / 16; + + dri_bo_unmap(pp_context->sampler_state_table.bo); + + /* private function & data */ + pp_context->pp_x_steps = gen7_pp_dn_x_steps; + pp_context->pp_y_steps = gen7_pp_dn_y_steps; + pp_context->private_context = &pp_context->pp_dn_context; + pp_context->pp_set_block_parameter = gen7_pp_dn_set_block_parameter; + + pp_static_parameter->grf1.di_statistics_surface_pitch_div2 = w / 2; + pp_static_parameter->grf1.di_statistics_surface_height_div4 = h / 4; + pp_static_parameter->grf1.di_top_field_first = 0; + pp_static_parameter->grf1.pointer_to_inline_parameter = 7; + + pp_static_parameter->grf2.di_destination_packed_y_component_offset = 0; + pp_static_parameter->grf2.di_destination_packed_u_component_offset = 1; + pp_static_parameter->grf2.di_destination_packed_v_component_offset = 3; + + pp_static_parameter->grf4.di_hoffset_svf_from_dvf = 0; + pp_static_parameter->grf4.di_voffset_svf_from_dvf = 0; + + pp_dn_context->dest_w = w; + pp_dn_context->dest_h = h; + + dst_surface->flags = src_surface->flags; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +ironlake_pp_initialize( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param +) +{ + VAStatus va_status; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct pp_module *pp_module; + dri_bo *bo; + int static_param_size, inline_param_size; + + dri_bo_unreference(pp_context->surface_state_binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_PP_SURFACES, + 4096); + assert(bo); + pp_context->surface_state_binding_table.bo = bo; + + dri_bo_unreference(pp_context->curbe.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, + 4096); + assert(bo); + pp_context->curbe.bo = bo; + + dri_bo_unreference(pp_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface discriptor", + sizeof(struct i965_interface_descriptor), + 4096); + assert(bo); + pp_context->idrt.bo = bo; + pp_context->idrt.num_interface_descriptors = 0; + + dri_bo_unreference(pp_context->sampler_state_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler state table", + 4096, + 4096); + assert(bo); + dri_bo_map(bo, True); + memset(bo->virtual, 0, bo->size); + dri_bo_unmap(bo); + pp_context->sampler_state_table.bo = bo; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler 8x8 state ", + 4096, + 4096); + assert(bo); + pp_context->sampler_state_table.bo_8x8 = bo; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8_uv); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler 8x8 state ", + 4096, + 4096); + assert(bo); + pp_context->sampler_state_table.bo_8x8_uv = bo; + + dri_bo_unreference(pp_context->vfe_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vfe state", + sizeof(struct i965_vfe_state), + 4096); + assert(bo); + pp_context->vfe_state.bo = bo; + + static_param_size = sizeof(struct pp_static_parameter); + inline_param_size = sizeof(struct pp_inline_parameter); + + memset(pp_context->pp_static_parameter, 0, static_param_size); + memset(pp_context->pp_inline_parameter, 0, inline_param_size); + + assert(pp_index >= PP_NULL && pp_index < NUM_PP_MODULES); + pp_context->current_pp = pp_index; + pp_module = &pp_context->pp_modules[pp_index]; + + if (pp_module->initialize) + va_status = pp_module->initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + filter_param); + else + va_status = VA_STATUS_ERROR_UNIMPLEMENTED; + + return va_status; +} + +static VAStatus +ironlake_post_processing( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param +) +{ + VAStatus va_status; + + va_status = ironlake_pp_initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + pp_index, + filter_param); + + if (va_status == VA_STATUS_SUCCESS) { + ironlake_pp_states_setup(ctx, pp_context); + ironlake_pp_pipeline_setup(ctx, pp_context); + } + + return va_status; +} + +static VAStatus +gen6_pp_initialize( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param +) +{ + VAStatus va_status; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct pp_module *pp_module; + dri_bo *bo; + int static_param_size, inline_param_size; + + dri_bo_unreference(pp_context->surface_state_binding_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_PP_SURFACES, + 4096); + assert(bo); + pp_context->surface_state_binding_table.bo = bo; + + dri_bo_unreference(pp_context->curbe.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, + 4096); + assert(bo); + pp_context->curbe.bo = bo; + + dri_bo_unreference(pp_context->idrt.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "interface discriptor", + sizeof(struct gen6_interface_descriptor_data), + 4096); + assert(bo); + pp_context->idrt.bo = bo; + pp_context->idrt.num_interface_descriptors = 0; + + dri_bo_unreference(pp_context->sampler_state_table.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler state table", + 4096, + 4096); + assert(bo); + dri_bo_map(bo, True); + memset(bo->virtual, 0, bo->size); + dri_bo_unmap(bo); + pp_context->sampler_state_table.bo = bo; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler 8x8 state ", + 4096, + 4096); + assert(bo); + pp_context->sampler_state_table.bo_8x8 = bo; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8_uv); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler 8x8 state ", + 4096, + 4096); + assert(bo); + pp_context->sampler_state_table.bo_8x8_uv = bo; + + dri_bo_unreference(pp_context->vfe_state.bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vfe state", + sizeof(struct i965_vfe_state), + 4096); + assert(bo); + pp_context->vfe_state.bo = bo; + + if (IS_GEN7(i965->intel.device_info)) { + static_param_size = sizeof(struct gen7_pp_static_parameter); + inline_param_size = sizeof(struct gen7_pp_inline_parameter); + } else { + static_param_size = sizeof(struct pp_static_parameter); + inline_param_size = sizeof(struct pp_inline_parameter); + } + + memset(pp_context->pp_static_parameter, 0, static_param_size); + memset(pp_context->pp_inline_parameter, 0, inline_param_size); + + assert(pp_index >= PP_NULL && pp_index < NUM_PP_MODULES); + pp_context->current_pp = pp_index; + pp_module = &pp_context->pp_modules[pp_index]; + + if (pp_module->initialize) + va_status = pp_module->initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + filter_param); + else + va_status = VA_STATUS_ERROR_UNIMPLEMENTED; + + calculate_boundary_block_mask(pp_context, dst_rect); + + return va_status; +} + + +static void +gen6_pp_interface_descriptor_table(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct gen6_interface_descriptor_data *desc; + dri_bo *bo; + int pp_index = pp_context->current_pp; + + bo = pp_context->idrt.bo; + dri_bo_map(bo, True); + assert(bo->virtual); + desc = bo->virtual; + memset(desc, 0, sizeof(*desc)); + desc->desc0.kernel_start_pointer = + pp_context->pp_modules[pp_index].kernel.bo->offset >> 6; /* reloc */ + desc->desc1.single_program_flow = 1; + desc->desc1.floating_point_mode = FLOATING_POINT_IEEE_754; + desc->desc2.sampler_count = 1; /* 1 - 4 samplers used */ + desc->desc2.sampler_state_pointer = + pp_context->sampler_state_table.bo->offset >> 5; + desc->desc3.binding_table_entry_count = 0; + desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET >> 5); + desc->desc4.constant_urb_entry_read_offset = 0; + + if (IS_GEN7(i965->intel.device_info)) + desc->desc4.constant_urb_entry_read_length = 8; /* grf 1-8 */ + else + desc->desc4.constant_urb_entry_read_length = 4; /* grf 1-4 */ + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct gen6_interface_descriptor_data, desc0), + pp_context->pp_modules[pp_index].kernel.bo); + + dri_bo_emit_reloc(bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + desc->desc2.sampler_count << 2, + offsetof(struct gen6_interface_descriptor_data, desc2), + pp_context->sampler_state_table.bo); + + dri_bo_unmap(bo); + pp_context->idrt.num_interface_descriptors++; +} + +static void +gen6_pp_upload_constants(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + unsigned char *constant_buffer; + int param_size; + + assert(sizeof(struct pp_static_parameter) == 128); + assert(sizeof(struct gen7_pp_static_parameter) == 256); + + if (IS_GEN7(i965->intel.device_info)) + param_size = sizeof(struct gen7_pp_static_parameter); + else + param_size = sizeof(struct pp_static_parameter); + + dri_bo_map(pp_context->curbe.bo, 1); + assert(pp_context->curbe.bo->virtual); + constant_buffer = pp_context->curbe.bo->virtual; + memcpy(constant_buffer, pp_context->pp_static_parameter, param_size); + dri_bo_unmap(pp_context->curbe.bo); +} + +static void +gen6_pp_states_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + gen6_pp_interface_descriptor_table(ctx, pp_context); + gen6_pp_upload_constants(ctx, pp_context); +} + +static void +gen6_pp_pipeline_select(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); + ADVANCE_BATCH(batch); +} + +static void +gen6_pp_state_base_address(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 10); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (10 - 2)); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_RELOC(batch, pp_context->surface_state_binding_table.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); +} + +static void +gen6_pp_vfe_state(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_MEDIA_VFE_STATE | (8 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (pp_context->vfe_gpu_state.max_num_threads - 1) << 16 | + pp_context->vfe_gpu_state.num_urb_entries << 8); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + (pp_context->vfe_gpu_state.urb_entry_size) << 16 | + /* URB Entry Allocation Size, in 256 bits unit */ + (pp_context->vfe_gpu_state.curbe_allocation_size)); + /* CURBE Allocation Size, in 256 bits unit */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen6_pp_curbe_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + struct i965_driver_data *i965 = i965_driver_data(ctx); + int param_size; + + if (IS_GEN7(i965->intel.device_info)) + param_size = sizeof(struct gen7_pp_static_parameter); + else + param_size = sizeof(struct pp_static_parameter); + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + param_size); + OUT_RELOC(batch, + pp_context->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + ADVANCE_BATCH(batch); +} + +static void +gen6_interface_descriptor_load(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_MEDIA_INTERFACE_DESCRIPTOR_LOAD | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, + pp_context->idrt.num_interface_descriptors * sizeof(struct gen6_interface_descriptor_data)); + OUT_RELOC(batch, + pp_context->idrt.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + ADVANCE_BATCH(batch); +} + +static void update_block_mask_parameter(struct i965_post_processing_context *pp_context, int x, int y, int x_steps, int y_steps) +{ + struct pp_inline_parameter *pp_inline_parameter = pp_context->pp_inline_parameter; + + pp_inline_parameter->grf5.block_vertical_mask = 0xff; + pp_inline_parameter->grf6.block_vertical_mask_bottom = pp_context->block_vertical_mask_bottom; + // for the first block, it always on the left edge. the second block will reload horizontal_mask from grf6.block_horizontal_mask_middle + pp_inline_parameter->grf5.block_horizontal_mask = pp_context->block_horizontal_mask_left; + pp_inline_parameter->grf6.block_horizontal_mask_middle = 0xffff; + pp_inline_parameter->grf6.block_horizontal_mask_right = pp_context->block_horizontal_mask_right; + + /* 1 x N */ + if (x_steps == 1) { + if (y == y_steps-1) { + pp_inline_parameter->grf5.block_vertical_mask = pp_context->block_vertical_mask_bottom; + } + else { + pp_inline_parameter->grf6.block_vertical_mask_bottom = 0xff; + } + } + + /* M x 1 */ + if (y_steps == 1) { + if (x == 0) { // all blocks in this group are on the left edge + pp_inline_parameter->grf6.block_horizontal_mask_middle = pp_context->block_horizontal_mask_left; + pp_inline_parameter->grf6.block_horizontal_mask_right = pp_context->block_horizontal_mask_left; + } + else if (x == x_steps-1) { + pp_inline_parameter->grf5.block_horizontal_mask = pp_context->block_horizontal_mask_right; + pp_inline_parameter->grf6.block_horizontal_mask_middle = pp_context->block_horizontal_mask_right; + } + else { + pp_inline_parameter->grf5.block_horizontal_mask = 0xffff; + pp_inline_parameter->grf6.block_horizontal_mask_middle = 0xffff; + pp_inline_parameter->grf6.block_horizontal_mask_right = 0xffff; + } + } + +} + +static void +gen6_pp_object_walker(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = pp_context->batch; + int x, x_steps, y, y_steps; + int param_size, command_length_in_dws; + dri_bo *command_buffer; + unsigned int *command_ptr; + + if (IS_GEN7(i965->intel.device_info)) + param_size = sizeof(struct gen7_pp_inline_parameter); + else + param_size = sizeof(struct pp_inline_parameter); + + x_steps = pp_context->pp_x_steps(pp_context->private_context); + y_steps = pp_context->pp_y_steps(pp_context->private_context); + command_length_in_dws = 6 + (param_size >> 2); + command_buffer = dri_bo_alloc(i965->intel.bufmgr, + "command objects buffer", + command_length_in_dws * 4 * x_steps * y_steps + 8, + 4096); + + dri_bo_map(command_buffer, 1); + command_ptr = command_buffer->virtual; + + for (y = 0; y < y_steps; y++) { + for (x = 0; x < x_steps; x++) { + if (!pp_context->pp_set_block_parameter(pp_context, x, y)) { + // some common block parameter update goes here, apply to all pp functions + if (IS_GEN6(i965->intel.device_info)) + update_block_mask_parameter (pp_context, x, y, x_steps, y_steps); + + *command_ptr++ = (CMD_MEDIA_OBJECT | (command_length_in_dws - 2)); + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + *command_ptr++ = 0; + memcpy(command_ptr, pp_context->pp_inline_parameter, param_size); + command_ptr += (param_size >> 2); + } + } + } + + if (command_length_in_dws * x_steps * y_steps % 2 == 0) + *command_ptr++ = 0; + + *command_ptr = MI_BATCH_BUFFER_END; + + dri_bo_unmap(command_buffer); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, MI_BATCH_BUFFER_START | (1 << 8)); + OUT_RELOC(batch, command_buffer, + I915_GEM_DOMAIN_COMMAND, 0, + 0); + ADVANCE_BATCH(batch); + + dri_bo_unreference(command_buffer); + + /* Have to execute the batch buffer here becuase MI_BATCH_BUFFER_END + * will cause control to pass back to ring buffer + */ + intel_batchbuffer_end_atomic(batch); + intel_batchbuffer_flush(batch); + intel_batchbuffer_start_atomic(batch, 0x1000); +} + +static void +gen6_pp_pipeline_setup(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + struct intel_batchbuffer *batch = pp_context->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_pp_pipeline_select(ctx, pp_context); + gen6_pp_state_base_address(ctx, pp_context); + gen6_pp_vfe_state(ctx, pp_context); + gen6_pp_curbe_load(ctx, pp_context); + gen6_interface_descriptor_load(ctx, pp_context); + gen6_pp_object_walker(ctx, pp_context); + intel_batchbuffer_end_atomic(batch); +} + +static VAStatus +gen6_post_processing( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param +) +{ + VAStatus va_status; + + va_status = gen6_pp_initialize(ctx, pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + pp_index, + filter_param); + + if (va_status == VA_STATUS_SUCCESS) { + gen6_pp_states_setup(ctx, pp_context); + gen6_pp_pipeline_setup(ctx, pp_context); + } + + if (va_status == VA_STATUS_SUCCESS_1) + va_status = VA_STATUS_SUCCESS; + + return va_status; +} + +static VAStatus +i965_post_processing_internal( + VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void *filter_param +) +{ + VAStatus va_status; + + if (pp_context && pp_context->intel_post_processing) { + va_status = (pp_context->intel_post_processing)(ctx, pp_context, + src_surface, src_rect, + dst_surface, dst_rect, + pp_index, filter_param); + } else { + va_status = VA_STATUS_ERROR_UNIMPLEMENTED; + } + + return va_status; +} + +static void +rgb_to_yuv(unsigned int argb, + unsigned char *y, + unsigned char *u, + unsigned char *v, + unsigned char *a) +{ + int r = ((argb >> 16) & 0xff); + int g = ((argb >> 8) & 0xff); + int b = ((argb >> 0) & 0xff); + + *y = (257 * r + 504 * g + 98 * b) / 1000 + 16; + *v = (439 * r - 368 * g - 71 * b) / 1000 + 128; + *u = (-148 * r - 291 * g + 439 * b) / 1000 + 128; + *a = ((argb >> 24) & 0xff); +} + +static void +i965_vpp_clear_surface(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + struct object_surface *obj_surface, + unsigned int color) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = pp_context->batch; + unsigned int blt_cmd, br13; + unsigned int tiling = 0, swizzle = 0; + int pitch; + unsigned char y, u, v, a = 0; + int region_width, region_height; + + /* Currently only support NV12 surface */ + if (!obj_surface || obj_surface->fourcc != VA_FOURCC_NV12) + return; + + rgb_to_yuv(color, &y, &u, &v, &a); + + if (a == 0) + return; + + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + blt_cmd = XY_COLOR_BLT_CMD; + pitch = obj_surface->width; + + if (tiling != I915_TILING_NONE) { + assert(tiling == I915_TILING_Y); + // blt_cmd |= XY_COLOR_BLT_DST_TILED; + // pitch >>= 2; + } + + br13 = 0xf0 << 16; + br13 |= BR13_8; + br13 |= pitch; + + if (IS_IRONLAKE(i965->intel.device_info)) { + intel_batchbuffer_start_atomic(batch, 48); + BEGIN_BATCH(batch, 12); + } else { + /* Will double-check the command if the new chipset is added */ + intel_batchbuffer_start_atomic_blt(batch, 48); + BEGIN_BLT_BATCH(batch, 12); + } + + region_width = obj_surface->width; + region_height = obj_surface->height; + + OUT_BATCH(batch, blt_cmd); + OUT_BATCH(batch, br13); + OUT_BATCH(batch, + 0 << 16 | + 0); + OUT_BATCH(batch, + region_height << 16 | + region_width); + OUT_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0); + OUT_BATCH(batch, y); + + br13 = 0xf0 << 16; + br13 |= BR13_565; + br13 |= pitch; + + region_width = obj_surface->width / 2; + region_height = obj_surface->height / 2; + + if (tiling == I915_TILING_Y) { + region_height = ALIGN(obj_surface->height / 2, 32); + } + + OUT_BATCH(batch, blt_cmd); + OUT_BATCH(batch, br13); + OUT_BATCH(batch, + 0 << 16 | + 0); + OUT_BATCH(batch, + region_height << 16 | + region_width); + OUT_RELOC(batch, obj_surface->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + obj_surface->width * obj_surface->y_cb_offset); + OUT_BATCH(batch, v << 8 | u); + + ADVANCE_BATCH(batch); + intel_batchbuffer_end_atomic(batch); +} + +VAStatus +i965_scaling_processing( + VADriverContextP ctx, + struct object_surface *src_surface_obj, + const VARectangle *src_rect, + struct object_surface *dst_surface_obj, + const VARectangle *dst_rect, + unsigned int va_flags) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + struct i965_driver_data *i965 = i965_driver_data(ctx); + + assert(src_surface_obj->fourcc == VA_FOURCC_NV12); + assert(dst_surface_obj->fourcc == VA_FOURCC_NV12); + + if (HAS_VPP(i965)) { + struct i965_surface src_surface; + struct i965_surface dst_surface; + struct i965_post_processing_context *pp_context; + unsigned int filter_flags; + + _i965LockMutex(&i965->pp_mutex); + + src_surface.base = (struct object_base *)src_surface_obj; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + dst_surface.base = (struct object_base *)dst_surface_obj; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + pp_context = i965->pp_context; + filter_flags = pp_context->filter_flags; + pp_context->filter_flags = va_flags; + + va_status = i965_post_processing_internal(ctx, pp_context, + &src_surface, src_rect, &dst_surface, dst_rect, + avs_is_needed(va_flags) ? PP_NV12_AVS : PP_NV12_SCALING, NULL); + + pp_context->filter_flags = filter_flags; + + _i965UnlockMutex(&i965->pp_mutex); + } + + return va_status; +} + +VASurfaceID +i965_post_processing( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int va_flags, + int *has_done_scaling, + VARectangle *calibrated_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VASurfaceID out_surface_id = VA_INVALID_ID; + VASurfaceID tmp_id = VA_INVALID_ID; + + *has_done_scaling = 0; + + if (HAS_VPP(i965)) { + VAStatus status; + struct i965_surface src_surface; + struct i965_surface dst_surface; + struct i965_post_processing_context *pp_context; + + /* Currently only support post processing for NV12 surface */ + if (obj_surface->fourcc != VA_FOURCC_NV12) + return out_surface_id; + + _i965LockMutex(&i965->pp_mutex); + + pp_context = i965->pp_context; + pp_context->filter_flags = va_flags; + if (avs_is_needed(va_flags)) { + VARectangle tmp_dst_rect; + + if (out_surface_id != VA_INVALID_ID) + tmp_id = out_surface_id; + + tmp_dst_rect.x = 0; + tmp_dst_rect.y = 0; + tmp_dst_rect.width = dst_rect->width; + tmp_dst_rect.height = dst_rect->height; + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + status = i965_CreateSurfaces(ctx, + dst_rect->width, + dst_rect->height, + VA_RT_FORMAT_YUV420, + 1, + &out_surface_id); + assert(status == VA_STATUS_SUCCESS); + obj_surface = SURFACE(out_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + i965_vpp_clear_surface(ctx, pp_context, obj_surface, 0); + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + i965_post_processing_internal(ctx, pp_context, + &src_surface, + src_rect, + &dst_surface, + &tmp_dst_rect, + PP_NV12_AVS, + NULL); + + if (tmp_id != VA_INVALID_ID) + i965_DestroySurfaces(ctx, &tmp_id, 1); + + *has_done_scaling = 1; + calibrated_rect->x = 0; + calibrated_rect->y = 0; + calibrated_rect->width = dst_rect->width; + calibrated_rect->height = dst_rect->height; + } + + _i965UnlockMutex(&i965->pp_mutex); + } + + return out_surface_id; +} + +static VAStatus +i965_image_pl2_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect); + +static VAStatus +i965_image_plx_nv12_plx_processing(VADriverContextP ctx, + VAStatus (*i965_image_plx_nv12_processing)( + VADriverContextP, + const struct i965_surface *, + const VARectangle *, + struct i965_surface *, + const VARectangle *), + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus status; + VASurfaceID tmp_surface_id = VA_INVALID_SURFACE; + struct object_surface *obj_surface = NULL; + struct i965_surface tmp_surface; + int width, height; + + pp_get_surface_size(ctx, dst_surface, &width, &height); + status = i965_CreateSurfaces(ctx, + width, + height, + VA_RT_FORMAT_YUV420, + 1, + &tmp_surface_id); + assert(status == VA_STATUS_SUCCESS); + obj_surface = SURFACE(tmp_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + tmp_surface.base = (struct object_base *)obj_surface; + tmp_surface.type = I965_SURFACE_TYPE_SURFACE; + tmp_surface.flags = I965_SURFACE_FLAG_FRAME; + + status = i965_image_plx_nv12_processing(ctx, + src_surface, + src_rect, + &tmp_surface, + dst_rect); + + if (status == VA_STATUS_SUCCESS) + status = i965_image_pl2_processing(ctx, + &tmp_surface, + dst_rect, + dst_surface, + dst_rect); + + i965_DestroySurfaces(ctx, + &tmp_surface_id, + 1); + + return status; +} + + +static VAStatus +i965_image_pl1_rgbx_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + int fourcc = pp_get_surface_fourcc(ctx, dst_surface); + VAStatus vaStatus; + + switch (fourcc) { + case VA_FOURCC_NV12: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_RGBX_LOAD_SAVE_NV12, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + default: + vaStatus = i965_image_plx_nv12_plx_processing(ctx, + i965_image_pl1_rgbx_processing, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + } + + return vaStatus; +} + +static VAStatus +i965_image_pl3_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + int fourcc = pp_get_surface_fourcc(ctx, dst_surface); + VAStatus vaStatus = VA_STATUS_ERROR_UNIMPLEMENTED; + + switch (fourcc) { + case VA_FOURCC_NV12: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PL3_LOAD_SAVE_N12, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PL3_LOAD_SAVE_PL3, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PL3_LOAD_SAVE_PA, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + default: + vaStatus = i965_image_plx_nv12_plx_processing(ctx, + i965_image_pl3_processing, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + } + + return vaStatus; +} + +static VAStatus +i965_image_pl2_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + int fourcc = pp_get_surface_fourcc(ctx, dst_surface); + VAStatus vaStatus = VA_STATUS_ERROR_UNIMPLEMENTED; + + switch (fourcc) { + case VA_FOURCC_NV12: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_NV12_LOAD_SAVE_N12, + NULL); + break; + + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_NV12_LOAD_SAVE_PL3, + NULL); + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_NV12_LOAD_SAVE_PA, + NULL); + break; + + case VA_FOURCC_BGRX: + case VA_FOURCC_BGRA: + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_NV12_LOAD_SAVE_RGBX, + NULL); + break; + + default: + return VA_STATUS_ERROR_UNIMPLEMENTED; + } + + intel_batchbuffer_flush(pp_context->batch); + + return vaStatus; +} + +static VAStatus +i965_image_pl1_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + int fourcc = pp_get_surface_fourcc(ctx, dst_surface); + VAStatus vaStatus; + + switch (fourcc) { + case VA_FOURCC_NV12: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PA_LOAD_SAVE_NV12, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + case VA_FOURCC_YV12: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PA_LOAD_SAVE_PL3, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + vaStatus = i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PA_LOAD_SAVE_PA, + NULL); + intel_batchbuffer_flush(pp_context->batch); + break; + + default: + vaStatus = i965_image_plx_nv12_plx_processing(ctx, + i965_image_pl1_processing, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + } + + return vaStatus; +} + +VAStatus +i965_image_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + VAStatus status = VA_STATUS_ERROR_UNIMPLEMENTED; + + if (HAS_VPP(i965)) { + int fourcc = pp_get_surface_fourcc(ctx, src_surface); + + _i965LockMutex(&i965->pp_mutex); + + switch (fourcc) { + case VA_FOURCC_YV12: + case VA_FOURCC_I420: + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + case VA_FOURCC_422H: + case VA_FOURCC_422V: + case VA_FOURCC_411P: + case VA_FOURCC_444P: + case VA_FOURCC_YV16: + status = i965_image_pl3_processing(ctx, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + + case VA_FOURCC_NV12: + status = i965_image_pl2_processing(ctx, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + status = i965_image_pl1_processing(ctx, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + case VA_FOURCC_BGRA: + case VA_FOURCC_BGRX: + case VA_FOURCC_RGBA: + case VA_FOURCC_RGBX: + status = i965_image_pl1_rgbx_processing(ctx, + src_surface, + src_rect, + dst_surface, + dst_rect); + break; + default: + status = VA_STATUS_ERROR_UNIMPLEMENTED; + break; + } + + _i965UnlockMutex(&i965->pp_mutex); + } + + return status; +} + +static void +i965_post_processing_context_finalize(VADriverContextP ctx, + struct i965_post_processing_context *pp_context) +{ + int i; + + dri_bo_unreference(pp_context->surface_state_binding_table.bo); + pp_context->surface_state_binding_table.bo = NULL; + + dri_bo_unreference(pp_context->curbe.bo); + pp_context->curbe.bo = NULL; + + dri_bo_unreference(pp_context->sampler_state_table.bo); + pp_context->sampler_state_table.bo = NULL; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8); + pp_context->sampler_state_table.bo_8x8 = NULL; + + dri_bo_unreference(pp_context->sampler_state_table.bo_8x8_uv); + pp_context->sampler_state_table.bo_8x8_uv = NULL; + + dri_bo_unreference(pp_context->idrt.bo); + pp_context->idrt.bo = NULL; + pp_context->idrt.num_interface_descriptors = 0; + + dri_bo_unreference(pp_context->vfe_state.bo); + pp_context->vfe_state.bo = NULL; + + for (i = 0; i < ARRAY_ELEMS(pp_context->pp_dndi_context.frame_store); i++) + pp_dndi_frame_store_clear(&pp_context->pp_dndi_context.frame_store[i], + ctx); + + dri_bo_unreference(pp_context->pp_dn_context.stmm_bo); + pp_context->pp_dn_context.stmm_bo = NULL; + + for (i = 0; i < NUM_PP_MODULES; i++) { + struct pp_module *pp_module = &pp_context->pp_modules[i]; + + dri_bo_unreference(pp_module->kernel.bo); + pp_module->kernel.bo = NULL; + } + + free(pp_context->pp_static_parameter); + free(pp_context->pp_inline_parameter); + pp_context->pp_static_parameter = NULL; + pp_context->pp_inline_parameter = NULL; +} + +void +i965_post_processing_terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + + if (pp_context) { + pp_context->finalize(ctx, pp_context); + free(pp_context); + } + + i965->pp_context = NULL; +} + +#define VPP_CURBE_ALLOCATION_SIZE 32 + +void +i965_post_processing_context_init(VADriverContextP ctx, + void *data, + struct intel_batchbuffer *batch) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + struct i965_post_processing_context *pp_context = data; + const AVSConfig *avs_config; + + if (IS_IRONLAKE(i965->intel.device_info)) { + pp_context->urb.size = i965->intel.device_info->urb_size; + pp_context->urb.num_vfe_entries = 32; + pp_context->urb.size_vfe_entry = 1; /* in 512 bits unit */ + pp_context->urb.num_cs_entries = 1; + pp_context->urb.size_cs_entry = 2; + pp_context->urb.vfe_start = 0; + pp_context->urb.cs_start = pp_context->urb.vfe_start + + pp_context->urb.num_vfe_entries * pp_context->urb.size_vfe_entry; + assert(pp_context->urb.cs_start + + pp_context->urb.num_cs_entries * pp_context->urb.size_cs_entry <= i965->intel.device_info->urb_size); + pp_context->intel_post_processing = ironlake_post_processing; + } else { + pp_context->vfe_gpu_state.max_num_threads = 60; + pp_context->vfe_gpu_state.num_urb_entries = 59; + pp_context->vfe_gpu_state.gpgpu_mode = 0; + pp_context->vfe_gpu_state.urb_entry_size = 16 - 1; + pp_context->vfe_gpu_state.curbe_allocation_size = VPP_CURBE_ALLOCATION_SIZE; + pp_context->intel_post_processing = gen6_post_processing; + } + + pp_context->finalize = i965_post_processing_context_finalize; + + assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen5)); + assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen6)); + assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen7)); + assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen75)); + + if (IS_HASWELL(i965->intel.device_info)) + memcpy(pp_context->pp_modules, pp_modules_gen75, sizeof(pp_context->pp_modules)); + else if (IS_GEN7(i965->intel.device_info)) + memcpy(pp_context->pp_modules, pp_modules_gen7, sizeof(pp_context->pp_modules)); + else if (IS_GEN6(i965->intel.device_info)) + memcpy(pp_context->pp_modules, pp_modules_gen6, sizeof(pp_context->pp_modules)); + else if (IS_IRONLAKE(i965->intel.device_info)) + memcpy(pp_context->pp_modules, pp_modules_gen5, sizeof(pp_context->pp_modules)); + + for (i = 0; i < NUM_PP_MODULES; i++) { + struct pp_module *pp_module = &pp_context->pp_modules[i]; + dri_bo_unreference(pp_module->kernel.bo); + if (pp_module->kernel.bin && pp_module->kernel.size) { + pp_module->kernel.bo = dri_bo_alloc(i965->intel.bufmgr, + pp_module->kernel.name, + pp_module->kernel.size, + 4096); + assert(pp_module->kernel.bo); + dri_bo_subdata(pp_module->kernel.bo, 0, pp_module->kernel.size, pp_module->kernel.bin); + } else { + pp_module->kernel.bo = NULL; + } + } + + /* static & inline parameters */ + if (IS_GEN7(i965->intel.device_info)) { + pp_context->pp_static_parameter = calloc(sizeof(struct gen7_pp_static_parameter), 1); + pp_context->pp_inline_parameter = calloc(sizeof(struct gen7_pp_inline_parameter), 1); + } else { + pp_context->pp_static_parameter = calloc(sizeof(struct pp_static_parameter), 1); + pp_context->pp_inline_parameter = calloc(sizeof(struct pp_inline_parameter), 1); + } + + pp_context->batch = batch; + pp_dndi_context_init(&pp_context->pp_dndi_context); + + avs_config = IS_IRONLAKE(i965->intel.device_info) ? &gen5_avs_config : + &gen6_avs_config; + avs_init_state(&pp_context->pp_avs_context.state, avs_config); +} + +bool +i965_post_processing_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_post_processing_context *pp_context = i965->pp_context; + + if (HAS_VPP(i965)) { + if (pp_context == NULL) { + pp_context = calloc(1, sizeof(*pp_context)); + assert(pp_context); + i965->codec_info->post_processing_context_init(ctx, pp_context, i965->pp_batch); + i965->pp_context = pp_context; + } + } + + return true; +} + +static const int procfilter_to_pp_flag[VAProcFilterCount] = { + PP_NULL, /* VAProcFilterNone */ + PP_NV12_DN, /* VAProcFilterNoiseReduction */ + PP_NV12_DNDI, /* VAProcFilterDeinterlacing */ + PP_NULL, /* VAProcFilterSharpening */ + PP_NULL, /* VAProcFilterColorBalance */ +}; + +static const int proc_frame_to_pp_frame[3] = { + I965_SURFACE_FLAG_FRAME, + I965_SURFACE_FLAG_TOP_FIELD_FIRST, + I965_SURFACE_FLAG_BOTTOME_FIELD_FIRST +}; + +enum { + PP_OP_CHANGE_FORMAT = 1 << 0, + PP_OP_CHANGE_SIZE = 1 << 1, + PP_OP_DEINTERLACE = 1 << 2, + PP_OP_COMPLEX = 1 << 3, +}; + +static int +pp_get_kernel_index(uint32_t src_fourcc, uint32_t dst_fourcc, uint32_t pp_ops, + uint32_t filter_flags) +{ + int pp_index = -1; + + if (!dst_fourcc) + dst_fourcc = src_fourcc; + + switch (src_fourcc) { + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + case VA_FOURCC_BGRX: + case VA_FOURCC_BGRA: + switch (dst_fourcc) { + case VA_FOURCC_NV12: + pp_index = PP_RGBX_LOAD_SAVE_NV12; + break; + } + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + switch (dst_fourcc) { + case VA_FOURCC_NV12: + pp_index = PP_PA_LOAD_SAVE_NV12; + break; + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + pp_index = PP_PA_LOAD_SAVE_PL3; + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + pp_index = PP_PA_LOAD_SAVE_PA; + break; + } + break; + case VA_FOURCC_NV12: + switch (dst_fourcc) { + case VA_FOURCC_NV12: + if (pp_ops & PP_OP_CHANGE_SIZE) + pp_index = avs_is_needed(filter_flags) ? + PP_NV12_AVS : PP_NV12_SCALING; + else + pp_index = PP_NV12_LOAD_SAVE_N12; + break; + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + pp_index = PP_NV12_LOAD_SAVE_PL3; + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + pp_index = PP_NV12_LOAD_SAVE_PA; + break; + case VA_FOURCC_RGBX: + case VA_FOURCC_RGBA: + case VA_FOURCC_BGRX: + case VA_FOURCC_BGRA: + pp_index = PP_NV12_LOAD_SAVE_RGBX; + break; + } + break; + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + case VA_FOURCC_YV16: + case VA_FOURCC_411P: + case VA_FOURCC_422H: + case VA_FOURCC_422V: + case VA_FOURCC_444P: + switch (dst_fourcc) { + case VA_FOURCC_NV12: + pp_index = PP_PL3_LOAD_SAVE_N12; + break; + case VA_FOURCC_I420: + case VA_FOURCC_YV12: + case VA_FOURCC_IMC1: + case VA_FOURCC_IMC3: + pp_index = PP_PL3_LOAD_SAVE_PL3; + break; + case VA_FOURCC_YUY2: + case VA_FOURCC_UYVY: + pp_index = PP_PL3_LOAD_SAVE_PA; + break; + } + break; + } + return pp_index; +} + +static VAStatus +i965_proc_picture_fast(VADriverContextP ctx, + struct i965_proc_context *proc_context, struct proc_state *proc_state) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + const VAProcPipelineParameterBuffer * const pipeline_param = + (VAProcPipelineParameterBuffer *)proc_state->pipeline_param->buffer; + struct object_surface *src_obj_surface, *dst_obj_surface; + struct i965_surface src_surface, dst_surface; + const VAProcFilterParameterBufferDeinterlacing *deint_params = NULL; + VARectangle src_rect, dst_rect; + VAStatus status; + uint32_t i, filter_flags = 0, pp_ops = 0; + int pp_index; + + /* Validate pipeline parameters */ + if (pipeline_param->num_filters > 0 && !pipeline_param->filters) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + for (i = 0; i < pipeline_param->num_filters; i++) { + const VAProcFilterParameterBuffer *filter; + struct object_buffer * const obj_buffer = + BUFFER(pipeline_param->filters[i]); + + assert(obj_buffer && obj_buffer->buffer_store); + if (!obj_buffer || !obj_buffer->buffer_store) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + filter = (VAProcFilterParameterBuffer *) + obj_buffer->buffer_store->buffer; + switch (filter->type) { + case VAProcFilterDeinterlacing: + pp_ops |= PP_OP_DEINTERLACE; + deint_params = (VAProcFilterParameterBufferDeinterlacing *)filter; + break; + default: + pp_ops |= PP_OP_COMPLEX; + break; + } + } + filter_flags |= pipeline_param->filter_flags & VA_FILTER_SCALING_MASK; + + /* Validate source surface */ + src_obj_surface = SURFACE(pipeline_param->surface); + if (!src_obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + if (!src_obj_surface->fourcc) + return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT; + + if (pipeline_param->surface_region) { + src_rect.x = pipeline_param->surface_region->x; + src_rect.y = pipeline_param->surface_region->y; + src_rect.width = pipeline_param->surface_region->width; + src_rect.height = pipeline_param->surface_region->height; + } else { + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = src_obj_surface->orig_width; + src_rect.height = src_obj_surface->orig_height; + } + + src_surface.base = &src_obj_surface->base; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + + if (pp_ops & PP_OP_DEINTERLACE) { + filter_flags |= !(deint_params->flags & VA_DEINTERLACING_BOTTOM_FIELD) ? + VA_TOP_FIELD : VA_BOTTOM_FIELD; + if (deint_params->algorithm != VAProcDeinterlacingBob) + pp_ops |= PP_OP_COMPLEX; + } + else if (pipeline_param->filter_flags & (VA_TOP_FIELD | VA_BOTTOM_FIELD)) { + filter_flags |= (pipeline_param->filter_flags & VA_TOP_FIELD) ? + VA_TOP_FIELD : VA_BOTTOM_FIELD; + pp_ops |= PP_OP_DEINTERLACE; + } + if (pp_ops & PP_OP_DEINTERLACE) // XXX: no bob-deinterlacing optimization yet + pp_ops |= PP_OP_COMPLEX; + + /* Validate target surface */ + dst_obj_surface = SURFACE(proc_state->current_render_target); + if (!dst_obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + + if (!dst_obj_surface->bo) + return VA_STATUS_ERROR_INVALID_SURFACE; + + if (dst_obj_surface->fourcc && + dst_obj_surface->fourcc != src_obj_surface->fourcc) + pp_ops |= PP_OP_CHANGE_FORMAT; + + if (pipeline_param->output_region) { + dst_rect.x = pipeline_param->output_region->x; + dst_rect.y = pipeline_param->output_region->y; + dst_rect.width = pipeline_param->output_region->width; + dst_rect.height = pipeline_param->output_region->height; + } else { + dst_rect.x = 0; + dst_rect.y = 0; + dst_rect.width = dst_obj_surface->orig_width; + dst_rect.height = dst_obj_surface->orig_height; + } + + if (dst_rect.width != src_rect.width || dst_rect.height != src_rect.height) + pp_ops |= PP_OP_CHANGE_SIZE; + + dst_surface.base = &dst_obj_surface->base; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + + /* Validate "fast-path" processing capabilities */ + if (!IS_GEN7(i965->intel.device_info)) { + if ((pp_ops & PP_OP_CHANGE_FORMAT) && (pp_ops & PP_OP_CHANGE_SIZE)) + return VA_STATUS_ERROR_UNIMPLEMENTED; // temporary surface is needed + } + if (pipeline_param->pipeline_flags & VA_PROC_PIPELINE_FAST) { + filter_flags &= ~VA_FILTER_SCALING_MASK; + filter_flags |= VA_FILTER_SCALING_FAST; + } + else { + if (pp_ops & PP_OP_COMPLEX) + return VA_STATUS_ERROR_UNIMPLEMENTED; // full pipeline is needed + if ((filter_flags & VA_FILTER_SCALING_MASK) > VA_FILTER_SCALING_HQ) + return VA_STATUS_ERROR_UNIMPLEMENTED; + } + + pp_index = pp_get_kernel_index(src_obj_surface->fourcc, + dst_obj_surface->fourcc, pp_ops, filter_flags); + if (pp_index < 0) + return VA_STATUS_ERROR_UNIMPLEMENTED; + + proc_context->pp_context.filter_flags = filter_flags; + status = i965_post_processing_internal(ctx, &proc_context->pp_context, + &src_surface, &src_rect, &dst_surface, &dst_rect, pp_index, NULL); + intel_batchbuffer_flush(proc_context->pp_context.batch); + return status; +} + +VAStatus +i965_proc_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_proc_context *proc_context = (struct i965_proc_context *)hw_context; + struct proc_state *proc_state = &codec_state->proc; + VAProcPipelineParameterBuffer *pipeline_param = (VAProcPipelineParameterBuffer *)proc_state->pipeline_param->buffer; + struct object_surface *obj_surface; + struct i965_surface src_surface, dst_surface; + VARectangle src_rect, dst_rect; + VAStatus status; + int i; + VASurfaceID tmp_surfaces[VAProcFilterCount + 4]; + int num_tmp_surfaces = 0; + unsigned int tiling = 0, swizzle = 0; + int in_width, in_height; + + status = i965_proc_picture_fast(ctx, proc_context, proc_state); + if (status != VA_STATUS_ERROR_UNIMPLEMENTED) + return status; + + if (pipeline_param->surface == VA_INVALID_ID || + proc_state->current_render_target == VA_INVALID_ID) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + obj_surface = SURFACE(pipeline_param->surface); + + if (!obj_surface) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + if (!obj_surface->bo) { + status = VA_STATUS_ERROR_INVALID_VALUE; /* The input surface is created without valid content */ + goto error; + } + + if (pipeline_param->num_filters && !pipeline_param->filters) { + status = VA_STATUS_ERROR_INVALID_PARAMETER; + goto error; + } + + in_width = obj_surface->orig_width; + in_height = obj_surface->orig_height; + dri_bo_get_tiling(obj_surface->bo, &tiling, &swizzle); + + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = proc_frame_to_pp_frame[pipeline_param->filter_flags & 0x3]; + + VASurfaceID out_surface_id = VA_INVALID_ID; + if (obj_surface->fourcc != VA_FOURCC_NV12) { + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = I965_SURFACE_FLAG_FRAME; + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = in_width; + src_rect.height = in_height; + + status = i965_CreateSurfaces(ctx, + in_width, + in_height, + VA_RT_FORMAT_YUV420, + 1, + &out_surface_id); + assert(status == VA_STATUS_SUCCESS); + tmp_surfaces[num_tmp_surfaces++] = out_surface_id; + obj_surface = SURFACE(out_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, !!tiling, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + dst_surface.flags = I965_SURFACE_FLAG_FRAME; + dst_rect.x = 0; + dst_rect.y = 0; + dst_rect.width = in_width; + dst_rect.height = in_height; + + status = i965_image_processing(ctx, + &src_surface, + &src_rect, + &dst_surface, + &dst_rect); + assert(status == VA_STATUS_SUCCESS); + + src_surface.base = (struct object_base *)obj_surface; + src_surface.type = I965_SURFACE_TYPE_SURFACE; + src_surface.flags = proc_frame_to_pp_frame[pipeline_param->filter_flags & 0x3]; + } + + if (pipeline_param->surface_region) { + src_rect.x = pipeline_param->surface_region->x; + src_rect.y = pipeline_param->surface_region->y; + src_rect.width = pipeline_param->surface_region->width; + src_rect.height = pipeline_param->surface_region->height; + } else { + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = in_width; + src_rect.height = in_height; + } + + proc_context->pp_context.pipeline_param = pipeline_param; + + for (i = 0; i < pipeline_param->num_filters; i++) { + struct object_buffer *obj_buffer = BUFFER(pipeline_param->filters[i]); + VAProcFilterParameterBufferBase *filter_param = NULL; + VAProcFilterType filter_type; + int kernel_index; + + if (!obj_buffer || + !obj_buffer->buffer_store || + !obj_buffer->buffer_store->buffer) { + status = VA_STATUS_ERROR_INVALID_FILTER_CHAIN; + goto error; + } + + out_surface_id = VA_INVALID_ID; + filter_param = (VAProcFilterParameterBufferBase *)obj_buffer->buffer_store->buffer; + filter_type = filter_param->type; + kernel_index = procfilter_to_pp_flag[filter_type]; + + if (kernel_index != PP_NULL && + proc_context->pp_context.pp_modules[kernel_index].kernel.bo != NULL) { + status = i965_CreateSurfaces(ctx, + in_width, + in_height, + VA_RT_FORMAT_YUV420, + 1, + &out_surface_id); + assert(status == VA_STATUS_SUCCESS); + tmp_surfaces[num_tmp_surfaces++] = out_surface_id; + obj_surface = SURFACE(out_surface_id); + assert(obj_surface); + i965_check_alloc_surface_bo(ctx, obj_surface, !!tiling, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + status = i965_post_processing_internal(ctx, &proc_context->pp_context, + &src_surface, + &src_rect, + &dst_surface, + &src_rect, + kernel_index, + filter_param); + + if (status == VA_STATUS_SUCCESS) { + src_surface.base = dst_surface.base; + src_surface.type = dst_surface.type; + src_surface.flags = dst_surface.flags; + } + } + } + + proc_context->pp_context.pipeline_param = NULL; + obj_surface = SURFACE(proc_state->current_render_target); + + if (!obj_surface) { + status = VA_STATUS_ERROR_INVALID_SURFACE; + goto error; + } + + if (pipeline_param->output_region) { + dst_rect.x = pipeline_param->output_region->x; + dst_rect.y = pipeline_param->output_region->y; + dst_rect.width = pipeline_param->output_region->width; + dst_rect.height = pipeline_param->output_region->height; + } else { + dst_rect.x = 0; + dst_rect.y = 0; + dst_rect.width = obj_surface->orig_width; + dst_rect.height = obj_surface->orig_height; + } + + if (IS_GEN7(i965->intel.device_info) || + IS_GEN8(i965->intel.device_info) || + IS_GEN9(i965->intel.device_info)) { + unsigned int saved_filter_flag; + struct i965_post_processing_context *i965pp_context = i965->pp_context; + + if (obj_surface->fourcc == 0) { + i965_check_alloc_surface_bo(ctx, obj_surface, 1, + VA_FOURCC_NV12, + SUBSAMPLE_YUV420); + } + + i965_vpp_clear_surface(ctx, &proc_context->pp_context, + obj_surface, + pipeline_param->output_background_color); + + intel_batchbuffer_flush(hw_context->batch); + + saved_filter_flag = i965pp_context->filter_flags; + i965pp_context->filter_flags = (pipeline_param->filter_flags & VA_FILTER_SCALING_MASK); + + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + i965_image_processing(ctx, &src_surface, &src_rect, &dst_surface, &dst_rect); + + i965pp_context->filter_flags = saved_filter_flag; + + if (num_tmp_surfaces) + i965_DestroySurfaces(ctx, + tmp_surfaces, + num_tmp_surfaces); + + return VA_STATUS_SUCCESS; + } + + int csc_needed = 0; + if (obj_surface->fourcc && obj_surface->fourcc != VA_FOURCC_NV12){ + csc_needed = 1; + out_surface_id = VA_INVALID_ID; + status = i965_CreateSurfaces(ctx, + obj_surface->orig_width, + obj_surface->orig_height, + VA_RT_FORMAT_YUV420, + 1, + &out_surface_id); + assert(status == VA_STATUS_SUCCESS); + tmp_surfaces[num_tmp_surfaces++] = out_surface_id; + struct object_surface *csc_surface = SURFACE(out_surface_id); + assert(csc_surface); + i965_check_alloc_surface_bo(ctx, csc_surface, !!tiling, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + dst_surface.base = (struct object_base *)csc_surface; + } else { + i965_check_alloc_surface_bo(ctx, obj_surface, !!tiling, VA_FOURCC_NV12, SUBSAMPLE_YUV420); + dst_surface.base = (struct object_base *)obj_surface; + } + + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + i965_vpp_clear_surface(ctx, &proc_context->pp_context, obj_surface, pipeline_param->output_background_color); + + // load/save doesn't support different origin offset for src and dst surface + if (src_rect.width == dst_rect.width && + src_rect.height == dst_rect.height && + src_rect.x == dst_rect.x && + src_rect.y == dst_rect.y) { + i965_post_processing_internal(ctx, &proc_context->pp_context, + &src_surface, + &src_rect, + &dst_surface, + &dst_rect, + PP_NV12_LOAD_SAVE_N12, + NULL); + } else { + + proc_context->pp_context.filter_flags = pipeline_param->filter_flags; + i965_post_processing_internal(ctx, &proc_context->pp_context, + &src_surface, + &src_rect, + &dst_surface, + &dst_rect, + avs_is_needed(pipeline_param->filter_flags) ? PP_NV12_AVS : PP_NV12_SCALING, + NULL); + } + + if (csc_needed) { + src_surface.base = dst_surface.base; + src_surface.type = dst_surface.type; + src_surface.flags = dst_surface.flags; + dst_surface.base = (struct object_base *)obj_surface; + dst_surface.type = I965_SURFACE_TYPE_SURFACE; + i965_image_processing(ctx, &src_surface, &dst_rect, &dst_surface, &dst_rect); + } + + if (num_tmp_surfaces) + i965_DestroySurfaces(ctx, + tmp_surfaces, + num_tmp_surfaces); + + intel_batchbuffer_flush(hw_context->batch); + + return VA_STATUS_SUCCESS; + +error: + if (num_tmp_surfaces) + i965_DestroySurfaces(ctx, + tmp_surfaces, + num_tmp_surfaces); + + return status; +} + +static void +i965_proc_context_destroy(void *hw_context) +{ + struct i965_proc_context * const proc_context = hw_context; + VADriverContextP const ctx = proc_context->driver_context; + + proc_context->pp_context.finalize(ctx, &proc_context->pp_context); + intel_batchbuffer_free(proc_context->base.batch); + free(proc_context); +} + +struct hw_context * +i965_proc_context_init(VADriverContextP ctx, struct object_config *obj_config) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_driver_data *intel = intel_driver_data(ctx); + struct i965_proc_context *proc_context = calloc(1, sizeof(struct i965_proc_context)); + + if (!proc_context) + return NULL; + + proc_context->base.destroy = i965_proc_context_destroy; + proc_context->base.run = i965_proc_picture; + proc_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); + proc_context->driver_context = ctx; + i965->codec_info->post_processing_context_init(ctx, &proc_context->pp_context, proc_context->base.batch); + + return (struct hw_context *)proc_context; +} + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.h new file mode 100644 index 000000000..63e678db8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_post_processing.h @@ -0,0 +1,640 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef __I965_POST_PROCESSING_H__ +#define __I965_POST_PROCESSING_H__ + +#include "i965_vpp_avs.h" + +#define MAX_PP_SURFACES 48 + +enum +{ + PP_NULL = 0, + PP_NV12_LOAD_SAVE_N12, + PP_NV12_LOAD_SAVE_PL3, + PP_PL3_LOAD_SAVE_N12, + PP_PL3_LOAD_SAVE_PL3, + PP_NV12_SCALING, + PP_NV12_AVS, + PP_NV12_DNDI, + PP_NV12_DN, + PP_NV12_LOAD_SAVE_PA, + PP_PL3_LOAD_SAVE_PA, + PP_PA_LOAD_SAVE_NV12, + PP_PA_LOAD_SAVE_PL3, + PP_PA_LOAD_SAVE_PA, + PP_RGBX_LOAD_SAVE_NV12, + PP_NV12_LOAD_SAVE_RGBX, + NUM_PP_MODULES, +}; + +struct i965_post_processing_context; + +struct pp_load_save_context +{ + int dest_x; + int dest_y; + int dest_w; + int dest_h; +}; + +struct pp_scaling_context +{ + int dest_x; /* in pixel */ + int dest_y; /* in pixel */ + int dest_w; + int dest_h; + float src_normalized_x; + float src_normalized_y; +}; + +struct pp_avs_context +{ + AVSState state; + int dest_x; /* in pixel */ + int dest_y; /* in pixel */ + int dest_w; + int dest_h; + float src_normalized_x; + float src_normalized_y; + int src_w; + int src_h; + float horiz_range; +}; + +enum { + DNDI_FRAME_IN_CURRENT = 0, + DNDI_FRAME_IN_PREVIOUS, + DNDI_FRAME_IN_STMM, + DNDI_FRAME_OUT_STMM, + DNDI_FRAME_OUT_CURRENT, + DNDI_FRAME_OUT_PREVIOUS, + DNDI_FRAME_STORE_COUNT +}; + +typedef struct dndi_frame_store { + struct object_surface *obj_surface; + VASurfaceID surface_id; /* always relative to the input surface */ + unsigned int is_scratch_surface : 1; +} DNDIFrameStore; + +struct pp_dndi_context +{ + int dest_w; + int dest_h; + DNDIFrameStore frame_store[DNDI_FRAME_STORE_COUNT]; + + /* Temporary flags live until the current picture is processed */ + unsigned int is_di_enabled : 1; + unsigned int is_di_adv_enabled : 1; + unsigned int is_first_frame : 1; + unsigned int is_second_field : 1; +}; + +struct pp_dn_context +{ + int dest_w; + int dest_h; + dri_bo *stmm_bo; +}; + +struct i965_post_processing_context; + +struct pp_module +{ + struct i965_kernel kernel; + + /* others */ + VAStatus (*initialize)(VADriverContextP ctx, struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + void *filter_param); +}; + +struct pp_static_parameter +{ + struct { + /* Procamp r1.0 */ + float procamp_constant_c0; + + /* Load and Same r1.1 */ + unsigned int source_packed_y_offset:8; + unsigned int source_packed_u_offset:8; + unsigned int source_packed_v_offset:8; + unsigned int source_rgb_layout:8; // 1 for |R|G|B|X| layout, 0 for |B|G|R|X| layout + + union { + /* Load and Save r1.2 */ + struct { + unsigned int destination_packed_y_offset:8; + unsigned int destination_packed_u_offset:8; + unsigned int destination_packed_v_offset:8; + unsigned int pad0:8; + } load_and_save; + + /* CSC r1.2 */ + struct { + unsigned int pad0:24; + unsigned int destination_rgb_layout:8; // 1 for |R|G|B|X| layout, 0 for |B|G|R|X| layout + } csc; + } r1_2; + + /* Procamp r1.3 */ + float procamp_constant_c1; + + /* Procamp r1.4 */ + float procamp_constant_c2; + + /* DI r1.5 */ + unsigned int statistics_surface_picth:16; /* Devided by 2 */ + unsigned int pad1:16; + + union { + /* DI r1.6 */ + struct { + unsigned int pad0:24; + unsigned int top_field_first:8; + } di; + + /* AVS/Scaling r1.6 */ + float normalized_video_y_scaling_step; + } r1_6; + + /* Procamp r1.7 */ + float procamp_constant_c5; + } grf1; + + struct { + /* Procamp r2.0 */ + float procamp_constant_c3; + + /* MBZ r2.1*/ + unsigned int pad0; + + /* WG+CSC r2.2 */ + float wg_csc_constant_c4; + + /* WG+CSC r2.3 */ + float wg_csc_constant_c8; + + /* Procamp r2.4 */ + float procamp_constant_c4; + + /* MBZ r2.5 */ + unsigned int pad1; + + /* MBZ r2.6 */ + unsigned int pad2; + + /* WG+CSC r2.7 */ + float wg_csc_constant_c9; + } grf2; + + struct { + /* WG+CSC r3.0 */ + float wg_csc_constant_c0; + + /* Blending r3.1 */ + float scaling_step_ratio; + + /* Blending r3.2 */ + float normalized_alpha_y_scaling; + + /* WG+CSC r3.3 */ + float wg_csc_constant_c4; + + /* WG+CSC r3.4 */ + float wg_csc_constant_c1; + + /* ALL r3.5 */ + int horizontal_origin_offset:16; + int vertical_origin_offset:16; + + /* Shared r3.6*/ + union { + /* Color filll */ + unsigned int color_pixel; + + /* WG+CSC */ + float wg_csc_constant_c2; + } r3_6; + + /* WG+CSC r3.7 */ + float wg_csc_constant_c3; + } grf3; + + struct { + /* WG+CSC r4.0 */ + float wg_csc_constant_c6; + + /* ALL r4.1 MBZ ???*/ + unsigned int pad0; + + /* Shared r4.2 */ + union { + /* AVS */ + struct { + unsigned int pad1:15; + unsigned int nlas:1; + unsigned int pad2:16; + } avs; + + /* DI */ + struct { + unsigned int motion_history_coefficient_m2:8; + unsigned int motion_history_coefficient_m1:8; + unsigned int pad0:16; + } di; + } r4_2; + + /* WG+CSC r4.3 */ + float wg_csc_constant_c7; + + /* WG+CSC r4.4 */ + float wg_csc_constant_c10; + + /* AVS r4.5 */ + float source_video_frame_normalized_horizontal_origin; + + /* MBZ r4.6 */ + unsigned int pad1; + + /* WG+CSC r4.7 */ + float wg_csc_constant_c11; + } grf4; +}; + +struct pp_inline_parameter +{ + struct { + /* ALL r5.0 */ + int destination_block_horizontal_origin:16; + int destination_block_vertical_origin:16; + + /* Shared r5.1 */ + union { + /* AVS/Scaling */ + float source_surface_block_normalized_horizontal_origin; + + /* FMD */ + struct { + unsigned int variance_surface_vertical_origin:16; + unsigned int pad0:16; + } fmd; + } r5_1; + + /* AVS/Scaling r5.2 */ + float source_surface_block_normalized_vertical_origin; + + /* Alpha r5.3 */ + float alpha_surface_block_normalized_horizontal_origin; + + /* Alpha r5.4 */ + float alpha_surface_block_normalized_vertical_origin; + + /* Alpha r5.5 */ + unsigned int alpha_mask_x:16; + unsigned int alpha_mask_y:8; + unsigned int block_count_x:8; + + /* r5.6 */ + /* we only support M*1 or 1*N block partitation now. + * -- it means asm code only need update this mask from grf6 for the last block + */ + unsigned int block_horizontal_mask:16; + unsigned int block_vertical_mask:8; + unsigned int number_blocks:8; + + /* AVS/Scaling r5.7 */ + float normalized_video_x_scaling_step; + } grf5; + + struct { + /* AVS r6.0 */ + float video_step_delta; + + /* r6.1 */ // sizeof(int) == 4? + unsigned int block_horizontal_mask_right:16; + unsigned int block_vertical_mask_bottom:8; + unsigned int pad1:8; + + /* r6.2 */ + unsigned int block_horizontal_mask_middle:16; + unsigned int pad2:16; + + /* r6.3-r6.7 */ + unsigned int padx[5]; + } grf6; +}; + +struct gen7_pp_static_parameter +{ + struct { + /* r1.0-r1.5 */ + unsigned int padx[6]; + /* r1.6 */ + unsigned int di_statistics_surface_pitch_div2:16; + unsigned int di_statistics_surface_height_div4:16; + /* r1.7 */ + unsigned int di_top_field_first:8; + unsigned int pad0:16; + unsigned int pointer_to_inline_parameter:8; /* value: 7 */ + } grf1; + + struct { + /* r2.0 */ + /* Indicates whether the rgb is swapped for the src surface + * 0: RGBX(MSB. X-B-G-R). 1: BGRX(MSB: X-R-G-B) + */ + unsigned int src_avs_rgb_swap:1; + unsigned int pad3:31; + + /* r2.1 */ + unsigned int pad2:16; + unsigned int save_avs_rgb_swap:1; /* 0: RGB, 1: BGR */ + unsigned int avs_wa_enable:1; /* must enabled for GEN7 */ + unsigned int ief_enable:1; + unsigned int avs_wa_width:13; + + /* 2.2 */ + float avs_wa_one_div_256_width; + + /* 2.3 */ + float avs_wa_five_div_256_width; + + /* 2.4 - 2.6 */ + unsigned int padx[3]; + + /* r2.7 */ + unsigned int di_destination_packed_y_component_offset:8; + unsigned int di_destination_packed_u_component_offset:8; + unsigned int di_destination_packed_v_component_offset:8; + unsigned int alpha:8; + } grf2; + + struct { + float sampler_load_horizontal_scaling_step_ratio; + unsigned int padx[7]; + } grf3; + + struct { + float sampler_load_vertical_scaling_step; + unsigned int pad0; + unsigned int di_hoffset_svf_from_dvf:16; + unsigned int di_voffset_svf_from_dvf:16; + unsigned int padx[5]; + } grf4; + + struct { + float sampler_load_vertical_frame_origin; + unsigned int padx[7]; + } grf5; + + struct { + float sampler_load_horizontal_frame_origin; + unsigned int padx[7]; + } grf6; + + struct { + /* r7.0 -> r7.3 */ + float coef_ry; + float coef_ru; + float coef_rv; + float coef_yd; + + /* r7.4 -> r7.7 */ + float coef_gy; + float coef_gu; + float coef_gv; + float coef_ud; + } grf7; + + struct { + /* r8.0 -> r8.3 */ + float coef_by; + float coef_bu; + float coef_bv; + float coef_vd; + + /* r8.4 -> r8.7 */ + unsigned int padx[4]; + } grf8; +}; + +struct gen7_pp_inline_parameter +{ + struct { + /* r9.0 */ + unsigned int destination_block_horizontal_origin:16; + unsigned int destination_block_vertical_origin:16; + /* r9.1: 0xffffffff */ + unsigned int constant_0; + /* r9.2 */ + unsigned int pad0; + /* r9.3 */ + unsigned int pad1; + /* r9.4 */ + float sampler_load_main_video_x_scaling_step; + /* r9.5 */ + unsigned int pad2; + /* r9.6: must be zero */ + unsigned int avs_vertical_block_number; + /* r9.7: 0 */ + unsigned int group_id_number; + } grf9; + + struct { + unsigned int padx[8]; + } grf10; +}; + +struct i965_post_processing_context +{ + int current_pp; + struct pp_module pp_modules[NUM_PP_MODULES]; + void *pp_static_parameter; + void *pp_inline_parameter; + + struct { + dri_bo *bo; + } surface_state_binding_table; + + struct { + dri_bo *bo; + } curbe; + + struct { + dri_bo *bo; + int num_interface_descriptors; + } idrt; + + struct { + dri_bo *bo; + } vfe_state; + + struct { + dri_bo *bo; + dri_bo *bo_8x8; + dri_bo *bo_8x8_uv; + } sampler_state_table; + + struct { + unsigned int size; + + unsigned int vfe_start; + unsigned int cs_start; + + unsigned int num_vfe_entries; + unsigned int num_cs_entries; + + unsigned int size_vfe_entry; + unsigned int size_cs_entry; + } urb; + + struct { + unsigned int gpgpu_mode : 1; + unsigned int pad0 : 7; + unsigned int max_num_threads : 16; + unsigned int num_urb_entries : 8; + unsigned int urb_entry_size : 16; + unsigned int curbe_allocation_size : 16; + } vfe_gpu_state; + + struct pp_load_save_context pp_load_save_context; + struct pp_scaling_context pp_scaling_context; + struct pp_avs_context pp_avs_context; + struct pp_dndi_context pp_dndi_context; + struct pp_dn_context pp_dn_context; + void *private_context; /* pointer to the current private context */ + void *pipeline_param; /* pointer to the pipeline parameter */ + /** + * \ref Extra filter flags used as a fast path. + * + * This corresponds to vaPutSurface() flags, for direct rendering, + * or to VAProcPipelineParameterBuffer.filter_flags when the VPP + * interfaces are used. In the latter case, this is just a copy of + * that field. + */ + unsigned int filter_flags; + + int (*pp_x_steps)(void *private_context); + int (*pp_y_steps)(void *private_context); + int (*pp_set_block_parameter)(struct i965_post_processing_context *pp_context, int x, int y); + + struct intel_batchbuffer *batch; + + unsigned int block_horizontal_mask_left:16; + unsigned int block_horizontal_mask_right:16; + unsigned int block_vertical_mask_bottom:8; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } instruction_state; + + struct { + dri_bo *bo; + } indirect_state; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } dynamic_state; + + unsigned int sampler_offset; + int sampler_size; + unsigned int idrt_offset; + int idrt_size; + unsigned int curbe_offset; + int curbe_size; + + VAStatus (*intel_post_processing)(VADriverContextP ctx, + struct i965_post_processing_context *pp_context, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect, + int pp_index, + void * filter_param); + void (*finalize)(VADriverContextP ctx, + struct i965_post_processing_context *pp_context); +}; + +struct i965_proc_context +{ + struct hw_context base; + void *driver_context; + struct i965_post_processing_context pp_context; +}; + +VASurfaceID +i965_post_processing( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int va_flags, + int *has_done_scaling, + VARectangle *calibrated_rect +); + +VAStatus +i965_scaling_processing( + VADriverContextP ctx, + struct object_surface *src_surface_obj, + const VARectangle *src_rect, + struct object_surface *dst_surface_obj, + const VARectangle *dst_rect, + unsigned int va_flags +); + +VAStatus +i965_image_processing(VADriverContextP ctx, + const struct i965_surface *src_surface, + const VARectangle *src_rect, + struct i965_surface *dst_surface, + const VARectangle *dst_rect); + +void +i965_post_processing_terminate(VADriverContextP ctx); +bool +i965_post_processing_init(VADriverContextP ctx); + + +extern VAStatus +i965_proc_picture(VADriverContextP ctx, + VAProfile profile, + union codec_state *codec_state, + struct hw_context *hw_context); + +#endif /* __I965_POST_PROCESSING_H__ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.c new file mode 100644 index 000000000..2e24353b2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.c @@ -0,0 +1,3235 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Eric Anholt + * Keith Packard + * Xiang Haihao + * + */ + +/* + * Most of rendering codes are ported from xf86-video-intel/src/i965_video.c + */ + +#include +#include +#include +#include +#include + +#include + +#include "intel_batchbuffer.h" +#include "intel_driver.h" +#include "i965_defines.h" +#include "i965_drv_video.h" +#include "i965_structs.h" +#include "i965_yuv_coefs.h" + +#include "i965_render.h" + +#define SF_KERNEL_NUM_GRF 16 +#define SF_MAX_THREADS 1 + +static const uint32_t sf_kernel_static[][4] = +{ +#include "shaders/render/exa_sf.g4b" +}; + +#define PS_KERNEL_NUM_GRF 48 +#define PS_MAX_THREADS 32 + +#define I965_GRF_BLOCKS(nreg) ((nreg + 15) / 16 - 1) + +static const uint32_t ps_kernel_static[][4] = +{ +#include "shaders/render/exa_wm_xy.g4b" +#include "shaders/render/exa_wm_src_affine.g4b" +#include "shaders/render/exa_wm_src_sample_planar.g4b" +#include "shaders/render/exa_wm_yuv_color_balance.g4b" +#include "shaders/render/exa_wm_yuv_rgb.g4b" +#include "shaders/render/exa_wm_write.g4b" +}; +static const uint32_t ps_subpic_kernel_static[][4] = +{ +#include "shaders/render/exa_wm_xy.g4b" +#include "shaders/render/exa_wm_src_affine.g4b" +#include "shaders/render/exa_wm_src_sample_argb.g4b" +#include "shaders/render/exa_wm_write.g4b" +}; + +/* On IRONLAKE */ +static const uint32_t sf_kernel_static_gen5[][4] = +{ +#include "shaders/render/exa_sf.g4b.gen5" +}; + +static const uint32_t ps_kernel_static_gen5[][4] = +{ +#include "shaders/render/exa_wm_xy.g4b.gen5" +#include "shaders/render/exa_wm_src_affine.g4b.gen5" +#include "shaders/render/exa_wm_src_sample_planar.g4b.gen5" +#include "shaders/render/exa_wm_yuv_color_balance.g4b.gen5" +#include "shaders/render/exa_wm_yuv_rgb.g4b.gen5" +#include "shaders/render/exa_wm_write.g4b.gen5" +}; +static const uint32_t ps_subpic_kernel_static_gen5[][4] = +{ +#include "shaders/render/exa_wm_xy.g4b.gen5" +#include "shaders/render/exa_wm_src_affine.g4b.gen5" +#include "shaders/render/exa_wm_src_sample_argb.g4b.gen5" +#include "shaders/render/exa_wm_write.g4b.gen5" +}; + +/* programs for Sandybridge */ +static const uint32_t sf_kernel_static_gen6[][4] = +{ +}; + +static const uint32_t ps_kernel_static_gen6[][4] = { +#include "shaders/render/exa_wm_src_affine.g6b" +#include "shaders/render/exa_wm_src_sample_planar.g6b" +#include "shaders/render/exa_wm_yuv_color_balance.g6b" +#include "shaders/render/exa_wm_yuv_rgb.g6b" +#include "shaders/render/exa_wm_write.g6b" +}; + +static const uint32_t ps_subpic_kernel_static_gen6[][4] = { +#include "shaders/render/exa_wm_src_affine.g6b" +#include "shaders/render/exa_wm_src_sample_argb.g6b" +#include "shaders/render/exa_wm_write.g6b" +}; + +/* programs for Ivybridge */ +static const uint32_t sf_kernel_static_gen7[][4] = +{ +}; + +static const uint32_t ps_kernel_static_gen7[][4] = { +#include "shaders/render/exa_wm_src_affine.g7b" +#include "shaders/render/exa_wm_src_sample_planar.g7b" +#include "shaders/render/exa_wm_yuv_color_balance.g7b" +#include "shaders/render/exa_wm_yuv_rgb.g7b" +#include "shaders/render/exa_wm_write.g7b" +}; + +static const uint32_t ps_subpic_kernel_static_gen7[][4] = { +#include "shaders/render/exa_wm_src_affine.g7b" +#include "shaders/render/exa_wm_src_sample_argb.g7b" +#include "shaders/render/exa_wm_write.g7b" +}; + +/* Programs for Haswell */ +static const uint32_t ps_kernel_static_gen7_haswell[][4] = { +#include "shaders/render/exa_wm_src_affine.g7b" +#include "shaders/render/exa_wm_src_sample_planar.g7b.haswell" +#include "shaders/render/exa_wm_yuv_color_balance.g7b.haswell" +#include "shaders/render/exa_wm_yuv_rgb.g7b" +#include "shaders/render/exa_wm_write.g7b" +}; + + +#define SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7) + +#define SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE * index) +#define BINDING_TABLE_OFFSET SURFACE_STATE_OFFSET(MAX_RENDER_SURFACES) + +static uint32_t float_to_uint (float f) +{ + union { + uint32_t i; + float f; + } x; + + x.f = f; + return x.i; +} + +enum +{ + SF_KERNEL = 0, + PS_KERNEL, + PS_SUBPIC_KERNEL +}; + +static struct i965_kernel render_kernels_gen4[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static, + sizeof(sf_kernel_static), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static, + sizeof(ps_kernel_static), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static, + sizeof(ps_subpic_kernel_static), + NULL + } +}; + +static struct i965_kernel render_kernels_gen5[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen5, + sizeof(sf_kernel_static_gen5), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen5, + sizeof(ps_kernel_static_gen5), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen5, + sizeof(ps_subpic_kernel_static_gen5), + NULL + } +}; + +static struct i965_kernel render_kernels_gen6[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen6, + sizeof(sf_kernel_static_gen6), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen6, + sizeof(ps_kernel_static_gen6), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen6, + sizeof(ps_subpic_kernel_static_gen6), + NULL + } +}; + +static struct i965_kernel render_kernels_gen7[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen7, + sizeof(sf_kernel_static_gen7), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen7, + sizeof(ps_kernel_static_gen7), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen7, + sizeof(ps_subpic_kernel_static_gen7), + NULL + } +}; + +static struct i965_kernel render_kernels_gen7_haswell[] = { + { + "SF", + SF_KERNEL, + sf_kernel_static_gen7, + sizeof(sf_kernel_static_gen7), + NULL + }, + { + "PS", + PS_KERNEL, + ps_kernel_static_gen7_haswell, + sizeof(ps_kernel_static_gen7_haswell), + NULL + }, + + { + "PS_SUBPIC", + PS_SUBPIC_KERNEL, + ps_subpic_kernel_static_gen7, + sizeof(ps_subpic_kernel_static_gen7), + NULL + } +}; + +#define URB_VS_ENTRIES 8 +#define URB_VS_ENTRY_SIZE 1 + +#define URB_GS_ENTRIES 0 +#define URB_GS_ENTRY_SIZE 0 + +#define URB_CLIP_ENTRIES 0 +#define URB_CLIP_ENTRY_SIZE 0 + +#define URB_SF_ENTRIES 1 +#define URB_SF_ENTRY_SIZE 2 + +#define URB_CS_ENTRIES 4 +#define URB_CS_ENTRY_SIZE 4 + +static void +i965_render_vs_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_vs_unit_state *vs_state; + + dri_bo_map(render_state->vs.state, 1); + assert(render_state->vs.state->virtual); + vs_state = render_state->vs.state->virtual; + memset(vs_state, 0, sizeof(*vs_state)); + + if (IS_IRONLAKE(i965->intel.device_info)) + vs_state->thread4.nr_urb_entries = URB_VS_ENTRIES >> 2; + else + vs_state->thread4.nr_urb_entries = URB_VS_ENTRIES; + + vs_state->thread4.urb_entry_allocation_size = URB_VS_ENTRY_SIZE - 1; + vs_state->vs6.vs_enable = 0; + vs_state->vs6.vert_cache_disable = 1; + + dri_bo_unmap(render_state->vs.state); +} + +static void +i965_render_sf_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_sf_unit_state *sf_state; + + dri_bo_map(render_state->sf.state, 1); + assert(render_state->sf.state->virtual); + sf_state = render_state->sf.state->virtual; + memset(sf_state, 0, sizeof(*sf_state)); + + sf_state->thread0.grf_reg_count = I965_GRF_BLOCKS(SF_KERNEL_NUM_GRF); + sf_state->thread0.kernel_start_pointer = render_state->render_kernels[SF_KERNEL].bo->offset >> 6; + + sf_state->sf1.single_program_flow = 1; /* XXX */ + sf_state->sf1.binding_table_entry_count = 0; + sf_state->sf1.thread_priority = 0; + sf_state->sf1.floating_point_mode = 0; /* Mesa does this */ + sf_state->sf1.illegal_op_exception_enable = 1; + sf_state->sf1.mask_stack_exception_enable = 1; + sf_state->sf1.sw_exception_enable = 1; + + /* scratch space is not used in our kernel */ + sf_state->thread2.per_thread_scratch_space = 0; + sf_state->thread2.scratch_space_base_pointer = 0; + + sf_state->thread3.const_urb_entry_read_length = 0; /* no const URBs */ + sf_state->thread3.const_urb_entry_read_offset = 0; /* no const URBs */ + sf_state->thread3.urb_entry_read_length = 1; /* 1 URB per vertex */ + sf_state->thread3.urb_entry_read_offset = 0; + sf_state->thread3.dispatch_grf_start_reg = 3; + + sf_state->thread4.max_threads = SF_MAX_THREADS - 1; + sf_state->thread4.urb_entry_allocation_size = URB_SF_ENTRY_SIZE - 1; + sf_state->thread4.nr_urb_entries = URB_SF_ENTRIES; + sf_state->thread4.stats_enable = 1; + + sf_state->sf5.viewport_transform = 0; /* skip viewport */ + + sf_state->sf6.cull_mode = I965_CULLMODE_NONE; + sf_state->sf6.scissor = 0; + + sf_state->sf7.trifan_pv = 2; + + sf_state->sf6.dest_org_vbias = 0x8; + sf_state->sf6.dest_org_hbias = 0x8; + + dri_bo_emit_reloc(render_state->sf.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + sf_state->thread0.grf_reg_count << 1, + offsetof(struct i965_sf_unit_state, thread0), + render_state->render_kernels[SF_KERNEL].bo); + + dri_bo_unmap(render_state->sf.state); +} + +static void +i965_render_sampler(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_sampler_state *sampler_state; + int i; + + assert(render_state->wm.sampler_count > 0); + assert(render_state->wm.sampler_count <= MAX_SAMPLERS); + + dri_bo_map(render_state->wm.sampler, 1); + assert(render_state->wm.sampler->virtual); + sampler_state = render_state->wm.sampler->virtual; + for (i = 0; i < render_state->wm.sampler_count; i++) { + memset(sampler_state, 0, sizeof(*sampler_state)); + sampler_state->ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss1.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss1.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss1.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state++; + } + + dri_bo_unmap(render_state->wm.sampler); +} +static void +i965_subpic_render_wm_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_wm_unit_state *wm_state; + + assert(render_state->wm.sampler); + + dri_bo_map(render_state->wm.state, 1); + assert(render_state->wm.state->virtual); + wm_state = render_state->wm.state->virtual; + memset(wm_state, 0, sizeof(*wm_state)); + + wm_state->thread0.grf_reg_count = I965_GRF_BLOCKS(PS_KERNEL_NUM_GRF); + wm_state->thread0.kernel_start_pointer = render_state->render_kernels[PS_SUBPIC_KERNEL].bo->offset >> 6; + + wm_state->thread1.single_program_flow = 1; /* XXX */ + + if (IS_IRONLAKE(i965->intel.device_info)) + wm_state->thread1.binding_table_entry_count = 0; /* hardware requirement */ + else + wm_state->thread1.binding_table_entry_count = 7; + + wm_state->thread2.scratch_space_base_pointer = 0; + wm_state->thread2.per_thread_scratch_space = 0; /* 1024 bytes */ + + wm_state->thread3.dispatch_grf_start_reg = 2; /* XXX */ + wm_state->thread3.const_urb_entry_read_length = 4; + wm_state->thread3.const_urb_entry_read_offset = 0; + wm_state->thread3.urb_entry_read_length = 1; /* XXX */ + wm_state->thread3.urb_entry_read_offset = 0; /* XXX */ + + wm_state->wm4.stats_enable = 0; + wm_state->wm4.sampler_state_pointer = render_state->wm.sampler->offset >> 5; + + if (IS_IRONLAKE(i965->intel.device_info)) { + wm_state->wm4.sampler_count = 0; /* hardware requirement */ + } else { + wm_state->wm4.sampler_count = (render_state->wm.sampler_count + 3) / 4; + } + + wm_state->wm5.max_threads = i965->intel.device_info->max_wm_threads - 1; + wm_state->wm5.thread_dispatch_enable = 1; + wm_state->wm5.enable_16_pix = 1; + wm_state->wm5.enable_8_pix = 0; + wm_state->wm5.early_depth_test = 1; + + dri_bo_emit_reloc(render_state->wm.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + wm_state->thread0.grf_reg_count << 1, + offsetof(struct i965_wm_unit_state, thread0), + render_state->render_kernels[PS_SUBPIC_KERNEL].bo); + + dri_bo_emit_reloc(render_state->wm.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + wm_state->wm4.sampler_count << 2, + offsetof(struct i965_wm_unit_state, wm4), + render_state->wm.sampler); + + dri_bo_unmap(render_state->wm.state); +} + + +static void +i965_render_wm_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_wm_unit_state *wm_state; + + assert(render_state->wm.sampler); + + dri_bo_map(render_state->wm.state, 1); + assert(render_state->wm.state->virtual); + wm_state = render_state->wm.state->virtual; + memset(wm_state, 0, sizeof(*wm_state)); + + wm_state->thread0.grf_reg_count = I965_GRF_BLOCKS(PS_KERNEL_NUM_GRF); + wm_state->thread0.kernel_start_pointer = render_state->render_kernels[PS_KERNEL].bo->offset >> 6; + + wm_state->thread1.single_program_flow = 1; /* XXX */ + + if (IS_IRONLAKE(i965->intel.device_info)) + wm_state->thread1.binding_table_entry_count = 0; /* hardware requirement */ + else + wm_state->thread1.binding_table_entry_count = 7; + + wm_state->thread2.scratch_space_base_pointer = 0; + wm_state->thread2.per_thread_scratch_space = 0; /* 1024 bytes */ + + wm_state->thread3.dispatch_grf_start_reg = 2; /* XXX */ + wm_state->thread3.const_urb_entry_read_length = 4; + wm_state->thread3.const_urb_entry_read_offset = 0; + wm_state->thread3.urb_entry_read_length = 1; /* XXX */ + wm_state->thread3.urb_entry_read_offset = 0; /* XXX */ + + wm_state->wm4.stats_enable = 0; + wm_state->wm4.sampler_state_pointer = render_state->wm.sampler->offset >> 5; + + if (IS_IRONLAKE(i965->intel.device_info)) { + wm_state->wm4.sampler_count = 0; /* hardware requirement */ + } else { + wm_state->wm4.sampler_count = (render_state->wm.sampler_count + 3) / 4; + } + + wm_state->wm5.max_threads = i965->intel.device_info->max_wm_threads - 1; + wm_state->wm5.thread_dispatch_enable = 1; + wm_state->wm5.enable_16_pix = 1; + wm_state->wm5.enable_8_pix = 0; + wm_state->wm5.early_depth_test = 1; + + dri_bo_emit_reloc(render_state->wm.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + wm_state->thread0.grf_reg_count << 1, + offsetof(struct i965_wm_unit_state, thread0), + render_state->render_kernels[PS_KERNEL].bo); + + dri_bo_emit_reloc(render_state->wm.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + wm_state->wm4.sampler_count << 2, + offsetof(struct i965_wm_unit_state, wm4), + render_state->wm.sampler); + + dri_bo_unmap(render_state->wm.state); +} + +static void +i965_render_cc_viewport(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_cc_viewport *cc_viewport; + + dri_bo_map(render_state->cc.viewport, 1); + assert(render_state->cc.viewport->virtual); + cc_viewport = render_state->cc.viewport->virtual; + memset(cc_viewport, 0, sizeof(*cc_viewport)); + + cc_viewport->min_depth = -1.e35; + cc_viewport->max_depth = 1.e35; + + dri_bo_unmap(render_state->cc.viewport); +} + +static void +i965_subpic_render_cc_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_cc_unit_state *cc_state; + + assert(render_state->cc.viewport); + + dri_bo_map(render_state->cc.state, 1); + assert(render_state->cc.state->virtual); + cc_state = render_state->cc.state->virtual; + memset(cc_state, 0, sizeof(*cc_state)); + + cc_state->cc0.stencil_enable = 0; /* disable stencil */ + cc_state->cc2.depth_test = 0; /* disable depth test */ + cc_state->cc2.logicop_enable = 0; /* disable logic op */ + cc_state->cc3.ia_blend_enable = 0 ; /* blend alpha just like colors */ + cc_state->cc3.blend_enable = 1; /* enable color blend */ + cc_state->cc3.alpha_test = 0; /* disable alpha test */ + cc_state->cc3.alpha_test_format = 0;//0:ALPHATEST_UNORM8; /*store alpha value with UNORM8 */ + cc_state->cc3.alpha_test_func = 5;//COMPAREFUNCTION_LESS; /*pass if less than the reference */ + cc_state->cc4.cc_viewport_state_offset = render_state->cc.viewport->offset >> 5; + + cc_state->cc5.dither_enable = 0; /* disable dither */ + cc_state->cc5.logicop_func = 0xc; /* WHITE */ + cc_state->cc5.statistics_enable = 1; + cc_state->cc5.ia_blend_function = I965_BLENDFUNCTION_ADD; + cc_state->cc5.ia_src_blend_factor = I965_BLENDFACTOR_DST_ALPHA; + cc_state->cc5.ia_dest_blend_factor = I965_BLENDFACTOR_DST_ALPHA; + + cc_state->cc6.clamp_post_alpha_blend = 0; + cc_state->cc6.clamp_pre_alpha_blend =0; + + /*final color = src_color*src_blend_factor +/- dst_color*dest_color_blend_factor*/ + cc_state->cc6.blend_function = I965_BLENDFUNCTION_ADD; + cc_state->cc6.src_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + cc_state->cc6.dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + + /*alpha test reference*/ + cc_state->cc7.alpha_ref.f =0.0 ; + + + dri_bo_emit_reloc(render_state->cc.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_cc_unit_state, cc4), + render_state->cc.viewport); + + dri_bo_unmap(render_state->cc.state); +} + + +static void +i965_render_cc_unit(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct i965_cc_unit_state *cc_state; + + assert(render_state->cc.viewport); + + dri_bo_map(render_state->cc.state, 1); + assert(render_state->cc.state->virtual); + cc_state = render_state->cc.state->virtual; + memset(cc_state, 0, sizeof(*cc_state)); + + cc_state->cc0.stencil_enable = 0; /* disable stencil */ + cc_state->cc2.depth_test = 0; /* disable depth test */ + cc_state->cc2.logicop_enable = 1; /* enable logic op */ + cc_state->cc3.ia_blend_enable = 0; /* blend alpha just like colors */ + cc_state->cc3.blend_enable = 0; /* disable color blend */ + cc_state->cc3.alpha_test = 0; /* disable alpha test */ + cc_state->cc4.cc_viewport_state_offset = render_state->cc.viewport->offset >> 5; + + cc_state->cc5.dither_enable = 0; /* disable dither */ + cc_state->cc5.logicop_func = 0xc; /* WHITE */ + cc_state->cc5.statistics_enable = 1; + cc_state->cc5.ia_blend_function = I965_BLENDFUNCTION_ADD; + cc_state->cc5.ia_src_blend_factor = I965_BLENDFACTOR_ONE; + cc_state->cc5.ia_dest_blend_factor = I965_BLENDFACTOR_ONE; + + dri_bo_emit_reloc(render_state->cc.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0, + offsetof(struct i965_cc_unit_state, cc4), + render_state->cc.viewport); + + dri_bo_unmap(render_state->cc.state); +} + +static void +i965_render_set_surface_tiling(struct i965_surface_state *ss, unsigned int tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss3.tiled_surface = 0; + ss->ss3.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss3.tiled_surface = 1; + ss->ss3.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +static void +i965_render_set_surface_state( + struct i965_surface_state *ss, + dri_bo *bo, + unsigned long offset, + unsigned int width, + unsigned int height, + unsigned int pitch, + unsigned int format, + unsigned int flags +) +{ + unsigned int tiling; + unsigned int swizzle; + + memset(ss, 0, sizeof(*ss)); + + switch (flags & (VA_TOP_FIELD|VA_BOTTOM_FIELD)) { + case VA_BOTTOM_FIELD: + ss->ss0.vert_line_stride_ofs = 1; + /* fall-through */ + case VA_TOP_FIELD: + ss->ss0.vert_line_stride = 1; + height /= 2; + break; + } + + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + ss->ss0.color_blend = 1; + + ss->ss1.base_addr = bo->offset + offset; + + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + + ss->ss3.pitch = pitch - 1; + + dri_bo_get_tiling(bo, &tiling, &swizzle); + i965_render_set_surface_tiling(ss, tiling); +} + +static void +gen7_render_set_surface_tiling(struct gen7_surface_state *ss, uint32_t tiling) +{ + switch (tiling) { + case I915_TILING_NONE: + ss->ss0.tiled_surface = 0; + ss->ss0.tile_walk = 0; + break; + case I915_TILING_X: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_XMAJOR; + break; + case I915_TILING_Y: + ss->ss0.tiled_surface = 1; + ss->ss0.tile_walk = I965_TILEWALK_YMAJOR; + break; + } +} + +/* Set "Shader Channel Select" */ +void +gen7_render_set_surface_scs(struct gen7_surface_state *ss) +{ + ss->ss7.shader_chanel_select_r = HSW_SCS_RED; + ss->ss7.shader_chanel_select_g = HSW_SCS_GREEN; + ss->ss7.shader_chanel_select_b = HSW_SCS_BLUE; + ss->ss7.shader_chanel_select_a = HSW_SCS_ALPHA; +} + +static void +gen7_render_set_surface_state( + struct gen7_surface_state *ss, + dri_bo *bo, + unsigned long offset, + int width, + int height, + int pitch, + int format, + unsigned int flags +) +{ + unsigned int tiling; + unsigned int swizzle; + + memset(ss, 0, sizeof(*ss)); + + switch (flags & (VA_TOP_FIELD|VA_BOTTOM_FIELD)) { + case VA_BOTTOM_FIELD: + ss->ss0.vert_line_stride_ofs = 1; + /* fall-through */ + case VA_TOP_FIELD: + ss->ss0.vert_line_stride = 1; + height /= 2; + break; + } + + ss->ss0.surface_type = I965_SURFACE_2D; + ss->ss0.surface_format = format; + + ss->ss1.base_addr = bo->offset + offset; + + ss->ss2.width = width - 1; + ss->ss2.height = height - 1; + + ss->ss3.pitch = pitch - 1; + + dri_bo_get_tiling(bo, &tiling, &swizzle); + gen7_render_set_surface_tiling(ss, tiling); +} + + +static void +i965_render_src_surface_state( + VADriverContextP ctx, + int index, + dri_bo *region, + unsigned long offset, + int w, + int h, + int pitch, + int format, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + + assert(index < MAX_RENDER_SURFACES); + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + if (IS_GEN7(i965->intel.device_info)) { + gen7_render_set_surface_state(ss, + region, offset, + w, h, + pitch, format, flags); + if (IS_HASWELL(i965->intel.device_info)) + gen7_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_SAMPLER, 0, + offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen7_surface_state, ss1), + region); + } else { + i965_render_set_surface_state(ss, + region, offset, + w, h, + pitch, format, flags); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_SAMPLER, 0, + offset, + SURFACE_STATE_OFFSET(index) + offsetof(struct i965_surface_state, ss1), + region); + } + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); + render_state->wm.sampler_count++; +} + +static void +i965_render_src_surfaces_state( + VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags +) +{ + int region_pitch; + int rw, rh; + dri_bo *region; + + region_pitch = obj_surface->width; + rw = obj_surface->orig_width; + rh = obj_surface->orig_height; + region = obj_surface->bo; + + i965_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); /* Y */ + i965_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); + + if (obj_surface->fourcc == VA_FOURCC_Y800) /* single plane for grayscale */ + return; + + if (obj_surface->fourcc == VA_FOURCC_NV12) { + i965_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); /* UV */ + i965_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8G8_UNORM, flags); + } else { + i965_render_src_surface_state(ctx, 3, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* U */ + i965_render_src_surface_state(ctx, 4, region, + region_pitch * obj_surface->y_cb_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + i965_render_src_surface_state(ctx, 5, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); /* V */ + i965_render_src_surface_state(ctx, 6, region, + region_pitch * obj_surface->y_cr_offset, + obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch, + I965_SURFACEFORMAT_R8_UNORM, flags); + } +} + +static void +i965_subpic_render_src_surfaces_state(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + dri_bo *subpic_region; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + struct object_image *obj_image = obj_subpic->obj_image; + + assert(obj_surface); + assert(obj_surface->bo); + subpic_region = obj_image->bo; + /*subpicture surface*/ + i965_render_src_surface_state(ctx, 1, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); + i965_render_src_surface_state(ctx, 2, subpic_region, 0, obj_subpic->width, obj_subpic->height, obj_subpic->pitch, obj_subpic->format, 0); +} + +static void +i965_render_dest_surface_state(VADriverContextP ctx, int index) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + void *ss; + dri_bo *ss_bo = render_state->wm.surface_state_binding_table_bo; + int format; + assert(index < MAX_RENDER_SURFACES); + + if (dest_region->cpp == 2) { + format = I965_SURFACEFORMAT_B5G6R5_UNORM; + } else { + format = I965_SURFACEFORMAT_B8G8R8A8_UNORM; + } + + dri_bo_map(ss_bo, 1); + assert(ss_bo->virtual); + ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index); + + if (IS_GEN7(i965->intel.device_info)) { + gen7_render_set_surface_state(ss, + dest_region->bo, 0, + dest_region->width, dest_region->height, + dest_region->pitch, format, 0); + if (IS_HASWELL(i965->intel.device_info)) + gen7_render_set_surface_scs(ss); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + SURFACE_STATE_OFFSET(index) + offsetof(struct gen7_surface_state, ss1), + dest_region->bo); + } else { + i965_render_set_surface_state(ss, + dest_region->bo, 0, + dest_region->width, dest_region->height, + dest_region->pitch, format, 0); + dri_bo_emit_reloc(ss_bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0, + SURFACE_STATE_OFFSET(index) + offsetof(struct i965_surface_state, ss1), + dest_region->bo); + } + + ((unsigned int *)((char *)ss_bo->virtual + BINDING_TABLE_OFFSET))[index] = SURFACE_STATE_OFFSET(index); + dri_bo_unmap(ss_bo); +} + +static void +i965_fill_vertex_buffer( + VADriverContextP ctx, + float tex_coords[4], /* [(u1,v1);(u2,v2)] */ + float vid_coords[4] /* [(x1,y1);(x2,y2)] */ +) +{ + struct i965_driver_data * const i965 = i965_driver_data(ctx); + float vb[12]; + + enum { X1, Y1, X2, Y2 }; + + static const unsigned int g_rotation_indices[][6] = { + [VA_ROTATION_NONE] = { X2, Y2, X1, Y2, X1, Y1 }, + [VA_ROTATION_90] = { X2, Y1, X2, Y2, X1, Y2 }, + [VA_ROTATION_180] = { X1, Y1, X2, Y1, X2, Y2 }, + [VA_ROTATION_270] = { X1, Y2, X1, Y1, X2, Y1 }, + }; + + const unsigned int * const rotation_indices = + g_rotation_indices[i965->rotation_attrib->value]; + + vb[0] = tex_coords[rotation_indices[0]]; /* bottom-right corner */ + vb[1] = tex_coords[rotation_indices[1]]; + vb[2] = vid_coords[X2]; + vb[3] = vid_coords[Y2]; + + vb[4] = tex_coords[rotation_indices[2]]; /* bottom-left corner */ + vb[5] = tex_coords[rotation_indices[3]]; + vb[6] = vid_coords[X1]; + vb[7] = vid_coords[Y2]; + + vb[8] = tex_coords[rotation_indices[4]]; /* top-left corner */ + vb[9] = tex_coords[rotation_indices[5]]; + vb[10] = vid_coords[X1]; + vb[11] = vid_coords[Y1]; + + dri_bo_subdata(i965->render_state.vb.vertex_buffer, 0, sizeof(vb), vb); +} + +static void +i965_subpic_render_upload_vertex(VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *output_rect) +{ + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + float tex_coords[4], vid_coords[4]; + VARectangle dst_rect; + + if (obj_subpic->flags & VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD) + dst_rect = obj_subpic->dst_rect; + else { + const float sx = (float)output_rect->width / obj_surface->orig_width; + const float sy = (float)output_rect->height / obj_surface->orig_height; + dst_rect.x = output_rect->x + sx * obj_subpic->dst_rect.x; + dst_rect.y = output_rect->y + sy * obj_subpic->dst_rect.y; + dst_rect.width = sx * obj_subpic->dst_rect.width; + dst_rect.height = sy * obj_subpic->dst_rect.height; + } + + tex_coords[0] = (float)obj_subpic->src_rect.x / obj_subpic->width; + tex_coords[1] = (float)obj_subpic->src_rect.y / obj_subpic->height; + tex_coords[2] = (float)(obj_subpic->src_rect.x + obj_subpic->src_rect.width) / obj_subpic->width; + tex_coords[3] = (float)(obj_subpic->src_rect.y + obj_subpic->src_rect.height) / obj_subpic->height; + + vid_coords[0] = dst_rect.x; + vid_coords[1] = dst_rect.y; + vid_coords[2] = (float)(dst_rect.x + dst_rect.width); + vid_coords[3] = (float)(dst_rect.y + dst_rect.height); + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +static void +i965_render_upload_vertex( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + float tex_coords[4], vid_coords[4]; + int width, height; + + width = obj_surface->orig_width; + height = obj_surface->orig_height; + + tex_coords[0] = (float)src_rect->x / width; + tex_coords[1] = (float)src_rect->y / height; + tex_coords[2] = (float)(src_rect->x + src_rect->width) / width; + tex_coords[3] = (float)(src_rect->y + src_rect->height) / height; + + vid_coords[0] = dest_region->x + dst_rect->x; + vid_coords[1] = dest_region->y + dst_rect->y; + vid_coords[2] = vid_coords[0] + dst_rect->width; + vid_coords[3] = vid_coords[1] + dst_rect->height; + + i965_fill_vertex_buffer(ctx, tex_coords, vid_coords); +} + +#define PI 3.1415926 + +static void +i965_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface, + unsigned int flags) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + unsigned short *constant_buffer; + float *color_balance_base; + float contrast = (float)i965->contrast_attrib->value / DEFAULT_CONTRAST; + float brightness = (float)i965->brightness_attrib->value / 255; /* YUV is float in the shader */ + float hue = (float)i965->hue_attrib->value / 180 * PI; + float saturation = (float)i965->saturation_attrib->value / DEFAULT_SATURATION; + float *yuv_to_rgb; + const float* yuv_coefs; + size_t coefs_length; + + dri_bo_map(render_state->curbe.bo, 1); + assert(render_state->curbe.bo->virtual); + constant_buffer = render_state->curbe.bo->virtual; + + if (obj_surface->subsampling == SUBSAMPLE_YUV400) { + assert(obj_surface->fourcc == VA_FOURCC_Y800); + + constant_buffer[0] = 2; + } else { + if (obj_surface->fourcc == VA_FOURCC_NV12) + constant_buffer[0] = 1; + else + constant_buffer[0] = 0; + } + + if (i965->contrast_attrib->value == DEFAULT_CONTRAST && + i965->brightness_attrib->value == DEFAULT_BRIGHTNESS && + i965->hue_attrib->value == DEFAULT_HUE && + i965->saturation_attrib->value == DEFAULT_SATURATION) + constant_buffer[1] = 1; /* skip color balance transformation */ + else + constant_buffer[1] = 0; + + color_balance_base = (float *)constant_buffer + 4; + *color_balance_base++ = contrast; + *color_balance_base++ = brightness; + *color_balance_base++ = cos(hue) * contrast * saturation; + *color_balance_base++ = sin(hue) * contrast * saturation; + + yuv_to_rgb = (float *)constant_buffer + 8; + yuv_coefs = i915_color_standard_to_coefs(i915_filter_to_color_standard(flags & VA_SRC_COLOR_MASK), + &coefs_length); + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); + + dri_bo_unmap(render_state->curbe.bo); +} + +static void +i965_subpic_render_upload_constants(VADriverContextP ctx, + struct object_surface *obj_surface) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + float *constant_buffer; + float global_alpha = 1.0; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + if (obj_subpic->flags & VA_SUBPICTURE_GLOBAL_ALPHA) { + global_alpha = obj_subpic->global_alpha; + } + + dri_bo_map(render_state->curbe.bo, 1); + + assert(render_state->curbe.bo->virtual); + constant_buffer = render_state->curbe.bo->virtual; + *constant_buffer = global_alpha; + + dri_bo_unmap(render_state->curbe.bo); +} + +static void +i965_surface_render_state_setup( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + i965_render_vs_unit(ctx); + i965_render_sf_unit(ctx); + i965_render_dest_surface_state(ctx, 0); + i965_render_src_surfaces_state(ctx, obj_surface, flags); + i965_render_sampler(ctx); + i965_render_wm_unit(ctx); + i965_render_cc_viewport(ctx); + i965_render_cc_unit(ctx); + i965_render_upload_vertex(ctx, obj_surface, src_rect, dst_rect); + i965_render_upload_constants(ctx, obj_surface, flags); +} + +static void +i965_subpic_render_state_setup( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + i965_render_vs_unit(ctx); + i965_render_sf_unit(ctx); + i965_render_dest_surface_state(ctx, 0); + i965_subpic_render_src_surfaces_state(ctx, obj_surface); + i965_render_sampler(ctx); + i965_subpic_render_wm_unit(ctx); + i965_render_cc_viewport(ctx); + i965_subpic_render_cc_unit(ctx); + i965_subpic_render_upload_constants(ctx, obj_surface); + i965_subpic_render_upload_vertex(ctx, obj_surface, dst_rect); +} + + +static void +i965_render_pipeline_select(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_3D); + ADVANCE_BATCH(batch); +} + +static void +i965_render_state_sip(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_STATE_SIP | 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_render_state_base_address(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + if (IS_IRONLAKE(i965->intel.device_info)) { + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 6); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } else { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | 4); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + OUT_BATCH(batch, 0 | BASE_ADDRESS_MODIFY); + ADVANCE_BATCH(batch); + } +} + +static void +i965_render_binding_table_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_BINDING_TABLE_POINTERS | 4); + OUT_BATCH(batch, 0); /* vs */ + OUT_BATCH(batch, 0); /* gs */ + OUT_BATCH(batch, 0); /* clip */ + OUT_BATCH(batch, 0); /* sf */ + OUT_BATCH(batch, BINDING_TABLE_OFFSET); + ADVANCE_BATCH(batch); +} + +static void +i965_render_constant_color(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_CONSTANT_COLOR | 3); + OUT_BATCH(batch, float_to_uint(1.0)); + OUT_BATCH(batch, float_to_uint(0.0)); + OUT_BATCH(batch, float_to_uint(1.0)); + OUT_BATCH(batch, float_to_uint(1.0)); + ADVANCE_BATCH(batch); +} + +static void +i965_render_pipelined_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, CMD_PIPELINED_POINTERS | 5); + OUT_RELOC(batch, render_state->vs.state, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_BATCH(batch, 0); /* disable GS */ + OUT_BATCH(batch, 0); /* disable CLIP */ + OUT_RELOC(batch, render_state->sf.state, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_RELOC(batch, render_state->wm.state, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + OUT_RELOC(batch, render_state->cc.state, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); + ADVANCE_BATCH(batch); +} + +static void +i965_render_urb_layout(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + int urb_vs_start, urb_vs_size; + int urb_gs_start, urb_gs_size; + int urb_clip_start, urb_clip_size; + int urb_sf_start, urb_sf_size; + int urb_cs_start, urb_cs_size; + + urb_vs_start = 0; + urb_vs_size = URB_VS_ENTRIES * URB_VS_ENTRY_SIZE; + urb_gs_start = urb_vs_start + urb_vs_size; + urb_gs_size = URB_GS_ENTRIES * URB_GS_ENTRY_SIZE; + urb_clip_start = urb_gs_start + urb_gs_size; + urb_clip_size = URB_CLIP_ENTRIES * URB_CLIP_ENTRY_SIZE; + urb_sf_start = urb_clip_start + urb_clip_size; + urb_sf_size = URB_SF_ENTRIES * URB_SF_ENTRY_SIZE; + urb_cs_start = urb_sf_start + urb_sf_size; + urb_cs_size = URB_CS_ENTRIES * URB_CS_ENTRY_SIZE; + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, + CMD_URB_FENCE | + UF0_CS_REALLOC | + UF0_SF_REALLOC | + UF0_CLIP_REALLOC | + UF0_GS_REALLOC | + UF0_VS_REALLOC | + 1); + OUT_BATCH(batch, + ((urb_clip_start + urb_clip_size) << UF1_CLIP_FENCE_SHIFT) | + ((urb_gs_start + urb_gs_size) << UF1_GS_FENCE_SHIFT) | + ((urb_vs_start + urb_vs_size) << UF1_VS_FENCE_SHIFT)); + OUT_BATCH(batch, + ((urb_cs_start + urb_cs_size) << UF2_CS_FENCE_SHIFT) | + ((urb_sf_start + urb_sf_size) << UF2_SF_FENCE_SHIFT)); + ADVANCE_BATCH(batch); +} + +static void +i965_render_cs_urb_layout(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CS_URB_STATE | 0); + OUT_BATCH(batch, + ((URB_CS_ENTRY_SIZE - 1) << 4) | /* URB Entry Allocation Size */ + (URB_CS_ENTRIES << 0)); /* Number of URB Entries */ + ADVANCE_BATCH(batch); +} + +static void +i965_render_constant_buffer(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_CONSTANT_BUFFER | (1 << 8) | (2 - 2)); + OUT_RELOC(batch, render_state->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + URB_CS_ENTRY_SIZE - 1); + ADVANCE_BATCH(batch); +} + +static void +i965_render_drawing_rectangle(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_DRAWING_RECTANGLE | 2); + OUT_BATCH(batch, 0x00000000); + OUT_BATCH(batch, (dest_region->width - 1) | (dest_region->height - 1) << 16); + OUT_BATCH(batch, 0x00000000); + ADVANCE_BATCH(batch); +} + +static void +i965_render_vertex_elements(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + if (IS_IRONLAKE(i965->intel.device_info)) { + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | 3); + /* offset 0: X,Y -> {X, Y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) | + VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + /* offset 8: S0, T0 -> {S0, T0, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) | + VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + ADVANCE_BATCH(batch); + } else { + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | 3); + /* offset 0: X,Y -> {X, Y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) | + VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT) | + (0 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT)); + /* offset 8: S0, T0 -> {S0, T0, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << VE0_VERTEX_BUFFER_INDEX_SHIFT) | + VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT) | + (4 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT)); + ADVANCE_BATCH(batch); + } +} + +static void +i965_render_upload_image_palette( + VADriverContextP ctx, + struct object_image *obj_image, + unsigned int alpha +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int i; + + assert(obj_image); + + if (!obj_image) + return; + + if (obj_image->image.num_palette_entries == 0) + return; + + BEGIN_BATCH(batch, 1 + obj_image->image.num_palette_entries); + OUT_BATCH(batch, CMD_SAMPLER_PALETTE_LOAD | (obj_image->image.num_palette_entries - 1)); + /*fill palette*/ + //int32_t out[16]; //0-23:color 23-31:alpha + for (i = 0; i < obj_image->image.num_palette_entries; i++) + OUT_BATCH(batch, (alpha << 24) | obj_image->palette[i]); + ADVANCE_BATCH(batch); +} + +static void +i965_render_startup(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, CMD_VERTEX_BUFFERS | 3); + OUT_BATCH(batch, + (0 << VB0_BUFFER_INDEX_SHIFT) | + VB0_VERTEXDATA | + ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 0); + + if (IS_IRONLAKE(i965->intel.device_info)) + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 12 * 4); + else + OUT_BATCH(batch, 3); + + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, + CMD_3DPRIMITIVE | + _3DPRIMITIVE_VERTEX_SEQUENTIAL | + (_3DPRIM_RECTLIST << _3DPRIMITIVE_TOPOLOGY_SHIFT) | + (0 << 9) | + 4); + OUT_BATCH(batch, 3); /* vertex count per instance */ + OUT_BATCH(batch, 0); /* start vertex offset */ + OUT_BATCH(batch, 1); /* single instance */ + OUT_BATCH(batch, 0); /* start instance location */ + OUT_BATCH(batch, 0); /* index buffer offset, ignored */ + ADVANCE_BATCH(batch); +} + +static void +i965_clear_dest_region(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + struct intel_region *dest_region = render_state->draw_region; + unsigned int blt_cmd, br13; + int pitch; + + blt_cmd = XY_COLOR_BLT_CMD; + br13 = 0xf0 << 16; + pitch = dest_region->pitch; + + if (dest_region->cpp == 4) { + br13 |= BR13_8888; + blt_cmd |= (XY_COLOR_BLT_WRITE_RGB | XY_COLOR_BLT_WRITE_ALPHA); + } else { + assert(dest_region->cpp == 2); + br13 |= BR13_565; + } + + if (dest_region->tiling != I915_TILING_NONE) { + blt_cmd |= XY_COLOR_BLT_DST_TILED; + pitch /= 4; + } + + br13 |= pitch; + + if (IS_GEN6(i965->intel.device_info) || + IS_GEN7(i965->intel.device_info)) { + intel_batchbuffer_start_atomic_blt(batch, 24); + BEGIN_BLT_BATCH(batch, 6); + } else { + intel_batchbuffer_start_atomic(batch, 24); + BEGIN_BATCH(batch, 6); + } + + OUT_BATCH(batch, blt_cmd); + OUT_BATCH(batch, br13); + OUT_BATCH(batch, (dest_region->y << 16) | (dest_region->x)); + OUT_BATCH(batch, ((dest_region->y + dest_region->height) << 16) | + (dest_region->x + dest_region->width)); + OUT_RELOC(batch, dest_region->bo, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, + 0); + OUT_BATCH(batch, 0x0); + ADVANCE_BATCH(batch); + intel_batchbuffer_end_atomic(batch); +} + +static void +i965_surface_render_pipeline_setup(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + i965_clear_dest_region(ctx); + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + i965_render_pipeline_select(ctx); + i965_render_state_sip(ctx); + i965_render_state_base_address(ctx); + i965_render_binding_table_pointers(ctx); + i965_render_constant_color(ctx); + i965_render_pipelined_pointers(ctx); + i965_render_urb_layout(ctx); + i965_render_cs_urb_layout(ctx); + i965_render_constant_buffer(ctx); + i965_render_drawing_rectangle(ctx); + i965_render_vertex_elements(ctx); + i965_render_startup(ctx); + intel_batchbuffer_end_atomic(batch); +} + +static void +i965_subpic_render_pipeline_setup(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + i965_render_pipeline_select(ctx); + i965_render_state_sip(ctx); + i965_render_state_base_address(ctx); + i965_render_binding_table_pointers(ctx); + i965_render_constant_color(ctx); + i965_render_pipelined_pointers(ctx); + i965_render_urb_layout(ctx); + i965_render_cs_urb_layout(ctx); + i965_render_constant_buffer(ctx); + i965_render_drawing_rectangle(ctx); + i965_render_vertex_elements(ctx); + i965_render_startup(ctx); + intel_batchbuffer_end_atomic(batch); +} + + +static void +i965_render_initialize(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + dri_bo *bo; + + /* VERTEX BUFFER */ + dri_bo_unreference(render_state->vb.vertex_buffer); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vertex buffer", + 4096, + 4096); + assert(bo); + render_state->vb.vertex_buffer = bo; + + /* VS */ + dri_bo_unreference(render_state->vs.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vs state", + sizeof(struct i965_vs_unit_state), + 64); + assert(bo); + render_state->vs.state = bo; + + /* GS */ + /* CLIP */ + /* SF */ + dri_bo_unreference(render_state->sf.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sf state", + sizeof(struct i965_sf_unit_state), + 64); + assert(bo); + render_state->sf.state = bo; + + /* WM */ + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_RENDER_SURFACES, + 4096); + assert(bo); + render_state->wm.surface_state_binding_table_bo = bo; + + dri_bo_unreference(render_state->wm.sampler); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler state", + MAX_SAMPLERS * sizeof(struct i965_sampler_state), + 64); + assert(bo); + render_state->wm.sampler = bo; + render_state->wm.sampler_count = 0; + + dri_bo_unreference(render_state->wm.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "wm state", + sizeof(struct i965_wm_unit_state), + 64); + assert(bo); + render_state->wm.state = bo; + + /* COLOR CALCULATOR */ + dri_bo_unreference(render_state->cc.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "color calc state", + sizeof(struct i965_cc_unit_state), + 64); + assert(bo); + render_state->cc.state = bo; + + dri_bo_unreference(render_state->cc.viewport); + bo = dri_bo_alloc(i965->intel.bufmgr, + "cc viewport", + sizeof(struct i965_cc_viewport), + 64); + assert(bo); + render_state->cc.viewport = bo; +} + +static void +i965_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + i965_render_initialize(ctx); + i965_surface_render_state_setup(ctx, obj_surface, src_rect, dst_rect, flags); + i965_surface_render_pipeline_setup(ctx); + intel_batchbuffer_flush(batch); +} + +static void +i965_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + assert(obj_subpic); + + i965_render_initialize(ctx); + i965_subpic_render_state_setup(ctx, obj_surface, src_rect, dst_rect); + i965_subpic_render_pipeline_setup(ctx); + i965_render_upload_image_palette(ctx, obj_subpic->obj_image, 0xff); + intel_batchbuffer_flush(batch); +} + +/* + * for GEN6+ + */ +static void +gen6_render_initialize(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + dri_bo *bo; + + /* VERTEX BUFFER */ + dri_bo_unreference(render_state->vb.vertex_buffer); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vertex buffer", + 4096, + 4096); + assert(bo); + render_state->vb.vertex_buffer = bo; + + /* WM */ + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_RENDER_SURFACES, + 4096); + assert(bo); + render_state->wm.surface_state_binding_table_bo = bo; + + dri_bo_unreference(render_state->wm.sampler); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler state", + MAX_SAMPLERS * sizeof(struct i965_sampler_state), + 4096); + assert(bo); + render_state->wm.sampler = bo; + render_state->wm.sampler_count = 0; + + /* COLOR CALCULATOR */ + dri_bo_unreference(render_state->cc.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "color calc state", + sizeof(struct gen6_color_calc_state), + 4096); + assert(bo); + render_state->cc.state = bo; + + /* CC VIEWPORT */ + dri_bo_unreference(render_state->cc.viewport); + bo = dri_bo_alloc(i965->intel.bufmgr, + "cc viewport", + sizeof(struct i965_cc_viewport), + 4096); + assert(bo); + render_state->cc.viewport = bo; + + /* BLEND STATE */ + dri_bo_unreference(render_state->cc.blend); + bo = dri_bo_alloc(i965->intel.bufmgr, + "blend state", + sizeof(struct gen6_blend_state), + 4096); + assert(bo); + render_state->cc.blend = bo; + + /* DEPTH & STENCIL STATE */ + dri_bo_unreference(render_state->cc.depth_stencil); + bo = dri_bo_alloc(i965->intel.bufmgr, + "depth & stencil state", + sizeof(struct gen6_depth_stencil_state), + 4096); + assert(bo); + render_state->cc.depth_stencil = bo; +} + +static void +gen6_render_color_calc_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_color_calc_state *color_calc_state; + + dri_bo_map(render_state->cc.state, 1); + assert(render_state->cc.state->virtual); + color_calc_state = render_state->cc.state->virtual; + memset(color_calc_state, 0, sizeof(*color_calc_state)); + color_calc_state->constant_r = 1.0; + color_calc_state->constant_g = 0.0; + color_calc_state->constant_b = 1.0; + color_calc_state->constant_a = 1.0; + dri_bo_unmap(render_state->cc.state); +} + +static void +gen6_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_blend_state *blend_state; + + dri_bo_map(render_state->cc.blend, 1); + assert(render_state->cc.blend->virtual); + blend_state = render_state->cc.blend->virtual; + memset(blend_state, 0, sizeof(*blend_state)); + blend_state->blend1.logic_op_enable = 1; + blend_state->blend1.logic_op_func = 0xc; + dri_bo_unmap(render_state->cc.blend); +} + +static void +gen6_render_depth_stencil_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_depth_stencil_state *depth_stencil_state; + + dri_bo_map(render_state->cc.depth_stencil, 1); + assert(render_state->cc.depth_stencil->virtual); + depth_stencil_state = render_state->cc.depth_stencil->virtual; + memset(depth_stencil_state, 0, sizeof(*depth_stencil_state)); + dri_bo_unmap(render_state->cc.depth_stencil); +} + +static void +gen6_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + i965_render_dest_surface_state(ctx, 0); + i965_render_src_surfaces_state(ctx, obj_surface, flags); + i965_render_sampler(ctx); + i965_render_cc_viewport(ctx); + gen6_render_color_calc_state(ctx); + gen6_render_blend_state(ctx); + gen6_render_depth_stencil_state(ctx); + i965_render_upload_constants(ctx, obj_surface, flags); + i965_render_upload_vertex(ctx, obj_surface, src_rect, dst_rect); +} + +static void +gen6_emit_invarient_states(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_3D); + + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE | (3 - 2)); + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER | + GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1); /* 1 sample/pixel */ + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN6_3DSTATE_SAMPLE_MASK | (2 - 2)); + OUT_BATCH(batch, 1); + + /* Set system instruction pointer */ + OUT_BATCH(batch, CMD_STATE_SIP | 0); + OUT_BATCH(batch, 0); +} + +static void +gen6_emit_state_base_address(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (10 - 2)); + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state base address */ + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic state base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic state upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction access upper bound */ +} + +static void +gen6_emit_viewport_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, GEN6_3DSTATE_VIEWPORT_STATE_POINTERS | + GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC | + (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_RELOC(batch, render_state->cc.viewport, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); +} + +static void +gen6_emit_urb(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_URB | (3 - 2)); + OUT_BATCH(batch, ((1 - 1) << GEN6_3DSTATE_URB_VS_SIZE_SHIFT) | + (24 << GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT)); /* at least 24 on GEN6 */ + OUT_BATCH(batch, (0 << GEN6_3DSTATE_URB_GS_SIZE_SHIFT) | + (0 << GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT)); /* no GS thread */ +} + +static void +gen6_emit_cc_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, GEN6_3DSTATE_CC_STATE_POINTERS | (4 - 2)); + OUT_RELOC(batch, render_state->cc.blend, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); + OUT_RELOC(batch, render_state->cc.depth_stencil, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); + OUT_RELOC(batch, render_state->cc.state, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); +} + +static void +gen6_emit_sampler_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, GEN6_3DSTATE_SAMPLER_STATE_POINTERS | + GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS | + (4 - 2)); + OUT_BATCH(batch, 0); /* VS */ + OUT_BATCH(batch, 0); /* GS */ + OUT_RELOC(batch,render_state->wm.sampler, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); +} + +static void +gen6_emit_binding_table(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* Binding table pointers */ + OUT_BATCH(batch, CMD_BINDING_TABLE_POINTERS | + GEN6_BINDING_TABLE_MODIFY_PS | + (4 - 2)); + OUT_BATCH(batch, 0); /* vs */ + OUT_BATCH(batch, 0); /* gs */ + /* Only the PS uses the binding table */ + OUT_BATCH(batch, BINDING_TABLE_OFFSET); +} + +static void +gen6_emit_depth_buffer_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, CMD_DEPTH_BUFFER | (7 - 2)); + OUT_BATCH(batch, (I965_SURFACE_NULL << CMD_DEPTH_BUFFER_TYPE_SHIFT) | + (I965_DEPTHFORMAT_D32_FLOAT << CMD_DEPTH_BUFFER_FORMAT_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, CMD_CLEAR_PARAMS | (2 - 2)); + OUT_BATCH(batch, 0); +} + +static void +gen6_emit_drawing_rectangle(VADriverContextP ctx) +{ + i965_render_drawing_rectangle(ctx); +} + +static void +gen6_emit_vs_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* disable VS constant buffer */ + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_VS | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN6_3DSTATE_VS | (6 - 2)); + OUT_BATCH(batch, 0); /* without VS kernel */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ +} + +static void +gen6_emit_gs_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* disable GS constant buffer */ + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_GS | (5 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN6_3DSTATE_GS | (7 - 2)); + OUT_BATCH(batch, 0); /* without GS kernel */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ +} + +static void +gen6_emit_clip_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_CLIP | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); +} + +static void +gen6_emit_sf_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_SF | (20 - 2)); + OUT_BATCH(batch, (1 << GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT) | + (1 << GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT) | + (0 << GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, GEN6_3DSTATE_SF_CULL_NONE); + OUT_BATCH(batch, 2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); /* DW4 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* DW9 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* DW14 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* DW19 */ +} + +static void +gen6_emit_wm_state(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_PS | + GEN6_3DSTATE_CONSTANT_BUFFER_0_ENABLE | + (5 - 2)); + OUT_RELOC(batch, + render_state->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + (URB_CS_ENTRY_SIZE-1)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN6_3DSTATE_WM | (9 - 2)); + OUT_RELOC(batch, render_state->render_kernels[kernel].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BATCH(batch, (1 << GEN6_3DSTATE_WM_SAMPLER_COUNT_SHITF) | + (5 << GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, (6 << GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT)); /* DW4 */ + OUT_BATCH(batch, ((i965->intel.device_info->max_wm_threads - 1) << GEN6_3DSTATE_WM_MAX_THREADS_SHIFT) | + GEN6_3DSTATE_WM_DISPATCH_ENABLE | + GEN6_3DSTATE_WM_16_DISPATCH_ENABLE); + OUT_BATCH(batch, (1 << GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT) | + GEN6_3DSTATE_WM_PERSPECTIVE_PIXEL_BARYCENTRIC); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); +} + +static void +gen6_emit_vertex_element_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* Set up our vertex elements, sourced from the single vertex buffer. */ + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | (5 - 2)); + /* offset 0: X,Y -> {X, Y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN6_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + /* offset 8: S0, T0 -> {S0, T0, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN6_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); +} + +static void +gen6_emit_vertices(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 11); + OUT_BATCH(batch, CMD_VERTEX_BUFFERS | 3); + OUT_BATCH(batch, + (0 << GEN6_VB0_BUFFER_INDEX_SHIFT) | + GEN6_VB0_VERTEXDATA | + ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 0); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 12 * 4); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, + CMD_3DPRIMITIVE | + _3DPRIMITIVE_VERTEX_SEQUENTIAL | + (_3DPRIM_RECTLIST << _3DPRIMITIVE_TOPOLOGY_SHIFT) | + (0 << 9) | + 4); + OUT_BATCH(batch, 3); /* vertex count per instance */ + OUT_BATCH(batch, 0); /* start vertex offset */ + OUT_BATCH(batch, 1); /* single instance */ + OUT_BATCH(batch, 0); /* start instance location */ + OUT_BATCH(batch, 0); /* index buffer offset, ignored */ + ADVANCE_BATCH(batch); +} + +static void +gen6_render_emit_states(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen6_emit_invarient_states(ctx); + gen6_emit_state_base_address(ctx); + gen6_emit_viewport_state_pointers(ctx); + gen6_emit_urb(ctx); + gen6_emit_cc_state_pointers(ctx); + gen6_emit_sampler_state_pointers(ctx); + gen6_emit_vs_state(ctx); + gen6_emit_gs_state(ctx); + gen6_emit_clip_state(ctx); + gen6_emit_sf_state(ctx); + gen6_emit_wm_state(ctx, kernel); + gen6_emit_binding_table(ctx); + gen6_emit_depth_buffer_state(ctx); + gen6_emit_drawing_rectangle(ctx); + gen6_emit_vertex_element_state(ctx); + gen6_emit_vertices(ctx); + intel_batchbuffer_end_atomic(batch); +} + +static void +gen6_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + gen6_render_initialize(ctx); + gen6_render_setup_states(ctx, obj_surface, src_rect, dst_rect, flags); + i965_clear_dest_region(ctx); + gen6_render_emit_states(ctx, PS_KERNEL); + intel_batchbuffer_flush(batch); +} + +static void +gen6_subpicture_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_blend_state *blend_state; + + dri_bo_unmap(render_state->cc.state); + dri_bo_map(render_state->cc.blend, 1); + assert(render_state->cc.blend->virtual); + blend_state = render_state->cc.blend->virtual; + memset(blend_state, 0, sizeof(*blend_state)); + blend_state->blend0.dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.source_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.blend_enable = 1; + blend_state->blend1.post_blend_clamp_enable = 1; + blend_state->blend1.pre_blend_clamp_enable = 1; + blend_state->blend1.clamp_range = 0; /* clamp range [0, 1] */ + dri_bo_unmap(render_state->cc.blend); +} + +static void +gen6_subpicture_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + i965_render_dest_surface_state(ctx, 0); + i965_subpic_render_src_surfaces_state(ctx, obj_surface); + i965_render_sampler(ctx); + i965_render_cc_viewport(ctx); + gen6_render_color_calc_state(ctx); + gen6_subpicture_render_blend_state(ctx); + gen6_render_depth_stencil_state(ctx); + i965_subpic_render_upload_constants(ctx, obj_surface); + i965_subpic_render_upload_vertex(ctx, obj_surface, dst_rect); +} + +static void +gen6_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + assert(obj_subpic); + gen6_render_initialize(ctx); + gen6_subpicture_render_setup_states(ctx, obj_surface, src_rect, dst_rect); + gen6_render_emit_states(ctx, PS_SUBPIC_KERNEL); + i965_render_upload_image_palette(ctx, obj_subpic->obj_image, 0xff); + intel_batchbuffer_flush(batch); +} + +/* + * for GEN7 + */ +static void +gen7_render_initialize(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + dri_bo *bo; + + /* VERTEX BUFFER */ + dri_bo_unreference(render_state->vb.vertex_buffer); + bo = dri_bo_alloc(i965->intel.bufmgr, + "vertex buffer", + 4096, + 4096); + assert(bo); + render_state->vb.vertex_buffer = bo; + + /* WM */ + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + bo = dri_bo_alloc(i965->intel.bufmgr, + "surface state & binding table", + (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_RENDER_SURFACES, + 4096); + assert(bo); + render_state->wm.surface_state_binding_table_bo = bo; + + dri_bo_unreference(render_state->wm.sampler); + bo = dri_bo_alloc(i965->intel.bufmgr, + "sampler state", + MAX_SAMPLERS * sizeof(struct gen7_sampler_state), + 4096); + assert(bo); + render_state->wm.sampler = bo; + render_state->wm.sampler_count = 0; + + /* COLOR CALCULATOR */ + dri_bo_unreference(render_state->cc.state); + bo = dri_bo_alloc(i965->intel.bufmgr, + "color calc state", + sizeof(struct gen6_color_calc_state), + 4096); + assert(bo); + render_state->cc.state = bo; + + /* CC VIEWPORT */ + dri_bo_unreference(render_state->cc.viewport); + bo = dri_bo_alloc(i965->intel.bufmgr, + "cc viewport", + sizeof(struct i965_cc_viewport), + 4096); + assert(bo); + render_state->cc.viewport = bo; + + /* BLEND STATE */ + dri_bo_unreference(render_state->cc.blend); + bo = dri_bo_alloc(i965->intel.bufmgr, + "blend state", + sizeof(struct gen6_blend_state), + 4096); + assert(bo); + render_state->cc.blend = bo; + + /* DEPTH & STENCIL STATE */ + dri_bo_unreference(render_state->cc.depth_stencil); + bo = dri_bo_alloc(i965->intel.bufmgr, + "depth & stencil state", + sizeof(struct gen6_depth_stencil_state), + 4096); + assert(bo); + render_state->cc.depth_stencil = bo; +} + +/* + * for GEN8 + */ +#define ALIGNMENT 64 + +static void +gen7_render_color_calc_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_color_calc_state *color_calc_state; + + dri_bo_map(render_state->cc.state, 1); + assert(render_state->cc.state->virtual); + color_calc_state = render_state->cc.state->virtual; + memset(color_calc_state, 0, sizeof(*color_calc_state)); + color_calc_state->constant_r = 1.0; + color_calc_state->constant_g = 0.0; + color_calc_state->constant_b = 1.0; + color_calc_state->constant_a = 1.0; + dri_bo_unmap(render_state->cc.state); +} + +static void +gen7_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_blend_state *blend_state; + + dri_bo_map(render_state->cc.blend, 1); + assert(render_state->cc.blend->virtual); + blend_state = render_state->cc.blend->virtual; + memset(blend_state, 0, sizeof(*blend_state)); + blend_state->blend1.logic_op_enable = 1; + blend_state->blend1.logic_op_func = 0xc; + blend_state->blend1.pre_blend_clamp_enable = 1; + dri_bo_unmap(render_state->cc.blend); +} + +static void +gen7_render_depth_stencil_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_depth_stencil_state *depth_stencil_state; + + dri_bo_map(render_state->cc.depth_stencil, 1); + assert(render_state->cc.depth_stencil->virtual); + depth_stencil_state = render_state->cc.depth_stencil->virtual; + memset(depth_stencil_state, 0, sizeof(*depth_stencil_state)); + dri_bo_unmap(render_state->cc.depth_stencil); +} + +static void +gen7_render_sampler(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen7_sampler_state *sampler_state; + int i; + + assert(render_state->wm.sampler_count > 0); + assert(render_state->wm.sampler_count <= MAX_SAMPLERS); + + dri_bo_map(render_state->wm.sampler, 1); + assert(render_state->wm.sampler->virtual); + sampler_state = render_state->wm.sampler->virtual; + for (i = 0; i < render_state->wm.sampler_count; i++) { + memset(sampler_state, 0, sizeof(*sampler_state)); + sampler_state->ss0.min_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss0.mag_filter = I965_MAPFILTER_LINEAR; + sampler_state->ss3.r_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.s_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state->ss3.t_wrap_mode = I965_TEXCOORDMODE_CLAMP; + sampler_state++; + } + + dri_bo_unmap(render_state->wm.sampler); +} + + +static void +gen7_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + i965_render_dest_surface_state(ctx, 0); + i965_render_src_surfaces_state(ctx, obj_surface, flags); + gen7_render_sampler(ctx); + i965_render_cc_viewport(ctx); + gen7_render_color_calc_state(ctx); + gen7_render_blend_state(ctx); + gen7_render_depth_stencil_state(ctx); + i965_render_upload_constants(ctx, obj_surface, flags); + i965_render_upload_vertex(ctx, obj_surface, src_rect, dst_rect); +} + + +static void +gen7_emit_invarient_states(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_3D); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE | (4 - 2)); + OUT_BATCH(batch, GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER | + GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1); /* 1 sample/pixel */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_SAMPLE_MASK | (2 - 2)); + OUT_BATCH(batch, 1); + ADVANCE_BATCH(batch); + + /* Set system instruction pointer */ + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, CMD_STATE_SIP | 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_state_base_address(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + OUT_BATCH(batch, CMD_STATE_BASE_ADDRESS | (10 - 2)); + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state base address */ + OUT_RELOC(batch, render_state->wm.surface_state_binding_table_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY); /* Surface state base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic state base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction base address */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* General state upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Dynamic state upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Indirect object upper bound */ + OUT_BATCH(batch, BASE_ADDRESS_MODIFY); /* Instruction access upper bound */ +} + +static void +gen7_emit_viewport_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC | (2 - 2)); + OUT_RELOC(batch, + render_state->cc.viewport, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +/* + * URB layout on GEN7 + * ---------------------------------------- + * | PS Push Constants (8KB) | VS entries | + * ---------------------------------------- + */ +static void +gen7_emit_urb(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int num_urb_entries = 32; + + if (IS_HASWELL(i965->intel.device_info)) + num_urb_entries = 64; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS | (2 - 2)); + OUT_BATCH(batch, 8); /* in 1KBs */ + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_VS | (2 - 2)); + OUT_BATCH(batch, + (num_urb_entries << GEN7_URB_ENTRY_NUMBER_SHIFT) | + (2 - 1) << GEN7_URB_ENTRY_SIZE_SHIFT | + (1 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_GS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (1 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_HS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (2 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_URB_DS | (2 - 2)); + OUT_BATCH(batch, + (0 << GEN7_URB_ENTRY_SIZE_SHIFT) | + (2 << GEN7_URB_STARTING_ADDRESS_SHIFT)); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_cc_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN6_3DSTATE_CC_STATE_POINTERS | (2 - 2)); + OUT_RELOC(batch, + render_state->cc.state, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 1); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BLEND_STATE_POINTERS | (2 - 2)); + OUT_RELOC(batch, + render_state->cc.blend, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 1); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS | (2 - 2)); + OUT_RELOC(batch, + render_state->cc.depth_stencil, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 1); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_sampler_state_pointers(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS | (2 - 2)); + OUT_RELOC(batch, + render_state->wm.sampler, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_binding_table(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS | (2 - 2)); + OUT_BATCH(batch, BINDING_TABLE_OFFSET); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_depth_buffer_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN7_3DSTATE_DEPTH_BUFFER | (7 - 2)); + OUT_BATCH(batch, + (I965_DEPTHFORMAT_D32_FLOAT << 18) | + (I965_SURFACE_NULL << 29)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN7_3DSTATE_CLEAR_PARAMS | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_drawing_rectangle(VADriverContextP ctx) +{ + i965_render_drawing_rectangle(ctx); +} + +static void +gen7_emit_vs_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* disable VS constant buffer */ + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_VS | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + + OUT_BATCH(batch, GEN6_3DSTATE_VS | (6 - 2)); + OUT_BATCH(batch, 0); /* without VS kernel */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ +} + +static void +gen7_emit_bypass_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* bypass GS */ + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_GS | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN6_3DSTATE_GS | (7 - 2)); + OUT_BATCH(batch, 0); /* without GS kernel */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* disable HS */ + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_HS | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN7_3DSTATE_HS | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable TE */ + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, GEN7_3DSTATE_TE | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable DS */ + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN7_3DSTATE_CONSTANT_DS | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, GEN7_3DSTATE_DS | (6 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 2); + OUT_BATCH(batch, GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS | (2 - 2)); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + /* Disable STREAMOUT */ + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN7_3DSTATE_STREAMOUT | (3 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_clip_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + OUT_BATCH(batch, GEN6_3DSTATE_CLIP | (4 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* pass-through */ + OUT_BATCH(batch, 0); +} + +static void +gen7_emit_sf_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + BEGIN_BATCH(batch, 14); + OUT_BATCH(batch, GEN7_3DSTATE_SBE | (14 - 2)); + OUT_BATCH(batch, + (1 << GEN7_SBE_NUM_OUTPUTS_SHIFT) | + (1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT) | + (0 << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* DW4 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* DW9 */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN6_3DSTATE_SF | (7 - 2)); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, GEN6_3DSTATE_SF_CULL_NONE); + OUT_BATCH(batch, 2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_wm_state(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + unsigned int max_threads_shift = GEN7_PS_MAX_THREADS_SHIFT_IVB; + unsigned int num_samples = 0; + + if (IS_HASWELL(i965->intel.device_info)) { + max_threads_shift = GEN7_PS_MAX_THREADS_SHIFT_HSW; + num_samples = 1 << GEN7_PS_SAMPLE_MASK_SHIFT_HSW; + } + + BEGIN_BATCH(batch, 3); + OUT_BATCH(batch, GEN6_3DSTATE_WM | (3 - 2)); + OUT_BATCH(batch, + GEN7_WM_DISPATCH_ENABLE | + GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, GEN6_3DSTATE_CONSTANT_PS | (7 - 2)); + OUT_BATCH(batch, URB_CS_ENTRY_SIZE); + OUT_BATCH(batch, 0); + OUT_RELOC(batch, + render_state->curbe.bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 8); + OUT_BATCH(batch, GEN7_3DSTATE_PS | (8 - 2)); + OUT_RELOC(batch, + render_state->render_kernels[kernel].bo, + I915_GEM_DOMAIN_INSTRUCTION, 0, + 0); + OUT_BATCH(batch, + (1 << GEN7_PS_SAMPLER_COUNT_SHIFT) | + (5 << GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT)); + OUT_BATCH(batch, 0); /* scratch space base offset */ + OUT_BATCH(batch, + ((i965->intel.device_info->max_wm_threads - 1) << max_threads_shift) | num_samples | + GEN7_PS_PUSH_CONSTANT_ENABLE | + GEN7_PS_ATTRIBUTE_ENABLE | + GEN7_PS_16_DISPATCH_ENABLE); + OUT_BATCH(batch, + (6 << GEN7_PS_DISPATCH_START_GRF_SHIFT_0)); + OUT_BATCH(batch, 0); /* kernel 1 pointer */ + OUT_BATCH(batch, 0); /* kernel 2 pointer */ + ADVANCE_BATCH(batch); +} + +static void +gen7_emit_vertex_element_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + /* Set up our vertex elements, sourced from the single vertex buffer. */ + OUT_BATCH(batch, CMD_VERTEX_ELEMENTS | (5 - 2)); + /* offset 0: X,Y -> {X, Y, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN6_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (0 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); + /* offset 8: S0, T0 -> {S0, T0, 1.0, 1.0} */ + OUT_BATCH(batch, (0 << GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT) | + GEN6_VE0_VALID | + (I965_SURFACEFORMAT_R32G32_FLOAT << VE0_FORMAT_SHIFT) | + (8 << VE0_OFFSET_SHIFT)); + OUT_BATCH(batch, (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_0_SHIFT) | + (I965_VFCOMPONENT_STORE_SRC << VE1_VFCOMPONENT_1_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_2_SHIFT) | + (I965_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT)); +} + +static void +gen7_emit_vertices(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + struct i965_render_state *render_state = &i965->render_state; + + BEGIN_BATCH(batch, 5); + OUT_BATCH(batch, CMD_VERTEX_BUFFERS | (5 - 2)); + OUT_BATCH(batch, + (0 << GEN6_VB0_BUFFER_INDEX_SHIFT) | + GEN6_VB0_VERTEXDATA | + GEN7_VB0_ADDRESS_MODIFYENABLE | + ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 0); + OUT_RELOC(batch, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 12 * 4); + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + + BEGIN_BATCH(batch, 7); + OUT_BATCH(batch, CMD_3DPRIMITIVE | (7 - 2)); + OUT_BATCH(batch, + _3DPRIM_RECTLIST | + GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL); + OUT_BATCH(batch, 3); /* vertex count per instance */ + OUT_BATCH(batch, 0); /* start vertex offset */ + OUT_BATCH(batch, 1); /* single instance */ + OUT_BATCH(batch, 0); /* start instance location */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); +} + +static void +gen7_render_emit_states(VADriverContextP ctx, int kernel) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + intel_batchbuffer_start_atomic(batch, 0x1000); + intel_batchbuffer_emit_mi_flush(batch); + gen7_emit_invarient_states(ctx); + gen7_emit_state_base_address(ctx); + gen7_emit_viewport_state_pointers(ctx); + gen7_emit_urb(ctx); + gen7_emit_cc_state_pointers(ctx); + gen7_emit_sampler_state_pointers(ctx); + gen7_emit_bypass_state(ctx); + gen7_emit_vs_state(ctx); + gen7_emit_clip_state(ctx); + gen7_emit_sf_state(ctx); + gen7_emit_wm_state(ctx, kernel); + gen7_emit_binding_table(ctx); + gen7_emit_depth_buffer_state(ctx); + gen7_emit_drawing_rectangle(ctx); + gen7_emit_vertex_element_state(ctx); + gen7_emit_vertices(ctx); + intel_batchbuffer_end_atomic(batch); +} + + +static void +gen7_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + + gen7_render_initialize(ctx); + gen7_render_setup_states(ctx, obj_surface, src_rect, dst_rect, flags); + i965_clear_dest_region(ctx); + gen7_render_emit_states(ctx, PS_KERNEL); + intel_batchbuffer_flush(batch); +} + + +static void +gen7_subpicture_render_blend_state(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + struct gen6_blend_state *blend_state; + + dri_bo_unmap(render_state->cc.state); + dri_bo_map(render_state->cc.blend, 1); + assert(render_state->cc.blend->virtual); + blend_state = render_state->cc.blend->virtual; + memset(blend_state, 0, sizeof(*blend_state)); + blend_state->blend0.dest_blend_factor = I965_BLENDFACTOR_INV_SRC_ALPHA; + blend_state->blend0.source_blend_factor = I965_BLENDFACTOR_SRC_ALPHA; + blend_state->blend0.blend_func = I965_BLENDFUNCTION_ADD; + blend_state->blend0.blend_enable = 1; + blend_state->blend1.post_blend_clamp_enable = 1; + blend_state->blend1.pre_blend_clamp_enable = 1; + blend_state->blend1.clamp_range = 0; /* clamp range [0, 1] */ + dri_bo_unmap(render_state->cc.blend); +} + +static void +gen7_subpicture_render_setup_states( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + i965_render_dest_surface_state(ctx, 0); + i965_subpic_render_src_surfaces_state(ctx, obj_surface); + i965_render_sampler(ctx); + i965_render_cc_viewport(ctx); + gen7_render_color_calc_state(ctx); + gen7_subpicture_render_blend_state(ctx); + gen7_render_depth_stencil_state(ctx); + i965_subpic_render_upload_constants(ctx, obj_surface); + i965_subpic_render_upload_vertex(ctx, obj_surface, dst_rect); +} + +static void +gen7_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct intel_batchbuffer *batch = i965->batch; + unsigned int index = obj_surface->subpic_render_idx; + struct object_subpic *obj_subpic = obj_surface->obj_subpic[index]; + + assert(obj_subpic); + gen7_render_initialize(ctx); + gen7_subpicture_render_setup_states(ctx, obj_surface, src_rect, dst_rect); + gen7_render_emit_states(ctx, PS_SUBPIC_KERNEL); + i965_render_upload_image_palette(ctx, obj_subpic->obj_image, 0xff); + intel_batchbuffer_flush(batch); +} + + +void +intel_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + int has_done_scaling = 0; + VARectangle calibrated_rect; + VASurfaceID out_surface_id = i965_post_processing(ctx, + obj_surface, + src_rect, + dst_rect, + flags, + &has_done_scaling, + &calibrated_rect); + + assert((!has_done_scaling) || (out_surface_id != VA_INVALID_ID)); + + if (out_surface_id != VA_INVALID_ID) { + struct object_surface *new_obj_surface = SURFACE(out_surface_id); + + if (new_obj_surface && new_obj_surface->bo) + obj_surface = new_obj_surface; + + if (has_done_scaling) + src_rect = &calibrated_rect; + } + + render_state->render_put_surface(ctx, obj_surface, src_rect, dst_rect, flags); + + if (out_surface_id != VA_INVALID_ID) + i965_DestroySurfaces(ctx, &out_surface_id, 1); +} + +void +intel_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + + render_state->render_put_subpicture(ctx, obj_surface, src_rect, dst_rect); +} + +static void +genx_render_terminate(VADriverContextP ctx) +{ + int i; + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + + dri_bo_unreference(render_state->curbe.bo); + render_state->curbe.bo = NULL; + + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + struct i965_kernel *kernel = &render_state->render_kernels[i]; + + dri_bo_unreference(kernel->bo); + kernel->bo = NULL; + } + + dri_bo_unreference(render_state->vb.vertex_buffer); + render_state->vb.vertex_buffer = NULL; + dri_bo_unreference(render_state->vs.state); + render_state->vs.state = NULL; + dri_bo_unreference(render_state->sf.state); + render_state->sf.state = NULL; + dri_bo_unreference(render_state->wm.sampler); + render_state->wm.sampler = NULL; + dri_bo_unreference(render_state->wm.state); + render_state->wm.state = NULL; + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); + dri_bo_unreference(render_state->cc.viewport); + render_state->cc.viewport = NULL; + dri_bo_unreference(render_state->cc.state); + render_state->cc.state = NULL; + dri_bo_unreference(render_state->cc.blend); + render_state->cc.blend = NULL; + dri_bo_unreference(render_state->cc.depth_stencil); + render_state->cc.depth_stencil = NULL; + + if (render_state->draw_region) { + dri_bo_unreference(render_state->draw_region->bo); + free(render_state->draw_region); + render_state->draw_region = NULL; + } +} + +bool +genx_render_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + int i; + + /* kernel */ + assert(NUM_RENDER_KERNEL == (sizeof(render_kernels_gen5) / + sizeof(render_kernels_gen5[0]))); + assert(NUM_RENDER_KERNEL == (sizeof(render_kernels_gen6) / + sizeof(render_kernels_gen6[0]))); + + if (IS_GEN7(i965->intel.device_info)) { + memcpy(render_state->render_kernels, + (IS_HASWELL(i965->intel.device_info) ? render_kernels_gen7_haswell : render_kernels_gen7), + sizeof(render_state->render_kernels)); + render_state->render_put_surface = gen7_render_put_surface; + render_state->render_put_subpicture = gen7_render_put_subpicture; + } else if (IS_GEN6(i965->intel.device_info)) { + memcpy(render_state->render_kernels, render_kernels_gen6, sizeof(render_state->render_kernels)); + render_state->render_put_surface = gen6_render_put_surface; + render_state->render_put_subpicture = gen6_render_put_subpicture; + } else if (IS_IRONLAKE(i965->intel.device_info)) { + memcpy(render_state->render_kernels, render_kernels_gen5, sizeof(render_state->render_kernels)); + render_state->render_put_surface = i965_render_put_surface; + render_state->render_put_subpicture = i965_render_put_subpicture; + } else { + memcpy(render_state->render_kernels, render_kernels_gen4, sizeof(render_state->render_kernels)); + render_state->render_put_surface = i965_render_put_surface; + render_state->render_put_subpicture = i965_render_put_subpicture; + } + + render_state->render_terminate = genx_render_terminate; + + for (i = 0; i < NUM_RENDER_KERNEL; i++) { + struct i965_kernel *kernel = &render_state->render_kernels[i]; + + if (!kernel->size) + continue; + + kernel->bo = dri_bo_alloc(i965->intel.bufmgr, + kernel->name, + kernel->size, 0x1000); + assert(kernel->bo); + dri_bo_subdata(kernel->bo, 0, kernel->size, kernel->bin); + } + + /* constant buffer */ + render_state->curbe.bo = dri_bo_alloc(i965->intel.bufmgr, + "constant buffer", + 4096, 64); + assert(render_state->curbe.bo); + + return true; +} + +bool +i965_render_init(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + + return i965->codec_info->render_init(ctx); +} + +void +i965_render_terminate(VADriverContextP ctx) +{ + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct i965_render_state *render_state = &i965->render_state; + + render_state->render_terminate(ctx); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.h new file mode 100644 index 000000000..2114cadf4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_render.h @@ -0,0 +1,160 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * + */ + +#ifndef _I965_RENDER_H_ +#define _I965_RENDER_H_ + +#define MAX_SAMPLERS 16 +#define MAX_RENDER_SURFACES (MAX_SAMPLERS + 1) + +#define NUM_RENDER_KERNEL 3 + +#define VA_SRC_COLOR_MASK 0x000000f0 + +#include "i965_post_processing.h" + +struct i965_kernel; + +struct i965_render_state +{ + struct { + dri_bo *vertex_buffer; + } vb; + + struct { + dri_bo *state; + } vs; + + struct { + dri_bo *state; + } sf; + + struct { + int sampler_count; + dri_bo *sampler; + dri_bo *state; + dri_bo *surface_state_binding_table_bo; + } wm; + + struct { + dri_bo *state; + dri_bo *viewport; + dri_bo *blend; + dri_bo *depth_stencil; + } cc; + + struct { + dri_bo *bo; + } curbe; + + struct intel_region *draw_region; + + int pp_flag; /* 0: disable, 1: enable */ + + struct i965_kernel render_kernels[3]; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } instruction_state; + + struct { + dri_bo *bo; + } indirect_state; + + struct { + dri_bo *bo; + int bo_size; + unsigned int end_offset; + } dynamic_state; + + unsigned int curbe_offset; + int curbe_size; + + unsigned int sampler_offset; + int sampler_size; + + unsigned int cc_viewport_offset; + int cc_viewport_size; + + unsigned int cc_state_offset; + int cc_state_size; + + unsigned int blend_state_offset; + int blend_state_size; + + unsigned int sf_clip_offset; + int sf_clip_size; + + unsigned int scissor_offset; + int scissor_size; + + void (*render_put_surface)(VADriverContextP ctx, struct object_surface *, + const VARectangle *src_rec, + const VARectangle *dst_rect, + unsigned int flags); + void (*render_put_subpicture)(VADriverContextP ctx, struct object_surface *, + const VARectangle *src_rec, + const VARectangle *dst_rect); + void (*render_terminate)(VADriverContextP ctx); +}; + +bool i965_render_init(VADriverContextP ctx); +void i965_render_terminate(VADriverContextP ctx); + +void +intel_render_put_surface( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + unsigned int flags +); + +void +intel_render_put_subpicture( + VADriverContextP ctx, + struct object_surface *obj_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +); + +struct gen7_surface_state; + +void +gen7_render_set_surface_scs(struct gen7_surface_state *ss); + +struct gen8_surface_state; +void +gen8_render_set_surface_scs(struct gen8_surface_state *ss); + +extern bool gen8_render_init(VADriverContextP ctx); + +extern bool gen9_render_init(VADriverContextP ctx); + +#endif /* _I965_RENDER_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_structs.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_structs.h new file mode 100644 index 000000000..eb9d273f1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_structs.h @@ -0,0 +1,2220 @@ +#ifndef _I965_STRUCTS_H_ +#define _I965_STRUCTS_H_ + +struct i965_vfe_state +{ + struct { + unsigned int per_thread_scratch_space:4; + unsigned int pad3:3; + unsigned int extend_vfe_state_present:1; + unsigned int pad2:2; + unsigned int scratch_base:22; + } vfe0; + + struct { + unsigned int debug_counter_control:2; + unsigned int children_present:1; + unsigned int vfe_mode:4; + unsigned int pad2:2; + unsigned int num_urb_entries:7; + unsigned int urb_entry_alloc_size:9; + unsigned int max_threads:7; + } vfe1; + + struct { + unsigned int pad4:4; + unsigned int interface_descriptor_base:28; + } vfe2; +}; + +struct i965_vfe_state_ex +{ + struct { + unsigned int pad:8; + unsigned int obj_id:24; + } vfex0; + + union { + struct { + unsigned int residual_grf_offset:5; + unsigned int pad0:3; + unsigned int weight_grf_offset:5; + unsigned int pad1:3; + unsigned int residual_data_offset:8; + unsigned int sub_field_present_flag:2; + unsigned int residual_data_fix_offset_flag:1; + unsigned int pad2:5; + } avc; + + unsigned int vc1; + } vfex1; + + struct { + unsigned int remap_index_0:4; + unsigned int remap_index_1:4; + unsigned int remap_index_2:4; + unsigned int remap_index_3:4; + unsigned int remap_index_4:4; + unsigned int remap_index_5:4; + unsigned int remap_index_6:4; + unsigned int remap_index_7:4; + }remap_table0; + + struct { + unsigned int remap_index_8:4; + unsigned int remap_index_9:4; + unsigned int remap_index_10:4; + unsigned int remap_index_11:4; + unsigned int remap_index_12:4; + unsigned int remap_index_13:4; + unsigned int remap_index_14:4; + unsigned int remap_index_15:4; + } remap_table1; + + struct { + unsigned int mask:8; + unsigned int pad:22; + unsigned int type:1; + unsigned int enable:1; + } scoreboard0; + + struct { + int delta_x0:4; + int delta_y0:4; + int delta_x1:4; + int delta_y1:4; + int delta_x2:4; + int delta_y2:4; + int delta_x3:4; + int delta_y3:4; + } scoreboard1; + + struct { + int delta_x4:4; + int delta_y4:4; + int delta_x5:4; + int delta_y5:4; + int delta_x6:4; + int delta_y6:4; + int delta_x7:4; + int delta_y7:4; + } scoreboard2; + + unsigned int pad; +}; + +struct i965_vld_state +{ + struct { + unsigned int pad6:6; + unsigned int scan_order:1; + unsigned int intra_vlc_format:1; + unsigned int quantizer_scale_type:1; + unsigned int concealment_motion_vector:1; + unsigned int frame_predict_frame_dct:1; + unsigned int top_field_first:1; + unsigned int picture_structure:2; + unsigned int intra_dc_precision:2; + unsigned int f_code_0_0:4; + unsigned int f_code_0_1:4; + unsigned int f_code_1_0:4; + unsigned int f_code_1_1:4; + } vld0; + + struct { + unsigned int pad2:9; + unsigned int picture_coding_type:2; + unsigned int pad:21; + } vld1; + + struct { + unsigned int index_0:4; + unsigned int index_1:4; + unsigned int index_2:4; + unsigned int index_3:4; + unsigned int index_4:4; + unsigned int index_5:4; + unsigned int index_6:4; + unsigned int index_7:4; + } desc_remap_table0; + + struct { + unsigned int index_8:4; + unsigned int index_9:4; + unsigned int index_10:4; + unsigned int index_11:4; + unsigned int index_12:4; + unsigned int index_13:4; + unsigned int index_14:4; + unsigned int index_15:4; + } desc_remap_table1; +}; + +struct i965_interface_descriptor +{ + struct { + unsigned int grf_reg_blocks:4; + unsigned int pad:2; + unsigned int kernel_start_pointer:26; + } desc0; + + struct { + unsigned int pad:7; + unsigned int software_exception:1; + unsigned int pad2:3; + unsigned int maskstack_exception:1; + unsigned int pad3:1; + unsigned int illegal_opcode_exception:1; + unsigned int pad4:2; + unsigned int floating_point_mode:1; + unsigned int thread_priority:1; + unsigned int single_program_flow:1; + unsigned int pad5:1; + unsigned int const_urb_entry_read_offset:6; + unsigned int const_urb_entry_read_len:6; + } desc1; + + struct { + unsigned int pad:2; + unsigned int sampler_count:3; + unsigned int sampler_state_pointer:27; + } desc2; + + struct { + unsigned int binding_table_entry_count:5; + unsigned int binding_table_pointer:27; + } desc3; +}; + +struct i965_surface_state +{ + struct { + unsigned int cube_pos_z:1; + unsigned int cube_neg_z:1; + unsigned int cube_pos_y:1; + unsigned int cube_neg_y:1; + unsigned int cube_pos_x:1; + unsigned int cube_neg_x:1; + unsigned int pad:2; + unsigned int render_cache_read_mode:1; + unsigned int cube_map_corner_mode:1; + unsigned int mipmap_layout_mode:1; + unsigned int vert_line_stride_ofs:1; + unsigned int vert_line_stride:1; + unsigned int color_blend:1; + unsigned int writedisable_blue:1; + unsigned int writedisable_green:1; + unsigned int writedisable_red:1; + unsigned int writedisable_alpha:1; + unsigned int surface_format:9; + unsigned int data_return_format:1; + unsigned int pad0:1; + unsigned int surface_type:3; + } ss0; + + struct { + unsigned int base_addr; + } ss1; + + struct { + unsigned int render_target_rotation:2; + unsigned int mip_count:4; + unsigned int width:13; + unsigned int height:13; + } ss2; + + struct { + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int pad:1; + unsigned int pitch:18; + unsigned int depth:11; + } ss3; + + struct { + unsigned int pad:19; + unsigned int min_array_elt:9; + unsigned int min_lod:4; + } ss4; + + struct { + unsigned int pad:20; + unsigned int y_offset:4; + unsigned int pad2:1; + unsigned int x_offset:7; + } ss5; +}; + +struct thread0 +{ + unsigned int pad0:1; + unsigned int grf_reg_count:3; + unsigned int pad1:2; + unsigned int kernel_start_pointer:26; +}; + +struct thread1 +{ + unsigned int ext_halt_exception_enable:1; + unsigned int sw_exception_enable:1; + unsigned int mask_stack_exception_enable:1; + unsigned int timeout_exception_enable:1; + unsigned int illegal_op_exception_enable:1; + unsigned int pad0:3; + unsigned int depth_coef_urb_read_offset:6; /* WM only */ + unsigned int pad1:2; + unsigned int floating_point_mode:1; + unsigned int thread_priority:1; + unsigned int binding_table_entry_count:8; + unsigned int pad3:5; + unsigned int single_program_flow:1; +}; + +struct thread2 +{ + unsigned int per_thread_scratch_space:4; + unsigned int pad0:6; + unsigned int scratch_space_base_pointer:22; +}; + + +struct thread3 +{ + unsigned int dispatch_grf_start_reg:4; + unsigned int urb_entry_read_offset:6; + unsigned int pad0:1; + unsigned int urb_entry_read_length:6; + unsigned int pad1:1; + unsigned int const_urb_entry_read_offset:6; + unsigned int pad2:1; + unsigned int const_urb_entry_read_length:6; + unsigned int pad3:1; +}; + +struct i965_vs_unit_state +{ + struct thread0 thread0; + struct thread1 thread1; + struct thread2 thread2; + struct thread3 thread3; + + struct { + unsigned int pad0:10; + unsigned int stats_enable:1; + unsigned int nr_urb_entries:7; + unsigned int pad1:1; + unsigned int urb_entry_allocation_size:5; + unsigned int pad2:1; + unsigned int max_threads:4; + unsigned int pad3:3; + } thread4; + + struct { + unsigned int sampler_count:3; + unsigned int pad0:2; + unsigned int sampler_state_pointer:27; + } vs5; + + struct { + unsigned int vs_enable:1; + unsigned int vert_cache_disable:1; + unsigned int pad0:30; + } vs6; +}; + +struct i965_gs_unit_state +{ + struct thread0 thread0; + struct thread1 thread1; + struct thread2 thread2; + struct thread3 thread3; + + struct { + unsigned int pad0:10; + unsigned int stats_enable:1; + unsigned int nr_urb_entries:7; + unsigned int pad1:1; + unsigned int urb_entry_allocation_size:5; + unsigned int pad2:1; + unsigned int max_threads:1; + unsigned int pad3:6; + } thread4; + + struct { + unsigned int sampler_count:3; + unsigned int pad0:2; + unsigned int sampler_state_pointer:27; + } gs5; + + + struct { + unsigned int max_vp_index:4; + unsigned int pad0:26; + unsigned int reorder_enable:1; + unsigned int pad1:1; + } gs6; +}; + +struct i965_clip_unit_state +{ + struct thread0 thread0; + struct thread1 thread1; + struct thread2 thread2; + struct thread3 thread3; + + struct { + unsigned int pad0:9; + unsigned int gs_output_stats:1; /* not always */ + unsigned int stats_enable:1; + unsigned int nr_urb_entries:7; + unsigned int pad1:1; + unsigned int urb_entry_allocation_size:5; + unsigned int pad2:1; + unsigned int max_threads:6; /* may be less */ + unsigned int pad3:1; + } thread4; + + struct { + unsigned int pad0:13; + unsigned int clip_mode:3; + unsigned int userclip_enable_flags:8; + unsigned int userclip_must_clip:1; + unsigned int pad1:1; + unsigned int guard_band_enable:1; + unsigned int viewport_z_clip_enable:1; + unsigned int viewport_xy_clip_enable:1; + unsigned int vertex_position_space:1; + unsigned int api_mode:1; + unsigned int pad2:1; + } clip5; + + struct { + unsigned int pad0:5; + unsigned int clipper_viewport_state_ptr:27; + } clip6; + + + float viewport_xmin; + float viewport_xmax; + float viewport_ymin; + float viewport_ymax; +}; + +struct i965_sf_unit_state +{ + struct thread0 thread0; + struct { + unsigned int pad0:7; + unsigned int sw_exception_enable:1; + unsigned int pad1:3; + unsigned int mask_stack_exception_enable:1; + unsigned int pad2:1; + unsigned int illegal_op_exception_enable:1; + unsigned int pad3:2; + unsigned int floating_point_mode:1; + unsigned int thread_priority:1; + unsigned int binding_table_entry_count:8; + unsigned int pad4:5; + unsigned int single_program_flow:1; + } sf1; + + struct thread2 thread2; + struct thread3 thread3; + + struct { + unsigned int pad0:10; + unsigned int stats_enable:1; + unsigned int nr_urb_entries:7; + unsigned int pad1:1; + unsigned int urb_entry_allocation_size:5; + unsigned int pad2:1; + unsigned int max_threads:6; + unsigned int pad3:1; + } thread4; + + struct { + unsigned int front_winding:1; + unsigned int viewport_transform:1; + unsigned int pad0:3; + unsigned int sf_viewport_state_offset:27; + } sf5; + + struct { + unsigned int pad0:9; + unsigned int dest_org_vbias:4; + unsigned int dest_org_hbias:4; + unsigned int scissor:1; + unsigned int disable_2x2_trifilter:1; + unsigned int disable_zero_pix_trifilter:1; + unsigned int point_rast_rule:2; + unsigned int line_endcap_aa_region_width:2; + unsigned int line_width:4; + unsigned int fast_scissor_disable:1; + unsigned int cull_mode:2; + unsigned int aa_enable:1; + } sf6; + + struct { + unsigned int point_size:11; + unsigned int use_point_size_state:1; + unsigned int subpixel_precision:1; + unsigned int sprite_point:1; + unsigned int pad0:11; + unsigned int trifan_pv:2; + unsigned int linestrip_pv:2; + unsigned int tristrip_pv:2; + unsigned int line_last_pixel_enable:1; + } sf7; +}; + +struct i965_sampler_state +{ + struct { + unsigned int shadow_function:3; + unsigned int lod_bias:11; + unsigned int min_filter:3; + unsigned int mag_filter:3; + unsigned int mip_filter:2; + unsigned int base_level:5; + unsigned int pad:1; + unsigned int lod_preclamp:1; + unsigned int border_color_mode:1; + unsigned int pad0:1; + unsigned int disable:1; + } ss0; + + struct { + unsigned int r_wrap_mode:3; + unsigned int t_wrap_mode:3; + unsigned int s_wrap_mode:3; + unsigned int pad:3; + unsigned int max_lod:10; + unsigned int min_lod:10; + } ss1; + + + struct { + unsigned int pad:5; + unsigned int border_color_pointer:27; + } ss2; + + struct { + unsigned int pad:19; + unsigned int max_aniso:3; + unsigned int chroma_key_mode:1; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int monochrome_filter_width:3; + unsigned int monochrome_filter_height:3; + } ss3; +}; + +struct i965_wm_unit_state +{ + struct thread0 thread0; + struct thread1 thread1; + struct thread2 thread2; + struct thread3 thread3; + + struct { + unsigned int stats_enable:1; + unsigned int pad0:1; + unsigned int sampler_count:3; + unsigned int sampler_state_pointer:27; + } wm4; + + struct { + unsigned int enable_8_pix:1; + unsigned int enable_16_pix:1; + unsigned int enable_32_pix:1; + unsigned int pad0:7; + unsigned int legacy_global_depth_bias:1; + unsigned int line_stipple:1; + unsigned int depth_offset:1; + unsigned int polygon_stipple:1; + unsigned int line_aa_region_width:2; + unsigned int line_endcap_aa_region_width:2; + unsigned int early_depth_test:1; + unsigned int thread_dispatch_enable:1; + unsigned int program_uses_depth:1; + unsigned int program_computes_depth:1; + unsigned int program_uses_killpixel:1; + unsigned int legacy_line_rast: 1; + unsigned int transposed_urb_read:1; + unsigned int max_threads:7; + } wm5; + + float global_depth_offset_constant; + float global_depth_offset_scale; +}; + +struct i965_cc_viewport +{ + float min_depth; + float max_depth; +}; + +struct i965_cc_unit_state +{ + struct { + unsigned int pad0:3; + unsigned int bf_stencil_pass_depth_pass_op:3; + unsigned int bf_stencil_pass_depth_fail_op:3; + unsigned int bf_stencil_fail_op:3; + unsigned int bf_stencil_func:3; + unsigned int bf_stencil_enable:1; + unsigned int pad1:2; + unsigned int stencil_write_enable:1; + unsigned int stencil_pass_depth_pass_op:3; + unsigned int stencil_pass_depth_fail_op:3; + unsigned int stencil_fail_op:3; + unsigned int stencil_func:3; + unsigned int stencil_enable:1; + } cc0; + + + struct { + unsigned int bf_stencil_ref:8; + unsigned int stencil_write_mask:8; + unsigned int stencil_test_mask:8; + unsigned int stencil_ref:8; + } cc1; + + + struct { + unsigned int logicop_enable:1; + unsigned int pad0:10; + unsigned int depth_write_enable:1; + unsigned int depth_test_function:3; + unsigned int depth_test:1; + unsigned int bf_stencil_write_mask:8; + unsigned int bf_stencil_test_mask:8; + } cc2; + + + struct { + unsigned int pad0:8; + unsigned int alpha_test_func:3; + unsigned int alpha_test:1; + unsigned int blend_enable:1; + unsigned int ia_blend_enable:1; + unsigned int pad1:1; + unsigned int alpha_test_format:1; + unsigned int pad2:16; + } cc3; + + struct { + unsigned int pad0:5; + unsigned int cc_viewport_state_offset:27; + } cc4; + + struct { + unsigned int pad0:2; + unsigned int ia_dest_blend_factor:5; + unsigned int ia_src_blend_factor:5; + unsigned int ia_blend_function:3; + unsigned int statistics_enable:1; + unsigned int logicop_func:4; + unsigned int pad1:11; + unsigned int dither_enable:1; + } cc5; + + struct { + unsigned int clamp_post_alpha_blend:1; + unsigned int clamp_pre_alpha_blend:1; + unsigned int clamp_range:2; + unsigned int pad0:11; + unsigned int y_dither_offset:2; + unsigned int x_dither_offset:2; + unsigned int dest_blend_factor:5; + unsigned int src_blend_factor:5; + unsigned int blend_function:3; + } cc6; + + struct { + union { + float f; + unsigned char ub[4]; + } alpha_ref; + } cc7; +}; + +struct i965_sampler_8x8 +{ + struct { + unsigned int pad0:16; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int pad1:8; + unsigned int ief_filter_size:1; + unsigned int ief_filter_type:1; + unsigned int ief_bypass:1; + unsigned int pad2:1; + unsigned int avs_filter_type:1; + } dw0; + + struct { + unsigned int pad0:5; + unsigned int sampler_8x8_state_pointer:27; + } dw1; + + struct { + unsigned int weak_edge_threshold:4; + unsigned int strong_edge_threshold:4; + unsigned int global_noise_estimation:8; + unsigned int pad0:16; + } dw2; + + struct { + unsigned int r3x_coefficient:5; + unsigned int pad0:1; + unsigned int r3c_coefficient:5; + unsigned int pad1:3; + unsigned int gain_factor:6; + unsigned int non_edge_weight:3; + unsigned int pad2:1; + unsigned int regular_weight:3; + unsigned int pad3:1; + unsigned int strong_edge_weight:3; + unsigned int pad4:1; + } dw3; + + struct { + unsigned int pad0:2; + unsigned int mr_boost:1; + unsigned int mr_threshold:4; + unsigned int steepness_boost:1; + unsigned int steepness_threshold:4; + unsigned int pad1:2; + unsigned int r5x_coefficient:5; + unsigned int pad2:1; + unsigned int r5cx_coefficient:5; + unsigned int pad3:1; + unsigned int r5c_coefficient:5; + unsigned int pad4:1; + } dw4; + + struct { + unsigned int pwl1_point_1:8; + unsigned int pwl1_point_2:8; + unsigned int pwl1_point_3:8; + unsigned int pwl1_point_4:8; + } dw5; + + struct { + unsigned int pwl1_point_5:8; + unsigned int pwl1_point_6:8; + unsigned int pwl1_r3_bias_0:8; + unsigned int pwl1_r3_bias_1:8; + } dw6; + + struct { + unsigned int pwl1_r3_bias_2:8; + unsigned int pwl1_r3_bias_3:8; + unsigned int pwl1_r3_bias_4:8; + unsigned int pwl1_r3_bias_5:8; + } dw7; + + struct { + unsigned int pwl1_r3_bias_6:8; + unsigned int pwl1_r5_bias_0:8; + unsigned int pwl1_r5_bias_1:8; + unsigned int pwl1_r5_bias_2:8; + } dw8; + + struct { + unsigned int pwl1_r5_bias_3:8; + unsigned int pwl1_r5_bias_4:8; + unsigned int pwl1_r5_bias_5:8; + unsigned int pwl1_r5_bias_6:8; + } dw9; + + struct { + int pwl1_r3_slope_0:8; + int pwl1_r3_slope_1:8; + int pwl1_r3_slope_2:8; + int pwl1_r3_slope_3:8; + } dw10; + + struct { + int pwl1_r3_slope_4:8; + int pwl1_r3_slope_5:8; + int pwl1_r3_slope_6:8; + int pwl1_r5_slope_0:8; + } dw11; + + struct { + int pwl1_r5_slope_1:8; + int pwl1_r5_slope_2:8; + int pwl1_r5_slope_3:8; + int pwl1_r5_slope_4:8; + } dw12; + + struct { + int pwl1_r5_slope_5:8; + int pwl1_r5_slope_6:8; + unsigned int limiter_boost:4; + unsigned int pad0:4; + unsigned int minimum_limiter:4; + unsigned int maximum_limiter:4; + } dw13; + + struct { + unsigned int pad0:8; + unsigned int clip_limiter:10; + unsigned int pad1:14; + } dw14; + + unsigned int dw15; /* Just a pad */ +}; + +struct i965_sampler_8x8_coefficient +{ + struct { + int table_0x_filter_c0:8; + int table_0x_filter_c1:8; + int table_0x_filter_c2:8; + int table_0x_filter_c3:8; + } dw0; + + struct { + int table_0x_filter_c4:8; + int table_0x_filter_c5:8; + int table_0x_filter_c6:8; + int table_0x_filter_c7:8; + } dw1; + + struct { + int table_0y_filter_c0:8; + int table_0y_filter_c1:8; + int table_0y_filter_c2:8; + int table_0y_filter_c3:8; + } dw2; + + struct { + int table_0y_filter_c4:8; + int table_0y_filter_c5:8; + int table_0y_filter_c6:8; + int table_0y_filter_c7:8; + } dw3; + + struct { + int table_1x_filter_c0:8; + int table_1x_filter_c1:8; + int table_1x_filter_c2:8; + int table_1x_filter_c3:8; + } dw4; + + struct { + int table_1x_filter_c4:8; + int table_1x_filter_c5:8; + int table_1x_filter_c6:8; + int table_1x_filter_c7:8; + } dw5; + + struct { + int table_1y_filter_c0:8; + int table_1y_filter_c1:8; + int table_1y_filter_c2:8; + int table_1y_filter_c3:8; + } dw6; + + struct { + int table_1y_filter_c4:8; + int table_1y_filter_c5:8; + int table_1y_filter_c6:8; + int table_1y_filter_c7:8; + } dw7; +}; + +struct i965_sampler_8x8_state +{ + struct i965_sampler_8x8_coefficient coefficients[17]; + + struct { + unsigned int transition_area_with_8_pixels:3; + unsigned int pad0:1; + unsigned int transition_area_with_4_pixels:3; + unsigned int pad1:1; + unsigned int max_derivative_8_pixels:8; + unsigned int max_derivative_4_pixels:8; + unsigned int default_sharpness_level:8; + } dw136; + + union { + /* Ironlake, Sandybridge, Ivybridge (Gen5+) */ + struct { + unsigned int pad0:21; + unsigned int bypass_y_adaptive_filtering:1; + unsigned int bypass_x_adaptive_filtering:1; + unsigned int pad1:9; + } ilk; + + /* Haswell (Gen7.5+) */ + struct { + unsigned int rgb_adaptive:1; + unsigned int adaptive_filter_for_all_channel:1; + unsigned int pad0:19; + unsigned int bypass_y_adaptive_filtering:1; + unsigned int bypass_x_adaptive_filtering:1; + unsigned int pad1:9; + } hsw; + } dw137; +}; + +struct i965_surface_state2 +{ + struct { + unsigned int surface_base_address; + } ss0; + + struct { + unsigned int cbcr_pixel_offset_v_direction:2; + unsigned int pad0:4; + unsigned int width:13; + unsigned int height:13; + } ss1; + + struct { + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int half_pitch_for_chroma:1; + unsigned int pitch:17; + unsigned int pad0:2; + unsigned int surface_object_control_data:4; + unsigned int pad1:1; + unsigned int interleave_chroma:1; + unsigned int surface_format:4; + } ss2; + + struct { + unsigned int y_offset_for_cb:13; + unsigned int pad0:3; + unsigned int x_offset_for_cb:13; + unsigned int pad1:3; + } ss3; + + struct { + unsigned int y_offset_for_cr:13; + unsigned int pad0:3; + unsigned int x_offset_for_cr:13; + unsigned int pad1:3; + } ss4; +}; + +struct i965_sampler_dndi +{ + struct { + unsigned int denoise_asd_threshold:8; + unsigned int denoise_history_delta:8; + unsigned int denoise_maximum_history:8; + unsigned int denoise_stad_threshold:8; + } dw0; + + struct { + unsigned int denoise_threshold_for_sum_of_complexity_measure:8; + unsigned int denoise_moving_pixel_threshold:5; + unsigned int stmm_c2:3; + unsigned int low_temporal_difference_threshold:6; + unsigned int pad0:2; + unsigned int temporal_difference_threshold:6; + unsigned int pad1:2; + } dw1; + + struct { + unsigned int block_noise_estimate_noise_threshold:8; + unsigned int block_noise_estimate_edge_threshold:8; + unsigned int denoise_edge_threshold:8; + unsigned int good_neighbor_threshold:8; + } dw2; + + struct { + unsigned int maximum_stmm:8; + unsigned int multipler_for_vecm:6; + unsigned int pad0:2; + unsigned int blending_constant_across_time_for_small_values_of_stmm:8; + unsigned int blending_constant_across_time_for_large_values_of_stmm:7; + unsigned int stmm_blending_constant_select:1; + } dw3; + + struct { + unsigned int sdi_delta:8; + unsigned int sdi_threshold:8; + unsigned int stmm_output_shift:4; + unsigned int stmm_shift_up:2; + unsigned int stmm_shift_down:2; + unsigned int minimum_stmm:8; + } dw4; + + struct { + unsigned int fmd_temporal_difference_threshold:8; + unsigned int sdi_fallback_mode_2_constant:8; + unsigned int sdi_fallback_mode_1_t2_constant:8; + unsigned int sdi_fallback_mode_1_t1_constant:8; + } dw5; + + struct { + unsigned int dn_enable:1; + unsigned int di_enable:1; + unsigned int di_partial:1; + unsigned int dndi_top_first:1; + unsigned int dndi_stream_id:1; + unsigned int dndi_first_frame:1; + unsigned int progressive_dn:1; + unsigned int pad0:1; + unsigned int fmd_tear_threshold:6; + unsigned int pad1:2; + unsigned int fmd2_vertical_difference_threshold:8; + unsigned int fmd1_vertical_difference_threshold:8; + } dw6; + + struct { + unsigned int pad0:8; + unsigned int fmd_for_1st_field_of_current_frame:2; + unsigned int pad1:6; + unsigned int fmd_for_2nd_field_of_previous_frame:2; + unsigned int vdi_walker_enable:1; + unsigned int pad2:4; + unsigned int column_width_minus1:9; + } dw7; +}; + +struct gen8_interface_descriptor_data +{ + struct { + unsigned int pad0:6; + unsigned int kernel_start_pointer:26; + } desc0; + + struct { + unsigned int kernel_start_pointer_high:16; + unsigned int pad0:16; + } desc1; + + struct { + unsigned int pad0:7; + unsigned int software_exception_enable:1; + unsigned int pad1:3; + unsigned int maskstack_exception_enable:1; + unsigned int pad2:1; + unsigned int illegal_opcode_exception_enable:1; + unsigned int pad3:2; + unsigned int floating_point_mode:1; + unsigned int thread_priority:1; + unsigned int single_program_flow:1; + unsigned int denorm_mode:1; + unsigned int pad4:12; + } desc2; + + struct { + unsigned int pad0:2; + unsigned int sampler_count:3; + unsigned int sampler_state_pointer:27; + } desc3; + + struct { + unsigned int binding_table_entry_count:5; + unsigned int binding_table_pointer:11; + unsigned int pad0: 16; + } desc4; + + struct { + unsigned int constant_urb_entry_read_offset:16; + unsigned int constant_urb_entry_read_length:16; + } desc5; + + struct { + unsigned int num_threads_in_tg:10; + unsigned int pad0:5; + unsigned int global_barrier_enable:1; + unsigned int shared_local_memory_size:5; + unsigned int barrier_enable:1; + unsigned int rounding_mode:2; + unsigned int pad1:8; + } desc6; + + struct { + unsigned int cross_thread_constant_data_read_length:8; + unsigned int pad0:24; + } desc7; +}; + +struct gen8_surface_state +{ + struct { + unsigned int cube_pos_z:1; + unsigned int cube_neg_z:1; + unsigned int cube_pos_y:1; + unsigned int cube_neg_y:1; + unsigned int cube_pos_x:1; + unsigned int cube_neg_x:1; + unsigned int media_boundary_pixel_mode:2; + unsigned int render_cache_read_write:1; + unsigned int sampler_l2bypass_disable:1; + unsigned int vert_line_stride_ofs:1; + unsigned int vert_line_stride:1; + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int horizontal_alignment:2; + /* Field 16 */ + unsigned int vertical_alignment:2; + unsigned int surface_format:9; /**< BRW_SURFACEFORMAT_x */ + unsigned int pad0:1; + unsigned int is_array:1; + unsigned int surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ + } ss0; + + struct { + unsigned int surface_qpitch:15; + unsigned int pad0:4; + unsigned int base_mip_level:5; + unsigned int surface_mocs:7; + unsigned int pad1:1; + } ss1; + + struct { + unsigned int width:14; + unsigned int pad0:2; + unsigned int height:14; + unsigned int pad1:2; + } ss2; + + struct { + unsigned int pitch:18; + unsigned int pad:3; + unsigned int depth:11; + } ss3; + + struct { + unsigned int multisample_position_palette_index:3; + unsigned int num_multisamples:3; + unsigned int multisampled_surface_storage_format:1; + unsigned int render_target_view_extent:11; + unsigned int min_array_elt:11; + unsigned int rotation:2; + unsigned int force_ncmp_reduce_type:1; + } ss4; + + struct { + unsigned int mip_count:4; + unsigned int min_lod:4; + unsigned int pad0:4; + unsigned int pad1:2; + unsigned int coherence_type:1; + unsigned int pad2:3; + unsigned int pad3:2; + unsigned int ewa_disable_cube:1; + unsigned int y_offset:3; + unsigned int pad4:1; + unsigned int x_offset:7; + } ss5; + + struct { + unsigned int y_offset_uv_plane:14; + unsigned int pad0:2; + unsigned int x_offset_uv_plane:14; + unsigned int pad1:1; + unsigned int separate_uv_plane:1; + } ss6; + + struct { + unsigned int resource_min_lod:12; + unsigned int pad0:4; + unsigned int shader_chanel_select_a:3; + unsigned int shader_chanel_select_b:3; + unsigned int shader_chanel_select_g:3; + unsigned int shader_chanel_select_r:3; + unsigned int alpha_clear_color:1; + unsigned int blue_clear_color:1; + unsigned int green_clear_color:1; + unsigned int red_clear_color:1; + } ss7; + struct { + unsigned int base_addr; + } ss8; + + struct { + unsigned int base_addr_high:16; + unsigned int pad0:16; + } ss9; + + struct { + unsigned int pad0:12; + unsigned int aux_base_addr:20; + } ss10; + + union { + struct { + unsigned int y_offset_v_plane:14; + unsigned int pad0:2; + unsigned int x_offset_v_plane:14; + unsigned int pad1:2; + } planar; + struct { + unsigned int aux_base_addr_high:16; + unsigned int pad2:16; + } aux_buffer; + } ss11; + + struct { + unsigned int hier_depth_clear; + } ss12; + + struct { + unsigned int pad0; + } ss13; + + struct { + unsigned int pad0; + } ss14; + + struct { + unsigned int pad0; + } ss15; +}; + +struct gen8_surface_state2 +{ + struct { + unsigned int pad0; + } ss0; + + struct { + unsigned int cbcr_pixel_offset_v_direction:2; + unsigned int picture_structure:2; + unsigned int width:14; + unsigned int height:14; + } ss1; + + struct { + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int half_pitch_for_chroma:1; + unsigned int pitch:18; + unsigned int address_ctrl:1; /* clamp or mirror mode */ + unsigned int pad0:4; + unsigned int interleave_chroma:1; + unsigned int surface_format:5; + } ss2; + + struct { + unsigned int y_offset_for_cb:14; + unsigned int pad0:2; + unsigned int x_offset_for_cb:14; + unsigned int pad1:2; + } ss3; + + struct { + unsigned int y_offset_for_cr:15; + unsigned int pad0:1; + unsigned int x_offset_for_cr:14; + unsigned int pad1:2; + } ss4; + + struct { + unsigned int surface_object_mocs:7; + unsigned int pad0:11; + unsigned int pad1:2; + unsigned int pad2:10; + unsigned int vert_line_stride_offset:1; + unsigned int vert_line_stride:1; + } ss5; + + struct { + unsigned int base_addr; + } ss6; + + struct { + unsigned int base_addr_high:16; + unsigned int pad0:16; + } ss7; +}; + +struct gen9_surface_state2 +{ + struct { + unsigned int pad0:16; + unsigned int y_offset:4; + unsigned int x_offset:7; + unsigned int pad1:3; + unsigned int rotation:2; + } ss0; + + struct { + unsigned int cbcr_pixel_offset_v_direction:2; + unsigned int picture_structure:2; + unsigned int width:14; + unsigned int height:14; + } ss1; + + struct { + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int half_pitch_for_chroma:1; + unsigned int pitch:18; + unsigned int address_ctrl:1; /* clamp or mirror mode */ + unsigned int memory_compression_enable:1; + unsigned int memory_compression_mode:1; + unsigned int cbcr_pixel_offset_v_direction_msb:1; + unsigned int cbcr_pixel_offset_u_direction:1; + unsigned int interleave_chroma:1; + unsigned int surface_format:5; + } ss2; + + struct { + unsigned int y_offset_for_cb:14; + unsigned int pad0:2; + unsigned int x_offset_for_cb:14; + unsigned int pad1:2; + } ss3; + + struct { + unsigned int y_offset_for_cr:15; + unsigned int pad0:1; + unsigned int x_offset_for_cr:14; + unsigned int pad1:2; + } ss4; + + struct { + unsigned int surface_object_mocs:7; + unsigned int pad0:11; + unsigned int tr_mode:2; + unsigned int pad1:10; + unsigned int vert_line_stride_offset:1; + unsigned int vert_line_stride:1; + } ss5; + + struct { + unsigned int base_addr; + } ss6; + + struct { + unsigned int base_addr_high:16; + unsigned int pad0:16; + } ss7; +}; + +struct gen9_surface_state +{ + struct { + unsigned int pad0:6; + unsigned int media_boundary_pixel_mode:2; + unsigned int render_cache_read_write:1; + unsigned int sampler_l2bypass_disable:1; + unsigned int vert_line_stride_ofs:1; + unsigned int vert_line_stride:1; + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int horizontal_alignment:2; + /* Field 16 */ + unsigned int vertical_alignment:2; + unsigned int surface_format:9; /**< BRW_SURFACEFORMAT_x */ + unsigned int astc_enable:1; + unsigned int is_array:1; + unsigned int surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ + } ss0; + + struct { + unsigned int surface_qpitch:15; + unsigned int pad0:4; + unsigned int base_mip_level:5; + unsigned int surface_mocs:7; + unsigned int pad1:1; + } ss1; + + struct { + unsigned int width:14; + unsigned int pad0:2; + unsigned int height:14; + unsigned int pad1:2; + } ss2; + + struct { + unsigned int pitch:18; + unsigned int pad:3; + unsigned int depth:11; + } ss3; + + struct { + unsigned int multisample_position_palette_index:3; + unsigned int num_multisamples:3; + unsigned int multisampled_surface_storage_format:1; + unsigned int render_target_view_extent:11; + unsigned int min_array_elt:11; + unsigned int rotation:2; + unsigned int force_ncmp_reduce_type:1; + } ss4; + + struct { + unsigned int mip_count:4; + unsigned int min_lod:4; + unsigned int miptail_start_lod:4; + unsigned int pad0:2; + unsigned int coherence_type:1; + unsigned int pad1:3; + unsigned int tr_mode:2; + unsigned int ewa_disable_cube:1; + unsigned int y_offset:3; + unsigned int pad2:1; + unsigned int x_offset:7; + } ss5; + + struct { + unsigned int y_offset_uv_plane:14; + unsigned int pad0:2; + unsigned int x_offset_uv_plane:14; + unsigned int pad1:1; + unsigned int separate_uv_plane:1; + } ss6; + + struct { + unsigned int resource_min_lod:12; + unsigned int pad0:4; + unsigned int shader_chanel_select_a:3; + unsigned int shader_chanel_select_b:3; + unsigned int shader_chanel_select_g:3; + unsigned int shader_chanel_select_r:3; + unsigned int pad1:2; + unsigned int memory_compression_enable:1; + unsigned int memory_compression_mode:1; + } ss7; + + struct { + unsigned int base_addr; + } ss8; + + struct { + unsigned int base_addr_high; + } ss9; + + struct { + unsigned int quilt_width:5; + unsigned int quilt_height:5; + unsigned int pad0:6; + unsigned int pad1:16; + } ss10; + + struct { + unsigned int y_offset_v_plane:14; + unsigned int pad0:2; + unsigned int x_offset_v_plane:14; + unsigned int pad1:2; + } ss11; + + struct { + unsigned int pad0; + } ss12; + + struct { + unsigned int pad0; + } ss13; + + struct { + unsigned int pad0; + } ss14; + + struct { + unsigned int pad0; + } ss15; +}; + +struct gen8_sampler_state +{ + struct + { + unsigned int aniso_algorithm:1; + unsigned int lod_bias:13; + unsigned int min_filter:3; + unsigned int mag_filter:3; + unsigned int mip_filter:2; + unsigned int base_level:5; + unsigned int lod_preclamp:2; + unsigned int default_color_mode:1; + unsigned int pad0:1; + unsigned int disable:1; + } ss0; + + struct + { + unsigned int cube_control_mode:1; + unsigned int shadow_function:3; + unsigned int chroma_key_mode:1; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int max_lod:12; + unsigned int min_lod:12; + } ss1; + + struct + { + unsigned int lod_clamp_mag_mode:1; /* MIPNONE or MIPFILTER */ + unsigned int flex_filter_vert_align:1; + unsigned int flex_filter_hort_align:1; + unsigned int flex_filter_coff_size:1; /* coff8 or coff 16 */ + unsigned int flex_filter_mode:1; + unsigned int pad0:1; + unsigned int indirect_state_pointer:18; /* point to the SAMPLE_INDIRECT_STATE */ + union { + unsigned char nonsep_filter_footer_highmask; + struct { + unsigned char pad1:2; + unsigned char sep_filter_height:2; + unsigned char sep_filter_width:2; + unsigned char sep_filter_coff_size:2; + } sep_filter; + } ss2_byte3; + } ss2; + + struct + { + unsigned int r_wrap_mode:3; + unsigned int t_wrap_mode:3; + unsigned int s_wrap_mode:3; + unsigned int pad0:1; + unsigned int non_normalized_coord:1; + unsigned int trilinear_quality:2; + unsigned int address_round:6; + unsigned int max_aniso:3; + unsigned int pad1:2; + unsigned int nonsep_filter_foot_lowmask:8; + } ss3; +}; + +struct gen8_global_blend_state +{ + unsigned int pad0:19; + unsigned int ydither_offset:2; + unsigned int xdither_offset:2; + unsigned int color_dither_enable:1; + unsigned int alpha_test_func:3; + unsigned int alpha_test_enable:1; + unsigned int alpha_to_coverage_dither:1; + unsigned int alpha_to_one:1; + unsigned int ia_blend_enable:1; + unsigned int alpha_to_coverage:1; +}; + +struct gen8_blend_state_rt { + struct { + unsigned int blue_write_dis:1; + unsigned int green_write_dis:1; + unsigned int red_write_dis:1; + unsigned int alpha_write_dis:1; + unsigned int pad0:1; + unsigned int alpha_blend_func:3; + unsigned int ia_dest_blend_factor:5; + unsigned int ia_src_blend_factor:5; + unsigned int color_blend_func:3; + unsigned int dest_blend_factor:5; + unsigned int src_blend_factor:5; + unsigned int colorbuf_blend:1; + } blend0; + + struct { + unsigned int post_blend_clamp_enable:1; + unsigned int pre_blend_clamp_enable:1; + unsigned int clamp_range:2; + unsigned int pre_blend_src_clamp:1; + unsigned int pad0:22; + unsigned int logic_op_func:4; + unsigned int logic_op_enable:1; + } blend1; +}; + +/* TODO: Add the sampler_8x8 for Gen8+. + * AVS/Convolve is 256DWs. + * MinMaxfilter/Erode/Dilate: 8DWs*/ + + +struct gen6_blend_state +{ + struct { + unsigned int dest_blend_factor:5; + unsigned int source_blend_factor:5; + unsigned int pad3:1; + unsigned int blend_func:3; + unsigned int pad2:1; + unsigned int ia_dest_blend_factor:5; + unsigned int ia_source_blend_factor:5; + unsigned int pad1:1; + unsigned int ia_blend_func:3; + unsigned int pad0:1; + unsigned int ia_blend_enable:1; + unsigned int blend_enable:1; + } blend0; + + struct { + unsigned int post_blend_clamp_enable:1; + unsigned int pre_blend_clamp_enable:1; + unsigned int clamp_range:2; + unsigned int pad0:4; + unsigned int x_dither_offset:2; + unsigned int y_dither_offset:2; + unsigned int dither_enable:1; + unsigned int alpha_test_func:3; + unsigned int alpha_test_enable:1; + unsigned int pad1:1; + unsigned int logic_op_func:4; + unsigned int logic_op_enable:1; + unsigned int pad2:1; + unsigned int write_disable_b:1; + unsigned int write_disable_g:1; + unsigned int write_disable_r:1; + unsigned int write_disable_a:1; + unsigned int pad3:1; + unsigned int alpha_to_coverage_dither:1; + unsigned int alpha_to_one:1; + unsigned int alpha_to_coverage:1; + } blend1; +}; + +struct gen6_color_calc_state +{ + struct { + unsigned int alpha_test_format:1; + unsigned int pad0:14; + unsigned int round_disable:1; + unsigned int bf_stencil_ref:8; + unsigned int stencil_ref:8; + } cc0; + + union { + float alpha_ref_f; + struct { + unsigned int ui:8; + unsigned int pad0:24; + } alpha_ref_fi; + } cc1; + + float constant_r; + float constant_g; + float constant_b; + float constant_a; +}; + +struct gen6_depth_stencil_state +{ + struct { + unsigned int pad0:3; + unsigned int bf_stencil_pass_depth_pass_op:3; + unsigned int bf_stencil_pass_depth_fail_op:3; + unsigned int bf_stencil_fail_op:3; + unsigned int bf_stencil_func:3; + unsigned int bf_stencil_enable:1; + unsigned int pad1:2; + unsigned int stencil_write_enable:1; + unsigned int stencil_pass_depth_pass_op:3; + unsigned int stencil_pass_depth_fail_op:3; + unsigned int stencil_fail_op:3; + unsigned int stencil_func:3; + unsigned int stencil_enable:1; + } ds0; + + struct { + unsigned int bf_stencil_write_mask:8; + unsigned int bf_stencil_test_mask:8; + unsigned int stencil_write_mask:8; + unsigned int stencil_test_mask:8; + } ds1; + + struct { + unsigned int pad0:26; + unsigned int depth_write_enable:1; + unsigned int depth_test_func:3; + unsigned int pad1:1; + unsigned int depth_test_enable:1; + } ds2; +}; + +struct gen6_interface_descriptor_data +{ + struct { + unsigned int pad0:6; + unsigned int kernel_start_pointer:26; + } desc0; + + struct { + unsigned int pad0:7; + unsigned int software_exception_enable:1; + unsigned int pad1:3; + unsigned int maskstack_exception_enable:1; + unsigned int pad2:1; + unsigned int illegal_opcode_exception_enable:1; + unsigned int pad3:2; + unsigned int floating_point_mode:1; + unsigned int thread_priority:1; + unsigned int single_program_flow:1; + unsigned int pad4:13; + } desc1; + + struct { + unsigned int pad0:2; + unsigned int sampler_count:3; + unsigned int sampler_state_pointer:27; + } desc2; + + struct { + unsigned int binding_table_entry_count:5; + unsigned int binding_table_pointer:27; + } desc3; + + struct { + unsigned int constant_urb_entry_read_offset:16; + unsigned int constant_urb_entry_read_length:16; + } desc4; + + union { + struct { + unsigned int num_threads:8; + unsigned int barrier_return_byte:8; + unsigned int shared_local_memory_size:5; + unsigned int barrier_enable:1; + unsigned int rounding_mode:2; + unsigned int barrier_return_grf_offset:8; + } gen7; + + struct { + unsigned int barrier_id:4; + unsigned int pad0:28; + } gen6; + } desc5; + + struct { + unsigned int cross_thread_constant_data_read_length:8; + unsigned int pad0:24; + } desc6; + + struct { + unsigned int pad0; + } desc7; +}; + +struct gen7_surface_state +{ + struct { + unsigned int cube_pos_z:1; + unsigned int cube_neg_z:1; + unsigned int cube_pos_y:1; + unsigned int cube_neg_y:1; + unsigned int cube_pos_x:1; + unsigned int cube_neg_x:1; + unsigned int pad2:2; + unsigned int render_cache_read_write:1; + unsigned int pad1:1; + unsigned int surface_array_spacing:1; + unsigned int vert_line_stride_ofs:1; + unsigned int vert_line_stride:1; + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int horizontal_alignment:1; + unsigned int vertical_alignment:2; + unsigned int surface_format:9; /**< BRW_SURFACEFORMAT_x */ + unsigned int pad0:1; + unsigned int is_array:1; + unsigned int surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ + } ss0; + + struct { + unsigned int base_addr; + } ss1; + + struct { + unsigned int width:14; + unsigned int pad1:2; + unsigned int height:14; + unsigned int pad0:2; + } ss2; + + struct { + unsigned int pitch:18; + unsigned int pad:3; + unsigned int depth:11; + } ss3; + + struct { + unsigned int multisample_position_palette_index:3; + unsigned int num_multisamples:3; + unsigned int multisampled_surface_storage_format:1; + unsigned int render_target_view_extent:11; + unsigned int min_array_elt:11; + unsigned int rotation:2; + unsigned int pad0:1; + } ss4; + + struct { + unsigned int mip_count:4; + unsigned int min_lod:4; + unsigned int pad1:12; + unsigned int y_offset:4; + unsigned int pad0:1; + unsigned int x_offset:7; + } ss5; + + struct { + unsigned int pad; /* Multisample Control Surface stuff */ + } ss6; + + struct { + unsigned int resource_min_lod:12; + unsigned int pad0:4; + unsigned int shader_chanel_select_a:3; + unsigned int shader_chanel_select_b:3; + unsigned int shader_chanel_select_g:3; + unsigned int shader_chanel_select_r:3; + unsigned int alpha_clear_color:1; + unsigned int blue_clear_color:1; + unsigned int green_clear_color:1; + unsigned int red_clear_color:1; + } ss7; +}; + +struct gen7_sampler_state +{ + struct + { + unsigned int aniso_algorithm:1; + unsigned int lod_bias:13; + unsigned int min_filter:3; + unsigned int mag_filter:3; + unsigned int mip_filter:2; + unsigned int base_level:5; + unsigned int pad1:1; + unsigned int lod_preclamp:1; + unsigned int default_color_mode:1; + unsigned int pad0:1; + unsigned int disable:1; + } ss0; + + struct + { + unsigned int cube_control_mode:1; + unsigned int shadow_function:3; + unsigned int pad:4; + unsigned int max_lod:12; + unsigned int min_lod:12; + } ss1; + + struct + { + unsigned int pad:5; + unsigned int default_color_pointer:27; + } ss2; + + struct + { + unsigned int r_wrap_mode:3; + unsigned int t_wrap_mode:3; + unsigned int s_wrap_mode:3; + unsigned int pad:1; + unsigned int non_normalized_coord:1; + unsigned int trilinear_quality:2; + unsigned int address_round:6; + unsigned int max_aniso:3; + unsigned int chroma_key_mode:1; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int pad0:6; + } ss3; +}; + +struct gen7_surface_state2 +{ + struct { + unsigned int surface_base_address; + } ss0; + + struct { + unsigned int cbcr_pixel_offset_v_direction:2; + unsigned int picture_structure:2; + unsigned int width:14; + unsigned int height:14; + } ss1; + + struct { + unsigned int tile_walk:1; + unsigned int tiled_surface:1; + unsigned int half_pitch_for_chroma:1; + unsigned int pitch:18; + unsigned int pad0:1; + unsigned int surface_object_control_data:4; + unsigned int pad1:1; + unsigned int interleave_chroma:1; + unsigned int surface_format:4; + } ss2; + + struct { + unsigned int y_offset_for_cb:15; + unsigned int pad0:1; + unsigned int x_offset_for_cb:14; + unsigned int pad1:2; + } ss3; + + struct { + unsigned int y_offset_for_cr:15; + unsigned int pad0:1; + unsigned int x_offset_for_cr:14; + unsigned int pad1:2; + } ss4; + + struct { + unsigned int pad0; + } ss5; + + struct { + unsigned int pad0; + } ss6; + + struct { + unsigned int pad0; + } ss7; +}; + +struct gen7_sampler_8x8 +{ + struct { + unsigned int global_noise_estimation:8; + unsigned int pad0:8; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int pad1:10; + unsigned int ief_bypass:1; + unsigned int pad2:1; + unsigned int disable_8x8_filter:1; + } dw0; + + struct { + unsigned int pad0:5; + unsigned int sampler_8x8_state_pointer:27; + } dw1; + + struct { + unsigned int weak_edge_threshold:6; + unsigned int pad0:2; + unsigned int strong_edge_threshold:6; + unsigned int pad1:2; + unsigned int r5x_coefficient:5; + unsigned int r5cx_coefficient:5; + unsigned int r5c_coefficient:5; + unsigned int pad2:1; + } dw2; + + struct { + unsigned int r3x_coefficient:5; + unsigned int pad0:1; + unsigned int r3c_coefficient:5; + unsigned int pad1:3; + unsigned int gain_factor:6; + unsigned int non_edge_weight:3; + unsigned int pad2:1; + unsigned int regular_weight:3; + unsigned int pad3:1; + unsigned int strong_edge_weight:3; + unsigned int ief4_smooth_enable:1; + } dw3; +}; + +/* This can also be used for BDW+ */ +struct gen7_sampler_dndi +{ + struct { + unsigned int denoise_asd_threshold:8; + unsigned int dnmh_delt:4; + unsigned int vdi_walker_y_stride:2; + unsigned int vdi_walker_frame_sharing_enable:1; + unsigned int pad0:1; + unsigned int denoise_maximum_history:8; + unsigned int denoise_stad_threshold:8; + } dw0; + + struct { + unsigned int denoise_threshold_for_sum_of_complexity_measure:8; + unsigned int denoise_moving_pixel_threshold:5; + unsigned int stmm_c2:3; + unsigned int low_temporal_difference_threshold:6; + unsigned int pad0:2; + unsigned int temporal_difference_threshold:6; + unsigned int pad1:2; + } dw1; + + struct { + unsigned int block_noise_estimate_noise_threshold:8; + unsigned int bne_edge_th:4; + unsigned int pad0:2; + unsigned int smooth_mv_th:2; + unsigned int sad_tight_th:4; + unsigned int cat_slope_minus1:4; + unsigned int good_neighbor_th:6; + unsigned int pad1:2; + } dw2; + + struct { + unsigned int maximum_stmm:8; + unsigned int multipler_for_vecm:6; + unsigned int pad0:2; + unsigned int blending_constant_across_time_for_small_values_of_stmm:8; + unsigned int blending_constant_across_time_for_large_values_of_stmm:7; + unsigned int stmm_blending_constant_select:1; + } dw3; + + struct { + unsigned int sdi_delta:8; + unsigned int sdi_threshold:8; + unsigned int stmm_output_shift:4; + unsigned int stmm_shift_up:2; + unsigned int stmm_shift_down:2; + unsigned int minimum_stmm:8; + } dw4; + + struct { + unsigned int fmd_temporal_difference_threshold:8; + unsigned int sdi_fallback_mode_2_constant:8; + unsigned int sdi_fallback_mode_1_t2_constant:8; + unsigned int sdi_fallback_mode_1_t1_constant:8; + } dw5; + + struct { + unsigned int dn_enable:1; + unsigned int di_enable:1; + unsigned int di_partial:1; + unsigned int dndi_top_first:1; + unsigned int dndi_stream_id:1; + unsigned int dndi_first_frame:1; + unsigned int progressive_dn:1; + unsigned int mcdi_enable:1; + unsigned int fmd_tear_threshold:6; + unsigned int cat_th1:2; + unsigned int fmd2_vertical_difference_threshold:8; + unsigned int fmd1_vertical_difference_threshold:8; + } dw6; + + struct { + unsigned int sad_tha:4; + unsigned int sad_thb:4; + unsigned int fmd_for_1st_field_of_current_frame:2; + unsigned int mc_pixel_consistency_th:6; + unsigned int fmd_for_2nd_field_of_previous_frame:2; + unsigned int vdi_walker_enable:1; + unsigned int neighborpixel_th:4; + unsigned int column_width_minus1:9; + } dw7; +}; + +struct gen8_sampler_8x8_avs_coefficients +{ + struct { + unsigned int table_0x_filter_c0:8; + unsigned int table_0y_filter_c0:8; + unsigned int table_0x_filter_c1:8; + unsigned int table_0y_filter_c1:8; + } dw0; + + struct { + unsigned int table_0x_filter_c2:8; + unsigned int table_0y_filter_c2:8; + unsigned int table_0x_filter_c3:8; + unsigned int table_0y_filter_c3:8; + } dw1; + + struct { + unsigned int table_0x_filter_c4:8; + unsigned int table_0y_filter_c4:8; + unsigned int table_0x_filter_c5:8; + unsigned int table_0y_filter_c5:8; + } dw2; + + struct { + unsigned int table_0x_filter_c6:8; + unsigned int table_0y_filter_c6:8; + unsigned int table_0x_filter_c7:8; + unsigned int table_0y_filter_c7:8; + } dw3; + + struct { + unsigned int pad0:16; + unsigned int table_1x_filter_c2:8; + unsigned int table_1x_filter_c3:8; + } dw4; + + struct { + unsigned int table_1x_filter_c4:8; + unsigned int table_1x_filter_c5:8; + unsigned int pad0:16; + } dw5; + + struct { + unsigned int pad0:16; + unsigned int table_1y_filter_c2:8; + unsigned int table_1y_filter_c3:8; + } dw6; + + struct { + unsigned int table_1y_filter_c4:8; + unsigned int table_1y_filter_c5:8; + unsigned int pad0:16; + } dw7; +}; + +struct gen8_sampler_8x8_avs { + struct { + unsigned int gain_factor:6; + unsigned int weak_edge_threshold:6; + unsigned int strong_edge_threshold:6; + unsigned int r3x_coefficient:5; + unsigned int r3c_coefficient:5; + unsigned int chroma_key_index:2; + unsigned int chroma_key_enable:1; + unsigned int pad1:1; + } dw0; + + struct { + unsigned int pad0; + } dw1; + + struct { + unsigned int global_noise_estimation:8; + unsigned int non_edge_weight:3; + unsigned int regular_weight:3; + unsigned int strong_edge_weight:3; + unsigned int r5x_coefficient:5; + unsigned int r5cx_coefficient:5; + unsigned int r5c_coefficient:5; + } dw2; + + struct { + unsigned int sin_alpha:8; /* S0.7 */ + unsigned int cos_alpha:8; /* S0.7 */ + unsigned int sat_max:6; + unsigned int hue_max:6; + unsigned int enable_8tap_filter:2; + unsigned int ief4_smooth_enable:1; + unsigned int skin_ief_enable:1; + } dw3; + + struct { + unsigned int s3u:11; /* S2.8 */ + unsigned int pad0:1; + unsigned int diamond_margin:3; + unsigned int vy_std_enable:1; + unsigned int umid:8; + unsigned int vmid:8; + } dw4; + + struct { + unsigned int diamond_dv:7; + unsigned int diamond_th:6; + unsigned int diamond_alpha:8; + unsigned int hs_margin:3; + unsigned int diamond_du:7; + unsigned int skin_detailfilter:1; + } dw5; + + struct { + unsigned int y_point1:8; + unsigned int y_point2:8; + unsigned int y_point3:8; + unsigned int y_point4:8; + } dw6; + + struct { + unsigned int inv_margin_vyl:16; + unsigned int pad0:16; + } dw7; + + struct { + unsigned int inv_margin_vyu:16; + unsigned int p0l:8; + unsigned int p1l:8; + } dw8; + + struct { + unsigned int p2l:8; + unsigned int p3l:8; + unsigned int b0l:8; + unsigned int b1l:8; + } dw9; + + struct { + unsigned int b2l:8; + unsigned int b3l:8; + unsigned int s0l:11; + unsigned int y_slope2:5; + } dw10; + + struct { + unsigned int s1l:11; + unsigned int s2l:11; + unsigned int pad0:10; + } dw11; + + struct { + unsigned int s3l:11; + unsigned int p0u:8; + unsigned int p1u:8; + unsigned int y_slope1:5; + } dw12; + + struct { + unsigned int p2u:8; + unsigned int p3u:8; + unsigned int b0u:8; + unsigned int b1u:8; + } dw13; + + struct { + unsigned int b2u:8; + unsigned int b3u:8; + unsigned int s0u:11; + unsigned int pad0:5; + } dw14; + + struct { + unsigned int s1u:11; + unsigned int s2u:11; + unsigned int pad0:10; + } dw15; + + /* DW16-DW151 */ + struct gen8_sampler_8x8_avs_coefficients coefficients[17]; + + struct { + unsigned int transition_area_with_8_pixels:3; + unsigned int pad0:1; + unsigned int transition_area_with_4_pixels:3; + unsigned int pad1:1; + unsigned int max_derivative_8_pixels:8; + unsigned int max_derivative_4_pixels:8; + unsigned int default_sharpness_level:8; + } dw152; + + struct { + unsigned int rgb_adaptive:1; + unsigned int adaptive_filter_for_all_channel:1; + unsigned int pad0:19; + unsigned int bypass_y_adaptive_filtering:1; + unsigned int bypass_x_adaptive_filtering:1; + unsigned int pad1:9; + } dw153; + + unsigned int reserved[6]; + + /* DW160-DW279 */ + struct gen8_sampler_8x8_avs_coefficients coefficients1[15]; +}; + +#define SURFACE_STATE_PADDED_SIZE_0_GEN7 ALIGN(sizeof(struct gen7_surface_state), 32) +#define SURFACE_STATE_PADDED_SIZE_1_GEN7 ALIGN(sizeof(struct gen7_surface_state2), 32) +#define SURFACE_STATE_PADDED_SIZE_GEN7 MAX(SURFACE_STATE_PADDED_SIZE_0_GEN7, SURFACE_STATE_PADDED_SIZE_1_GEN7) + +#define SURFACE_STATE_PADDED_SIZE_0_GEN6 ALIGN(sizeof(struct i965_surface_state), 32) +#define SURFACE_STATE_PADDED_SIZE_1_GEN6 ALIGN(sizeof(struct i965_surface_state2), 32) +#define SURFACE_STATE_PADDED_SIZE_GEN6 MAX(SURFACE_STATE_PADDED_SIZE_0_GEN6, SURFACE_STATE_PADDED_SIZE_1_GEN6) + +#define SURFACE_STATE_PADDED_SIZE_0_GEN8 ALIGN(sizeof(struct gen8_surface_state), 32) +#define SURFACE_STATE_PADDED_SIZE_1_GEN8 ALIGN(sizeof(struct gen8_surface_state2), 32) +#define SURFACE_STATE_PADDED_SIZE_GEN8 MAX(SURFACE_STATE_PADDED_SIZE_0_GEN8, SURFACE_STATE_PADDED_SIZE_1_GEN8) + +#define SURFACE_STATE_PADDED_SIZE_0_GEN9 ALIGN(sizeof(struct gen9_surface_state), 32) +#define SURFACE_STATE_PADDED_SIZE_1_GEN9 ALIGN(sizeof(struct gen9_surface_state2), 32) +#define SURFACE_STATE_PADDED_SIZE_GEN9 MAX(SURFACE_STATE_PADDED_SIZE_0_GEN9, SURFACE_STATE_PADDED_SIZE_1_GEN9) + +#endif /* _I965_STRUCTS_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.c new file mode 100644 index 000000000..58d0949a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.c @@ -0,0 +1,271 @@ +/* + * i965_vpp_avs.c - Adaptive Video Scaler (AVS) block + * + * Copyright (C) 2014 Intel Corporation + * Author: Gwenole Beauchesne + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include "i965_vpp_avs.h" + +typedef void (*AVSGenCoeffsFunc)(float *coeffs, int num_coeffs, int phase, + int num_phases, float f); + +/* Initializes all coefficients to zero */ +static void +avs_init_coeffs(float *coeffs, int num_coeffs) +{ +#if defined(__STDC_IEC_559__) && (__STDC_IEC_559__ > 0) + memset(coeffs, 0, num_coeffs * sizeof(*coeffs)); +#else + int i; + + for (i = 0; i < num_coeffs; i++) + coeffs[i] = 0.0f; +#endif +} + +/* Computes the sinc(x) function */ +static float +avs_sinc(float x) +{ + if (x == 0.0f) + return 1.0f; + return sin(x * M_PI) / (x * M_PI); +} + +/* Convolution kernel for linear interpolation */ +static float +avs_kernel_linear(float x) +{ + const float abs_x = fabsf(x); + + return abs_x < 1.0f ? 1 - abs_x : 0.0f; +} + +/* Convolution kernel for Lanczos-based interpolation */ +static float +avs_kernel_lanczos(float x, float a) +{ + const float abs_x = fabsf(x); + + return abs_x < a ? avs_sinc(x) * avs_sinc(x / a) : 0.0f; +} + +/* Truncates floating-point value towards an epsilon factor */ +static inline float +avs_trunc_coeff(float x, float epsilon) +{ + return rintf(x / epsilon) * epsilon; +} + +/* Normalize coefficients for one sample/direction */ +static void +avs_normalize_coeffs_1(float *coeffs, int num_coeffs, float epsilon) +{ + float s, sum = 0.0; + int i, c, r, r1; + + for (i = 0; i < num_coeffs; i++) + sum += coeffs[i]; + + if (sum < epsilon) + return; + + s = 0.0; + for (i = 0; i < num_coeffs; i++) + s += (coeffs[i] = avs_trunc_coeff(coeffs[i] / sum, epsilon)); + + /* Distribute the remaining bits, while allocating more to the center */ + c = num_coeffs/2; + c = c - (coeffs[c - 1] > coeffs[c]); + + r = (1.0f - s) / epsilon; + r1 = r / 4; + if (coeffs[c + 1] == 0.0f) + coeffs[c] += r * epsilon; + else { + coeffs[c] += (r - 2*r1) * epsilon; + coeffs[c - 1] += r1 * epsilon; + coeffs[c + 1] += r1 * epsilon; + } +} + +/* Normalize all coefficients so that their sum yields 1.0f */ +static void +avs_normalize_coeffs(AVSCoeffs *coeffs, const AVSConfig *config) +{ + avs_normalize_coeffs_1(coeffs->y_k_h, config->num_luma_coeffs, + config->coeff_epsilon); + avs_normalize_coeffs_1(coeffs->y_k_v, config->num_luma_coeffs, + config->coeff_epsilon); + avs_normalize_coeffs_1(coeffs->uv_k_h, config->num_chroma_coeffs, + config->coeff_epsilon); + avs_normalize_coeffs_1(coeffs->uv_k_v, config->num_chroma_coeffs, + config->coeff_epsilon); +} + +/* Validate coefficients for one sample/direction */ +static bool +avs_validate_coeffs_1(float *coeffs, int num_coeffs, const float *min_coeffs, + const float *max_coeffs) +{ + int i; + + for (i = 0; i < num_coeffs; i++) { + if (coeffs[i] < min_coeffs[i] || coeffs[i] > max_coeffs[i]) + return false; + } + return true; +} + +/* Validate coefficients wrt. the supplied range in config */ +static bool +avs_validate_coeffs(AVSCoeffs *coeffs, const AVSConfig *config) +{ + const AVSCoeffs * const min_coeffs = &config->coeff_range.lower_bound; + const AVSCoeffs * const max_coeffs = &config->coeff_range.upper_bound; + + return avs_validate_coeffs_1(coeffs->y_k_h, config->num_luma_coeffs, + min_coeffs->y_k_h, max_coeffs->y_k_h) && + avs_validate_coeffs_1(coeffs->y_k_v, config->num_luma_coeffs, + min_coeffs->y_k_v, max_coeffs->y_k_v) && + avs_validate_coeffs_1(coeffs->uv_k_h, config->num_chroma_coeffs, + min_coeffs->uv_k_h, max_coeffs->uv_k_h) && + avs_validate_coeffs_1(coeffs->uv_k_v, config->num_chroma_coeffs, + min_coeffs->uv_k_v, max_coeffs->uv_k_v); +} + +/* Generate coefficients for default quality (bilinear) */ +static void +avs_gen_coeffs_linear(float *coeffs, int num_coeffs, int phase, int num_phases, + float f) +{ + const int c = num_coeffs/2 - 1; + const float p = (float)phase / (num_phases*2); + + avs_init_coeffs(coeffs, num_coeffs); + coeffs[c] = avs_kernel_linear(p); + coeffs[c + 1] = avs_kernel_linear(p - 1); +} + +/* Generate coefficients for high quality (lanczos) */ +static void +avs_gen_coeffs_lanczos(float *coeffs, int num_coeffs, int phase, int num_phases, + float f) +{ + const int c = num_coeffs/2 - 1; + const int l = num_coeffs > 4 ? 3 : 2; + const float p = (float)phase / (num_phases*2); + int i; + + if (f > 1.0f) + f = 1.0f; + for (i = 0; i < num_coeffs; i++) + coeffs[i] = avs_kernel_lanczos((i - (c + p)) * f, l); +} + +/* Generate coefficients with the supplied scaler */ +static bool +avs_gen_coeffs(AVSState *avs, float sx, float sy, AVSGenCoeffsFunc gen_coeffs) +{ + const AVSConfig * const config = avs->config; + int i; + + for (i = 0; i <= config->num_phases; i++) { + AVSCoeffs * const coeffs = &avs->coeffs[i]; + + gen_coeffs(coeffs->y_k_h, config->num_luma_coeffs, + i, config->num_phases, sx); + gen_coeffs(coeffs->uv_k_h, config->num_chroma_coeffs, + i, config->num_phases, sx); + gen_coeffs(coeffs->y_k_v, config->num_luma_coeffs, + i, config->num_phases, sy); + gen_coeffs(coeffs->uv_k_v, config->num_chroma_coeffs, + i, config->num_phases, sy); + + avs_normalize_coeffs(coeffs, config); + if (!avs_validate_coeffs(coeffs, config)) + return false; + } + return true; +} + +/* Initializes AVS state with the supplied configuration */ +void +avs_init_state(AVSState *avs, const AVSConfig *config) +{ + avs->config = config; + avs->flags = 0; + avs->scale_x = 0.0f; + avs->scale_y = 0.0f; +} + +/* Checks whether the AVS scaling parameters changed */ +static inline bool +avs_params_changed(AVSState *avs, float sx, float sy, uint32_t flags) +{ + if (avs->flags != flags) + return true; + + if (flags >= VA_FILTER_SCALING_HQ) { + if (avs->scale_x != sx || avs->scale_y != sy) + return true; + } + else { + if (avs->scale_x == 0.0f || avs->scale_y == 0.0f) + return true; + } + return false; +} + +/* Updates AVS coefficients for the supplied factors and quality level */ +bool +avs_update_coefficients(AVSState *avs, float sx, float sy, uint32_t flags) +{ + AVSGenCoeffsFunc gen_coeffs; + + flags &= VA_FILTER_SCALING_MASK; + if (!avs_params_changed(avs, sx, sy, flags)) + return true; + + switch (flags) { + case VA_FILTER_SCALING_HQ: + gen_coeffs = avs_gen_coeffs_lanczos; + break; + default: + gen_coeffs = avs_gen_coeffs_linear; + break; + } + if (!avs_gen_coeffs(avs, sx, sy, gen_coeffs)) { + assert(0 && "invalid set of coefficients generated"); + return false; + } + + avs->flags = flags; + avs->scale_x = sx; + avs->scale_y = sy; + return true; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.h new file mode 100644 index 000000000..01616bdba --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_vpp_avs.h @@ -0,0 +1,113 @@ +/* + * i965_vpp_avs.h - Adaptive Video Scaler (AVS) block + * + * Copyright (C) 2014 Intel Corporation + * Author: Gwenole Beauchesne + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef I965_VPP_AVS_H +#define I965_VPP_AVS_H + +#include +#include + +/** Maximum number of phases for the sharp filter */ +#define AVS_MAX_PHASES 32 + +/** Maximum number of coefficients for luma samples */ +#define AVS_MAX_LUMA_COEFFS 8 + +/** Maximum number of coefficients for chroma samples */ +#define AVS_MAX_CHROMA_COEFFS 4 + +typedef struct avs_coeffs AVSCoeffs; +typedef struct avs_coeffs_range AVSCoeffsRange; +typedef struct avs_config AVSConfig; +typedef struct avs_state AVSState; + +/** AVS coefficients for one phase */ +struct avs_coeffs { + /** Coefficients for luma samples on the X-axis (horizontal) */ + float y_k_h[AVS_MAX_LUMA_COEFFS]; + /** Coefficients for luma samples on the Y-axis (vertical) */ + float y_k_v[AVS_MAX_LUMA_COEFFS]; + /** Coefficients for chroma samples on the X-axis (horizontal) */ + float uv_k_h[AVS_MAX_CHROMA_COEFFS]; + /** Coefficients for chroma samples on the Y-axis (vertical) */ + float uv_k_v[AVS_MAX_CHROMA_COEFFS]; +}; + +/** AVS coefficients range used for validation */ +struct avs_coeffs_range { + /** Lower bound for all coefficients */ + AVSCoeffs lower_bound; + /** Upper bound for all coefficients */ + AVSCoeffs upper_bound; +}; + +/** Static configuration (per-generation) */ +struct avs_config { + /** Number of bits used for the fractional part of a coefficient */ + int coeff_frac_bits; + /** The smallest float that could be represented as a coefficient */ + float coeff_epsilon; + /** Coefficients range */ + AVSCoeffsRange coeff_range; + /** Number of phases for the sharp filter */ + int num_phases; + /** Number of coefficients for luma samples */ + int num_luma_coeffs; + /** Number of coefficients for chroma samples */ + int num_chroma_coeffs; +}; + +/** AVS block state */ +struct avs_state { + /** Per-generation configuration parameters */ + const AVSConfig *config; + /** Scaling flags */ + uint32_t flags; + /** Scaling factor on the X-axis (horizontal) */ + float scale_x; + /** Scaling factor on the Y-axis (vertical) */ + float scale_y; + /** Coefficients for the polyphase scaler */ + AVSCoeffs coeffs[AVS_MAX_PHASES + 1]; +}; + +/** Initializes AVS state with the supplied configuration */ +void +avs_init_state(AVSState *avs, const AVSConfig *config); + +/** Updates AVS coefficients for the supplied factors and quality level */ +bool +avs_update_coefficients(AVSState *avs, float sx, float sy, uint32_t flags); + +/** Checks whether AVS is needed, e.g. if high-quality scaling is requested */ +static inline bool +avs_is_needed(uint32_t flags) +{ + return ((flags & VA_FILTER_SCALING_MASK) >= VA_FILTER_SCALING_HQ); +} + +#endif /* I965_VPP_AVS_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.c new file mode 100644 index 000000000..db817b44f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.c @@ -0,0 +1,73 @@ +/* + * Copyright © 2015 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "i965_yuv_coefs.h" + +static const float yuv_to_rgb_bt601[] = { + 1.164, 0, 1.596, -0.06275, + 1.164, -0.392, -0.813, -0.50196, + 1.164, 2.017, 0, -0.50196, +}; + +static const float yuv_to_rgb_bt709[] = { + 1.164, 0, 1.793, -0.06275, + 1.164, -0.213, -0.533, -0.50196, + 1.164, 2.112, 0, -0.50196, +}; + +static const float yuv_to_rgb_smpte_240[] = { + 1.164, 0, 1.794, -0.06275, + 1.164, -0.258, -0.5425, -0.50196, + 1.164, 2.078, 0, -0.50196, +}; + +VAProcColorStandardType i915_filter_to_color_standard (unsigned int filter) { + switch (filter & VA_SRC_COLOR_MASK) { + case VA_SRC_BT601: + return VAProcColorStandardBT601; + case VA_SRC_BT709: + return VAProcColorStandardBT709; + case VA_SRC_SMPTE_240: + return VAProcColorStandardSMPTE240M; + default: + return VAProcColorStandardBT601; + } +} + +const float *i915_color_standard_to_coefs (VAProcColorStandardType standard, size_t *length) { + switch (standard) { + case VAProcColorStandardBT601: + *length = sizeof(yuv_to_rgb_bt601); + return yuv_to_rgb_bt601; + case VAProcColorStandardBT709: + *length = sizeof(yuv_to_rgb_bt709); + return yuv_to_rgb_bt709; + case VAProcColorStandardSMPTE240M: + *length = sizeof(yuv_to_rgb_smpte_240); + return yuv_to_rgb_smpte_240; + default: + *length = sizeof(yuv_to_rgb_bt601); + return yuv_to_rgb_bt601; + } +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.h new file mode 100644 index 000000000..f58f903b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/i965_yuv_coefs.h @@ -0,0 +1,36 @@ +/* + * Copyright © 2015 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __I965_YUV_COEFS_H__ +#define __I965_YUV_COEFS_H__ + +#include "sysdeps.h" + +#include +#include + +VAProcColorStandardType i915_filter_to_color_standard (unsigned int filter); +const float *i915_color_standard_to_coefs (VAProcColorStandardType standard, size_t *length); + +#endif /* __I965_YUV_COEFS_H__ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.c new file mode 100644 index 000000000..a145e057b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.c @@ -0,0 +1,446 @@ +/************************************************************************** + * + * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include + +#include "intel_batchbuffer.h" + +#define MAX_BATCH_SIZE 0x400000 + + +#define LOCAL_I915_EXEC_BSD_MASK (3<<13) +#define LOCAL_I915_EXEC_BSD_DEFAULT (0<<13) /* default ping-pong mode */ +#define LOCAL_I915_EXEC_BSD_RING0 (1<<13) +#define LOCAL_I915_EXEC_BSD_RING1 (2<<13) + +static void +intel_batchbuffer_reset(struct intel_batchbuffer *batch, int buffer_size) +{ + struct intel_driver_data *intel = batch->intel; + int batch_size = buffer_size; + int ring_flag; + + ring_flag = batch->flag & I915_EXEC_RING_MASK; + + assert(ring_flag == I915_EXEC_RENDER || + ring_flag == I915_EXEC_BLT || + ring_flag == I915_EXEC_BSD || + ring_flag == I915_EXEC_VEBOX); + + dri_bo_unreference(batch->buffer); + batch->buffer = dri_bo_alloc(intel->bufmgr, + "batch buffer", + batch_size, + 0x1000); + assert(batch->buffer); + dri_bo_map(batch->buffer, 1); + assert(batch->buffer->virtual); + batch->map = batch->buffer->virtual; + batch->size = batch_size; + batch->ptr = batch->map; + batch->atomic = 0; +} + +static unsigned int +intel_batchbuffer_space(struct intel_batchbuffer *batch) +{ + return (batch->size - BATCH_RESERVED) - (batch->ptr - batch->map); +} + + +struct intel_batchbuffer * +intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int buffer_size) +{ + struct intel_batchbuffer *batch = calloc(1, sizeof(*batch)); + int ring_flag; + + ring_flag = flag & I915_EXEC_RING_MASK; + assert(ring_flag == I915_EXEC_RENDER || + ring_flag == I915_EXEC_BSD || + ring_flag == I915_EXEC_BLT || + ring_flag == I915_EXEC_VEBOX); + + if (!buffer_size || buffer_size < BATCH_SIZE) { + buffer_size = BATCH_SIZE; + } + + /* the buffer size can't exceed 4M */ + if (buffer_size > MAX_BATCH_SIZE) { + buffer_size = MAX_BATCH_SIZE; + } + + assert(batch); + batch->intel = intel; + batch->flag = flag; + batch->run = drm_intel_bo_mrb_exec; + + if (IS_GEN6(intel->device_info) && + flag == I915_EXEC_RENDER) + batch->wa_render_bo = dri_bo_alloc(intel->bufmgr, + "wa scratch", + 4096, + 4096); + else + batch->wa_render_bo = NULL; + + intel_batchbuffer_reset(batch, buffer_size); + + return batch; +} + +void intel_batchbuffer_free(struct intel_batchbuffer *batch) +{ + if (batch->map) { + dri_bo_unmap(batch->buffer); + batch->map = NULL; + } + + dri_bo_unreference(batch->buffer); + dri_bo_unreference(batch->wa_render_bo); + free(batch); +} + +void +intel_batchbuffer_flush(struct intel_batchbuffer *batch) +{ + unsigned int used = batch->ptr - batch->map; + + if (used == 0) { + return; + } + + if ((used & 4) == 0) { + *(unsigned int*)batch->ptr = 0; + batch->ptr += 4; + } + + *(unsigned int*)batch->ptr = MI_BATCH_BUFFER_END; + batch->ptr += 4; + dri_bo_unmap(batch->buffer); + used = batch->ptr - batch->map; + batch->run(batch->buffer, used, 0, 0, 0, batch->flag); + intel_batchbuffer_reset(batch, batch->size); +} + +void +intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, unsigned int x) +{ + assert(intel_batchbuffer_space(batch) >= 4); + *(unsigned int *)batch->ptr = x; + batch->ptr += 4; +} + +void +intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, dri_bo *bo, + uint32_t read_domains, uint32_t write_domains, + uint32_t delta) +{ + assert(batch->ptr - batch->map < batch->size); + dri_bo_emit_reloc(batch->buffer, read_domains, write_domains, + delta, batch->ptr - batch->map, bo); + intel_batchbuffer_emit_dword(batch, bo->offset + delta); +} + +void +intel_batchbuffer_emit_reloc64(struct intel_batchbuffer *batch, dri_bo *bo, + uint32_t read_domains, uint32_t write_domains, + uint32_t delta) +{ + assert(batch->ptr - batch->map < batch->size); + dri_bo_emit_reloc(batch->buffer, read_domains, write_domains, + delta, batch->ptr - batch->map, bo); + + /* Using the old buffer offset, write in what the right data would be, in + * case the buffer doesn't move and we can short-circuit the relocation + * processing in the kernel. + */ + uint64_t offset = bo->offset64 + delta; + intel_batchbuffer_emit_dword(batch, offset); + intel_batchbuffer_emit_dword(batch, offset >> 32); +} + +void +intel_batchbuffer_require_space(struct intel_batchbuffer *batch, + unsigned int size) +{ + assert(size < batch->size - 8); + + if (intel_batchbuffer_space(batch) < size) { + intel_batchbuffer_flush(batch); + } +} + +void +intel_batchbuffer_data(struct intel_batchbuffer *batch, + void *data, + unsigned int size) +{ + assert((size & 3) == 0); + intel_batchbuffer_require_space(batch, size); + + assert(batch->ptr); + memcpy(batch->ptr, data, size); + batch->ptr += size; +} + +void +intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch) +{ + struct intel_driver_data *intel = batch->intel; + int ring_flag; + + ring_flag = batch->flag & I915_EXEC_RING_MASK; + + if (IS_GEN6(intel->device_info) || + IS_GEN7(intel->device_info) || + IS_GEN8(intel->device_info) || + IS_GEN9(intel->device_info)) { + if (ring_flag == I915_EXEC_RENDER) { + if (IS_GEN8(intel->device_info) || IS_GEN9(intel->device_info)) { + BEGIN_BATCH(batch, 6); + OUT_BATCH(batch, CMD_PIPE_CONTROL | (6 - 2)); + + OUT_BATCH(batch, + CMD_PIPE_CONTROL_CS_STALL | + CMD_PIPE_CONTROL_WC_FLUSH | + CMD_PIPE_CONTROL_TC_FLUSH | + CMD_PIPE_CONTROL_DC_FLUSH | + CMD_PIPE_CONTROL_NOWRITE); + OUT_BATCH(batch, 0); /* write address */ + OUT_BATCH(batch, 0); + OUT_BATCH(batch, 0); /* write data */ + OUT_BATCH(batch, 0); + ADVANCE_BATCH(batch); + } else if (IS_GEN6(intel->device_info)) { + assert(batch->wa_render_bo); + + BEGIN_BATCH(batch, 4 * 3); + + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + OUT_BATCH(batch, + CMD_PIPE_CONTROL_CS_STALL | + CMD_PIPE_CONTROL_STALL_AT_SCOREBOARD); + OUT_BATCH(batch, 0); /* address */ + OUT_BATCH(batch, 0); /* write data */ + + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + OUT_BATCH(batch, CMD_PIPE_CONTROL_WRITE_QWORD); + OUT_RELOC(batch, + batch->wa_render_bo, + I915_GEM_DOMAIN_INSTRUCTION, + I915_GEM_DOMAIN_INSTRUCTION, + 0); + OUT_BATCH(batch, 0); /* write data */ + + /* now finally the _real flush */ + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + OUT_BATCH(batch, + CMD_PIPE_CONTROL_WC_FLUSH | + CMD_PIPE_CONTROL_TC_FLUSH | + CMD_PIPE_CONTROL_NOWRITE); + OUT_BATCH(batch, 0); /* write address */ + OUT_BATCH(batch, 0); /* write data */ + ADVANCE_BATCH(batch); + } else { + BEGIN_BATCH(batch, 4); + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + + OUT_BATCH(batch, + CMD_PIPE_CONTROL_WC_FLUSH | + CMD_PIPE_CONTROL_TC_FLUSH | + CMD_PIPE_CONTROL_DC_FLUSH | + CMD_PIPE_CONTROL_NOWRITE); + OUT_BATCH(batch, 0); /* write address */ + OUT_BATCH(batch, 0); /* write data */ + ADVANCE_BATCH(batch); + } + + } else { + if (ring_flag == I915_EXEC_BLT) { + BEGIN_BLT_BATCH(batch, 4); + OUT_BLT_BATCH(batch, MI_FLUSH_DW); + OUT_BLT_BATCH(batch, 0); + OUT_BLT_BATCH(batch, 0); + OUT_BLT_BATCH(batch, 0); + ADVANCE_BLT_BATCH(batch); + }else if (ring_flag == I915_EXEC_VEBOX) { + BEGIN_VEB_BATCH(batch, 4); + OUT_VEB_BATCH(batch, MI_FLUSH_DW); + OUT_VEB_BATCH(batch, 0); + OUT_VEB_BATCH(batch, 0); + OUT_VEB_BATCH(batch, 0); + ADVANCE_VEB_BATCH(batch); + } else { + assert(ring_flag == I915_EXEC_BSD); + BEGIN_BCS_BATCH(batch, 4); + OUT_BCS_BATCH(batch, MI_FLUSH_DW | MI_FLUSH_DW_VIDEO_PIPELINE_CACHE_INVALIDATE); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + OUT_BCS_BATCH(batch, 0); + ADVANCE_BCS_BATCH(batch); + } + } + } else { + if (ring_flag == I915_EXEC_RENDER) { + BEGIN_BATCH(batch, 1); + OUT_BATCH(batch, MI_FLUSH | MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE); + ADVANCE_BATCH(batch); + } else { + assert(ring_flag == I915_EXEC_BSD); + BEGIN_BCS_BATCH(batch, 1); + OUT_BCS_BATCH(batch, MI_FLUSH | MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE); + ADVANCE_BCS_BATCH(batch); + } + } +} + +void +intel_batchbuffer_begin_batch(struct intel_batchbuffer *batch, int total) +{ + batch->emit_total = total * 4; + batch->emit_start = batch->ptr; +} + +void +intel_batchbuffer_advance_batch(struct intel_batchbuffer *batch) +{ + assert(batch->emit_total == (batch->ptr - batch->emit_start)); +} + +void +intel_batchbuffer_check_batchbuffer_flag(struct intel_batchbuffer *batch, int flag) +{ + int ring_flag; + + ring_flag = flag & I915_EXEC_RING_MASK; + + if (ring_flag != I915_EXEC_RENDER && + ring_flag != I915_EXEC_BLT && + ring_flag != I915_EXEC_BSD && + ring_flag != I915_EXEC_VEBOX) + return; + + if (batch->flag == flag) + return; + + intel_batchbuffer_flush(batch); + batch->flag = flag; +} + +int +intel_batchbuffer_check_free_space(struct intel_batchbuffer *batch, int size) +{ + return intel_batchbuffer_space(batch) >= size; +} + +static void +intel_batchbuffer_start_atomic_helper(struct intel_batchbuffer *batch, + int flag, + unsigned int size) +{ + assert(!batch->atomic); + intel_batchbuffer_check_batchbuffer_flag(batch, flag); + intel_batchbuffer_require_space(batch, size); + batch->atomic = 1; +} + +void +intel_batchbuffer_start_atomic(struct intel_batchbuffer *batch, unsigned int size) +{ + intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_RENDER, size); +} + +void +intel_batchbuffer_start_atomic_blt(struct intel_batchbuffer *batch, unsigned int size) +{ + intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_BLT, size); +} + +void +intel_batchbuffer_start_atomic_bcs(struct intel_batchbuffer *batch, unsigned int size) +{ + intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_BSD, size); +} + +void +intel_batchbuffer_start_atomic_veb(struct intel_batchbuffer *batch, unsigned int size) +{ + intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_VEBOX, size); +} + +void intel_batchbuffer_start_atomic_bcs_override(struct intel_batchbuffer *batch, unsigned int size, + bsd_ring_flag override_flag) +{ + uint32_t ring_flag; + + switch(override_flag) { + case BSD_RING0: + ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_RING0; + break; + case BSD_RING1: + ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_RING1; + break; + default: + ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_DEFAULT; + break; + } + intel_batchbuffer_start_atomic_helper(batch, ring_flag, size); +} + + +void +intel_batchbuffer_end_atomic(struct intel_batchbuffer *batch) +{ + assert(batch->atomic); + batch->atomic = 0; +} + +int +intel_batchbuffer_used_size(struct intel_batchbuffer *batch) +{ + return batch->ptr - batch->map; +} + +void +intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int alignedment) +{ + int used = batch->ptr - batch->map; + int pad_size; + + assert((alignedment & 3) == 0); + pad_size = ALIGN(used, alignedment) - used; + assert((pad_size & 3) == 0); + assert(intel_batchbuffer_space(batch) >= pad_size); + + while (pad_size >= 4) { + intel_batchbuffer_emit_dword(batch, 0); + pad_size -= 4; + } +} + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.h new file mode 100644 index 000000000..377e6ae75 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer.h @@ -0,0 +1,119 @@ +#ifndef _INTEL_BATCHBUFFER_H_ +#define _INTEL_BATCHBUFFER_H_ + +#include +#include +#include +#include + +#include "intel_driver.h" + +struct intel_batchbuffer +{ + struct intel_driver_data *intel; + dri_bo *buffer; + unsigned int size; + unsigned char *map; + unsigned char *ptr; + int atomic; + int flag; + + int emit_total; + unsigned char *emit_start; + + int (*run)(drm_intel_bo *bo, int used, + drm_clip_rect_t *cliprects, int num_cliprects, + int DR4, unsigned int ring_flag); + + /* Used for Sandybdrige workaround */ + dri_bo *wa_render_bo; +}; + +struct intel_batchbuffer *intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int buffer_size); +void intel_batchbuffer_free(struct intel_batchbuffer *batch); +void intel_batchbuffer_start_atomic(struct intel_batchbuffer *batch, unsigned int size); +void intel_batchbuffer_start_atomic_bcs(struct intel_batchbuffer *batch, unsigned int size); +void intel_batchbuffer_start_atomic_blt(struct intel_batchbuffer *batch, unsigned int size); +void intel_batchbuffer_start_atomic_veb(struct intel_batchbuffer *batch, unsigned int size); +void intel_batchbuffer_end_atomic(struct intel_batchbuffer *batch); +void intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, unsigned int x); +void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, dri_bo *bo, + uint32_t read_domains, uint32_t write_domains, + uint32_t delta); +void intel_batchbuffer_emit_reloc64(struct intel_batchbuffer *batch, dri_bo *bo, + uint32_t read_domains, uint32_t write_domains, + uint32_t delta); +void intel_batchbuffer_require_space(struct intel_batchbuffer *batch, unsigned int size); +void intel_batchbuffer_data(struct intel_batchbuffer *batch, void *data, unsigned int size); +void intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch); +void intel_batchbuffer_flush(struct intel_batchbuffer *batch); +void intel_batchbuffer_begin_batch(struct intel_batchbuffer *batch, int total); +void intel_batchbuffer_advance_batch(struct intel_batchbuffer *batch); +void intel_batchbuffer_check_batchbuffer_flag(struct intel_batchbuffer *batch, int flag); +int intel_batchbuffer_check_free_space(struct intel_batchbuffer *batch, int size); +int intel_batchbuffer_used_size(struct intel_batchbuffer *batch); +void intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int alignedment); + +typedef enum { + BSD_DEFAULT, + BSD_RING0, + BSD_RING1, +} bsd_ring_flag; + +void intel_batchbuffer_start_atomic_bcs_override(struct intel_batchbuffer *batch, unsigned int size, + bsd_ring_flag override_flag); + +#define __BEGIN_BATCH(batch, n, f) do { \ + assert(f == (batch->flag & I915_EXEC_RING_MASK)); \ + intel_batchbuffer_check_batchbuffer_flag(batch, batch->flag); \ + intel_batchbuffer_require_space(batch, (n) * 4); \ + intel_batchbuffer_begin_batch(batch, (n)); \ + } while (0) + +#define __OUT_BATCH(batch, d) do { \ + intel_batchbuffer_emit_dword(batch, d); \ + } while (0) + +#define __OUT_RELOC(batch, bo, read_domains, write_domain, delta) do { \ + assert((delta) >= 0); \ + intel_batchbuffer_emit_reloc(batch, bo, \ + read_domains, write_domain, \ + delta); \ + } while (0) + +/* Handle 48-bit address relocations for Gen8+ */ +#define __OUT_RELOC64(batch, bo, read_domains, write_domain, delta) do { \ + intel_batchbuffer_emit_reloc64(batch, bo, \ + read_domains, write_domain, \ + delta); \ + } while (0) + +#define __ADVANCE_BATCH(batch) do { \ + intel_batchbuffer_advance_batch(batch); \ + } while (0) + +#define BEGIN_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_RENDER) +#define BEGIN_BLT_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_BLT) +#define BEGIN_BCS_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_BSD) +#define BEGIN_VEB_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_VEBOX) + +#define OUT_BATCH(batch, d) __OUT_BATCH(batch, d) +#define OUT_BLT_BATCH(batch, d) __OUT_BATCH(batch, d) +#define OUT_BCS_BATCH(batch, d) __OUT_BATCH(batch, d) +#define OUT_VEB_BATCH(batch, d) __OUT_BATCH(batch, d) + +#define OUT_RELOC(batch, bo, read_domains, write_domain, delta) \ + __OUT_RELOC(batch, bo, read_domains, write_domain, delta) +#define OUT_BLT_RELOC(batch, bo, read_domains, write_domain, delta) \ + __OUT_RELOC(batch, bo, read_domains, write_domain, delta) +#define OUT_BCS_RELOC(batch, bo, read_domains, write_domain, delta) \ + __OUT_RELOC(batch, bo, read_domains, write_domain, delta) +#define OUT_RELOC64(batch, bo, read_domains, write_domain, delta) \ + __OUT_RELOC64(batch, bo, read_domains, write_domain, delta) + +#define ADVANCE_BATCH(batch) __ADVANCE_BATCH(batch) +#define ADVANCE_BLT_BATCH(batch) __ADVANCE_BATCH(batch) +#define ADVANCE_BCS_BATCH(batch) __ADVANCE_BATCH(batch) +#define ADVANCE_VEB_BATCH(batch) __ADVANCE_BATCH(batch) + +#endif /* _INTEL_BATCHBUFFER_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.c new file mode 100644 index 000000000..1953b223f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.c @@ -0,0 +1,775 @@ +#include +#include +#include +#include + +#include "intel_driver.h" +#include "intel_batchbuffer_dump.h" + +#ifdef I965_DEBUG + +#define BUFFER_FAIL(_count, _len, _name) do { \ + fprintf(gout, "Buffer size too small in %s (%d < %d)\n", \ + (_name), (_count), (_len)); \ + (*failures)++; \ + return count; \ +} while (0) + +static FILE *gout; + +static void +instr_out(unsigned int *data, unsigned int offset, unsigned int index, char *fmt, ...) +{ + va_list va; + + fprintf(gout, "0x%08x: 0x%08x:%s ", offset + index * 4, data[index], + index == 0 ? "" : " "); + va_start(va, fmt); + vfprintf(gout, fmt, va); + va_end(va); +} + + +static int +dump_mi(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + unsigned int opcode; + int length, i; + + struct { + unsigned int opcode; + int mask_length; + int min_len; + int max_len; + char *name; + } mi_commands[] = { + { 0x00, 0, 1, 1, "MI_NOOP" }, + { 0x04, 0, 1, 1, "MI_FLUSH" }, + { 0x0a, 0, 1, 1, "MI_BATCH_BUFFER_END" }, + { 0x26, 0x3f, 4, 5, "MI_FLUSH_DW" }, + }; + + opcode = ((data[0] & MASK_MI_OPCODE) >> SHIFT_MI_OPCODE); + + for (i = 0; i < sizeof(mi_commands) / sizeof(mi_commands[0]); i++) { + if (opcode == mi_commands[i].opcode) { + int index; + + length = 1; + instr_out(data, offset, 0, "%s\n", mi_commands[i].name); + + if (mi_commands[i].max_len > 1) { + length = (data[0] & mi_commands[i].mask_length) + 2; + + if (length < mi_commands[i].min_len || + length > mi_commands[i].max_len) { + fprintf(gout, "Bad length (%d) in %s, [%d, %d]\n", + length, mi_commands[i].name, + mi_commands[i].min_len, + mi_commands[i].max_len); + } + } + + for (index = 1; index < length; index++) { + if (index >= count) + BUFFER_FAIL(count, length, mi_commands[i].name); + + instr_out(data, offset, index, "dword %d\n", index); + } + + return length; + } + } + + instr_out(data, offset, 0, "UNKNOWN MI COMMAND\n"); + (*failures)++; + return 1; +} + +static int +dump_gfxpipe_3d(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + instr_out(data, offset, 0, "UNKNOWN 3D COMMAND\n"); + (*failures)++; + + return 1; +} + +static void +dump_avc_bsd_img_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + int img_struct = ((data[3] >> 8) & 0x3); + + instr_out(data, offset, 1, "frame size: %d\n", (data[1] & 0xffff)); + instr_out(data, offset, 2, "width: %d, height: %d\n", (data[2] & 0xff), (data[2] >> 16) & 0xff); + instr_out(data, offset, 3, + "second_chroma_qp_offset: %d," + "chroma_qp_offset: %d," + "QM present flag: %d," + "image struct: %s," + "img_dec_fs_idc: %d," + "\n", + (data[3] >> 24) & 0x1f, + (data[3] >> 16) & 0x1f, + (data[3] >> 10) & 0x1, + (img_struct == 0) ? "frame" : (img_struct == 2) ? "invalid" : (img_struct == 1) ? "top field" : "bottom field", + data[3] & 0xff); + instr_out(data, offset, 4, + "residual off: 0x%x," + "16MV: %d," + "chroma fmt: %d," + "CABAC: %d," + "non-ref: %d," + "constrained intra: %d," + "direct8x8: %d," + "trans8x8: %d," + "MB only: %d," + "MBAFF: %d," + "\n", + (data[4] >> 24) & 0xff, + (data[4] >> 12) & 0x1, + (data[4] >> 10) & 0x3, + (data[4] >> 7) & 0x1, + (data[4] >> 6) & 0x1, + (data[4] >> 5) & 0x1, + (data[4] >> 4) & 0x1, + (data[4] >> 3) & 0x1, + (data[4] >> 2) & 0x1, + (data[4] >> 1) & 0x1); + instr_out(data, offset, 5, "AVC-IT Command Header\n"); +} + +static void +dump_avc_bsd_qm_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + unsigned int length = ((data[0] & MASK_GFXPIPE_LENGTH) >> SHIFT_GFXPIPE_LENGTH) + 2; + int i; + + instr_out(data, offset, 1, "user default: %02x, QM list present: %02x\n", + (data[1] >> 8) & 0xff, data[1] & 0xff); + + for (i = 2; i < length; i++) { + instr_out(data, offset, i, "dword %d\n", i); + } +} + +static void +dump_avc_bsd_slice_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + +} + +static void +dump_avc_bsd_buf_base_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + int i; + + instr_out(data, offset, 1, "BSD row store base address\n"); + instr_out(data, offset, 2, "MPR row store base address\n"); + instr_out(data, offset, 3, "AVC-IT command buffer base address\n"); + instr_out(data, offset, 4, "AVC-IT data buffer: 0x%08x, write offset: 0x%x\n", + data[4] & 0xFFFFF000, data[4] & 0xFC0); + instr_out(data, offset, 5, "ILDB data buffer\n"); + + for (i = 6; i < 38; i++) { + instr_out(data, offset, i, "Direct MV read base address for reference frame %d\n", i - 6); + } + + instr_out(data, offset, 38, "direct mv wr0 top\n"); + instr_out(data, offset, 39, "direct mv wr0 bottom\n"); + + for (i = 40; i < 74; i++) { + instr_out(data, offset, i, "POC List %d\n", i - 40); + } +} + +static void +dump_bsd_ind_obj_base_addr(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "AVC indirect object base address\n"); + instr_out(data, offset, 2, "AVC Indirect Object Access Upper Bound\n"); +} + +static void +dump_ironlake_avc_bsd_object(unsigned int *data, unsigned int offset, int *failures) +{ + int slice_type = data[3] & 0xf; + int i, is_phantom = ((data[1] & 0x3fffff) == 0); + + if (!is_phantom) { + instr_out(data, offset, 1, "Encrypted: %d, bitsteam length: %d\n", data[1] >> 31, data[1] & 0x3fffff); + instr_out(data, offset, 2, "Indirect Data Start Address: %d\n", data[2] & 0x1fffffff); + instr_out(data, offset, 3, "%s Slice\n", slice_type == 0 ? "P" : slice_type == 1 ? "B" : "I"); + instr_out(data, offset, 4, + "Num_Ref_Idx_L1: %d," + "Num_Ref_Idx_L0: %d," + "Log2WeightDenomChroma: %d," + "Log2WeightDenomLuma: %d" + "\n", + (data[4] >> 24) & 0x3f, + (data[4] >> 16) & 0x3f, + (data[4] >> 8) & 0x3, + (data[4] >> 0) & 0x3); + instr_out(data, offset, 5, + "WeightedPredIdc: %d," + "DirectPredType: %d," + "DisableDeblockingFilter: %d," + "CabacInitIdc: %d," + "SliceQp: %d," + "SliceBetaOffsetDiv2: %d," + "SliceAlphaC0OffsetDiv2: %d" + "\n", + (data[5] >> 30) & 0x3, + (data[5] >> 29) & 0x1, + (data[5] >> 27) & 0x3, + (data[5] >> 24) & 0x3, + (data[5] >> 16) & 0x3f, + (data[5] >> 8) & 0xf, + (data[5] >> 0) & 0xf); + instr_out(data, offset, 6, + "Slice_MB_Start_Vert_Pos: %d," + "Slice_MB_Start_Hor_Pos: %d," + "Slice_Start_Mb_Num: %d" + "\n", + (data[6] >> 24) & 0xff, + (data[6] >> 16) & 0xff, + (data[6] >> 0) & 0x7fff); + instr_out(data, offset, 7, + "Fix_Prev_Mb_Skipped: %d," + "First_MB_Bit_Offset: %d" + "\n", + (data[7] >> 7) & 0x1, + (data[7] >> 0) & 0x7); + + for (i = 8; i < 16; i++) + instr_out(data, offset, i, "dword %d\n", i); + } else { + instr_out(data, offset, 1, "phantom slice\n"); + + for (i = 2; i < 6; i++) + instr_out(data, offset, i, "dword %d\n", i); + + instr_out(data, offset, 6, + "Slice_Start_Mb_Num: %d" + "\n", + (data[6] >> 0) & 0x7fff); + + for (i = 7; i < 16; i++) + instr_out(data, offset, i, "dword %d\n", i); + + } +} + +static void +dump_g4x_avc_bsd_object(unsigned int *data, unsigned int offset, int *failures) +{ + +} + +static void +dump_avc_bsd_object(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + if (IS_IRONLAKE(device)) + dump_ironlake_avc_bsd_object(data, offset, failures); + else + dump_g4x_avc_bsd_object(data, offset, failures); +} + +static int +dump_bsd_avc(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + unsigned int subopcode; + int length, i; + + struct { + unsigned int subopcode; + int min_len; + int max_len; + char *name; + void (*detail)(unsigned int *data, unsigned int offset, unsigned int device, int *failures); + } avc_commands[] = { + { 0x00, 0x06, 0x06, "AVC_BSD_IMG_STATE", dump_avc_bsd_img_state }, + { 0x01, 0x02, 0x3a, "AVC_BSD_QM_STATE", dump_avc_bsd_qm_state }, + { 0x02, 0x02, 0xd2, "AVC_BSD_SLICE_STATE", NULL }, + { 0x03, 0x4a, 0x4a, "AVC_BSD_BUF_BASE_STATE", dump_avc_bsd_buf_base_state }, + { 0x04, 0x03, 0x03, "BSD_IND_OBJ_BASE_ADDR", dump_bsd_ind_obj_base_addr }, + { 0x08, 0x08, 0x10, "AVC_BSD_OBJECT", dump_avc_bsd_object }, + }; + + subopcode = ((data[0] & MASK_GFXPIPE_SUBOPCODE) >> SHIFT_GFXPIPE_SUBOPCODE); + + for (i = 0; i < sizeof(avc_commands) / sizeof(avc_commands[0]); i++) { + if (subopcode == avc_commands[i].subopcode) { + unsigned int index; + + length = (data[0] & MASK_GFXPIPE_LENGTH) >> SHIFT_GFXPIPE_LENGTH; + length += 2; + instr_out(data, offset, 0, "%s\n", avc_commands[i].name); + + if (length < avc_commands[i].min_len || + length > avc_commands[i].max_len) { + fprintf(gout, "Bad length(%d) in %s [%d, %d]\n", + length, avc_commands[i].name, + avc_commands[i].min_len, + avc_commands[i].max_len); + } + + if (length - 1 >= count) + BUFFER_FAIL(count, length, avc_commands[i].name); + + if (avc_commands[i].detail) + avc_commands[i].detail(data, offset, device, failures); + else { + for (index = 1; index < length; index++) + instr_out(data, offset, index, "dword %d\n", index); + } + + return length; + } + } + + instr_out(data, offset, 0, "UNKNOWN AVC COMMAND\n"); + (*failures)++; + return 1; +} + +static int +dump_gfxpipe_bsd(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + int length; + + switch ((data[0] & MASK_GFXPIPE_OPCODE) >> SHIFT_GFXPIPE_OPCODE) { + case OPCODE_BSD_AVC: + length = dump_bsd_avc(data, offset, count, device, failures); + break; + + default: + length = 1; + (*failures)++; + instr_out(data, offset, 0, "UNKNOWN BSD OPCODE\n"); + break; + } + + return length; +} + +static void +dump_mfx_mode_select(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, + "decoder mode: %d(%s)," + "post deblocking output enable %d," + "pre deblocking output enable %d," + "codec select: %d(%s)," + "standard select: %d(%s)" + "\n", + (data[1] >> 16) & 0x1, ((data[1] >> 16) & 0x1) ? "IT" : "VLD", + (data[1] >> 9) & 0x1, + (data[1] >> 8) & 0x1, + (data[1] >> 4) & 0x1, ((data[1] >> 4) & 0x1) ? "Encode" : "Decode", + (data[1] >> 0) & 0x3, ((data[1] >> 0) & 0x3) == 0 ? "MPEG2" : + ((data[1] >> 0) & 0x3) == 1 ? "VC1" : + ((data[1] >> 0) & 0x3) == 2 ? "AVC" : "Reserved"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); +} + +static void +dump_mfx_surface_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); +} + +static void +dump_mfx_pipe_buf_addr_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); + instr_out(data, offset, 7, "dword 07\n"); + instr_out(data, offset, 8, "dword 08\n"); + instr_out(data, offset, 9, "dword 09\n"); + instr_out(data, offset, 10, "dword 10\n"); + instr_out(data, offset, 11, "dword 11\n"); + instr_out(data, offset, 12, "dword 12\n"); + instr_out(data, offset, 13, "dword 13\n"); + instr_out(data, offset, 14, "dword 14\n"); + instr_out(data, offset, 15, "dword 15\n"); + instr_out(data, offset, 16, "dword 16\n"); + instr_out(data, offset, 17, "dword 17\n"); + instr_out(data, offset, 18, "dword 18\n"); + instr_out(data, offset, 19, "dword 19\n"); + instr_out(data, offset, 20, "dword 20\n"); + instr_out(data, offset, 21, "dword 21\n"); + instr_out(data, offset, 22, "dword 22\n"); + instr_out(data, offset, 24, "dword 23\n"); +} + +static void +dump_mfx_ind_obj_base_addr_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); + instr_out(data, offset, 7, "dword 07\n"); + instr_out(data, offset, 8, "dword 08\n"); + instr_out(data, offset, 9, "dword 09\n"); + instr_out(data, offset, 10, "dword 10\n"); +} + +static void +dump_mfx_bsp_buf_base_addr_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); +} + +static void +dump_mfx_aes_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); +} + +static void +dump_mfx_state_pointer(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); +} + +static int +dump_mfx_common(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + unsigned int subopcode; + int length, i; + + struct { + unsigned int subopcode; + int min_len; + int max_len; + char *name; + void (*detail)(unsigned int *data, unsigned int offset, unsigned int device, int *failures); + } mfx_common_commands[] = { + { SUBOPCODE_MFX(0, 0), 0x04, 0x04, "MFX_PIPE_MODE_SELECT", dump_mfx_mode_select }, + { SUBOPCODE_MFX(0, 1), 0x06, 0x06, "MFX_SURFACE_STATE", dump_mfx_surface_state }, + { SUBOPCODE_MFX(0, 2), 0x18, 0x18, "MFX_PIPE_BUF_ADDR_STATE", dump_mfx_pipe_buf_addr_state }, + { SUBOPCODE_MFX(0, 3), 0x0b, 0x0b, "MFX_IND_OBJ_BASE_ADDR_STATE", dump_mfx_ind_obj_base_addr_state }, + { SUBOPCODE_MFX(0, 4), 0x04, 0x04, "MFX_BSP_BUF_BASE_ADDR_STATE", dump_mfx_bsp_buf_base_addr_state }, + { SUBOPCODE_MFX(0, 5), 0x07, 0x07, "MFX_AES_STATE", dump_mfx_aes_state }, + { SUBOPCODE_MFX(0, 6), 0x00, 0x00, "MFX_STATE_POINTER", dump_mfx_state_pointer }, + }; + + subopcode = ((data[0] & MASK_GFXPIPE_SUBOPCODE) >> SHIFT_GFXPIPE_SUBOPCODE); + + for (i = 0; i < ARRAY_ELEMS(mfx_common_commands); i++) { + if (subopcode == mfx_common_commands[i].subopcode) { + unsigned int index; + + length = (data[0] & MASK_GFXPIPE_LENGTH) >> SHIFT_GFXPIPE_LENGTH; + length += 2; + instr_out(data, offset, 0, "%s\n", mfx_common_commands[i].name); + + if (length < mfx_common_commands[i].min_len || + length > mfx_common_commands[i].max_len) { + fprintf(gout, "Bad length(%d) in %s [%d, %d]\n", + length, mfx_common_commands[i].name, + mfx_common_commands[i].min_len, + mfx_common_commands[i].max_len); + } + + if (length - 1 >= count) + BUFFER_FAIL(count, length, mfx_common_commands[i].name); + + if (mfx_common_commands[i].detail) + mfx_common_commands[i].detail(data, offset, device, failures); + else { + for (index = 1; index < length; index++) + instr_out(data, offset, index, "dword %d\n", index); + } + + return length; + } + } + + instr_out(data, offset, 0, "UNKNOWN MFX COMMON COMMAND\n"); + (*failures)++; + return 1; +} + +static void +dump_mfx_avc_img_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); + instr_out(data, offset, 7, "dword 07\n"); + instr_out(data, offset, 8, "dword 08\n"); + instr_out(data, offset, 9, "dword 09\n"); + instr_out(data, offset, 10, "dword 10\n"); + instr_out(data, offset, 11, "dword 11\n"); + instr_out(data, offset, 12, "dword 12\n"); +} + +static void +dump_mfx_avc_qm_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + unsigned int length = ((data[0] & MASK_GFXPIPE_LENGTH) >> SHIFT_GFXPIPE_LENGTH) + 2; + int i; + + instr_out(data, offset, 1, "user default: %02x, QM list present: %02x\n", + (data[1] >> 8) & 0xff, data[1] & 0xff); + + for (i = 2; i < length; i++) { + instr_out(data, offset, i, "dword %d\n", i); + } +} + +static void +dump_mfx_avc_directmode_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + int i; + + for (i = 1; i < 33; i++) { + instr_out(data, offset, i, "Direct MV Buffer Base Address for Picture %d\n", i - 1); + } + + for (i = 33; i < 35; i++) { + instr_out(data, offset, i, "Direct MV Buffer Base Address for Current Decoding Frame/Field\n"); + } + + for (i = 35; i < 69; i++) { + instr_out(data, offset, i, "POC List\n"); + } +} + +static void +dump_mfx_avc_slice_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); + instr_out(data, offset, 7, "dword 07\n"); + instr_out(data, offset, 8, "dword 08\n"); + instr_out(data, offset, 9, "dword 09\n"); +} + +static void +dump_mfx_avc_ref_idx_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + instr_out(data, offset, 1, "dword 01\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + instr_out(data, offset, 6, "dword 06\n"); + instr_out(data, offset, 7, "dword 07\n"); + instr_out(data, offset, 8, "dword 08\n"); + instr_out(data, offset, 9, "dword 09\n"); +} + +static void +dump_mfx_avc_weightoffset_state(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + int i; + + instr_out(data, offset, 1, + "Weight and Offset L%d table\n", + (data[1] >> 0) & 0x1); + + for (i = 2; i < 31; i++) { + instr_out(data, offset, i, "dword %d\n", i); + } +} + +static void +dump_mfd_bsd_object(unsigned int *data, unsigned int offset, unsigned int device, int *failures) +{ + int is_phantom_slice = ((data[1] & 0x3fffff) == 0); + + if (is_phantom_slice) { + instr_out(data, offset, 1, "phantom slice\n"); + instr_out(data, offset, 2, "dword 02\n"); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, "dword 04\n"); + instr_out(data, offset, 5, "dword 05\n"); + } else { + instr_out(data, offset, 1, "Indirect BSD Data Length: %d\n", data[1] & 0x3fffff); + instr_out(data, offset, 2, "Indirect BSD Data Start Address: 0x%08x\n", data[2] & 0x1fffffff); + instr_out(data, offset, 3, "dword 03\n"); + instr_out(data, offset, 4, + "First_MB_Byte_Offset of Slice Data from Slice Header: 0x%08x," + "slice header skip mode: %d" + "\n", + (data[4] >> 16), + (data[4] >> 6) & 0x1); + instr_out(data, offset, 5, "dword 05\n"); + } +} + +static int +dump_mfx_avc(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + unsigned int subopcode; + int length, i; + + struct { + unsigned int subopcode; + int min_len; + int max_len; + char *name; + void (*detail)(unsigned int *data, unsigned int offset, unsigned int device, int *failures); + } mfx_avc_commands[] = { + { SUBOPCODE_MFX(0, 0), 0x0d, 0x0d, "MFX_AVC_IMG_STATE", dump_mfx_avc_img_state }, + { SUBOPCODE_MFX(0, 1), 0x02, 0x3a, "MFX_AVC_QM_STATE", dump_mfx_avc_qm_state }, + { SUBOPCODE_MFX(0, 2), 0x45, 0x45, "MFX_AVC_DIRECTMODE_STATE", dump_mfx_avc_directmode_state }, + { SUBOPCODE_MFX(0, 3), 0x0b, 0x0b, "MFX_AVC_SLICE_STATE", dump_mfx_avc_slice_state }, + { SUBOPCODE_MFX(0, 4), 0x0a, 0x0a, "MFX_AVC_REF_IDX_STATE", dump_mfx_avc_ref_idx_state }, + { SUBOPCODE_MFX(0, 5), 0x32, 0x32, "MFX_AVC_WEIGHTOFFSET_STATE", dump_mfx_avc_weightoffset_state }, + { SUBOPCODE_MFX(1, 8), 0x06, 0x06, "MFD_AVC_BSD_OBJECT", dump_mfd_bsd_object }, + }; + + subopcode = ((data[0] & MASK_GFXPIPE_SUBOPCODE) >> SHIFT_GFXPIPE_SUBOPCODE); + + for (i = 0; i < ARRAY_ELEMS(mfx_avc_commands); i++) { + if (subopcode == mfx_avc_commands[i].subopcode) { + unsigned int index; + + length = (data[0] & MASK_GFXPIPE_LENGTH) >> SHIFT_GFXPIPE_LENGTH; + length += 2; + instr_out(data, offset, 0, "%s\n", mfx_avc_commands[i].name); + + if (length < mfx_avc_commands[i].min_len || + length > mfx_avc_commands[i].max_len) { + fprintf(gout, "Bad length(%d) in %s [%d, %d]\n", + length, mfx_avc_commands[i].name, + mfx_avc_commands[i].min_len, + mfx_avc_commands[i].max_len); + } + + if (length - 1 >= count) + BUFFER_FAIL(count, length, mfx_avc_commands[i].name); + + if (mfx_avc_commands[i].detail) + mfx_avc_commands[i].detail(data, offset, device, failures); + else { + for (index = 1; index < length; index++) + instr_out(data, offset, index, "dword %d\n", index); + } + + return length; + } + } + + instr_out(data, offset, 0, "UNKNOWN MFX AVC COMMAND\n"); + (*failures)++; + return 1; +} + +static int +dump_gfxpipe_mfx(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + int length; + + switch ((data[0] & MASK_GFXPIPE_OPCODE) >> SHIFT_GFXPIPE_OPCODE) { + case OPCODE_MFX_COMMON: + length = dump_mfx_common(data, offset, count, device, failures); + break; + + case OPCODE_MFX_AVC: + length = dump_mfx_avc(data, offset, count, device, failures); + break; + + default: + length = 1; + (*failures)++; + instr_out(data, offset, 0, "UNKNOWN MFX OPCODE\n"); + break; + } + + return length; +} + +static int +dump_gfxpipe(unsigned int *data, unsigned int offset, int count, unsigned int device, int *failures) +{ + int length; + + switch ((data[0] & MASK_GFXPIPE_SUBTYPE) >> SHIFT_GFXPIPE_SUBTYPE) { + case GFXPIPE_3D: + length = dump_gfxpipe_3d(data, offset, count, device, failures); + break; + + case GFXPIPE_BSD: + if (IS_GEN6(device)) + length = dump_gfxpipe_mfx(data, offset, count, device, failures); + else + length = dump_gfxpipe_bsd(data, offset, count, device, failures); + + break; + + default: + length = 1; + (*failures)++; + instr_out(data, offset, 0, "UNKNOWN GFXPIPE COMMAND\n"); + break; + } + + return length; +} + +int intel_batchbuffer_dump(unsigned int *data, unsigned int offset, int count, unsigned int device) +{ + int index = 0; + int failures = 0; + + gout = fopen("/tmp/bsd_command_dump.txt", "w+"); + + while (index < count) { + switch ((data[index] & MASK_CMD_TYPE) >> SHIFT_CMD_TYPE) { + case CMD_TYPE_MI: + index += dump_mi(data + index, offset + index * 4, + count - index, device, &failures); + break; + + case CMD_TYPE_GFXPIPE: + index += dump_gfxpipe(data + index, offset + index * 4, + count - index, device, &failures); + break; + + default: + instr_out(data, offset, index, "UNKNOWN COMMAND\n"); + failures++; + index++; + break; + } + + fflush(gout); + } + + fclose(gout); + + return failures; +} + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.h new file mode 100644 index 000000000..74f4ff7be --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_batchbuffer_dump.h @@ -0,0 +1,59 @@ +#ifndef _INTEL_BATCHBUFFER_DUMP_H_ +#define _INTEL_BATCHBUFFER_DUMP_H_ + +#define MASK_CMD_TYPE 0xE0000000 + +#define SHIFT_CMD_TYPE 29 + +#define CMD_TYPE_GFXPIPE 3 +#define CMD_TYPE_BLT 2 +#define CMD_TYPE_MI 0 + + +/* GFXPIPE */ +#define MASK_GFXPIPE_SUBTYPE 0x18000000 +#define MASK_GFXPIPE_OPCODE 0x07000000 +#define MASK_GFXPIPE_SUBOPCODE 0x00FF0000 +#define MASK_GFXPIPE_LENGTH 0x0000FFFF + +#define SHIFT_GFXPIPE_SUBTYPE 27 +#define SHIFT_GFXPIPE_OPCODE 24 +#define SHIFT_GFXPIPE_SUBOPCODE 16 +#define SHIFT_GFXPIPE_LENGTH 0 + +/* 3D */ +#define GFXPIPE_3D 3 + +/* BSD */ +#define GFXPIPE_BSD 2 + +#define OPCODE_BSD_AVC 4 + +#define SUBOPCODE_BSD_IMG 0 +#define SUBOPCODE_BSD_QM 1 +#define SUBOPCODE_BSD_SLICE 2 +#define SUBOPCODE_BSD_BUF_BASE 3 +#define SUBOPCODE_BSD_IND_OBJ 4 +#define SUBOPCODE_BSD_OBJECT 8 + +/* MFX */ +#define OPCODE_MFX_COMMON 0 +#define OPCODE_MFX_AVC 1 + +#define SUBOPCODE_MFX(A, B) ((A) << 5 | (B)) + +/* MI */ +#define MASK_MI_OPCODE 0x1F800000 + +#define SHIFT_MI_OPCODE 23 + +#define OPCODE_MI_FLUSH 0x04 +#define OPCODE_MI_BATCH_BUFFER_END 0x0A + +#ifdef I965_DEBUG + +int intel_batchbuffer_dump(unsigned int *data, unsigned int offset, int count, unsigned int device); + +#endif + +#endif /* _INTEL_BATCHBUFFER_DUMP_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_compiler.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_compiler.h new file mode 100644 index 000000000..e1c3bd2a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_compiler.h @@ -0,0 +1,26 @@ +#ifndef _INTEL_COMPILER_H_ +#define _INTEL_COMPILER_H_ + +/** + * Function inlining + */ +#if defined(__GNUC__) +# define INLINE __inline__ +#elif (__STDC_VERSION__ >= 199901L) /* C99 */ +# define INLINE inline +#else +# define INLINE +#endif + +/** + * Function visibility + */ +#if defined(__GNUC__) +# define DLL_HIDDEN __attribute__((visibility("hidden"))) +# define DLL_EXPORT __attribute__((visibility("default"))) +#else +# define DLL_HIDDEN +# define DLL_EXPORT +#endif + +#endif /* _INTEL_COMPILER_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.c new file mode 100644 index 000000000..78a235623 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.c @@ -0,0 +1,140 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#include "sysdeps.h" + +#include + +#include "intel_batchbuffer.h" +#include "intel_memman.h" +#include "intel_driver.h" +uint32_t g_intel_debug_option_flags = 0; + +#ifdef I915_PARAM_HAS_BSD2 +#define LOCAL_I915_PARAM_HAS_BSD2 I915_PARAM_HAS_BSD2 +#endif + +#ifndef LOCAL_I915_PARAM_HAS_BSD2 +#define LOCAL_I915_PARAM_HAS_BSD2 30 +#endif + +static Bool +intel_driver_get_param(struct intel_driver_data *intel, int param, int *value) +{ + struct drm_i915_getparam gp; + + gp.param = param; + gp.value = value; + + return drmIoctl(intel->fd, DRM_IOCTL_I915_GETPARAM, &gp) == 0; + +// return drmCommandWriteRead(intel->fd, DRM_I915_GETPARAM, &gp, sizeof(gp)) == 0; +} + +static void intel_driver_get_revid(struct intel_driver_data *intel, int *value) +{ +#if 0 +#define PCI_REVID 8 + FILE *fp; + char config_data[16]; + + fp = fopen("/sys/devices/pci0000:00/0000:00:02.0/config", "r"); + + if (fp) { + if (fread(config_data, 1, 16, fp)) + *value = config_data[PCI_REVID]; + else + *value = 2; /* assume it is at least B-steping */ + fclose(fp); + } else { + *value = 2; /* assume it is at least B-steping */ + } +#endif + + *value = 2; + return; +} + +extern const struct intel_device_info *i965_get_device_info(int devid); + +bool +intel_driver_init(VADriverContextP ctx) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + struct drm_state * const drm_state = (struct drm_state *)ctx->drm_state; + int has_exec2 = 0, has_bsd = 0, has_blt = 0, has_vebox = 0; + int ret_value = 0; + + g_intel_debug_option_flags = 0; +// if ((env_str = getenv("VA_INTEL_DEBUG"))) +// g_intel_debug_option_flags = atoi(env_str); + +// if (g_intel_debug_option_flags) +// fprintf(stderr, "g_intel_debug_option_flags:%x\n", g_intel_debug_option_flags); + + assert(drm_state); + + intel->fd = drm_state->fd; + intel->dri2Enabled = 1; + + intel->locked = 0; +// pthread_mutex_init(&intel->ctxmutex, NULL); + + intel_memman_init(intel); + intel->device_id = drm_intel_bufmgr_gem_get_devid(intel->bufmgr); + intel->device_info = i965_get_device_info(intel->device_id); + + if (!intel->device_info) + return false; + + if (intel_driver_get_param(intel, I915_PARAM_HAS_EXECBUF2, &has_exec2)) + intel->has_exec2 = has_exec2; + if (intel_driver_get_param(intel, I915_PARAM_HAS_BSD, &has_bsd)) + intel->has_bsd = has_bsd; + if (intel_driver_get_param(intel, I915_PARAM_HAS_BLT, &has_blt)) + intel->has_blt = has_blt; + if (intel_driver_get_param(intel, I915_PARAM_HAS_VEBOX, &has_vebox)) + intel->has_vebox = !!has_vebox; + + intel->has_bsd2 = 0; + if (intel_driver_get_param(intel, LOCAL_I915_PARAM_HAS_BSD2, &ret_value)) + intel->has_bsd2 = !!ret_value; + + intel_driver_get_revid(intel, &intel->revision); + return true; +} + +void +intel_driver_terminate(VADriverContextP ctx) +{ + struct intel_driver_data *intel = intel_driver_data(ctx); + + intel_memman_terminate(intel); +// pthread_mutex_destroy(&intel->ctxmutex); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.h new file mode 100644 index 000000000..b2d02b27e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_driver.h @@ -0,0 +1,201 @@ +#ifndef _INTEL_DRIVER_H_ +#define _INTEL_DRIVER_H_ + +#include +//#include +//#include +#include + +#include +#include +#include + +#include +#include "va_backend_compat.h" + +#include "intel_compiler.h" + +#define BATCH_SIZE 0x80000 +#define BATCH_RESERVED 0x10 + +#define CMD_MI (0x0 << 29) +#define CMD_2D (0x2 << 29) +#define CMD_3D (0x3 << 29) + +#define MI_NOOP (CMD_MI | 0) + +#define MI_BATCH_BUFFER_END (CMD_MI | (0xA << 23)) +#define MI_BATCH_BUFFER_START (CMD_MI | (0x31 << 23)) + +#define MI_FLUSH (CMD_MI | (0x4 << 23)) +#define MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE (0x1 << 0) + +#define MI_FLUSH_DW (CMD_MI | (0x26 << 23) | 0x2) +#define MI_FLUSH_DW_VIDEO_PIPELINE_CACHE_INVALIDATE (0x1 << 7) + +#define XY_COLOR_BLT_CMD (CMD_2D | (0x50 << 22) | 0x04) +#define XY_COLOR_BLT_WRITE_ALPHA (1 << 21) +#define XY_COLOR_BLT_WRITE_RGB (1 << 20) +#define XY_COLOR_BLT_DST_TILED (1 << 11) + +#define GEN8_XY_COLOR_BLT_CMD (CMD_2D | (0x50 << 22) | 0x05) + +/* BR13 */ +#define BR13_8 (0x0 << 24) +#define BR13_565 (0x1 << 24) +#define BR13_1555 (0x2 << 24) +#define BR13_8888 (0x3 << 24) + +#define CMD_PIPE_CONTROL (CMD_3D | (3 << 27) | (2 << 24) | (0 << 16)) +#define CMD_PIPE_CONTROL_CS_STALL (1 << 20) +#define CMD_PIPE_CONTROL_NOWRITE (0 << 14) +#define CMD_PIPE_CONTROL_WRITE_QWORD (1 << 14) +#define CMD_PIPE_CONTROL_WRITE_DEPTH (2 << 14) +#define CMD_PIPE_CONTROL_WRITE_TIME (3 << 14) +#define CMD_PIPE_CONTROL_DEPTH_STALL (1 << 13) +#define CMD_PIPE_CONTROL_WC_FLUSH (1 << 12) +#define CMD_PIPE_CONTROL_IS_FLUSH (1 << 11) +#define CMD_PIPE_CONTROL_TC_FLUSH (1 << 10) +#define CMD_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8) +#define CMD_PIPE_CONTROL_DC_FLUSH (1 << 5) +#define CMD_PIPE_CONTROL_GLOBAL_GTT (1 << 2) +#define CMD_PIPE_CONTROL_LOCAL_PGTT (0 << 2) +#define CMD_PIPE_CONTROL_STALL_AT_SCOREBOARD (1 << 1) +#define CMD_PIPE_CONTROL_DEPTH_CACHE_FLUSH (1 << 0) + + +struct intel_batchbuffer; + +#define ALIGN(i, n) (((i) + (n) - 1) & ~((n) - 1)) +#define IS_ALIGNED(i, n) (((i) & ((n)-1)) == 0) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) +#define CLAMP(min, max, a) ((a) < (min) ? (min) : ((a) > (max) ? (max) : (a))) + +#define Bool int +#define True 1 +#define False 0 + +extern uint32_t g_intel_debug_option_flags; +#define VA_INTEL_DEBUG_OPTION_ASSERT (1 << 0) +#define VA_INTEL_DEBUG_OPTION_BENCH (1 << 1) +#define VA_INTEL_DEBUG_OPTION_DUMP_AUB (1 << 2) + +#define ASSERT_RET(value, fail_ret) do { \ + if (!(value)) { \ + if (g_intel_debug_option_flags & VA_INTEL_DEBUG_OPTION_ASSERT) \ + assert(value); \ + return fail_ret; \ + } \ + } while (0) + +#define SET_BLOCKED_SIGSET() do { \ + sigset_t bl_mask; \ + sigfillset(&bl_mask); \ + sigdelset(&bl_mask, SIGFPE); \ + sigdelset(&bl_mask, SIGILL); \ + sigdelset(&bl_mask, SIGSEGV); \ + sigdelset(&bl_mask, SIGBUS); \ + sigdelset(&bl_mask, SIGKILL); \ + pthread_sigmask(SIG_SETMASK, &bl_mask, &intel->sa_mask); \ + } while (0) + +#define RESTORE_BLOCKED_SIGSET() do { \ + pthread_sigmask(SIG_SETMASK, &intel->sa_mask, NULL); \ + } while (0) + +#define PPTHREAD_MUTEX_LOCK() do { \ + SET_BLOCKED_SIGSET(); \ + pthread_mutex_lock(&intel->ctxmutex); \ + } while (0) + +#define PPTHREAD_MUTEX_UNLOCK() do { \ + pthread_mutex_unlock(&intel->ctxmutex); \ + RESTORE_BLOCKED_SIGSET(); \ + } while (0) + +#define WARN_ONCE(...) do { \ + static int g_once = 1; \ + if (g_once) { \ + g_once = 0; \ + fprintf(stderr, "WARNING: " __VA_ARGS__); \ + } \ + } while (0) + +struct intel_device_info +{ + int gen; + int gt; + + unsigned int urb_size; + unsigned int max_wm_threads; + + unsigned int is_g4x : 1; /* gen4 */ + unsigned int is_ivybridge : 1; /* gen7 */ + unsigned int is_baytrail : 1; /* gen7 */ + unsigned int is_haswell : 1; /* gen7 */ + unsigned int is_cherryview : 1; /* gen8 */ + unsigned int is_broxton : 1; /* gen9 */ +}; + +struct intel_driver_data +{ + int fd; + int device_id; + int revision; + + int dri2Enabled; + +// sigset_t sa_mask; +// pthread_mutex_t ctxmutex; + int locked; + + dri_bufmgr *bufmgr; + + unsigned int has_exec2 : 1; /* Flag: has execbuffer2? */ + unsigned int has_bsd : 1; /* Flag: has bitstream decoder for H.264? */ + unsigned int has_blt : 1; /* Flag: has BLT unit? */ + unsigned int has_vebox : 1; /* Flag: has VEBOX unit */ + unsigned int has_bsd2 : 1; /* Flag: has the second BSD video ring unit */ + + const struct intel_device_info *device_info; +}; + +bool intel_driver_init(VADriverContextP ctx); +void intel_driver_terminate(VADriverContextP ctx); + +static INLINE struct intel_driver_data * +intel_driver_data(VADriverContextP ctx) +{ + return (struct intel_driver_data *)ctx->pDriverData; +} + +struct intel_region +{ + int x; + int y; + unsigned int width; + unsigned int height; + unsigned int cpp; + unsigned int pitch; + unsigned int tiling; + unsigned int swizzle; + dri_bo *bo; +}; + +#define IS_G4X(device_info) (device_info->is_g4x) + +#define IS_IRONLAKE(device_info) (device_info->gen == 5) + +#define IS_GEN6(device_info) (device_info->gen == 6) + +#define IS_HASWELL(device_info) (device_info->is_haswell) +#define IS_GEN7(device_info) (device_info->gen == 7) + +#define IS_CHERRYVIEW(device_info) (device_info->is_cherryview) +#define IS_GEN8(device_info) (device_info->gen == 8) + +#define IS_GEN9(device_info) (device_info->gen == 9) + +#endif /* _INTEL_DRIVER_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media.h new file mode 100644 index 000000000..77afb5afa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef INTEL_MEDIA_H +#define INTEL_MEDIA_H + +#include +#include + +#include +#include + +typedef struct gen_codec_surface GenCodecSurface; + +struct gen_codec_surface +{ + int frame_store_id; +}; + +typedef struct gen_avc_surface GenAvcSurface; +struct gen_avc_surface +{ + GenCodecSurface base; + dri_bo *dmv_top; + dri_bo *dmv_bottom; + int dmv_bottom_flag; +}; + +extern void gen_free_avc_surface(void **data); + + +extern int intel_format_convert(float src, int out_int_bits, int out_frac_bits,int out_sign_flag); + +typedef struct gen_hevc_surface GenHevcSurface; +struct gen_hevc_surface +{ + GenCodecSurface base; + dri_bo *motion_vector_temporal_bo; +}; + +typedef struct gen_vp9_surface GenVP9Surface; +struct gen_vp9_surface +{ + GenCodecSurface base; + uint16_t frame_width; + uint16_t frame_height; + dri_bo *motion_vector_temporal_bo; +}; + +extern void gen_free_hevc_surface(void **data); + +extern void gen_free_vp9_surface(void **data); + +#endif /* INTEL_MEDIA_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media_common.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media_common.c new file mode 100644 index 000000000..bad4a7657 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_media_common.c @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2006-2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include +#include + +#include "intel_driver.h" +#include "intel_media.h" + +//static pthread_mutex_t free_avc_surface_lock = PTHREAD_MUTEX_INITIALIZER; + +void +gen_free_avc_surface(void **data) +{ + GenAvcSurface *avc_surface; + +// pthread_mutex_lock(&free_avc_surface_lock); + + avc_surface = *data; + + if (!avc_surface) { +// pthread_mutex_unlock(&free_avc_surface_lock); + return; + } + + + dri_bo_unreference(avc_surface->dmv_top); + avc_surface->dmv_top = NULL; + dri_bo_unreference(avc_surface->dmv_bottom); + avc_surface->dmv_bottom = NULL; + + free(avc_surface); + *data = NULL; + +// pthread_mutex_unlock(&free_avc_surface_lock); +} + +/* This is to convert one float to the given format interger. + * For example: 1.25 to S1.6 or U2.6 and so on + */ +int intel_format_convert(float src, int out_int_bits, int out_frac_bits,int out_sign_flag) +{ + unsigned char negative_flag = (src < 0.0) ? 1 : 0; + float src_1 = (!negative_flag)? src: -src ; + unsigned int factor = 1 << out_frac_bits; + int output_value = 0; + + unsigned int integer_part = floorf(src_1); + unsigned int fraction_part = ((int)((src_1 - integer_part) * factor)) & (factor - 1) ; + + output_value = (integer_part << out_frac_bits) | fraction_part; + + if(negative_flag) + output_value = (~output_value + 1) & ((1 <<(out_int_bits + out_frac_bits)) -1); + + if(out_sign_flag == 1 && negative_flag) + { + output_value |= negative_flag <<(out_int_bits + out_frac_bits); + } + return output_value; +} + +//static pthread_mutex_t free_hevc_surface_lock = PTHREAD_MUTEX_INITIALIZER; + +void +gen_free_hevc_surface(void **data) +{ + GenHevcSurface *hevc_surface; + +// pthread_mutex_lock(&free_hevc_surface_lock); + + hevc_surface = *data; + + if (!hevc_surface) { +// pthread_mutex_unlock(&free_hevc_surface_lock); + return; + } + + dri_bo_unreference(hevc_surface->motion_vector_temporal_bo); + hevc_surface->motion_vector_temporal_bo = NULL; + + free(hevc_surface); + *data = NULL; + +// pthread_mutex_unlock(&free_hevc_surface_lock); +} + +//static pthread_mutex_t free_vp9_surface_lock = PTHREAD_MUTEX_INITIALIZER; + +void gen_free_vp9_surface(void **data) +{ + GenVP9Surface *vp9_surface; + +// pthread_mutex_lock(&free_vp9_surface_lock); + + vp9_surface = *data; + + if (!vp9_surface) { +// pthread_mutex_unlock(&free_vp9_surface_lock); + return; + } + + dri_bo_unreference(vp9_surface->motion_vector_temporal_bo); + vp9_surface->motion_vector_temporal_bo = NULL; + + free(vp9_surface); + *data = NULL; + +// pthread_mutex_unlock(&free_vp9_surface_lock); +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.c new file mode 100644 index 000000000..7d56e9633 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.c @@ -0,0 +1,49 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Zou Nan hai + * + */ + +#include + +#include "intel_driver.h" + +Bool +intel_memman_init(struct intel_driver_data *intel) +{ + intel->bufmgr = intel_bufmgr_gem_init(intel->fd, BATCH_SIZE); + assert(intel->bufmgr); + intel_bufmgr_gem_enable_reuse(intel->bufmgr); + + return True; +} + +Bool +intel_memman_terminate(struct intel_driver_data *intel) +{ + drm_intel_bufmgr_destroy(intel->bufmgr); + return True; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.h new file mode 100644 index 000000000..4e516e515 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_memman.h @@ -0,0 +1,7 @@ +#ifndef _INTEL_MEMMAN_H_ +#define _INTEL_MEMMAN_H_ + +Bool intel_memman_init(struct intel_driver_data *intel); +Bool intel_memman_terminate(struct intel_driver_data *intel); + +#endif /* _INTEL_MEMMAN_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h new file mode 100644 index 000000000..5cfd221bb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef INTEL_VERSION_H +#define INTEL_VERSION_H + +/** + * INTEL_DRIVER_GIT_VERSION: + * + * The full version identifier of libva-intel-driver, from a git + * repository, in string form (suitable for string concatenation). + */ +#define INTEL_DRIVER_GIT_VERSION "1.6.2" + +#endif /* INTEL_VERSION_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h.in new file mode 100644 index 000000000..050e83463 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/intel_version.h.in @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef INTEL_VERSION_H +#define INTEL_VERSION_H + +/** + * INTEL_DRIVER_GIT_VERSION: + * + * The full version identifier of libva-intel-driver, from a git + * repository, in string form (suitable for string concatenation). + */ +#define INTEL_DRIVER_GIT_VERSION "@INTEL_DRIVER_GIT_VERSION@" + +#endif /* INTEL_VERSION_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.c b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.c new file mode 100644 index 000000000..cc6f60bc5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.c @@ -0,0 +1,261 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "object_heap.h" + +#include "assert.h" +#include +#include +#include + +#define ASSERT assert + +#define LAST_FREE -1 +#define ALLOCATED -2 + +/* + * Expands the heap + * Return 0 on success, -1 on error + */ +static int object_heap_expand( object_heap_p heap ) +{ + int i; + void *new_heap_index; + int next_free; + int new_heap_size = heap->heap_size + heap->heap_increment; + int bucket_index = new_heap_size / heap->heap_increment - 1; + + if (bucket_index >= heap->num_buckets) { + int new_num_buckets = heap->num_buckets + 8; + void **new_bucket; + + new_bucket = realloc(heap->bucket, new_num_buckets * sizeof(void *)); + if (NULL == new_bucket) { + return -1; + } + + heap->num_buckets = new_num_buckets; + heap->bucket = new_bucket; + } + + new_heap_index = (void *) malloc( heap->heap_increment * heap->object_size ); + if ( NULL == new_heap_index ) + { + return -1; /* Out of memory */ + } + + heap->bucket[bucket_index] = new_heap_index; + next_free = heap->next_free; + for(i = new_heap_size; i-- > heap->heap_size; ) + { + object_base_p obj = (object_base_p) (new_heap_index + (i - heap->heap_size) * heap->object_size); + obj->id = i + heap->id_offset; + obj->next_free = next_free; + next_free = i; + } + heap->next_free = next_free; + heap->heap_size = new_heap_size; + return 0; /* Success */ +} + +/* + * Return 0 on success, -1 on error + */ +int object_heap_init( object_heap_p heap, int object_size, int id_offset) +{ + heap->object_size = object_size; + heap->id_offset = id_offset & OBJECT_HEAP_OFFSET_MASK; + heap->heap_size = 0; + heap->heap_increment = 16; + heap->next_free = LAST_FREE; + heap->num_buckets = 0; + heap->bucket = NULL; + + if (object_heap_expand(heap) == 0) { + ASSERT(heap->heap_size); + _i965InitMutex(&heap->mutex); + return 0; + } else { + ASSERT(!heap->heap_size); + ASSERT(!heap->bucket || !heap->bucket[0]); + + free(heap->bucket); + + return -1; + } +} + +/* + * Allocates an object + * Returns the object ID on success, returns -1 on error + */ +int object_heap_allocate( object_heap_p heap ) +{ + object_base_p obj; + int bucket_index, obj_index; + + _i965LockMutex(&heap->mutex); + if ( LAST_FREE == heap->next_free ) + { + if( -1 == object_heap_expand( heap ) ) + { + _i965UnlockMutex(&heap->mutex); + return -1; /* Out of memory */ + } + } + ASSERT( heap->next_free >= 0 ); + + bucket_index = heap->next_free / heap->heap_increment; + obj_index = heap->next_free % heap->heap_increment; + + obj = (object_base_p) (heap->bucket[bucket_index] + obj_index * heap->object_size); + heap->next_free = obj->next_free; + _i965UnlockMutex(&heap->mutex); + + obj->next_free = ALLOCATED; + return obj->id; +} + +/* + * Lookup an object by object ID + * Returns a pointer to the object on success, returns NULL on error + */ +object_base_p object_heap_lookup( object_heap_p heap, int id ) +{ + object_base_p obj; + int bucket_index, obj_index; + + _i965LockMutex(&heap->mutex); + if ( (id < heap->id_offset) || (id > (heap->heap_size+heap->id_offset)) ) + { + _i965UnlockMutex(&heap->mutex); + return NULL; + } + id &= OBJECT_HEAP_ID_MASK; + bucket_index = id / heap->heap_increment; + obj_index = id % heap->heap_increment; + obj = (object_base_p) (heap->bucket[bucket_index] + obj_index * heap->object_size); + _i965UnlockMutex(&heap->mutex); + + /* Check if the object has in fact been allocated */ + if ( obj->next_free != ALLOCATED ) + { + return NULL; + } + return obj; +} + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the first object on the heap, returns NULL if heap is empty. + */ +object_base_p object_heap_first( object_heap_p heap, object_heap_iterator *iter ) +{ + *iter = -1; + return object_heap_next( heap, iter ); +} + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the next object on the heap, returns NULL if heap is empty. + */ +object_base_p object_heap_next( object_heap_p heap, object_heap_iterator *iter ) +{ + object_base_p obj; + int i = *iter + 1; + int bucket_index, obj_index; + + _i965LockMutex(&heap->mutex); + while ( i < heap->heap_size) + { + bucket_index = i / heap->heap_increment; + obj_index = i % heap->heap_increment; + + obj = (object_base_p) (heap->bucket[bucket_index] + obj_index * heap->object_size); + if (obj->next_free == ALLOCATED) + { + _i965UnlockMutex(&heap->mutex); + *iter = i; + return obj; + } + i++; + } + _i965UnlockMutex(&heap->mutex); + *iter = i; + return NULL; +} + + + +/* + * Frees an object + */ +void object_heap_free( object_heap_p heap, object_base_p obj ) +{ + /* Don't complain about NULL pointers */ + if (NULL != obj) + { + /* Check if the object has in fact been allocated */ + ASSERT( obj->next_free == ALLOCATED ); + + _i965LockMutex(&heap->mutex); + obj->next_free = heap->next_free; + heap->next_free = obj->id & OBJECT_HEAP_ID_MASK; + _i965UnlockMutex(&heap->mutex); + } +} + +/* + * Destroys a heap, the heap must be empty. + */ +void object_heap_destroy( object_heap_p heap ) +{ + object_base_p obj; + int i; + int bucket_index, obj_index; + + if (heap->heap_size) { + _i965DestroyMutex(&heap->mutex); + + /* Check if heap is empty */ + for (i = 0; i < heap->heap_size; i++) + { + /* Check if object is not still allocated */ + bucket_index = i / heap->heap_increment; + obj_index = i % heap->heap_increment; + obj = (object_base_p) (heap->bucket[bucket_index] + obj_index * heap->object_size); + ASSERT( obj->next_free != ALLOCATED ); + } + + for (i = 0; i < heap->heap_size / heap->heap_increment; i++) { + free(heap->bucket[i]); + } + + free(heap->bucket); + } + + heap->bucket = NULL; + heap->heap_size = 0; + heap->next_free = LAST_FREE; +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.h new file mode 100644 index 000000000..79efeabc4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/object_heap.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _OBJECT_HEAP_H_ +#define _OBJECT_HEAP_H_ + +#include "i965_mutext.h" + +#define OBJECT_HEAP_OFFSET_MASK 0x7F000000 +#define OBJECT_HEAP_ID_MASK 0x00FFFFFF + +typedef struct object_base *object_base_p; +typedef struct object_heap *object_heap_p; + +struct object_base { + int id; + int next_free; +}; + +struct object_heap { + int object_size; + int id_offset; + int next_free; + int heap_size; + int heap_increment; + _I965Mutex mutex; + void **bucket; + int num_buckets; +}; + +typedef int object_heap_iterator; + +/* + * Return 0 on success, -1 on error + */ +int object_heap_init( object_heap_p heap, int object_size, int id_offset); + +/* + * Allocates an object + * Returns the object ID on success, returns -1 on error + */ +int object_heap_allocate( object_heap_p heap ); + +/* + * Lookup an allocated object by object ID + * Returns a pointer to the object on success, returns NULL on error + */ +object_base_p object_heap_lookup( object_heap_p heap, int id ); + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the first object on the heap, returns NULL if heap is empty. + */ +object_base_p object_heap_first( object_heap_p heap, object_heap_iterator *iter ); + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the next object on the heap, returns NULL if heap is empty. + */ +object_base_p object_heap_next( object_heap_p heap, object_heap_iterator *iter ); + +/* + * Frees an object + */ +void object_heap_free( object_heap_p heap, object_base_p obj ); + +/* + * Destroys a heap, the heap must be empty. + */ +void object_heap_destroy( object_heap_p heap ); + +#endif /* _OBJECT_HEAP_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.am new file mode 100644 index 000000000..9e3ec9464 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.am @@ -0,0 +1,6 @@ +SUBDIRS = h264 mpeg2 render post_processing vme utils + +EXTRA_DIST = gpp.py + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.in new file mode 100644 index 000000000..005b662a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/Makefile.in @@ -0,0 +1,634 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SUBDIRS = h264 mpeg2 render post_processing vme utils +EXTRA_DIST = gpp.py + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/gpp.py b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/gpp.py new file mode 100644 index 000000000..7e43f133d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/gpp.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python +#coding=UTF-8 + +# Copyright © 2011 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# Authors: +# Chen, Yangyang +# Han, Haofu +# + +import sys + +class Block: + def __init__(self, ln=0, s=None): + assert type(ln) == int + assert type(s) == str or s == None + self.lineno = ln + self.text = s + self.subblocks = [] + + def append(self, block): + self.subblocks.append(block) + + def checkfor(self, line): + import re + p = r'\$\s*for\s*' + if re.match(p, line) == None: + raise Exception(self.__errmsg('syntax error')) + tail = line.split('(', 1)[1].rsplit(')', 1) + conds = tail[0].split(';') + lb = tail[1] + if lb.strip() != '{': + raise Exception(self.__errmsg('missing "{"')) + if len(conds) != 3: + raise Exception(self.__errmsg('syntax error(miss ";"?)')) + init = conds[0] + cond = conds[1] + step = conds[2] + self.__parse_init(init) + self.__parse_cond(cond) + self.__parse_step(step) + + def __parse_init(self, init): + inits = init.split(',') + self.param_init = [] + for ini in inits: + try: + val = eval(ini) + self.param_init.append(val) + except: + raise Exception(self.__errmsg('non an exp: %s'%ini)) + self.param_num = len(inits) + + def __parse_cond(self, cond): + cond = cond.strip() + if cond[0] in ['<', '>']: + if cond[1] == '=': + self.param_op = cond[:2] + limit = cond[2:] + else: + self.param_op = cond[0] + limit = cond[1:] + try: + self.param_limit = eval(limit) + except: + raise Exception(self.__errmsg('non an exp: %s'%limit)) + else: + raise Exception(self.__errmsg('syntax error')) + + def __parse_step(self, step): + steps = step.split(',') + if len(steps) != self.param_num: + raise Exception(self.__errmsg('params number no match')) + self.param_step = [] + for st in steps: + try: + val = eval(st) + self.param_step.append(val) + except: + raise Exception(self.__errmsg('non an exp: %s'%st)) + + def __errmsg(self, msg=''): + return '%d: %s' % (self.lineno, msg) + +def readlines(f): + lines = f.readlines() + buf = [] + for line in lines: + if '\\n' in line: + tmp = line.split('\\n') + buf.extend(tmp) + else: + buf.append(line) + return buf + +def parselines(lines): + root = Block(0) + stack = [root] + lineno = 0 + for line in lines: + lineno += 1 + line = line.strip() + if line.startswith('$'): + block = Block(lineno) + block.checkfor(line) + stack[-1].append(block) + stack.append(block) + elif line.startswith('}'): + stack.pop() + elif line and not line.startswith('#'): + stack[-1].append(Block(lineno, line)) + return root + +def writeblocks(outfile, blocks): + buf = [] + + def check_cond(op, cur, lim): + assert op in ['<', '>', '<=', '>='] + assert type(cur) == int + assert type(lim) == int + return eval('%d %s %d' % (cur, op, lim)) + + def do_writeblock(block, curs): + if block.text != None: + import re + p = r'\%(\d+)' + newline = block.text + params = set(re.findall(p, block.text)) + for param in params: + index = int(param) - 1 + if index >= len(curs): + raise Exception('%d: too many param(%%%d)'%(block.lineno, index+1)) + newline = newline.replace('%%%d'%(index+1), str(curs[index])) + if newline and \ + not newline.startswith('.') and \ + not newline.endswith(':') and \ + not newline.endswith(';'): + newline += ';' + buf.append(newline) + else: + for_curs = block.param_init + while check_cond(block.param_op, for_curs[0], block.param_limit): + for sblock in block.subblocks: + do_writeblock(sblock, for_curs) + for i in range(0, block.param_num): + for_curs[i] += block.param_step[i] + + for block in blocks.subblocks: + do_writeblock(block, []) + outfile.write('\n'.join(buf)) + outfile.write('\n') + +if __name__ == '__main__': + argc = len(sys.argv) + if argc == 1: + print >>sys.stderr, 'no input file' + sys.exit(0) + + try: + infile = open(sys.argv[1], 'r') + except IOError: + print >>sys.stderr, 'can not open %s' % sys.argv[1] + sys.exit(1) + + if argc == 2: + outfile = sys.stdout + else: + try: + outfile = open(sys.argv[2], 'w') + except IOError: + print >>sys.stderr, 'can not write to %s' % sys.argv[2] + sys.exit(1) + + lines = readlines(infile) + try: + infile.close() + except IOError: + pass + + blocks = parselines(lines) + writeblocks(outfile, blocks) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.am new file mode 100644 index 000000000..51e0a6f7c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = ildb mc + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.in new file mode 100644 index 000000000..9f445b69e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/Makefile.in @@ -0,0 +1,633 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders/h264 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SUBDIRS = ildb mc + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/h264/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/h264/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB.inc new file mode 100644 index 000000000..f99d13b3f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB.inc @@ -0,0 +1,748 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__AVC_ILDB_HEADER__) // Make sure this file is only included once +#define __AVC_ILDB_HEADER__ + +// Module name: AVC_ILDB.inc + +#undef ORIX +#undef ORIY + +//========== Root thread input parameters ================================================== +#define RootParam r1 // :w +#define MBsCntX r1.0 // :w, MB count per row +#define MBsCntY r1.1 // :w, MB count per col +//#define PicType r1.2 // :w, Picture type +#define MaxThreads r1.3 // :w, Max Thread limit +#define EntrySignature r1.4 // :w, Debug flag +#define BitFields r1.5 // :uw +#define MbaffFlag BIT0 // :w, mbaff flag, bit 0 in BitFields +#define BotFieldFlag BIT1 // :w, bottom field flag, bit 1 in BitFields +#define CntlDataExpFlag BIT2 // :w, Control Data Expansion Flag, bit 2 in BitFields +#define RampConst r1.12 // 8 :ub, Ramp constant, r1.12 - r1.19:ub +#define StepToNextMB r1.20 // :b, 2 bytes +#define Minus2Minus1 r1.22 // :b, 2 bytes +// next one starts at r1.11:w + +#define TopFieldFlag 0xFFFD // :w, top field flag, used to set bit1 to 0. + + +//========== Root Locals ============================================================= + +// Variables in root kernel for launching child therad +#define ChildParam r2.0 // :w +//Not used #define URBOffset r2.3 // :w, Each row occupies 4 URB entries. All children in the same row use the same set of URB entries +#define CurCol r2.10 // :w, current col +#define CurColB r2.20 // :b, current col +#define CurRow r2.11 // :w, current row +#define CurRowB r2.22 // :b, current row +#define LastCol r2.12 // :w, last col +#define LastRow r2.13 // :w, last row + +// Root local constants during spawning process +#define Col_Boundary r3.0 // :w, +#define Row_Boundary r3.1 // :w, +//#define TotalBlocks r3.2 // :w, Total blocks in the frame +#define URB_EntriesPerMB_2 r3.3 // :w, = URB entries per MB, but in differnt form +#define URBOffsetUVBase r3.4 // :w, UV Base offset in URB + +#define Temp1_D r3.6 // :d: +#define Temp1_W r3.12 // :w, Temp1 +#define Temp1_B r3.24 // :b, = Temp1_W +#define Temp2_W r3.13 // :w, Temp2 +#define Temp2_B r3.26 // :b, = Temp2_W + +// Root local variables +#define JumpTable r4 // :d, jump table +#define JUMPTABLE_BASE 4*32 +#define JumpAddr a0.7 + +#define TopRowForScan r5.0 // :w, track the top row for scan. All rows above this row is deblocked already. + + +// Child Thread R0 Header Field +#define MRF0 m0 +#define CT_R0Hdr m1 + +/* +.declare GatewayAperture Base=r50.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +#define GatewayApertureB 1600 // r50 byte offset from r0.0 + +// Chroma root thread updates luma root's ThreadLimit at r10.0:w via gateway +#define ThreadLimit r62.0 // :w, thread limit //r56.0 +#define THREAD_LIMIT_OFFSET 0x01800000 // Offset from r50 to r56 = 12*32 = 384 = 0x0180. 0x180 << 16 = 0x01800000 + //#define THREAD_LIMIT_OFFSET 0x00C00000 // Offset from r50 to r56 = 6*32 = 192 = 0x00C0. 0xC0 << 16 = 0x00C00000 +*/ + +// Gateway size is 16 GRF. 68 rows of MBs takes 9 GRFs (r6 - r14) +// For CTG: Expended to support 1280 rows of pixel (80 rows of MBs). It requires 10 GRFs (r6 - r15) +.declare GatewayAperture Base=r6.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +#define GatewayApertureB 192 // r0.0 byte offset from r0.0 + +// Chroma root thread updates luma root's ThreadLimit at r10.0:w via gateway +#define ThreadLimit r18.0 // :w, thread limit +#define THREAD_LIMIT_OFFSET 0x01800000 // Offset from r50 to r56 = 12*32 = 384 = 0x0180. 0x180 << 16 = 0x01800000 +#define TotalBlocks r18.1 // :w, Total blocks in the frame + +// Root local variables +#define ChildThreadsID r19.0 // :w, Child thread ID, unique to each child +#define OutstandingThreads r20.0 // :w, Outstanding threads +#define ProcessedMBs r20.1 // :w, # of MBs processed + +#define URBOffset r21.0 // :w, Each row occupies 4 URB entries. All children in the same row use the same set of URB entries + +//================================================================================= + +#define ScoreBd_Size 128 //96 // size of Status[] or ProcCol[] + +#define ScoreBd_Idx 2 +//#define Saved_Col 0 + +#define StatusAddr a0.4 // :w, point to r50 +//================================================================================= + + +// Gateway payload +#define GatewayPayload r48.0 // :ud +#define GatewayPayloadKey r48.8 // :uw +#define DispatchID r48.20 // :ub +#define RegBase_GatewaySize r48.5 // :ud, used in open a gateway +#define Offset_Length r48.5 // :ud, used in forwardmsg back to root +#define EUID_TID r48.9 // :uw, used in forwardmsg back to root + +// Gateway response +#define GatewayResponse r49.0 // :ud, one GRF + +#define URBWriteMsgDesc a0.0 // Used in URB write, :ud +#define URBWriteMsgDescLow a0.0 // Used in URB write, :uw +#define URBWriteMsgDescHigh a0.1 // Used in URB write, :uw + +.declare WritebackResponse Base=r50 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 1 GRF for write backs + + +///////////////////////////////////////////////////////////////////////////////////////////// +// IDesc Order Offset +// +// 0) luma root 0 from luma root +// 1) luma child 16 from luma root +// 2) chroma root 32 from luma root +// 3) chroma child 16 from chroma root + +// 4) luma field root 0 from luma field root +// 5) luma field child 16 from luma field root +// 6) chroma field root 32 from luma field root +// 7) chroma field child 16 from chroma field root + +// 8) luma Mbaff root 0 from luma Mbaff root +// 9) luma Mbaff child 16 from luma Mbaff root +// 10) chroma Mbaff root 32 from luma Mbaff root +// 11) chroma Mbaff child 16 from chroma Mbaff root + +// IDesc offset within non-mbaff or mbaff mode +#define CHROMA_ROOT_OFFSET 32 // Offset from luma root to chroma root +#define CHILD_OFFSET 16 // Offset from luma root to luma child, + // and from chroma root to chroma child +///////////////////////////////////////////////////////////////////////////////////////////// + + +//========== End of Root Variables ====================================================== + + +//========== Child thread input parameters ============================================== +//#define MBsCntX r1.0 // :w, MB count per row (same as root) +//#define MBsCntY r1.1 // :w, MB count per col (same as root) +//#define PicTypeC r1.2 // :w, Picture type same as root thread (same as root) +#define URBOffsetC r1.3 // :w, +#define EntrySignatureC r1.4 // :w, Debug field (same as root) +//#define BitFields r1.5 // :w (same as root) +//#define MbaffFlag BIT0 // :w, mbaff flag, bit 0 in BitFields +//#define BotFieldFlag BIT1 // :w, bottom field flag, bit 1 in BitFields +//#define CntlDataExpFlag BIT2 // :w, Control Data Expansion Flag, bit 2 in BitFields +#define RampConstC r1.12 // 8 :ub, Ramp constant, r1.12 - r1.19:ub. +#define ORIX r1.10 // :w, carry over from root r1 in MB count +#define ORIY r1.11 // :w, carry over from root r1 in MB count +#define LastColC r1.12 // :w, last col +#define LastRowC r1.13 // :w, last row + +.declare GatewayApertureC Base=r1.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +#define GatewayApertureCBase 32 // r1 byte offset from r0.0 + + +//========== Child Variables ============================================================ + +// Mbaff Alpha, Beta, Tc0 vectors for an edge +.declare Mbaff_ALPHA Base=r14.0 ElementSize=2 SrcRegion=REGION(8,1) Type=uw // r14 +.declare Mbaff_BETA Base=r15.0 ElementSize=2 SrcRegion=REGION(8,1) Type=uw // r15 +.declare Mbaff_TC0 Base=r16.0 ElementSize=2 SrcRegion=REGION(8,1) Type=uw // r16 +.declare RRampW Base=r17.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w // r17 + +.declare Mbaff_ALPHA2 Base=r45.0 ElementSize=2 SrcRegion=REGION(8,1) Type=uw // alpha2 = (alpha >> 2) + 2 + + +#define ORIX_CUR r46.0 // :w, current block origin X in bytes +#define ORIY_CUR r46.1 // :w, current block origin Y in bytes +#define ORIX_LEFT r46.2 // :w, left block origin X in bytes +#define ORIY_LEFT r46.3 // :w, left block origin Y in bytes +#define ORIX_TOP r46.4 // :w, top block origin X in bytes +#define ORIY_TOP r46.5 // :w, top block origin Y in bytes +//#define FilterSampleFlag r46.6 // :uw, +#define CTemp0_W r46.7 // :w, child Temp0 + +#define alpha r46.8 // :w, Scaler version for non Mbaff +#define beta r46.9 // :w, Scaler version for non Mbaff +#define tc0 r46.20 // 4 :ub, r46.20 ~ r46.23, Scaler version for non Mbaff +#define MaskA r46.12 // :uw +#define MaskB r46.13 // :uw + +// Child control flags +#define DualFieldMode r47.0 // Cur MB is frame based, above MB is field based in mbaff mode + // :uw, 0 = not in dual field mode, 1 = in dual field mode, filter both top and bot fields +#define GateWayOffsetC r47.1 // :w, Gateway offset for child writing into root space +#define CntrlDataOffsetY r47.1 // :ud, MB control data data offset +#define alpha2 r47.4 // :uw, alpha2 = (alpha >> 2) + 2 + +#define VertEdgePattern r47.5 // :uw, + +#define CTemp1_W r47.6 // :w, child Temp1 +#define CTemp1_B r47.12 // :b, = child Temp1_W +#define CTemp2_W r47.7 // :w, child Temp2 +#define CTemp2_B r47.14 // :b, = child Temp2_W + +// Used in child +#define ECM_AddrReg a0.4 // Edge Control Map register +#define P_AddrReg a0.6 // point to P samples in left or top MB +#define Q_AddrReg a0.7 // point to Q samples in cur MB + + +.declare RTempD Base=r26.0 ElementSize=4 SrcRegion=REGION(8,1) Type=d // r26-27 +.declare RTempB Base=r26.0 ElementSize=1 SrcRegion=REGION(8,4) Type=ub // r26-27 +.declare RTempW Base=r26.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w // r26-27 +#define LEFT_TEMP_D RTempD +#define LEFT_TEMP_B RTempB +#define LEFT_TEMP_W RTempW + +.declare TempRow0 Base=r26.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare TempRow0B Base=r26.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub +.declare TempRow1 Base=r27.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare TempRow1B Base=r27.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub + +.declare CUR_TEMP_D Base=r28.0 ElementSize=4 SrcRegion=REGION(8,1) Type=d // 8 GRFs +.declare CUR_TEMP_B Base=r28.0 ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare CUR_TEMP_W Base=r28.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +#define FilterSampleFlag r28.0 // :uw, + +.declare A Base=r28.0 ElementSize=2 SrcRegion=REGION(16,1) Type=w +.declare BB Base=r29.0 ElementSize=2 SrcRegion=REGION(16,1) Type=w + +.declare TempRow3 Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare TempRow3B Base=r30.0 ElementSize=1 SrcRegion=REGION(8,2) Type=ub + +.declare tc0_exp Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare tc8 Base=r30.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +.declare tc_exp Base=r31.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare tx_exp_8 Base=r31.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +.declare q0_p0 Base=r32.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare ABS_q0_p0 Base=r33.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +.declare ap Base=r34.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare aq Base=r35.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +// These buffers have the src data for each edge to be beblocked. +// They have modified pixels from previous edges. +// +// Y: +// +----+----+----+----+----+----+----+----+ +// | p3 | p2 | P1 | p0 | q0 | q1 | q2 | q3 | +// +----+----+----+----+----+----+----+----+ +// +// p3 = r[P_AddrReg, 0]<16;16,1> +// p2 = r[P_AddrReg, 16]<16;16,1> +// p1 = r[P_AddrReg, 32]<16;16,1> +// p0 = r[P_AddrReg, 48]<16;16,1> +// q0 = r[Q_AddrReg, 0]<16;16,1> +// q1 = r[Q_AddrReg, 16]<16;16,1> +// q2 = r[Q_AddrReg, 32]<16;16,1> +// q3 = r[Q_AddrReg, 48]<16;16,1> + +.declare p0123_W Base=r36.0 ElementSize=2 SrcRegion=REGION(16,1) Type=uw // r36, r37 +.declare q0123_W Base=r38.0 ElementSize=2 SrcRegion=REGION(16,1) Type=uw // r38, r39 +.declare p3 Base=r36.0 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare p2 Base=r36.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare p1 Base=r37.0 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare p0 Base=r37.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare q0 Base=r38.0 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare q1 Base=r38.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare q2 Base=r39.0 ElementSize=1 SrcRegion=REGION(8,1) Type=ub +.declare q3 Base=r39.16 ElementSize=1 SrcRegion=REGION(8,1) Type=ub + +.declare TempRow2 Base=r38.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +// Temp space for mbaff dual field mode +#define ABOVE_CUR_MB_BASE 40*GRFWIB // Byte offset to r40 +.declare ABOVE_CUR_MB_YW Base=r40 ElementSize=2 SrcRegion=REGION(8,1) Type=uw +.declare ABOVE_CUR_MB_UW Base=r40 ElementSize=2 SrcRegion=REGION(8,1) Type=uw + +.declare P0_plus_P1 Base=r41.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare Q0_plus_Q1 Base=r42.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +.declare P2_plus_P3 Base=r43.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare Q2_plus_Q3 Base=r44.0 ElementSize=2 SrcRegion=REGION(8,1) Type=w + + +////////////////////////////////////////////////////////////////////////////////////////// +// MB control data reference + +// Expanded control data is in r18 - r25 +.declare CNTRL_DATA_D Base=r18 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // For read, 8 GRFs +#define CNTRL_DATA_BASE 18*GRFWIB // Base offset to r18 + +// Bit mask for extracting bits +#define MbaffFrameFlag 0x01 +#define FieldModeCurrentMbFlag 0x02 +#define FieldModeLeftMbFlag 0x04 +#define FieldModeAboveMbFlag 0x08 +#define FilterInternal8x8EdgesFlag 0x10 +#define FilterInternal4x4EdgesFlag 0x20 +#define FilterLeftMbEdgeFlag 0x40 +#define FilterTopMbEdgeFlag 0x80 + +#define DISABLE_ILDB_FLAG 0x01 + +// Exact bit pattern for left and cur MB coding mode (frame vs. field) +#define LEFT_FRAME_CUR_FRAME 0x00 +#define LEFT_FRAME_CUR_FIELD 0x02 +#define LEFT_FIELD_CUR_FRAME 0x04 +#define LEFT_FIELD_CUR_FIELD 0x06 + +// Exact bit pattern for above and cur MB coding mode (frame vs. field) +#define ABOVE_FRAME_CUR_FRAME 0x00 +#define ABOVE_FRAME_CUR_FIELD 0x02 +#define ABOVE_FIELD_CUR_FRAME 0x08 +#define ABOVE_FIELD_CUR_FIELD 0x0A + + + +//========== MB control data field offset in byte ========== + +#if !defined(_APPLE) + +// GRF0 - GRF1 holds original control data + +// GRF0 +#define HorizOrigin 0 +#define VertOrigin 1 +#define BitFlags 2 // Bit flags + +#define bbSinternalLeftVert 4 // Internal left vertical bS, 2 bits per bS for 4 Y pixels and 2 U/V pixels +#define bbSinternalMidVert 5 // Internal mid vertical bS +#define bbSinternalRightVert 6 // Internal right vertical bS +#define bbSinternalTopHorz 7 // Internal top horizontal bS + +#define bbSinternalMidHorz 8 // Internal mid horizontal bS +#define bbSinternalBotHorz 9 // Internal bottom horizontal bS +#define wbSLeft0 10 // External left vertical bS (0), 4 bits per bS for 4 Y pixels and 2 U/V pixels, and byte 11 + +#define wbSLeft1 12 // External left vertical bS (1), and byte 13 +#define wbSTop0 14 // External top horizontal bS (0), and byte 15 + +#define wbSTop1 16 // Externaltop horizontal bS (1), and byte 17 +#define bIndexAinternal_Y 18 // Internal index A for Y +#define bIndexBinternal_Y 19 // Internal index B for Y + +#define bIndexAleft0_Y 20 // Left index A for Y (0) +#define bIndexBleft0_Y 21 // Left index B for Y (0) +#define bIndexAleft1_Y 22 // Left index A for Y (1) +#define bIndexBleft1_Y 23 // Left index B for Y (1) + +#define bIndexAtop0_Y 24 // Top index A for Y (0) +#define bIndexBtop0_Y 25 // Top index B for Y (0) +#define bIndexAtop1_Y 26 // Top index A for Y (1) +#define bIndexBtop1_Y 27 // Top index B for Y (1) + +#define bIndexAinternal_Cb 28 // Internal index A for Cb +#define bIndexBinternal_Cb 29 // Internal index B for Cb +#define bIndexAleft0_Cb 30 // Left index A for Cb (0) +#define bIndexBleft0_Cb 31 // Left index B for Cb (0) + +// GRF1 +#define bIndexAleft1_Cb 32 // Left index A for Cb (1) +#define bIndexBleft1_Cb 33 // Left index B for Cb (1) +#define bIndexAtop0_Cb 34 // Top index A for Cb (0) +#define bIndexBtop0_Cb 35 // Top index B for Cb (0) + +#define bIndexAtop1_Cb 36 // Top index A for Cb (1) +#define bIndexBtop1_Cb 37 // Top index B for Cb (1) +#define bIndexAinternal_Cr 38 // Internal index A for Cr +#define bIndexBinternal_Cr 39 // Internal index B for Cr + +#define bIndexAleft0_Cr 40 // Left index A for Cr (0) +#define bIndexBleft0_Cr 41 // Left index B for Cr (0) +#define bIndexAleft1_Cr 42 // Left index A for Cr (1) +#define bIndexBleft1_Cr 43 // Left index B for Cr (1) + +#define bIndexAtop0_Cr 44 // Top index A for Cr (0) +#define bIndexBtop0_Cr 45 // Top index B for Cr (0) +#define bIndexAtop1_Cr 46 // Top index A for Cr (1) +#define bIndexBtop1_Cr 47 // Top index B for Cr (1) + +#define ExtBitFlags 48 // Extended bit flags, such as disable ILDB bits + +// Offset 49 - 63 not used + + +//===== GRF2 - GRF7 hold expanded control data ===== + +// GRF2 +#define wEdgeCntlMap_IntLeftVert 64 // Derived from bbSinternalLeftVert, 1 bit per pixel +#define wEdgeCntlMap_IntMidVert 66 // Derived from bbSinternalLeftVert + +#define wEdgeCntlMap_IntRightVert 68 // Derived from bbSinternalRightVert +#define wEdgeCntlMap_IntTopHorz 70 // Derived from bbSinternalTopHorz, 1bit per pixel + +#define wEdgeCntlMap_IntMidHorz 72 // Derived from bbSinternalMidHorz +#define wEdgeCntlMap_IntBotHorz 74 // Derived from bbSinternalBotHorz + +// Offset 76 - 79 not used + +#define wEdgeCntlMapA_ExtLeftVert0 80 // Derived from wbSLeft0, 1bit per pixel +#define wEdgeCntlMapB_ExtLeftVert0 82 // Derived from wbSLeft0 + +#define wEdgeCntlMapA_ExtTopHorz0 84 // Derived from wbSTop0, 1bit per pixel +#define wEdgeCntlMapB_ExtTopHorz0 86 // Derived from wbSTop0 + +#define wEdgeCntlMapA_ExtLeftVert1 88 // Derived from wbSLeft1, 1bit per pixel +#define wEdgeCntlMapB_ExtLeftVert1 90 // Derived from wbSLeft1 + +#define wEdgeCntlMapA_ExtTopHorz1 92 // Derived from wbSTop1, 1bit per pixel +#define wEdgeCntlMapB_ExtTopHorz1 94 // Derived from wbSTop1 + + +// GRF3 +#define bTc0_v00_0_Y 96 // Derived from bSv00_0 and bIndexAleft0_Y, 4 pixels per tc0 +#define bTc0_v10_0_Y 97 // Derived from bSv10_0 and bIndexAleft0_Y +#define bTc0_v20_0_Y 98 // Derived from bSv20_0 and bIndexAleft0_Y +#define bTc0_v30_0_Y 99 // Derived from bSv30_0 and bIndexAleft0_Y + +#define bTc0_v01_Y 100 // Derived from bSv01 and bIndexAinternal_Y +#define bTc0_v11_Y 101 // Derived from bSv11 and bIndexAinternal_Y +#define bTc0_v21_Y 102 // Derived from bSv21 and bIndexAinternal_Y +#define bTc0_v31_Y 103 // Derived from bSv31 and bIndexAinternal_Y + +#define bTc0_v02_Y 104 // Derived from bSv02 and bIndexAinternal_Y +#define bTc0_v12_Y 105 // Derived from bSv12 and bIndexAinternal_Y +#define bTc0_v22_Y 106 // Derived from bSv22 and bIndexAinternal_Y +#define bTc0_v32_Y 107 // Derived from bSv32 and bIndexAinternal_Y + +#define bTc0_v03_Y 108 // Derived from bSv03 and bIndexAinternal_Y +#define bTc0_v13_Y 109 // Derived from bSv13 and bIndexAinternal_Y +#define bTc0_v23_Y 110 // Derived from bSv23 and bIndexAinternal_Y +#define bTc0_v33_Y 111 // Derived from bSv33 and bIndexAinternal_Y + +#define bTc0_h00_0_Y 112 // Derived from bSh00_0 and bIndexAleft0_Y +#define bTc0_h01_0_Y 113 // Derived from bSh01_0 and bIndexAleft0_Y +#define bTc0_h02_0_Y 114 // Derived from bSh02_0 and bIndexAleft0_Y +#define bTc0_h03_0_Y 115 // Derived from bSh03_0 and bIndexAleft0_Y + +#define bTc0_h10_Y 116 // Derived from bSh10 and bIndexAinternal_Y +#define bTc0_h11_Y 117 // Derived from bSh11 and bIndexAinternal_Y +#define bTc0_h12_Y 118 // Derived from bSh12 and bIndexAinternal_Y +#define bTc0_h13_Y 119 // Derived from bSh13 and bIndexAinternal_Y + +#define bTc0_h20_Y 120 // Derived from bSh20 and bIndexAinternal_Y +#define bTc0_h21_Y 121 // Derived from bSh21 and bIndexAinternal_Y +#define bTc0_h22_Y 122 // Derived from bSh22 and bIndexAinternal_Y +#define bTc0_h23_Y 123 // Derived from bSh23 and bIndexAinternal_Y + +#define bTc0_h30_Y 124 // Derived from bSh30 and bIndexAinternal_Y +#define bTc0_h31_Y 125 // Derived from bSh31 and bIndexAinternal_Y +#define bTc0_h32_Y 126 // Derived from bSh32 and bIndexAinternal_Y +#define bTc0_h33_Y 127 // Derived from bSh33 and bIndexAinternal_Y + +// GRF4 +#define bAlphaLeft0_Y 128 // Derived from bIndexAleft0_Y +#define bBetaLeft0_Y 129 // Derived from bIndexBleft0_Y +#define bAlphaTop0_Y 130 // Derived from bIndexAtop0_Y +#define bBetaTop0_Y 131 // Derived from bIndexBtop0_Y + +#define bAlphaInternal_Y 132 // Derived from bIndexAinternal_Y +#define bBetaInternal_Y 133 // Derived from bIndexBinternal_Y +// Offset 134 - 135 not used + +// Offset 136 - 143 not used +#define bAlphaLeft1_Y 144 // Derived from bIndexAleft1_Y Used in Mbaff mode only +#define bBetaLeft1_Y 145 // Derived from bIndexBleft1_Y Used in Mbaff mode only +#define bAlphaTop1_Y 146 // Derived from bIndexAtop1_Y Used in Mbaff mode only +#define bBetaTop1_Y 147 // Derived from bIndexBtop1_Y Used in Mbaff mode only + +// Offset 148 - 151 not used +#define bTc0_v00_1_Y 152 // Derived from bSv00_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_v10_1_Y 153 // Derived from bSv10_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_v20_1_Y 154 // Derived from bSv20_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_v30_1_Y 155 // Derived from bSv30_1 and bIndexAleft1_Y Used in Mbaff mode only + +#define bTc0_h00_1_Y 156 // Derived from bSh00_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_h01_1_Y 157 // Derived from bSh01_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_h02_1_Y 158 // Derived from bSh02_1 and bIndexAleft1_Y Used in Mbaff mode only +#define bTc0_h03_1_Y 159 // Derived from bSh03_1 and bIndexAleft1_Y Used in Mbaff mode only + + +// GRF5 +#define bTc0_v00_0_Cb 160 // Derived from bSv00_0 and bIndexAleft0_Cb, 2 pixels per tc0 Left0 +#define bTc0_v10_0_Cb 161 // Derived from bSv10_0 and bIndexAleft0_Cb +#define bTc0_v20_0_Cb 162 // Derived from bSv20_0 and bIndexAleft0_Cb +#define bTc0_v30_0_Cb 163 // Derived from bSv30_0 and bIndexAleft0_Cb + +#define bTc0_v02_Cb 164 // Derived from bSv02 and bIndexAinternal_Cb MidVert +#define bTc0_v12_Cb 165 // Derived from bSv12 and bIndexAinternal_Cb +#define bTc0_v22_Cb 166 // Derived from bSv22 and bIndexAinternal_Cb +#define bTc0_v32_Cb 167 // Derived from bSv32 and bIndexAinternal_Cb + +#define bTc0_h00_0_Cb 168 // Derived from bSh00_0 and bIndexAleft0_Cb Top0 +#define bTc0_h01_0_Cb 169 // Derived from bSh01_0 and bIndexAleft0_Cb +#define bTc0_h02_0_Cb 170 // Derived from bSh02_0 and bIndexAleft0_Cb +#define bTc0_h03_0_Cb 171 // Derived from bSh03_0 and bIndexAleft0_Cb + +#define bTc0_h20_Cb 172 // Derived from bSh20 and bIndexAinternal_Cb MidHorz +#define bTc0_h21_Cb 173 // Derived from bSh21 and bIndexAinternal_Cb +#define bTc0_h22_Cb 174 // Derived from bSh22 and bIndexAinternal_Cb +#define bTc0_h23_Cb 175 // Derived from bSh23 and bIndexAinternal_Cb + +#define bTc0_v00_0_Cr 176 // Derived from bSv00_0 and bIndexAleft0_Cr, 2 pixels per tc0 Left0 +#define bTc0_v10_0_Cr 177 // Derived from bSv10_0 and bIndexAleft0_Cr +#define bTc0_v20_0_Cr 178 // Derived from bSv20_0 and bIndexAleft0_Cr +#define bTc0_v30_0_Cr 179 // Derived from bSv30_0 and bIndexAleft0_Cr + +#define bTc0_v02_Cr 180 // Derived from bSv02 and bIndexAinternal_Cr Mid Vert +#define bTc0_v12_Cr 181 // Derived from bSv12 and bIndexAinternal_Cr +#define bTc0_v22_Cr 182 // Derived from bSv22 and bIndexAinternal_Cr +#define bTc0_v32_Cr 183 // Derived from bSv32 and bIndexAinternal_Cr + +#define bTc0_h00_0_Cr 184 // Derived from bSh00_0 and bIndexAleft0_Cr, 2 pixels per tc0 Top0 +#define bTc0_h01_0_Cr 185 // Derived from bSh01_0 and bIndexAleft0_Cr +#define bTc0_h02_0_Cr 186 // Derived from bSh02_0 and bIndexAleft0_Cr +#define bTc0_h03_0_Cr 187 // Derived from bSh03_0 and bIndexAleft0_Cr + +#define bTc0_h20_Cr 188 // Derived from bSh20 and bIndexAinternal_Cr Mid Horz +#define bTc0_h21_Cr 189 // Derived from bSh21 and bIndexAinternal_Cr +#define bTc0_h22_Cr 190 // Derived from bSh22 and bIndexAinternal_Cr +#define bTc0_h23_Cr 191 // Derived from bSh23 and bIndexAinternal_Cr + +// GRF6 +#define bAlphaLeft0_Cb 192 // Derived from bIndexAleft0_Cb +#define bBetaLeft0_Cb 193 // Derived from bIndexBleft0_Cb +#define bAlphaTop0_Cb 194 // Derived from bIndexAtop0_Cb +#define bBetaTop0_Cb 195 // Derived from bIndexBtop0_Cb + +#define bAlphaInternal_Cb 196 // Derived from bIndexAinternal_Cb +#define bBetaInternal_Cb 197 // Derived from bIndexBinternal_Cb +// Offset 198 - 199 not used + +#define bAlphaLeft0_Cr 200 // Derived from bIndexAleft0_Cr +#define bBetaLeft0_Cr 201 // Derived from bIndexBleft0_Cr +#define bAlphaTop0_Cr 202 // Derived from bIndexAtop0_Cr +#define bBetaTop0_Cr 203 // Derived from bIndexBtop0_Cr + +#define bAlphaInternal_Cr 204 // Derived from bIndexAinternal_Cr +#define bBetaInternal_Cr 205 // Derived from bIndexBinternal_Cr +// Offset 206 - 223 not used + +// GRF7 +#define bAlphaLeft1_Cb 224 // Derived from bIndexAleft1_Cb Used in Mbaff mode only +#define bBetaLeft1_Cb 225 // Derived from bIndexBleft1_Cb Used in Mbaff mode only +#define bAlphaTop1_Cb 226 // Derived from bIndexAtop1_Cb Used in Mbaff mode only +#define bBetaTop1_Cb 227 // Derived from bIndexBtop1_Cb Used in Mbaff mode only + +// Offset 228 - 231 not used + +#define bTc0_v00_1_Cb 232 // Derived from bSv00_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_v10_1_Cb 233 // Derived from bSv10_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_v20_1_Cb 234 // Derived from bSv20_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_v30_1_Cb 235 // Derived from bSv30_1 and bIndexAleft1_Cb Used in Mbaff mode only + +#define bTc0_h00_1_Cb 236 // Derived from bSh00_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_h01_1_Cb 237 // Derived from bSh01_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_h02_1_Cb 238 // Derived from bSh02_1 and bIndexAleft1_Cb Used in Mbaff mode only +#define bTc0_h03_1_Cb 239 // Derived from bSh03_1 and bIndexAleft1_Cb Used in Mbaff mode only + +#define bAlphaLeft1_Cr 240 // Derived from bIndexAleft1_Cr Used in Mbaff mode only +#define bBetaLeft1_Cr 241 // Derived from bIndexBleft1_Cr Used in Mbaff mode only +#define bAlphaTop1_Cr 242 // Derived from bIndexAtop1_Cr Used in Mbaff mode only +#define bBetaTop1_Cr 243 // Derived from bIndexBtop1_Cr Used in Mbaff mode only + +// Offset 244 - 247 not used + +#define bTc0_v00_1_Cr 248 // Derived from bSv00_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_v10_1_Cr 249 // Derived from bSv10_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_v20_1_Cr 250 // Derived from bSv20_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_v30_1_Cr 251 // Derived from bSv30_1 and bIndexAleft1_Cr Used in Mbaff mode only + +#define bTc0_h00_1_Cr 252 // Derived from bSh00_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_h01_1_Cr 253 // Derived from bSh01_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_h02_1_Cr 254 // Derived from bSh02_1 and bIndexAleft1_Cr Used in Mbaff mode only +#define bTc0_h03_1_Cr 255 // Derived from bSh03_1 and bIndexAleft1_Cr Used in Mbaff mode only + + +#else // _APPLE is defined + +//******** Crestline for Apple, progressive only, 88 bytes ********** + +// GRF0 +#define HorizOrigin 0 +#define VertOrigin 1 +#define BitFlags 2 // Bit flags + +#define wEdgeCntlMap_IntLeftVert 4 // Derived from bbSinternalLeftVert, 1 bit per pixel +#define wEdgeCntlMap_IntMidVert 6 // Derived from bbSinternalLeftVert +#define wEdgeCntlMap_IntRightVert 8 // Derived from bbSinternalRightVert +#define wEdgeCntlMap_IntTopHorz 10 // Derived from bbSinternalTopHorz, 1bit per pixel +#define wEdgeCntlMap_IntMidHorz 12 // Derived from bbSinternalMidHorz +#define wEdgeCntlMap_IntBotHorz 14 // Derived from bbSinternalBotHorz +#define wEdgeCntlMapA_ExtLeftVert0 16 // Derived from wbSLeft0, 1bit per pixel +#define wEdgeCntlMapB_ExtLeftVert0 18 // Derived from wbSLeft0 +#define wEdgeCntlMapA_ExtTopHorz0 20 // Derived from wbSTop0, 1bit per pixel +#define wEdgeCntlMapB_ExtTopHorz0 22 // Derived from wbSTop0 + +#define bAlphaLeft0_Y 24 // Derived from bIndexAleft0_Y +#define bBetaLeft0_Y 25 // Derived from bIndexBleft0_Y +#define bAlphaTop0_Y 26 // Derived from bIndexAtop0_Y +#define bBetaTop0_Y 27 // Derived from bIndexBtop0_Y +#define bAlphaInternal_Y 28 // Derived from bIndexAinternal_Y +#define bBetaInternal_Y 29 // Derived from bIndexBinternal_Y + +// GRF1 +#define bTc0_v00_0_Y 32 // Derived from bSv00_0 and bIndexAleft0_Y, 4 pixels per tc0 +#define bTc0_v10_0_Y 33 // Derived from bSv10_0 and bIndexAleft0_Y +#define bTc0_v20_0_Y 34 // Derived from bSv20_0 and bIndexAleft0_Y +#define bTc0_v30_0_Y 35 // Derived from bSv30_0 and bIndexAleft0_Y +#define bTc0_v01_Y 36 // Derived from bSv01 and bIndexAinternal_Y +#define bTc0_v11_Y 37 // Derived from bSv11 and bIndexAinternal_Y +#define bTc0_v21_Y 38 // Derived from bSv21 and bIndexAinternal_Y +#define bTc0_v31_Y 39 // Derived from bSv31 and bIndexAinternal_Y +#define bTc0_v02_Y 40 // Derived from bSv02 and bIndexAinternal_Y +#define bTc0_v12_Y 41 // Derived from bSv12 and bIndexAinternal_Y +#define bTc0_v22_Y 42 // Derived from bSv22 and bIndexAinternal_Y +#define bTc0_v32_Y 43 // Derived from bSv32 and bIndexAinternal_Y +#define bTc0_v03_Y 44 // Derived from bSv03 and bIndexAinternal_Y +#define bTc0_v13_Y 45 // Derived from bSv13 and bIndexAinternal_Y +#define bTc0_v23_Y 46 // Derived from bSv23 and bIndexAinternal_Y +#define bTc0_v33_Y 47 // Derived from bSv33 and bIndexAinternal_Y + +#define bTc0_h00_0_Y 48 // Derived from bSh00_0 and bIndexAleft0_Y +#define bTc0_h01_0_Y 49 // Derived from bSh01_0 and bIndexAleft0_Y +#define bTc0_h02_0_Y 50 // Derived from bSh02_0 and bIndexAleft0_Y +#define bTc0_h03_0_Y 51 // Derived from bSh03_0 and bIndexAleft0_Y +#define bTc0_h10_Y 52 // Derived from bSh10 and bIndexAinternal_Y +#define bTc0_h11_Y 53 // Derived from bSh11 and bIndexAinternal_Y +#define bTc0_h12_Y 54 // Derived from bSh12 and bIndexAinternal_Y +#define bTc0_h13_Y 55 // Derived from bSh13 and bIndexAinternal_Y +#define bTc0_h20_Y 56 // Derived from bSh20 and bIndexAinternal_Y +#define bTc0_h21_Y 57 // Derived from bSh21 and bIndexAinternal_Y +#define bTc0_h22_Y 58 // Derived from bSh22 and bIndexAinternal_Y +#define bTc0_h23_Y 59 // Derived from bSh23 and bIndexAinternal_Y +#define bTc0_h30_Y 60 // Derived from bSh30 and bIndexAinternal_Y +#define bTc0_h31_Y 61 // Derived from bSh31 and bIndexAinternal_Y +#define bTc0_h32_Y 62 // Derived from bSh32 and bIndexAinternal_Y +#define bTc0_h33_Y 63 // Derived from bSh33 and bIndexAinternal_Y + +// GRF2, +#define bTc0_v00_0_Cb 64 // Derived from bSv00_0 and bIndexAleft0_Cb, 2 pixels per tc0 Left0 +#define bTc0_v10_0_Cb 65 // Derived from bSv10_0 and bIndexAleft0_Cb +#define bTc0_v20_0_Cb 66 // Derived from bSv20_0 and bIndexAleft0_Cb +#define bTc0_v30_0_Cb 67 // Derived from bSv30_0 and bIndexAleft0_Cb +#define bTc0_v02_Cb 68 // Derived from bSv02 and bIndexAinternal_Cb MidVert +#define bTc0_v12_Cb 69 // Derived from bSv12 and bIndexAinternal_Cb +#define bTc0_v22_Cb 70 // Derived from bSv22 and bIndexAinternal_Cb +#define bTc0_v32_Cb 71 // Derived from bSv32 and bIndexAinternal_Cb +#define bTc0_h00_0_Cb 72 // Derived from bSh00_0 and bIndexAleft0_Cb Top0 +#define bTc0_h01_0_Cb 73 // Derived from bSh01_0 and bIndexAleft0_Cb +#define bTc0_h02_0_Cb 74 // Derived from bSh02_0 and bIndexAleft0_Cb +#define bTc0_h03_0_Cb 75 // Derived from bSh03_0 and bIndexAleft0_Cb +#define bTc0_h20_Cb 76 // Derived from bSh20 and bIndexAinternal_Cb MidHorz +#define bTc0_h21_Cb 77 // Derived from bSh21 and bIndexAinternal_Cb +#define bTc0_h22_Cb 78 // Derived from bSh22 and bIndexAinternal_Cb +#define bTc0_h23_Cb 79 // Derived from bSh23 and bIndexAinternal_Cb + +#define bAlphaLeft0_Cb 80 // Derived from bIndexAleft0_Cb +#define bBetaLeft0_Cb 81 // Derived from bIndexBleft0_Cb +#define bAlphaTop0_Cb 82 // Derived from bIndexAtop0_Cb +#define bBetaTop0_Cb 83 // Derived from bIndexBtop0_Cb +#define bAlphaInternal_Cb 84 // Derived from bIndexAinternal_Cb +#define bBetaInternal_Cb 85 // Derived from bIndexBinternal_Cb + +#define ExtBitFlags 86 // Extended bit flags, such as disable ILDB bits + +// Shared between Cb and Cr +#define bTc0_v00_0_Cr bTc0_v00_0_Cb +#define bTc0_v10_0_Cr bTc0_v10_0_Cb +#define bTc0_v20_0_Cr bTc0_v20_0_Cb +#define bTc0_v30_0_Cr bTc0_v30_0_Cb +#define bTc0_v02_Cr bTc0_v02_Cb +#define bTc0_v12_Cr bTc0_v12_Cb +#define bTc0_v22_Cr bTc0_v22_Cb +#define bTc0_v32_Cr bTc0_v32_Cb +#define bTc0_h00_0_Cr bTc0_h00_0_Cb +#define bTc0_h01_0_Cr bTc0_h01_0_Cb +#define bTc0_h02_0_Cr bTc0_h02_0_Cb +#define bTc0_h03_0_Cr bTc0_h03_0_Cb +#define bTc0_h20_Cr bTc0_h20_Cb +#define bTc0_h21_Cr bTc0_h21_Cb +#define bTc0_h22_Cr bTc0_h22_Cb +#define bTc0_h23_Cr bTc0_h23_Cb + +#define bAlphaLeft0_Cr bAlphaLeft0_Cb +#define bBetaLeft0_Cr bBetaLeft0_Cb +#define bAlphaTop0_Cr bAlphaTop0_Cb +#define bBetaTop0_Cr bBetaTop0_Cb +#define bAlphaInternal_Cr bAlphaInternal_Cb +#define bBetaInternal_Cr bBetaInternal_Cb + + +#endif + + +//========== End of Child Variables =============================================================== + +#if !defined(COMBINED_KERNEL) +#define ILDB_LABEL(x) x // No symbol extension for standalone kernels +#endif + +#endif // !defined(__AVC_ILDB_HEADER__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_UV.asm new file mode 100644 index 000000000..a04e5cde5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_UV.asm @@ -0,0 +1,39 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "AVC_ILDB_Child_UV.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_Y.asm new file mode 100644 index 000000000..4a3994050 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Field_Y.asm @@ -0,0 +1,39 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "AVC_ILDB_Child_Y.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_UV.asm new file mode 100644 index 000000000..c1232d02a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_UV.asm @@ -0,0 +1,203 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// AVC Child Kernel (Vertical and horizontal de-block a 4:2:0 MB UV comp) +// +// First de-block vertical edges from left to right. +// Second de-block horizontal edge from top to bottom. +// +// For 4:2:0, chroma is always de-blocked at 8x8. +// NV12 format allows to filter U and V together. +// +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define AVC_ILDB + +.kernel AVC_ILDB_CHILD_MBAFF_UV +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_CHILD_UV): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xE997:w +#endif + + // Setup temp buf used by load and save code + #define BUF_B RTempB + #define BUF_W RTempW + #define BUF_D RTempD + + // Init local variables + mul (4) ORIX_CUR<2>:w ORIX<0;1,0>:w 16:w { NoDDClr } // Expand X addr to bytes, repeat 4 times + mul (4) ORIY_CUR<2>:w ORIY<0;1,0>:w 32:w { NoDDChk } // Expand Y addr to bytes, repeat 4 times + + mov (2) f0.0<1>:w 0:w + + mov (1) GateWayOffsetC:uw ORIY:uw // Use row # as Gateway offset + + //=== Null Kernel =============================================================== +// jmpi ILDB_LABEL(POST_ILDB_UV) + //=============================================================================== + + //==================================================================================== + // Assuming the MB control data is laid out in scan line order in a rectangle with width = 16 bytes. + // Control data has dimension of X x Y = 16 x N bytes, where N = W x H / 16 + // Each MB has 256 bytes of control data + + // For CRESTLINE, 256 bytes are stored in memory and fetched into GRF. + // MB_offset = MBsCntX * CurRow + CurCol + // Byte_offset = MB_offset * (256 << Mbaff_flag), Mbaff_flag = 0 or 1. + // Base address of a control data block = (x, y) = (0, y'=y/x), region width is 16 bytes + // where y' = Byte_offset / 16 = MB_offset * (16 << Mbaff_flag) + // MBCntrlDataOffsetY holds y'. + + // For BearLake-C, 64 bytes are stored in memory and dataport expands to 256 bytes. Need to use a special read command on BL-C. + // MB_offset = MBsCntX * CurRow + CurCol + // Byte_offset = MB_offset * (64 << Mbaff_flag), Mbaff_flag = 0 or 1. + // MBCntrlDataOffsetY holds globel byte offset. + +#if !defined(DEV_CL) + mul (1) CntrlDataOffsetY:ud MBsCntX:w ORIY:w + add (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud ORIX:w + mul (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud 128:uw +#endif + //==================================================================================== + + add (1) ORIX_LEFT:w ORIX_LEFT:w -4:w + add (1) ORIY_TOP:w ORIY_TOP:w -4:w + + //=========== Process Top MB ============ + and (1) BitFields:w BitFields:w TopFieldFlag:w // Reset BotFieldFlag + + // Build a ramp from 0 to 15 + mov (16) RRampW(0)<1> RampConstC<0;8,1>:ub + add (8) RRampW(0,8)<1> RRampW(0,8) 8:w // RRampW = ramp 15-0 + +ILDB_LABEL(RE_ENTRY_UV): // for bootom field + + // Load current MB control data +#if defined(DEV_CL) + #include "Load_ILDB_Cntrl_Data_64DW.asm" // Crestline +#else + #include "Load_ILDB_Cntrl_Data_16DW.asm" // Cantiga and beyond +#endif + + // Init addr register for vertical control data + mov (1) ECM_AddrReg<1>:w CNTRL_DATA_BASE:w // Init ECM_AddrReg + + // Use free cycles here + // Check loaded control data + and.z.f0.1 (16) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<16;16,1>:uw 0xFFFF:uw // Skip ILDB? + and.nz.f0.0 (1) null:w r[ECM_AddrReg, ExtBitFlags]:ub DISABLE_ILDB_FLAG:w // Skip ILDB? + + // Set DualFieldMode for all data read, write and deblocking + and (1) CTemp1_W:uw r[ECM_AddrReg, BitFlags]:ub FieldModeAboveMbFlag+FieldModeCurrentMbFlag:uw + + // Get Vert Edge Pattern (frame vs. field MBs) + and (1) VertEdgePattern:uw r[ECM_AddrReg, BitFlags]:ub FieldModeLeftMbFlag+FieldModeCurrentMbFlag:uw + + (f0.1.all16h) jmpi ILDB_LABEL(SKIP_ILDB_UV) // Skip ILDB + (f0.0) jmpi ILDB_LABEL(SKIP_ILDB_UV) // Skip ILDB + + // Set DualFieldMode for all data read, write and deblocking +// and (1) CTemp1_W:uw r[ECM_AddrReg, BitFlags]:ub FieldModeAboveMbFlag+FieldModeCurrentMbFlag:uw + cmp.z.f0.0 (1) null:w CTemp1_W:uw ABOVE_FIELD_CUR_FRAME:w + and (1) DualFieldMode:w f0.0:w 0x0001:w + + #include "load_Cur_UV_8x8T_Mbaff.asm" // Load transposed data 8x8 + #include "load_Left_UV_2x8T_Mbaff.asm" // Load left MB (2x8) UV data from memory if exists + + #include "Transpose_Cur_UV_8x8.asm" + #include "Transpose_Left_UV_2x8.asm" + + + //---------- Perform vertical ILDB filting on UV ---------- + #include "AVC_ILDB_Filter_Mbaff_UV_v.asm" + //--------------------------------------------------------- + + #include "save_Left_UV_8x2T_Mbaff.asm" // Write left MB (2x8) Y data to memory if exists + #include "load_Top_UV_8x2_Mbaff.asm" // Load top MB (8x2) Y data from memory if exists + + #include "Transpose_Cur_UV_8x8.asm" // Transpose a MB for horizontal edge de-blocking + + //---------- Perform horizontal ILDB filting on UV ---------- + #include "AVC_ILDB_Filter_Mbaff_UV_h.asm" + //----------------------------------------------------------- + + #include "save_Cur_UV_8x8_Mbaff.asm" // Write 8x8 + #include "save_Top_UV_8x2_Mbaff.asm" // Write top MB (8x2) if not the top row + + //----------------------------------------------------------- +ILDB_LABEL(SKIP_ILDB_UV): + + and.z.f0.0 (1) null:w BitFields:w BotFieldFlag:w + + //=========== Process Bottom MB ============ + or (1) BitFields:w BitFields:w BotFieldFlag:w // Set BotFieldFlag to 1 + (f0.0) jmpi ILDB_LABEL(RE_ENTRY_UV) // Loop back for bottom deblocking + + // Fall through to finish + + //=========== Check write commit of the last write ============ + mov (8) WritebackResponse(0)<1> WritebackResponse(0) + +ILDB_LABEL(POST_ILDB_UV): + + // Send notification thru Gateway to root thread, update chroma Status[CurRow] + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + + //////////////////////////////////////////////////////////////////////////////// + // Include other subrutines being called + #include "AVC_ILDB_Chroma_Core_Mbaff.asm" + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_Y.asm new file mode 100644 index 000000000..1bfcdc223 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Mbaff_Y.asm @@ -0,0 +1,218 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// AVC Child Kernel (Vertical and horizontal de-block a 4:2:0 MB Y comp) +// +// First, de-block vertical edges from left to right. +// Second, de-block horizontal edge from top to bottom. +// +// ***** MBAFF Mode ***** +// This version deblocks top MB first, followed by bottom MB. +// +// Need variable CurMB to indicate top MB or bottom MB (CurMB = 0 or 1). +// We can use BotFieldFlag in BitFields to represent it. +// +// Usage: +// 1) Access control data for top +// CntrlDataOffsetY + CurMB * Control data block size (64 DWs for CL, 16 DWs for BLC) +// +// 2) Load frame/field video data based on flags: FieldModeCurrentMbFlag, FieldModeLeftMbFlag, FieldModeaboveMbFlag, +// +// E.g. +// if (pCntlData->BitField & FieldModeCurrentMbFlag) +// cur_y = ORIX_CUR.y + CurMB * 1; // Add field vertical offset for bot field MB . +// else +// cur_y = ORIX_CUR.y + CurMB * MB_Rows_Y; // Add bottom MB vertical offset for bot MB +// +// +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define AVC_ILDB + +.kernel AVC_ILDB_CHILD_MBAFF_Y +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_CHILD_Y): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xE998:w +#endif + + // Setup temp buf used by load and save code + #define BUF_B RTempB + #define BUF_D RTempD + + // Init local variables + // These coordinates are in progressive fashion + mul (4) ORIX_CUR<2>:w ORIX<0;1,0>:w 16:w { NoDDClr } // Expand X addr to bytes, repeat 4 times + mul (4) ORIY_CUR<2>:w ORIY<0;1,0>:w 32:w { NoDDChk } // Expand Y addr to bytes, repeat 4 times + + mov (2) f0.0<1>:w 0:w + + mov (1) GateWayOffsetC:uw ORIY:uw // Use row # as Gateway offset + + //=== Null Kernel =============================================================== +// jmpi POST_ILDB + //=============================================================================== + + //==================================================================================== + // Assuming the MB control data is laid out in scan line order in a rectangle with width = 16 bytes. + // Control data has dimension of X x Y = 16 x N bytes, where N = W x H / 16 + // Each MB has 256 bytes of control data + + // For CRESTLINE, 256 bytes are stored in memory and fetched into GRF. + // MB_offset = MBsCntX * CurRow + CurCol + // Byte_offset = MB_offset * (256 << Mbaff_flag), Mbaff_flag = 0 or 1. + // Base address of a control data block = (x, y) = (0, y'=y/x), region width is 16 bytes + // where y' = Byte_offset / 16 = MB_offset * (16 << Mbaff_flag) + // MBCntrlDataOffsetY holds y'. + + // For BearLake-C, 64 bytes are stored in memory and dataport expands to 256 bytes. Need to use a special read command on BL-C. + // MB_offset = MBsCntX * CurRow + CurCol + // Byte_offset = MB_offset * (64 << Mbaff_flag), Mbaff_flag = 0 or 1. + // MBCntrlDataOffsetY holds globel byte offset. + +#if !defined(DEV_CL) + mul (1) CntrlDataOffsetY:ud MBsCntX:w ORIY:w + add (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud ORIX:w + mul (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud 128:uw +#endif + + //==================================================================================== + + add (1) ORIX_LEFT:w ORIX_LEFT:w -4:w + add (1) ORIY_TOP:w ORIY_TOP:w -4:w + + + //=========== Process Top MB ============ + and (1) BitFields:w BitFields:w TopFieldFlag:w // Reset BotFieldFlag + +RE_ENTRY: // for bootom field + + // Load current MB control data +#if defined(DEV_CL) + #include "Load_ILDB_Cntrl_Data_64DW.asm" // Crestline +#else + #include "Load_ILDB_Cntrl_Data_16DW.asm" // Cantiga and beyond +#endif + + // Init addr register for vertical control data + mov (1) ECM_AddrReg<1>:w CNTRL_DATA_BASE:w // Init edge control map AddrReg + + // Check loaded control data + and.z.f0.1 (16) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<16;16,1>:uw 0xFFFF:uw // Skip ILDB? + and.nz.f0.0 (1) null:w r[ECM_AddrReg, ExtBitFlags]:ub DISABLE_ILDB_FLAG:w // Skip ILDB? + + // Use free cycles here + // Set DualFieldMode for all data read, write and deblocking + and (1) CTemp1_W:uw r[ECM_AddrReg, BitFlags]:ub FieldModeAboveMbFlag+FieldModeCurrentMbFlag:uw + + // Get Vert Edge Pattern (frame vs. field MBs) + and (1) VertEdgePattern:uw r[ECM_AddrReg, BitFlags]:ub FieldModeLeftMbFlag+FieldModeCurrentMbFlag:uw + + (f0.1.all16h) jmpi SKIP_ILDB // Skip ILDB + (f0.0) jmpi SKIP_ILDB // Skip ILDB + + // Set DualFieldMode for all data read, write and deblocking +// and (1) CTemp1_W:uw r[ECM_AddrReg, BitFlags]:ub FieldModeAboveMbFlag+FieldModeCurrentMbFlag:uw + cmp.z.f0.0 (1) null:w CTemp1_W:uw ABOVE_FIELD_CUR_FRAME:w + and (1) DualFieldMode:w f0.0:w 0x0001:w + + // Load current MB // DDD1 + #include "load_Cur_Y_16x16T_Mbaff.asm" // Load cur Y, 16x16, transpose + #include "load_Left_Y_4x16T_Mbaff.asm" // Load left MB (4x16) Y data from memory if exists + + #include "Transpose_Cur_Y_16x16.asm" + #include "Transpose_Left_Y_4x16.asm" + + //---------- Perform vertical ILDB filting on Y---------- + #include "AVC_ILDB_Filter_Mbaff_Y_v.asm" + //------------------------------------------------------- + + #include "save_Left_Y_16x4T_Mbaff.asm" // Write left MB (4x16) Y data to memory if exists + #include "load_Top_Y_16x4_Mbaff.asm" // Load top MB (16x4) Y data from memory if exists + #include "Transpose_Cur_Y_16x16.asm" // Transpose a MB for horizontal edge de-blocking + + //---------- Perform horizontal ILDB filting on Y ---------- + #include "AVC_ILDB_Filter_Mbaff_Y_h.asm" + //---------------------------------------------------------- + + #include "save_Cur_Y_16x16_Mbaff.asm" // Write cur MB (16x16) + #include "save_Top_Y_16x4_Mbaff.asm" // Write top MB (16x4) if not the top row + +SKIP_ILDB: + //---------------------------------------------------------- + and.z.f0.0 (1) null:w BitFields:w BotFieldFlag:w + + //=========== Process Bottom MB ============ + or (1) BitFields:w BitFields:w BotFieldFlag:w // Set BotFieldFlag to 1 + (f0.0) jmpi RE_ENTRY // Loop back for bottom deblocking + + // Fall through to finish + + //=========== Check write commit of the last write ============ + mov (8) WritebackResponse(0)<1> WritebackResponse(0) + +POST_ILDB: + + //--------------------------------------------------------------------------- + // Send notification thru Gateway to root thread, update luma Status[CurRow] + + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + + + //////////////////////////////////////////////////////////////////////////////// + // Include other subrutines being called + #include "AVC_ILDB_Luma_Core_Mbaff.asm" + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_UV.asm new file mode 100644 index 000000000..401ee6855 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_UV.asm @@ -0,0 +1,216 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// AVC Child Kernel (Vertical and horizontal de-block a 4:2:0 MB UV comp) +// +// First de-block vertical edges from left to right. +// Second de-block horizontal edge from top to bottom. +// +// For 4:2:0, chroma is always de-blocked at 8x8. +// NV12 format allows to filter U and V together. +// +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define AVC_ILDB + +.kernel AVC_ILDB_CHILD_UV +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_CHILD_UV): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x9997:w +#endif + + // Init local variables + shl (8) ORIX_CUR<1>:w ORIX<0;2,1>:w 4:w // Expand addr to bytes, repeat (x,y) 4 times + + // Init addr register for vertical control data + mov (1) ECM_AddrReg<1>:w CNTRL_DATA_BASE:w // Init ECM_AddrReg + + //=== Null Kernel =============================================================== +// jmpi ILDB_LABEL(POST_ILDB_UV_UV) + //=============================================================================== + +#if defined(DEV_CL) + mov (1) acc0.0:w 240:w +#else + //==================================================================================== + // For BearLake-C, 64 bytes are stored in memory and dataport expands to 256 bytes. Need to use a special read command on BL-C. + // MB_offset = MBsCntX * CurRow + CurCol + // MBCntrlDataOffsetY = globel_byte_offset = MB_offset * 64 + mul (1) CntrlDataOffsetY:ud MBsCntX:w ORIY:w + add (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud ORIX:w + + // Assign to MSGSRC.2:ud for memory access + // mul (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud 64:uw + mul (1) MSGSRC.2:ud CntrlDataOffsetY:ud 64:uw + + mov (1) acc0.0:w 320:w +#endif + mac (1) URBOffsetC:w ORIY:w 4:w // UV URB entries are right after Y entries + + + // Init local variables +// shl (8) ORIX_CUR<1>:w ORIX<0;2,1>:w 4:w // Expand addr to bytes, repeat (x,y) 4 times + add (1) ORIX_LEFT:w ORIX_LEFT:w -4:w + add (1) ORIY_TOP:w ORIY_TOP:w -4:w + + // Build a ramp from 0 to 15 + mov (16) RRampW(0)<1> RampConstC<0;8,1>:ub + add (8) RRampW(0,8)<1> RRampW(0,8) 8:w // RRampW = ramp 15-0 + + // Load current MB control data +#if defined(DEV_CL) + #if defined(_APPLE) + #include "Load_ILDB_Cntrl_Data_22DW.asm" // Crestline for Apple, progressive only + #else + #include "Load_ILDB_Cntrl_Data_64DW.asm" // Crestline + #endif +#else + #include "Load_ILDB_Cntrl_Data_16DW.asm" // Cantiga and beyond +#endif + + // Check loaded control data + #if defined(_APPLE) + and.z.f0.1 (8) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<8;8,1>:uw 0xFFFF:uw // Skip ILDB? + (f0.1) and.z.f0.1 (2) null<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<2;2,1>:uw 0xFFFF:uw // Skip ILDB? + #else + and.z.f0.1 (16) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<16;16,1>:uw 0xFFFF:uw // Skip ILDB? + #endif + + and.nz.f0.0 (1) null:w r[ECM_AddrReg, ExtBitFlags]:ub DISABLE_ILDB_FLAG:w // Skip ILDB? + + mov (1) GateWayOffsetC:uw ORIY:uw // Use row # as Gateway offset + + #if defined(_APPLE) + (f0.1.all8h) jmpi ILDB_LABEL(READ_FOR_URB_UV) // Skip ILDB + #else + (f0.1.all16h) jmpi ILDB_LABEL(READ_FOR_URB_UV) // Skip ILDB + #endif + + (f0.0) jmpi ILDB_LABEL(READ_FOR_URB_UV) // Skip ILDB + + + + #include "load_Cur_UV_8x8T.asm" // Load transposed data 8x8 +// #include "load_Left_UV_2x8T.asm" + #include "load_Top_UV_8x2.asm" // Load top MB (8x2) Y data from memory if exists + + #include "Transpose_Cur_UV_8x8.asm" +// #include "Transpose_Left_UV_2x8.asm" + + + //---------- Perform vertical ILDB filting on UV ---------- + #include "AVC_ILDB_Filter_UV_v.asm" + //--------------------------------------------------------- + + #include "save_Left_UV_8x2T.asm" // Write left MB (2x8) Y data to memory if exists + #include "Transpose_Cur_UV_8x8.asm" // Transpose a MB for horizontal edge de-blocking + + //---------- Perform horizontal ILDB filting on UV ---------- + #include "AVC_ILDB_Filter_UV_h.asm" + //----------------------------------------------------------- + + #include "save_Cur_UV_8x8.asm" // Write 8x8 + #include "save_Top_UV_8x2.asm" // Write top MB (8x2) if not the top row + + //---------- Write right most 4 columns of cur MB to URB ---------- + // Transpose the right most 2 cols 2x8 (word) in GRF to 8x2 in BUF_D. It is 2 left most cols in cur MB. + #include "Transpose_Cur_UV_2x8.asm" + +ILDB_LABEL(WRITE_URB_UV): + mov (8) m1<1>:ud LEFT_TEMP_D(1)<8;8,1> // Copy 1 GRF to 1 URB entry (U+V) + + #include "writeURB_UV_Child.asm" + //----------------------------------------------------------------- + + //=========== Check write commit of the last write ============ + mov (8) WritebackResponse(0)<1> WritebackResponse(0) + +ILDB_LABEL(POST_ILDB_UV): + //--------------------------------- + + // Send notification thru Gateway to root thread, update chroma Status[CurRow] + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + +ILDB_LABEL(READ_FOR_URB_UV): + // Still need to prepare URB data for the right neighbor MB + #include "load_Cur_UV_Right_Most_2x8.asm" // Load cur MB ( right most 4x16) Y data from memory + #include "Transpose_Cur_UV_Right_Most_2x8.asm" +// jmpi ILDB_LABEL(WRITE_URB_UV) + + mov (8) m1<1>:ud LEFT_TEMP_D(1)<8;8,1> // Copy 1 GRF to 1 URB entry (U+V) + + #include "writeURB_UV_Child.asm" + //----------------------------------------------------------------- + + // Send notification thru Gateway to root thread, update chroma Status[CurRow] + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + + + //////////////////////////////////////////////////////////////////////////////// + // Include other subrutines being called +// #include "AVC_ILDB_Luma_Core.asm" + #include "AVC_ILDB_Chroma_Core.asm" + + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Y.asm new file mode 100644 index 000000000..99a02c7a1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Child_Y.asm @@ -0,0 +1,206 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// AVC Child Kernel (Vertical and horizontal de-block a 4:2:0 MB Y comp) +// +// First, de-block vertical edges from left to right. +// Second, de-block horizontal edge from top to bottom. +// +// If transform_size_8x8_flag = 1, luma is de-blocked at 8x8. Otherwise, luma is de-blocked at 4x4. +// +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define AVC_ILDB + +.kernel AVC_ILDB_CHILD_Y +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_CHILD_Y): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x9998:w +#endif + + // Init local variables + shl (8) ORIX_CUR<1>:w ORIX<0;2,1>:w 4:w // Expand addr to bytes, repeat (x,y) 4 times + + // Init addr register for vertical control data + mov (1) ECM_AddrReg<1>:w CNTRL_DATA_BASE:w // Init edge control map AddrReg + + //=== Null Kernel =============================================================== +// jmpi ILDB_LABEL(POST_ILDB_Y) + //=============================================================================== + + mul (1) URBOffsetC:uw ORIY:uw 4:w + +#if !defined(DEV_CL) + //==================================================================================== + // For BearLake-C, 64 bytes are stored in memory and dataport expands to 256 bytes. Need to use a special read command on BL-C. + // MB_offset = MBsCntX * CurRow + CurCol + // MBCntrlDataOffsetY = globel_byte_offset = MB_offset * 64 + mul (1) CntrlDataOffsetY:ud MBsCntX:w ORIY:w + add (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud ORIX:w + + // Assign to MSGSRC.2:ud for memory access + // mul (1) CntrlDataOffsetY:ud CntrlDataOffsetY:ud 64:uw + mul (1) MSGSRC.2:ud CntrlDataOffsetY:ud 64:uw + +#endif + + // Load current MB control data +#if defined(DEV_CL) + #if defined(_APPLE) + #include "Load_ILDB_Cntrl_Data_22DW.asm" // Crestline for Apple, progressive only + #else + #include "Load_ILDB_Cntrl_Data_64DW.asm" // Crestline + #endif +#else + #include "Load_ILDB_Cntrl_Data_16DW.asm" // Cantiga and beyond +#endif + + // Check loaded control data + #if defined(_APPLE) + and.z.f0.1 (8) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<8;8,1>:uw 0xFFFF:uw // Skip ILDB? + (f0.1) and.z.f0.1 (2) null<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<2;2,1>:uw 0xFFFF:uw // Skip ILDB? + #else + and.z.f0.1 (16) null<1>:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]<16;16,1>:uw 0xFFFF:uw // Skip ILDB? + #endif + + and.nz.f0.0 (1) null:w r[ECM_AddrReg, ExtBitFlags]:ub DISABLE_ILDB_FLAG:w // Skip ILDB? + + // Use free cycles here + add (1) ORIX_LEFT:w ORIX_LEFT:w -4:w +// add (1) ORIY_TOP:w ORIY_TOP:w -4:w + mov (1) GateWayOffsetC:uw ORIY:uw // Use row # as Gateway offset + + #if defined(_APPLE) + (f0.1.all8h) jmpi ILDB_LABEL(READ_FOR_URB_Y) // Skip ILDB + #else + (f0.1.all16h) jmpi ILDB_LABEL(READ_FOR_URB_Y) // Skip ILDB + #endif + + (f0.0) jmpi ILDB_LABEL(READ_FOR_URB_Y) // Skip ILDB + + add (1) ORIY_TOP:w ORIY_TOP:w -4:w + + // Bettr performance is observed if boundary MBs are not checked and skipped. + + #include "load_Cur_Y_16x16T.asm" // Load cur MB Y, 16x16, transpose +// #include "load_Left_Y_4x16T.asm" // Load left MB (4x16) Y data from memory + #include "load_Top_Y_16x4.asm" // Load top MB (16x4) Y data from memory + + #include "Transpose_Cur_Y_16x16.asm" +// #include "Transpose_Left_Y_4x16.asm" + + //---------- Perform vertical ILDB filting on Y --------- + #include "AVC_ILDB_Filter_Y_v.asm" + //------------------------------------------------------- + + #include "save_Left_Y_16x4T.asm" // Write left MB (4x16) Y data to memory + #include "Transpose_Cur_Y_16x16.asm" // Transpose a MB for horizontal edge de-blocking + + //---------- Perform horizontal ILDB filting on Y ------- + #include "AVC_ILDB_Filter_Y_h.asm" + //------------------------------------------------------- + + #include "save_Cur_Y_16x16.asm" // Write cur MB (16x16) + #include "save_Top_Y_16x4.asm" // Write top MB (16x4) + + //---------- Write right most 4 columns of cur MB to URB ---------- + // Transpose the right most 4 cols 4x16 in GRF to 16x4 in LEFT_TEMP_B. It is 4 left most cols in cur MB. + #include "Transpose_Cur_Y_4x16.asm" + +ILDB_LABEL(WRITE_URB_Y): + // Note: LEFT_TEMP_B(2) = TOP_TEMP_B(0), TOP_TEMP_B must be avail + mov (16) m1<1>:ud LEFT_TEMP_D(2)<8;8,1> // Copy 2 GRFs to 2 URB entries (Y) + + #include "writeURB_Y_Child.asm" + //----------------------------------------------------------------- + + //=========== Check write commit of the last write ============ + mov (8) WritebackResponse(0)<1> WritebackResponse(0) + +ILDB_LABEL(POST_ILDB_Y): + // Send notification thru Gateway to root thread, update luma Status[CurRow] + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + +ILDB_LABEL(READ_FOR_URB_Y): + // Still need to prepare URB data for the right neighbor MB + #include "load_Cur_Y_Right_Most_4x16.asm" // Load cur MB ( right most 4x16) Y data from memory + #include "Transpose_Cur_Y_Right_Most_4x16.asm" +// jmpi ILDB_LABEL(WRITE_URB_Y) + + // Note: LEFT_TEMP_B(2) = TOP_TEMP_B(0), TOP_TEMP_B must be avail + mov (16) m1<1>:ud LEFT_TEMP_D(2)<8;8,1> // Copy 2 GRFs to 2 URB entries (Y) + + #include "writeURB_Y_Child.asm" + //----------------------------------------------------------------- + + // Send notification thru Gateway to root thread, update luma Status[CurRow] + #include "AVC_ILDB_ForwardMsg.asm" + +#if !defined(GW_DCN) // For non-ILK chipsets + //child send EOT : Request type = 1 + END_CHILD_THREAD +#endif // !defined(DEV_ILK) + + // The thread finishs here + //------------------------------------------------------------------------------ + + //////////////////////////////////////////////////////////////////////////////// + // Include other subrutines being called + #include "AVC_ILDB_Luma_Core.asm" +// #include "AVC_ILDB_Chroma_Core.asm" + + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core.asm new file mode 100644 index 000000000..cffaab777 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core.asm @@ -0,0 +1,195 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__AVC_ILDB_CHROMA_CORE__) // Make sure this file is only included once +#define __AVC_ILDB_CHROMA_CORE__ + +////////// AVC ILDB Chroma Core ///////////////////////////////////////////////////////////////////////////////// +// +// This core performs AVC U or V ILDB filtering on one horizontal edge (8 pixels) of a MB. +// If data is transposed, it can also de-block a vertical edge. +// +// Bafore calling this subroutine, caller needs to set the following parameters. +// +// - EdgeCntlMap1 // Edge control map A +// - EdgeCntlMap2 // Edge control map B +// - P_AddrReg // Src and dest address register for P pixels +// - Q_AddrReg // Src and dest address register for Q pixels +// - alpha // alpha corresponding to the edge to be filtered +// - beta // beta corresponding to the edge to be filtered +// - tc0 // tc0 corresponding to the edge to be filtered +// +// U or V: +// +----+----+----+----+ +// | P1 | p0 | q0 | q1 | +// +----+----+----+----+ +// +// p1 = r[P_AddrReg, 0]<16;8,2> +// p0 = r[P_AddrReg, 16]<16;8,2> +// q0 = r[Q_AddrReg, 0]<16;8,2> +// q1 = r[Q_AddrReg, 16]<16;8,2> +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The region is both src and dest +// P0-P3 and Q0-Q3 should be only used if they have not been modified to new values +#undef P1 +#undef P0 +#undef Q0 +#undef Q1 + +#define P1 r[P_AddrReg, 0]<16;8,2>:ub +#define P0 r[P_AddrReg, 16]<16;8,2>:ub +#define Q0 r[Q_AddrReg, 0]<16;8,2>:ub +#define Q1 r[Q_AddrReg, 16]<16;8,2>:ub + +// New region as dest +#undef NewP0 +#undef NewQ0 + +#define NewP0 r[P_AddrReg, 16]<2>:ub +#define NewQ0 r[Q_AddrReg, 0]<2>:ub + +// Filter one chroma edge +FILTER_UV: + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x1112:w +#endif + //---------- Derive filterSampleflag in AVC spec, equition (8-469) ---------- + // bS is in MaskA + + // Src copy of the p1, p0, q0, q1 +// mov (8) p1(0)<1> r[P_AddrReg, 0]<16;8,2>:ub +// mov (8) p0(0)<1> r[P_AddrReg, 16]<16;8,2>:ub +// mov (8) q0(0)<1> r[Q_AddrReg, 0]<16;8,2>:ub +// mov (8) q1(0)<1> r[Q_AddrReg, 16]<16;8,2>:ub + +// mov (1) f0.0:uw MaskA:uw + + add (8) q0_p0(0)<1> Q0 -P0 // q0-p0 + add (8) TempRow0(0)<1> P1 -P0 // p1-p0 + add (8) TempRow1(0)<1> Q1 -Q0 // q1-q0 + + // Build FilterSampleFlag + // abs(q0-p0) < alpha + (f0.0) cmp.l.f0.0 (16) null:w (abs)q0_p0(0) alpha:w + // abs(p1-p0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow0(0) beta:w + // abs(q1-q0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow1(0) beta:w + + //----------------------------------------------------------------------------------------- + + // if + (f0.0) if (8) UV_ENDIF1 + // For channels whose edge control map1 = 1 ---> perform de-blocking + +// mov (1) f0.1:w MaskB:w {NoMask} // Now check for which algorithm to apply + + (f0.1) if (8) UV_ELSE2 + + // For channels whose edge control map2 = 1 ---> bS = 4 algorithm + // p0' = (2*p1 + p0 + q1 + 2) >> 2 + // q0' = (2*q1 + q0 + p1 + 2) >> 2 + + // Optimized version: + // A = (p1 + q1 + 2) + // p0' = (p0 + p1 + A) >> 2 + // q0' = (q0 + q1 + A) >> 2 + //------------------------------------------------------------------------------------ + + // p0' = (2*p1 + p0 + q1 + 2) >> 2 + add (8) acc0<1>:w Q1 2:w + mac (8) acc0<1>:w P1 2:w + add (8) acc0<1>:w acc0<8;8,1>:w P0 + shr.sat (8) TempRow0B(0)<2> acc0<8;8,1>:w 2:w + + // q0' = (2*q1 + q0 + p1 + 2) >> 2 + add (8) acc0<1>:w P1 2:w + mac (8) acc0<1>:w Q1 2:w + add (8) acc0<1>:w acc0<8;8,1>:w Q0 + shr.sat (8) TempRow1B(0)<2> acc0<8;8,1>:w 2:w + + mov (8) NewP0 TempRow0B(0) // p0' + mov (8) NewQ0 TempRow1B(0) // q0' + + +UV_ELSE2: + else (8) UV_ENDIF2 + // For channels whose edge control map2 = 0 ---> bS < 4 algorithm + + // Expand tc0 (tc0 has 4 bytes) +// mov (8) tc0_exp(0)<1> tc0<1;2,0>:ub {NoMask} // tc0_exp = tc0, each tc0 is duplicated 2 times for 2 adjcent pixels + mov (8) acc0<1>:w tc0<1;2,0>:ub {NoMask} // tc0_exp = tc0, each tc0 is duplicated 2 times for 2 adjcent pixels + + // tc_exp = tc0_exp + 1 +// add (8) tc_exp(0)<1> tc0_exp(0) 1:w + add (8) tc_exp(0)<1> acc0<8;8,1>:w 1:w + + // delta = Clip3(-tc, tc, ((((q0 - p0)<<2) + (p1-q1) + 4) >> 3)) + // 4 * (q0-p0) + p1 - q1 + 4 + add (8) acc0<1>:w P1 4:w + mac (8) acc0<1>:w q0_p0(0) 4:w + add (8) acc0<1>:w acc0<8;8,1>:w -Q1 + shr (8) TempRow0(0)<1> acc0<8;8,1>:w 3:w + + // tc clip + cmp.g.f0.0 (8) null:w TempRow0(0) tc_exp(0) // Clip if > tc0 + cmp.l.f0.1 (8) null:w TempRow0(0) -tc_exp(0) // Clip if < -tc0 + + (f0.0) mov (8) TempRow0(0)<1> tc_exp(0) + (f0.1) mov (8) TempRow0(0)<1> -tc_exp(0) + + // p0' = Clip1(p0 + delta) = Clip3(0, 0xFF, p0 + delta) + add.sat (8) TempRow1B(0)<2> P0 TempRow0(0) // p0+delta + + // q0' = Clip1(q0 - delta) = Clip3(0, 0xFF, q0 - delta) + add.sat (8) TempRow0B(0)<2> Q0 -TempRow0(0) // q0-delta + + mov (8) NewP0 TempRow1B(0) // p0' + mov (8) NewQ0 TempRow0B(0) // q0' + + endif +UV_ENDIF2: +UV_ENDIF1: + endif + +RETURN + +#endif // !defined(__AVC_ILDB_CHROMA_CORE__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core_Mbaff.asm new file mode 100644 index 000000000..e9daade9e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Chroma_Core_Mbaff.asm @@ -0,0 +1,176 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB Chroma Core Mbaff ///////////////////////////////////////////////////////////////////////////////// +// +// This core performs AVC U or V ILDB filtering on one horizontal edge (8 pixels) of a MB. +// If data is transposed, it can also de-block a vertical edge. +// +// Bafore calling this subroutine, caller needs to set the following parameters. +// +// - EdgeCntlMap1 // Edge control map A +// - EdgeCntlMap2 // Edge control map B +// - P_AddrReg // Src and dest address register for P pixels +// - Q_AddrReg // Src and dest address register for Q pixels +// - alpha // alpha corresponding to the edge to be filtered +// - beta // beta corresponding to the edge to be filtered +// - tc0 // tc0 corresponding to the edge to be filtered +// +// U or V: +// +----+----+----+----+ +// | P1 | p0 | q0 | q1 | +// +----+----+----+----+ +// +// p1 = r[P_AddrReg, 0]<16;8,2> +// p0 = r[P_AddrReg, 16]<16;8,2> +// q0 = r[Q_AddrReg, 0]<16;8,2> +// q1 = r[Q_AddrReg, 16]<16;8,2> +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The region is both src and dest +// P0-P3 and Q0-Q3 should be only used if they have not been modified to new values +#undef P1 +#undef P0 +#undef Q0 +#undef Q1 + +#define P1 r[P_AddrReg, 0]<16;8,2>:ub +#define P0 r[P_AddrReg, 16]<16;8,2>:ub +#define Q0 r[Q_AddrReg, 0]<16;8,2>:ub +#define Q1 r[Q_AddrReg, 16]<16;8,2>:ub + +// New region as dest +#undef NewP0 +#undef NewQ0 + +#define NewP0 r[P_AddrReg, 16]<2>:ub +#define NewQ0 r[Q_AddrReg, 0]<2>:ub + +// Filter one chroma edge - mbaff +FILTER_UV_MBAFF: + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x1112:w +#endif + //---------- Derive filterSampleflag in AVC spec, equition (8-469) ---------- + + //===== Assume f0.0 contains MaskA when entering this routine +// mov (1) f0.0:uw MaskA:uw + + add (8) q0_p0(0)<1> Q0 -P0 // q0-p0 + add (8) TempRow0(0)<1> P1 -P0 // p1-p0 + add (8) TempRow1(0)<1> Q1 -Q0 // q1-q0 + + // Build FilterSampleFlag + // abs(q0-p0) < alpha + (f0.0) cmp.l.f0.0 (16) null:w (abs)q0_p0(0) Mbaff_ALPHA(0) + // abs(p1-p0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow0(0) Mbaff_BETA(0) + // abs(q1-q0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow1(0) Mbaff_BETA(0) + + //----------------------------------------------------------------------------------------- + + // if + (f0.0) if (8) MBAFF_UV_ENDIF1 + // For channels whose edge control map1 = 1 ---> perform de-blocking + +// mov (1) f0.1:w MaskB:w {NoMask} // Now check for which algorithm to apply + + (f0.1) if (8) MBAFF_UV_ELSE2 + + // For channels whose edge control map2 = 1 ---> bS = 4 algorithm + // p0' = (2*p1 + P0 + q1 + 2) >> 2 + // q0' = (2*q1 + q0 + p1 + 2) >> 2 + //------------------------------------------------------------------------------------ + + // p0' = (2*p1 + p0 + q1 + 2) >> 2 + add (8) acc0<1>:w Q1 2:w + mac (8) acc0<1>:w P1 2:w + add (8) acc0<1>:w acc0<8;8,1>:w P0 + shr.sat (8) TempRow0B(0)<2> acc0<8;8,1>:w 2:w + + // q0' = (2*q1 + q0 + p1 + 2) >> 2 + add (8) acc0<1>:w P1 2:w + mac (8) acc0<1>:w Q1 2:w + add (8) acc0<1>:w acc0<8;8,1>:w Q0 + shr.sat (8) TempRow1B(0)<2> acc0<8;8,1>:w 2:w + + mov (8) NewP0 TempRow0B(0) // p0' + mov (8) NewQ0 TempRow1B(0) // q0' + +MBAFF_UV_ELSE2: + else (8) MBAFF_UV_ENDIF2 + // For channels whose edge control map2 = 0 ---> bS < 4 algorithm + + // tc_exp = tc0_exp + 1 + add (8) tc_exp(0)<1> Mbaff_TC0(0) 1:w + + // delta = Clip3(-tc, tc, ((((q0 - p0)<<2) + (p1-q1) + 4) >> 3)) + // 4 * (q0-p0) + p1 - q1 + 4 + add (8) acc0<1>:w P1 4:w + mac (8) acc0<1>:w q0_p0(0) 4:w + add (8) acc0<1>:w acc0<8;8,1>:w -Q1 + shr (8) TempRow0(0)<1> acc0<8;8,1>:w 3:w + + // tc clip + cmp.g.f0.0 (8) null:w TempRow0(0) tc_exp(0) // Clip if > tc0 + cmp.l.f0.1 (8) null:w TempRow0(0) -tc_exp(0) // Clip if < -tc0 + + (f0.0) mov (8) TempRow0(0)<1> tc_exp(0) + (f0.1) mov (8) TempRow0(0)<1> -tc_exp(0) + + // p0' = Clip1(p0 + delta) = Clip3(0, 0xFF, p0 + delta) + add.sat (8) TempRow1B(0)<2> P0 TempRow0(0) // p0+delta + + // q0' = Clip1(q0 - delta) = Clip3(0, 0xFF, q0 - delta) + add.sat (8) TempRow0B(0)<2> Q0 -TempRow0(0) // q0-delta + + mov (8) NewP0 TempRow1B(0) // p0' + mov (8) NewQ0 TempRow0B(0) // q0' + + endif +MBAFF_UV_ENDIF2: +MBAFF_UV_ENDIF1: + endif + +RETURN + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_CloseGateway.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_CloseGateway.asm new file mode 100644 index 000000000..8dab6d398 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_CloseGateway.asm @@ -0,0 +1,52 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//----- Close a Message Gateway ----- + +#if defined(_DEBUG) + mov (1) EntrySignature:b 0x4444:w +#endif + +// Message descriptor +// bit 31 EOD +// 27:24 FFID = 0x0011 for msg gateway +// 23:20 msg length = 1 MRF +// 19:16 Response length = 0 +// 1:0 SubFuncID = 01 for CloseGateway +// Message descriptor: 0 000 0011 0001 0000 + 0 0 000000000000 01 ==> 0000 0011 0001 0000 0000 0000 0000 0001 +send (8) null:ud m7 r0.0<0;1,0>:ud MSG_GW CGWMSGDSC diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Dep_Check.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Dep_Check.asm new file mode 100644 index 000000000..1c7b723f4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Dep_Check.asm @@ -0,0 +1,216 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//---------- Check dependency and spawn all MBs ---------- + +// Launch the 1st round of child threads for Vertical ILDB +#if defined(_DEBUG) + mov (1) EntrySignature:w 0x3333:w +#endif + +//===================================================================== +// Jump Table 1 + // 0 0 ---> Goto ALL_SPAWNED + // 0 1 ---> Goto ALL_SPAWNED + // 1 0 ---> Goto SLEEP_ENTRY + // 1 1 ---> Goto POST_SLEEP + mov (2) JumpTable.0<1>:d 0:d { NoDDClr } +#if defined(CHROMA_ROOT) + mov (1) JumpTable.2:d SLEEP_ENTRY_UV_ILDB_FRAME_IP-ALL_SPAWNED_UV_ILDB_FRAME_IP:d { NoDDClr, NoDDChk } + mov (1) JumpTable.3:d POST_SLEEP_UV_ILDB_FRAME_IP-ALL_SPAWNED_UV_ILDB_FRAME_IP:d { NoDDChk } +#else + mov (1) JumpTable.2:d SLEEP_ENTRY_Y_ILDB_FRAME_IP-ALL_SPAWNED_Y_ILDB_FRAME_IP:d { NoDDClr, NoDDChk } + mov (1) JumpTable.3:d POST_SLEEP_Y_ILDB_FRAME_IP-ALL_SPAWNED_Y_ILDB_FRAME_IP:d { NoDDChk } +#endif +//===================================================================== + + mov (2) f0.0<1>:w 0:w + + // Get m0 most of fields ready for URB write + mov (8) MRF0<1>:ud MSGSRC.0<8;8,1>:ud + + // Add child kernel offset + add (1) CT_R0Hdr.2:ud r0.2:ud CHILD_OFFSET:w + + // Init + mov (1) Col_Boundary:w 2:w + mov (1) Row_Boundary:w LastRow:w + mov (1) TopRowForScan:w 0:w + mov (2) OutstandingThreads<1>:w 0:w + + // Init Scoreboard (idle = 0x00FF, busy = 0x0000) + // Low word is saved col. High word is busy/idle status + mov (16) GatewayAperture(0)<1> 0x00FF00FF:ud // Init r6-r7 + mov (16) GatewayAperture(2)<1> 0x00FF00FF:ud // Init r8-r9 + mov (16) GatewayAperture(4)<1> 0x00FF00FF:ud // Init r10-r11 + mov (16) GatewayAperture(6)<1> 0x00FF00FF:ud // Init r12-r13 + mov (16) GatewayAperture(8)<1> 0x00FF00FF:ud // Init r14-r15 + + mul (1) StatusAddr:w CurRow:w 4:w // dword to bytes offset conversion + + //===================================================================== + +//SPAWN_LOOP: + //===== OutstandingThreads < ThreadLimit ? ============================ + cmp.l.f0.1 (1) null:w OutstandingThreads:w ThreadLimit:w // Check the thread limit +#if defined(CHROMA_ROOT) + (f0.1) jmpi ILDB_LABEL(POST_SLEEP_UV) +#else // LUMA_ROOT + (f0.1) jmpi ILDB_LABEL(POST_SLEEP_Y) +#endif + +#if defined(CHROMA_ROOT) +ILDB_LABEL(SLEEP_ENTRY_UV): +#else // LUMA_ROOT +ILDB_LABEL(SLEEP_ENTRY_Y): +#endif + //===== Goto Sleep ==================================================== + // Either reached max thread limit or no child thread can be spawned due to dependency. + add (1) OutstandingThreads:w OutstandingThreads:w -1:w // Do this before wait is faster + wait n0.0:d + +#if defined(CHROMA_ROOT) +ILDB_LABEL(POST_SLEEP_UV): +#else // LUMA_ROOT +ILDB_LABEL(POST_SLEEP_Y): +#endif + //===== Luma Status[CurRow] == busy ? ===== + cmp.z.f0.0 (1) null:uw r[StatusAddr, GatewayApertureB+ScoreBd_Idx]:uw 0:uw // Check west neighbor + cmp.g.f0.1 (1) null:w CurCol:w LastCol:w // Check if the curCol > LastCol + +#if defined(CHROMA_ROOT) + mov (16) acc0.0<1>:w URBOffsetUVBase<0;1,0>:w // Add offset to UV base (MBsCntY * URB_EBTRIES_PER_MB) + mac (1) URBOffset:w CurRow:w 4:w // 4 entries per row +#else + mul (1) URBOffset:w CurRow:w 4:w // 4 entries per row +#endif + +#if defined(CHROMA_ROOT) + (f0.0) jmpi ILDB_LABEL(SLEEP_ENTRY_UV) // Current row has a child thread running, can not spawn a new child thread, go back to sleep + (f0.1) jmpi ILDB_LABEL(NEXT_MB_UV) // skip MB if the curCol > LastCol +#else // LUMA_ROOT + (f0.0) jmpi ILDB_LABEL(SLEEP_ENTRY_Y) // Current row has a child thread running, can not spawn a new child thread, go back to sleep + (f0.1) jmpi ILDB_LABEL(NEXT_MB_Y) // skip MB if the curCol > LastCol +#endif + + //========== Spwan a child thread ======================================== + // Save cur col and set Status[CurRow] to busy + mov (2) r[StatusAddr, GatewayApertureB]<1>:uw CurColB<2;2,1>:ub // Store the new col + + // Increase OutstandingThreads and ProcessedMBs by 1 + add (2) OutstandingThreads<1>:w OutstandingThreads<2;2,1>:w 1:w + + #include "AVC_ILDB_SpawnChild.asm" + + //===== Find next MB =================================================== +#if defined(CHROMA_ROOT) +ILDB_LABEL(NEXT_MB_UV): +#else // LUMA_ROOT +ILDB_LABEL(NEXT_MB_Y): +#endif + // Check pic boundary, results are in f0.0 bit0 and bit1 + cmp.ge.f0.0 (2) null<1>:w CurCol<2;2,1>:w Col_Boundary<2;2,1>:w + + // Update TopRowForScan if the curCol = LastCol + (f0.1) add (1) TopRowForScan:w CurRow:w 1:w + +// cmp.l.f0.1 (1) null<1>:w ProcessedMBs:w TotalBlocks:w // Processed all blocks ? + // 2 sets compare + // ProcessedMBs:w < TotalBlocks:w OutstandingThreads:w < ThreadLimit:wProcessedMBs:w + // 0 0 ---> Goto ALL_SPAWNED + // 0 1 ---> Goto ALL_SPAWNED + // 1 0 ---> Goto SLEEP_ENTRY + // 1 1 ---> Goto POST_SLEEP + cmp.l.f0.1 (2) null<1>:w OutstandingThreads<2;2,1>:w ThreadLimit<2;2,1>:w + + // Just do it in stalled cycles + mov (1) acc0.0:w 4:w + mac (1) StatusAddr:w CurRow:w 4:w // dword to bytes offset conversion + add (2) CurCol<1>:w CurCol<2;2,1>:w StepToNextMB<2;2,1>:b // CurCol -= 2 and CurRow += 1 + + // Set f0.0 if turning around is needed, assuming bit 15 - 2 are zeros for correct comparison. + cmp.nz.f0.0 (1) null<1>:w f0.0:w 0x01:w + + mul (1) JumpAddr:w f0.1:w 4:w // byte offet in dword count + + // The next MB is at the row TopRowForScan + (f0.0) mul (1) StatusAddr:w TopRowForScan:w 4:w // dword to bytes offset conversion + (f0.0) mov (1) CurRow:w TopRowForScan:w { NoDDClr } // Restart from the top row that has MBs not deblocked yet. + (f0.0) add (1) CurCol:w r[StatusAddr, GatewayApertureB]:uw 1:w { NoDDChk } + + //===== Processed all blocks ? ========================================= + // (f0.1) jmpi SPAWN_LOOP + + jmpi r[JumpAddr, JUMPTABLE_BASE]:d +//JUMP_BASE: + + //====================================================================== + + // All MB are spawned at this point, check for outstanding thread count +#if defined(CHROMA_ROOT) +ILDB_LABEL(ALL_SPAWNED_UV): +#else // LUMA_ROOT +ILDB_LABEL(ALL_SPAWNED_Y): +#endif + cmp.e.f0.1 (1) null:w OutstandingThreads:w 0:w // Check before goto sleep +#if defined(CHROMA_ROOT) + (f0.1) jmpi ILDB_LABEL(ALL_DONE_UV) +#else // LUMA_ROOT + (f0.1) jmpi ILDB_LABEL(ALL_DONE_Y) +#endif + + wait n0.0:d // Wake up by a finished child thread + add (1) OutstandingThreads:w OutstandingThreads:w -1:w + +#if defined(CHROMA_ROOT) + // One thread is free and give it to luma thread limit --- Increase luma thread limit by one. + #include "AVC_ILDB_LumaThrdLimit.asm" +#endif + +#if defined(CHROMA_ROOT) + jmpi ILDB_LABEL(ALL_SPAWNED_UV) // Waked up and goto dependency check +#else // LUMA_ROOT + jmpi ILDB_LABEL(ALL_SPAWNED_Y) // Waked up and goto dependency check +#endif + + // All child threads are finsihed at this point +#if defined(CHROMA_ROOT) +ILDB_LABEL(ALL_DONE_UV): +#else // LUMA_ROOT +ILDB_LABEL(ALL_DONE_Y): +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_h.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_h.asm new file mode 100644 index 000000000..0160654f9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_h.asm @@ -0,0 +1,253 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter horizontal Mbaff UV /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all horizontal edges of UV. +// +// It sssumes the data for horizontal de-blocking is already transposed. +// +// Chroma: +// +// +-------+-------+ H0 Edge +// | | | +// | | | +// | | | +// +-------+-------+ H1 Edge +// | | | +// | | | +// | | | +// +-------+-------+ +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBC:w +#endif + +//=============== Chroma deblocking ================ + +//---------- Deblock UV external top edge ---------- + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterTopMbEdgeFlag:w // Check for FilterTopMbEdgeFlag + + mov (1) f0.1:w DualFieldMode:w // Check for dual field mode + + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<0;1,0>:uw RRampW(0) + shr (16) TempRow1(0)<1> r[ECM_AddrReg, wEdgeCntlMapB_ExtTopHorz0]<0;1,0>:uw RRampW(0) + + (f0.0) jmpi H0_UV_DONE // Skip H0 UV edge + + (f0.1) jmpi DUAL_FIELD_UV + + // Non dual field mode + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + + // Ext U + // p1 = Prev MB U row 0 + // p0 = Prev MB U row 1 + // q0 = Cur MB U row 0 + // q1 = Cur MB U row 1 + mov (1) P_AddrReg:w PREV_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_U_BASE:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop0_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_0_Cb]<1;2,0>:ub + + // Store UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) + + // Ext V + mov (1) P_AddrReg:w PREV_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_V_BASE:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop0_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_0_Cr]<1;2,0>:ub + + // Set UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) + + jmpi H0_UV_DONE + +DUAL_FIELD_UV: + // Dual field mode, FieldModeCurrentMbFlag=0 && FieldModeAboveMbFlag=1 + + //===== Ext U, Top field + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+32:w { NoDDChk } + + mov (16) ABOVE_CUR_MB_UW(0)<1> PREV_MB_UW(0, 0)<16;8,1> // Copy p1, p0 + mov (16) ABOVE_CUR_MB_UW(1)<1> SRC_UW(0, 0)<16;8,1> // Copy q1, q0 + + //===== Ext U, top field + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop0_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_0_Cb]<1;2,0>:ub + + // Store UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) // Ext U, top field + + //===== Ext V, top field + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE+1:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+33:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop0_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_0_Cr]<1;2,0>:ub + + // Set UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) // Ext U, top field + + // Prefetch for bottom field + // Get bot field Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz1]<0;1,0>:uw RRampW(0) + shr (16) TempRow1(0)<1> r[ECM_AddrReg, wEdgeCntlMapB_ExtTopHorz1]<0;1,0>:uw RRampW(0) + + // Save deblocked top field rows + mov (8) PREV_MB_UW(1, 0)<1> ABOVE_CUR_MB_UW(0, 8) // Copy p0 + mov (8) SRC_UW(0, 0)<1> ABOVE_CUR_MB_UW(1, 0) // Copy q0 + //========================================================================== + + //===== Ext U, Bot field + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+32:w { NoDDChk } + + mov (16) ABOVE_CUR_MB_UW(0)<1> PREV_MB_UW(0, 8)<16;8,1> // Copy p1, p0 + mov (16) ABOVE_CUR_MB_UW(1)<1> SRC_UW(0, 8)<16;8,1> // Copy q1, q0 + + //===== Ext U, bottom field + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop1_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop1_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_1_Cb]<1;2,0>:ub + + // Store UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) // Ext U, bottom field + + //===== Ext V, bot field + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE+1:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+33:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop1_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop1_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_1_Cr]<1;2,0>:ub + + // Set UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) // Ext V, bottom field + + // Save deblocked bot field rows + mov (8) PREV_MB_UW(1, 8)<1> ABOVE_CUR_MB_UW(0, 8) // Copy p0 + mov (8) SRC_UW(0, 8)<1> ABOVE_CUR_MB_UW(1, 0) // Copy q0 + //======================================== + +H0_UV_DONE: + +//---------- Deblock U internal horz middle edge ---------- + + //***** Need to take every other bit to form U maskA in core + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMap_IntMidHorz]<0;1,0>:uw RRampW(0) + + // p1 = Cur MB U row 2 + // p0 = Cur MB U row 3 + // q0 = Cur MB U row 4 + // q1 = Cur MB U row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h20_Cb]<1;2,0>:ub + + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + + // Store UV MaskA and MaskB + mov (1) f0.1:uw 0:w + mov (1) MaskB:uw 0:w { NoDDClr } + mov (1) MaskA:uw f0.0:uw { NoDDChk } + + CALL(FILTER_UV_MBAFF, 1) +//----------------------------------------------- + + +//---------- Deblock V internal horz middle edge ---------- + + // p1 = Cur MB V row 2 + // p0 = Cur MB V row 3 + // q0 = Cur MB V row 4 + // q1 = Cur MB V row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h20_Cr]<1;2,0>:ub + + // Set UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) +//----------------------------------------------- + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_v.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_v.asm new file mode 100644 index 000000000..f7da92285 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_UV_v.asm @@ -0,0 +1,239 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC LDB filter vertical Mbaff UV /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all vertical edges of UV. +// +// It sssumes the data for vertical de-blocking is already transposed. +// +// Chroma: +// +// +-------+-------+ +// | | | +// | | | +// | | | +// +-------+-------+ +// | | | +// | | | +// | | | +// +-------+-------+ +// +// V0 V1 +// Edge Edge +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBC:w +#endif + +//=============== Chroma deblocking ================ + +//---------- Deblock U external left edge ---------- + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterLeftMbEdgeFlag:w // Check for FilterLeftMbEdgeFlag + + cmp.z.f0.1 (1) null:w VertEdgePattern:uw LEFT_FIELD_CUR_FRAME:w + + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]<0;1,0>:uw RRampW(0) + shr (16) TempRow1(0)<1> r[ECM_AddrReg, wEdgeCntlMapB_ExtLeftVert0]<0;1,0>:uw RRampW(0) + + (f0.0) jmpi BYPASS_V0_UV // Do not deblock Left ext edge + + cmp.z.f0.0 (1) null:w VertEdgePattern:uw LEFT_FRAME_CUR_FIELD:w + + (-f0.1) jmpi V0_U_NEXT1 // Jump if not LEFT_FIELD_CUR_FRAME + + //----- For LEFT_FIELD_CUR_FRAME + + // Extract UV MaskA and MaskB from every other 2 bits of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<4;2,1> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<4;2,1> 1:w + + // For FieldModeLeftMbFlag=1 && FieldModeCurrentMbFlag=0 + mov (4) Mbaff_ALPHA(0,0)<2> r[ECM_AddrReg, bAlphaLeft0_Cb]<0;1,0>:ub { NoDDClr } + mov (4) Mbaff_ALPHA(0,1)<2> r[ECM_AddrReg, bAlphaLeft1_Cb]<0;1,0>:ub { NoDDChk } + mov (4) Mbaff_BETA(0,0)<2> r[ECM_AddrReg, bBetaLeft0_Cb]<0;1,0>:ub { NoDDClr } + mov (4) Mbaff_BETA(0,1)<2> r[ECM_AddrReg, bBetaLeft1_Cb]<0;1,0>:ub { NoDDChk } + mov (4) Mbaff_TC0(0,0)<2> r[ECM_AddrReg, bTc0_v00_0_Cb]<4;4,1>:ub { NoDDClr } + mov (4) Mbaff_TC0(0,1)<2> r[ECM_AddrReg, bTc0_v00_1_Cb]<4;4,1>:ub { NoDDChk } + + jmpi V0_U_NEXT3 + +V0_U_NEXT1: + + (-f0.0) jmpi V0_U_NEXT2 // Jump if not LEFT_FRAME_CUR_FIELD + + //----- For LEFT_FRAME_CUR_FIELD + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + + // For FieldModeLeftMbFlag=0 && FieldModeCurrentMbFlag=1 + mov (4) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Cb]<0;1,0>:ub { NoDDClr } + mov (4) Mbaff_ALPHA(0,4)<1> r[ECM_AddrReg, bAlphaLeft1_Cb]<0;1,0>:ub { NoDDChk } + mov (4) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Cb]<0;1,0>:ub { NoDDClr } + mov (4) Mbaff_BETA(0,4)<1> r[ECM_AddrReg, bBetaLeft1_Cb]<0;1,0>:ub { NoDDChk } + mov (4) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Cb]<4;4,1>:ub { NoDDClr } + mov (4) Mbaff_TC0(0,4)<1> r[ECM_AddrReg, bTc0_v00_1_Cb]<4;4,1>:ub { NoDDChk } + + jmpi V0_U_NEXT3 + +V0_U_NEXT2: + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + + // Both are frames or fields + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Cb]<1;2,0>:ub + +V0_U_NEXT3: + + // p1 = Prev MB U row 0 + // p0 = Prev MB U row 1 + // q0 = Cur MB U row 0 + // q1 = Cur MB U row 1 + mov (1) P_AddrReg:w PREV_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_U_BASE:w { NoDDChk } + + // Store UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) +//----------------------------------------------- + +//---------- Deblock V external left edge ---------- + + // No change to MaskA and MaskB + + cmp.z.f0.0 (4) null:w VertEdgePattern:uw LEFT_FIELD_CUR_FRAME:w + cmp.z.f0.1 (4) null:w VertEdgePattern:uw LEFT_FRAME_CUR_FIELD:w + + // both are frame or field + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Cr]<1;2,0>:ub + + // p1 = Prev MB V row 0 + // p0 = Prev MB V row 1 + // q0 = Cur MB V row 0 + // q1 = Cur MB V row 1 + mov (1) P_AddrReg:w PREV_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_V_BASE:w { NoDDChk } + + // For FieldModeLeftMbFlag=1 && FieldModeCurrentMbFlag=0 + (f0.0) mov (4) Mbaff_ALPHA(0,0)<2> r[ECM_AddrReg, bAlphaLeft0_Cr]<0;1,0>:ub { NoDDClr } + (f0.0) mov (4) Mbaff_ALPHA(0,1)<2> r[ECM_AddrReg, bAlphaLeft1_Cr]<0;1,0>:ub { NoDDChk } + (f0.0) mov (4) Mbaff_BETA(0,0)<2> r[ECM_AddrReg, bBetaLeft0_Cr]<0;1,0>:ub { NoDDClr } + (f0.0) mov (4) Mbaff_BETA(0,1)<2> r[ECM_AddrReg, bBetaLeft1_Cr]<0;1,0>:ub { NoDDChk } + (f0.0) mov (4) Mbaff_TC0(0,0)<2> r[ECM_AddrReg, bTc0_v00_0_Cr]<4;4,1>:ub { NoDDClr } + (f0.0) mov (4) Mbaff_TC0(0,1)<2> r[ECM_AddrReg, bTc0_v00_1_Cr]<4;4,1>:ub { NoDDChk } + + // For FieldModeLeftMbFlag=0 && FieldModeCurrentMbFlag=1 + (f0.1) mov (4) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Cr]<0;1,0>:ub { NoDDClr } + (f0.1) mov (4) Mbaff_ALPHA(0,4)<1> r[ECM_AddrReg, bAlphaLeft1_Cr]<0;1,0>:ub { NoDDChk } + (f0.1) mov (4) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Cr]<0;1,0>:ub { NoDDClr } + (f0.1) mov (4) Mbaff_BETA(0,4)<1> r[ECM_AddrReg, bBetaLeft1_Cr]<0;1,0>:ub { NoDDChk } + (f0.1) mov (4) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Cr]<4;4,1>:ub { NoDDClr } + (f0.1) mov (4) Mbaff_TC0(0,4)<1> r[ECM_AddrReg, bTc0_v00_1_Cr]<4;4,1>:ub { NoDDChk } + + // Set UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV_MBAFF, 1) +//----------------------------------------------- + +BYPASS_V0_UV: + // Set EdgeCntlMap2 = 0, so it always uses bS < 4 algorithm. + // Same alpha and beta for all internal vert and horiz edges + +//---------- Deblock U internal vert middle edge ---------- + + //***** Need to take every other bit to form U or V maskA + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMap_IntMidVert]<0;1,0>:uw RRampW(0) + + // p1 = Cur MB U row 2 + // p0 = Cur MB U row 3 + // q0 = Cur MB U row 4 + // q1 = Cur MB U row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDClr } // Skip 2 U rows and 2 V rows + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDChk } + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Cb]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Cb]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v02_Cb]<1;2,0>:ub + + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + + // Store MaskA and MaskB + mov (1) f0.1:uw 0:w + mov (1) MaskB:uw 0:w { NoDDClr } + mov (1) MaskA:uw f0.0:uw { NoDDChk } + + CALL(FILTER_UV_MBAFF, 1) + +//----------------------------------------------- + + +//---------- Deblock V internal vert middle edge ---------- + + // P1 = Cur MB V row 2 + // P0 = Cur MB V row 3 + // Q0 = Cur MB V row 4 + // Q1 = Cur MB V row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDClr } // Skip 2 U rows and 2 V rows + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDChk } + + // Put MaskA into f0.0 + // Put MaskB into f0.1 + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Cr]<0;1,0>:ub + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Cr]<0;1,0>:ub + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v02_Cr]<1;2,0>:ub + + CALL(FILTER_UV_MBAFF, 1) + +//----------------------------------------------- + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_h.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_h.asm new file mode 100644 index 000000000..6fc5d5d60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_h.asm @@ -0,0 +1,264 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter horizontal Mbaff Y /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all horizontal edges of Y. +// +// It sssumes the data for horizontal de-blocking is already transposed. +// +// Luma: +// +// +-------+-------+-------+-------+ H0 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H1 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H2 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H3 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBB:w +#endif + + +//========== Luma deblocking ========== + + +//---------- Deblock Y external top edge (H0) ---------- + + // Bypass deblocking if it is the top edge of the picture. + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterTopMbEdgeFlag:w // Check for FilterTopMbEdgeFlag + mov (1) f0.1:w DualFieldMode:w // Check for dual field mode + + // Non dual field mode + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Y]<0;1,0>:ub 2:w // alpha >> 2 + + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<2;2,1>:uw + + // Ext Y + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop0_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop0_Y]<0;1,0>:ub + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_0_Y]<1;4,0>:ub + + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + + (f0.0) jmpi H0_Y_DONE // Skip Ext Y deblocking + (f0.1) jmpi DUAL_FIELD_Y + + mov (1) P_AddrReg:w PREV_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_Y_BASE:w { NoDDChk } + + CALL(FILTER_Y_MBAFF, 1) // Non dual field deblocking + + jmpi H0_Y_DONE + +DUAL_FIELD_Y: + // Dual field mode, FieldModeCurrentMbFlag=0 && FieldModeAboveMbFlag=1 + + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+64:w { NoDDChk } + + // Must use PREV_MB_YW. TOP_MB_YW is not big enough. + // Get top field rows + mov (16) ABOVE_CUR_MB_YW(0)<1> PREV_MB_YW(0, 0)<16;8,1> // Copy p3, p2 + mov (16) ABOVE_CUR_MB_YW(1)<1> PREV_MB_YW(2, 0)<16;8,1> // Copy p1, p0 + mov (16) ABOVE_CUR_MB_YW(2)<1> SRC_YW(0, 0)<16;8,1> // Copy q0, q1 + mov (16) ABOVE_CUR_MB_YW(3)<1> SRC_YW(2, 0)<16;8,1> // Copy q2, q3 + + CALL(FILTER_Y_MBAFF, 1) // Ext Y, top field + + // Save deblocked top field rows + mov (8) PREV_MB_YW(1, 0)<1> ABOVE_CUR_MB_YW(0, 8) // Copy p2 + mov (8) PREV_MB_YW(2, 0)<1> ABOVE_CUR_MB_YW(1, 0) // Copy p1 + mov (8) PREV_MB_YW(3, 0)<1> ABOVE_CUR_MB_YW(1, 8) // Copy p0 + mov (8) SRC_YW(0, 0)<1> ABOVE_CUR_MB_YW(2, 0) // Copy q0 + mov (8) SRC_YW(1, 0)<1> ABOVE_CUR_MB_YW(2, 8) // Copy q1 + mov (8) SRC_YW(2, 0)<1> ABOVE_CUR_MB_YW(3, 0) // Copy q2 + + //================================================================================== + // Bottom field + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> r[ECM_AddrReg, bAlphaTop1_Y]<0;1,0>:ub 2:w // alpha >> 2 + + mov (1) P_AddrReg:w ABOVE_CUR_MB_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w ABOVE_CUR_MB_BASE+64:w { NoDDChk } + + // Get bot field rows + mov (16) ABOVE_CUR_MB_YW(0)<1> PREV_MB_YW(0, 8)<16;8,1> // Copy p3, p2 + mov (16) ABOVE_CUR_MB_YW(1)<1> PREV_MB_YW(2, 8)<16;8,1> // Copy p1, p0 + mov (16) ABOVE_CUR_MB_YW(2)<1> SRC_YW(0, 8)<16;8,1> // Copy q0, q1 + mov (16) ABOVE_CUR_MB_YW(3)<1> SRC_YW(2, 8)<16;8,1> // Copy q2, q3 + + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz1]<2;2,1>:uw + + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaTop1_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaTop1_Y]<0;1,0>:ub + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h00_1_Y]<1;4,0>:ub + + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + + CALL(FILTER_Y_MBAFF, 1) // Ext Y, bot field + + // Save deblocked top field rows + mov (8) PREV_MB_YW(1, 8)<1> ABOVE_CUR_MB_YW(0, 8) // Copy p2 + mov (8) PREV_MB_YW(2, 8)<1> ABOVE_CUR_MB_YW(1, 0) // Copy p1 + mov (8) PREV_MB_YW(3, 8)<1> ABOVE_CUR_MB_YW(1, 8) // Copy p0 + mov (8) SRC_YW(0, 8)<1> ABOVE_CUR_MB_YW(2, 0) // Copy q0 + mov (8) SRC_YW(1, 8)<1> ABOVE_CUR_MB_YW(2, 8) // Copy q1 + mov (8) SRC_YW(2, 8)<1> ABOVE_CUR_MB_YW(3, 0) // Copy q2 + //================================================================================== + +H0_Y_DONE: + +//BYPASS_H0_Y: +//------------------------------------------------------------------ + // Same alpha, alpha2, beta and MaskB for all internal edges + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Y]<0;1,0>:ub 2:w // alpha >> 2 + + // alpha = bAlphaInternal_Y + // beta = bBetaInternal_Y + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Y]<0;1,0>:ub + + mov (1) MaskB:uw 0:w // Set MaskB = 0 for all 3 edges, so it always uses bS < 4 algorithm. + + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + +//---------- Deblock Y internal top edge (H1) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_H1_Y + + // p3 = Cur MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 4 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 5 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 6 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 7 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntTopHorz]:uw + + // tc0 has bTc0_h13_Y + bTc0_h12_Y + bTc0_h11_Y + bTc0_h10_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h10_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +//BYPASS_H1_Y: +//------------------------------------------------------------------ + + +//---------- Deblock Y internal mid horizontal edge (H2) ---------- + + // Bypass deblocking if FilterInternal8x8EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal8x8EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_H2_Y + + // p3 = Cur MB Y row 4 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 5 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 6 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 7 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 8 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 9 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 10 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 11 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidHorz]:uw + + // tc0 has bTc0_h23_Y + bTc0_h22_Y + bTc0_h21_Y + bTc0_h20_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h20_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +//BYPASS_H2_Y: +//----------------------------------------------- + + +//---------- Deblock Y internal bottom edge (H3) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_H3_Y + + // p3 = Cur MB Y row 8 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 9 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 10 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 11 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 12 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 13 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 14 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 15 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 12*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntBotHorz]:uw + + // tc0 has bTc0_h33_Y + bTc0_h32_Y + bTc0_h31_Y + bTc0_h30_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_h30_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +//BYPASS_H3_Y: +//----------------------------------------------- diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_v.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_v.asm new file mode 100644 index 000000000..f8d789c1f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Mbaff_Y_v.asm @@ -0,0 +1,299 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter vertical Mbaff Y /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all vertical edges of Y. +// +// It sssumes the data for vertical de-blocking is already transposed. +// +// Luma: +// +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// +// V0 V1 V2 V3 +// Edge Edge Edge Edge +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBB:w +#endif + + +//========== Luma deblocking ========== + + +//---------- Deblock Y external left edge (V0) ---------- + + cmp.z.f0.0 (8) null:w VertEdgePattern:uw LEFT_FIELD_CUR_FRAME:w + cmp.z.f0.1 (8) null:w VertEdgePattern:uw LEFT_FRAME_CUR_FIELD:w + + // Intial set for both are frame or field + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Y]<1;4,0>:ub + + // For FieldModeCurrentMbFlag=1 && FieldModeLeftMbFlag=0 + (f0.0) mov (8) Mbaff_ALPHA(0,0)<2> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub { NoDDClr } + (f0.0) mov (8) Mbaff_ALPHA(0,1)<2> r[ECM_AddrReg, bAlphaLeft1_Y]<0;1,0>:ub { NoDDChk } + (f0.0) mov (8) Mbaff_BETA(0,0)<2> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub { NoDDClr } + (f0.0) mov (8) Mbaff_BETA(0,1)<2> r[ECM_AddrReg, bBetaLeft1_Y]<0;1,0>:ub { NoDDChk } + (f0.0) mov (8) Mbaff_TC0(0,0)<2> r[ECM_AddrReg, bTc0_v00_0_Y]<1;2,0>:ub { NoDDClr } + (f0.0) mov (8) Mbaff_TC0(0,1)<2> r[ECM_AddrReg, bTc0_v00_1_Y]<1;2,0>:ub { NoDDChk } + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterLeftMbEdgeFlag:w // Check for FilterLeftMbEdgeFlag + + // For FieldModeCurrentMbFlag=0 && FieldModeLeftMbFlag=1 + (f0.1) mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub { NoDDClr } + (f0.1) mov (8) Mbaff_ALPHA(0,8)<1> r[ECM_AddrReg, bAlphaLeft1_Y]<0;1,0>:ub { NoDDChk } + (f0.1) mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub { NoDDClr } + (f0.1) mov (8) Mbaff_BETA(0,8)<1> r[ECM_AddrReg, bBetaLeft1_Y]<0;1,0>:ub { NoDDChk } + (f0.1) mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Y]<1;2,0>:ub { NoDDClr } + (f0.1) mov (8) Mbaff_TC0(0,8)<1> r[ECM_AddrReg, bTc0_v00_1_Y]<1;2,0>:ub { NoDDChk } + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA(0) 2:w // alpha >> 2 + + // p3 = Prev MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Prev MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Prev MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Prev MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 0 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 1 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 2 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 3 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w PREV_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_Y_BASE:w { NoDDChk } + + // Set MaskA and MaskB + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]<2;2,1>:uw + + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +//BYPASS_V0_Y: +//------------------------------------------------------------------ + + +/* +//---------- Deblock Y external left edge (V0) ---------- + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterLeftMbEdgeFlag:w // Check for FilterLeftMbEdgeFlag + (f0.0) jmpi ILDB_LABEL(BYPASS_EXT_LEFT_EDGE_Y) + + // Get vertical border edge control data + +// mov (1) f0.0 0:w + and (1) CTemp1_W:uw r[ECM_AddrReg, BitFlags]:ub FieldModeLeftMbFlag+FieldModeCurrentMbFlag:uw + cmp.z.f0.0 (1) null:w CTemp1_W:uw LEFT_FIELD_CUR_FRAME:w + (-f0.0) jmpi LEFT_EDGE_Y_NEXT1 + + // For FieldModeCurrentMbFlag=1 && FieldModeLeftMbFlag=0 + mov (8) Mbaff_ALPHA(0,0)<2> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub { NoDDClr } + mov (8) Mbaff_ALPHA(0,1)<2> r[ECM_AddrReg, bAlphaLeft1_Y]<0;1,0>:ub { NoDDChk } + mov (8) Mbaff_BETA(0,0)<2> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub { NoDDClr } + mov (8) Mbaff_BETA(0,1)<2> r[ECM_AddrReg, bBetaLeft1_Y]<0;1,0>:ub { NoDDChk } + mov (8) Mbaff_TC0(0,0)<2> r[ECM_AddrReg, bTc0_v00_0_Y]<1;2,0>:ub { NoDDClr } + mov (8) Mbaff_TC0(0,1)<2> r[ECM_AddrReg, bTc0_v00_1_Y]<1;2,0>:ub { NoDDChk } + + jmpi LEFT_EDGE_Y_ALPHA_BETA_TC0_SELECTED + +LEFT_EDGE_Y_NEXT1: + cmp.z.f0.0 (1) null:w CTemp1_W:uw LEFT_FRAME_CUR_FIELD:w + (-f0.0) jmpi LEFT_EDGE_Y_NEXT2 + + + // For FieldModeCurrentMbFlag=0 && FieldModeLeftMbFlag=1 + mov (8) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub { NoDDClr } + mov (8) Mbaff_ALPHA(0,8)<1> r[ECM_AddrReg, bAlphaLeft1_Y]<0;1,0>:ub { NoDDChk } + mov (8) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub { NoDDClr } + mov (8) Mbaff_BETA(0,8)<1> r[ECM_AddrReg, bBetaLeft1_Y]<0;1,0>:ub { NoDDChk } + mov (8) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Y]<1;2,0>:ub { NoDDClr } + mov (8) Mbaff_TC0(0,8)<1> r[ECM_AddrReg, bTc0_v00_1_Y]<1;2,0>:ub { NoDDChk } + + jmpi LEFT_EDGE_Y_ALPHA_BETA_TC0_SELECTED + +LEFT_EDGE_Y_NEXT2: + // both are frame or field + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaLeft0_Y]<0;1,0>:ub + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v00_0_Y]<1;4,0>:ub + +LEFT_EDGE_Y_ALPHA_BETA_TC0_SELECTED: + + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]<2;2,1>:uw + + // p3 = Prev MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Prev MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Prev MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Prev MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 0 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 1 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 2 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 3 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w PREV_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_Y_BASE:w { NoDDChk } + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> r[ECM_AddrReg, bAlphaLeft0_Y]<0;1,0>:ub 2:w // alpha >> 2 + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + + CALL(FILTER_Y_MBAFF, 1) + +ILDB_LABEL(BYPASS_EXT_LEFT_EDGE_Y): +//------------------------------------------------------------------ +*/ + + // Same alpha, alpha2, beta and MaskB for all internal edges + + // Get (alpha >> 2) + 2 + shr (16) Mbaff_ALPHA2(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Y]<0;1,0>:ub 2:w // alpha >> 2 + + // alpha = bAlphaInternal_Y + // beta = bBetaInternal_Y + mov (16) Mbaff_ALPHA(0,0)<1> r[ECM_AddrReg, bAlphaInternal_Y]<0;1,0>:ub + mov (16) Mbaff_BETA(0,0)<1> r[ECM_AddrReg, bBetaInternal_Y]<0;1,0>:ub + + mov (1) MaskB:uw 0:w // Set MaskB = 0 for all 3 edges, so it always uses bS < 4 algorithm. + + add (16) Mbaff_ALPHA2(0,0)<1> Mbaff_ALPHA2(0,0)<16;16,1> 2:w // alpha2 = (alpha >> 2) + 2 + +//---------- Deblock Y internal left edge (V1) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_V1_Y + + // p3 = Cur MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 4 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 5 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 6 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 7 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]:uw + + // tc0 has bTc0_v31_Y + bTc0_v21_Y + bTc0_v11_Y + bTc0_v01_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v01_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +BYPASS_V1_Y: +//------------------------------------------------------------------ + + +//---------- Deblock Y internal mid vert edge (V2) ---------- + + // Bypass deblocking if FilterInternal8x8EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal8x8EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_V2_Y + + // p3 = Cur MB Y row 4 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 5 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 6 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 7 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 8 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 9 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 10 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 11 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidVert]:uw + + // tc0 has bTc0_v32_Y + bTc0_v22_Y + bTc0_v12_Y + bTc0_v02_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v02_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +BYPASS_V2_Y: +//----------------------------------------------- + + +//---------- Deblock Y interal right edge (V3) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_V3_Y + + // p3 = Cur MB Y row 8 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 9 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 10 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 11 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 12 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 13 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 14 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 15 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 12*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntRightVert]:uw + + // tc0 has bTc0_v33_Y + bTc0_v23_Y + bTc0_v13_Y + bTc0_v03_Y + mov (16) Mbaff_TC0(0,0)<1> r[ECM_AddrReg, bTc0_v03_Y]<1;4,0>:ub + +// CALL(FILTER_Y_MBAFF, 1) + PRED_CALL(-f0.0, FILTER_Y_MBAFF, 1) + +BYPASS_V3_Y: +//----------------------------------------------- diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_h.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_h.asm new file mode 100644 index 000000000..fe51f72ac --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_h.asm @@ -0,0 +1,175 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter horizontal UV /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all horizontal edges of UV. +// +// It sssumes the data for horizontal de-blocking is already transposed. +// +// Chroma: +// +// +-------+-------+ H0 Edge +// | | | +// | | | +// | | | +// +-------+-------+ H1 Edge +// | | | +// | | | +// | | | +// +-------+-------+ +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBC:w +#endif + +//=============== Chroma deblocking ================ + +//---------- Deblock U external top edge ---------- + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterTopMbEdgeFlag:w // Check for FilterTopMbEdgeFlag +// (f0.0) jmpi BYPASS_EXT_TOP_EDGE_UV + + // Get horizontal border edge control data. + + //***** Need to take every other bit to form U maskA and mask B + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<0;1,0>:uw RRampW(0) + shr (16) TempRow1(0)<1> r[ECM_AddrReg, wEdgeCntlMapB_ExtTopHorz0]<0;1,0>:uw RRampW(0) + + (f0.0) jmpi ILDB_LABEL(BYPASS_EXT_TOP_EDGE_UV) + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + +//---------- Deblock U external edge ---------- + // p1 = Prev MB U row 0 + // p0 = Prev MB U row 1 + // q0 = Cur MB U row 0 + // q1 = Cur MB U row 1 +// mov (1) P_AddrReg:w PREV_MB_U_BASE:w { NoDDClr } + mov (1) P_AddrReg:w TOP_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_U_BASE:w { NoDDChk } + + // alpha = bAlphaTop0_Cb, beta = bBetaTop0_Cb + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaTop0_Cb]<2;2,1>:ub { NoDDClr } + // tc0 has bTc0_h03_0_Cb + bTc0_h02_0_Cb + bTc0_h01_0_Cb + bTc0_h00_0_Cb + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h00_0_Cb]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV, 1) + +//---------- Deblock V external top edge ---------- + // p1 = Prev MB V row 0 + // p0 = Prev MB V row 1 + // q0 = Cur MB V row 0 + // q1 = Cur MB V row 1 +// mov (1) P_AddrReg:w PREV_MB_V_BASE:w { NoDDClr } + mov (1) P_AddrReg:w TOP_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_V_BASE:w { NoDDChk } + + // alpha = bAlphaTop0_Cr, beta = bBetaTop0_Cr + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaTop0_Cr]<2;2,1>:ub { NoDDClr } + + // tc0 has bTc0_h03_0_Cr + bTc0_h02_0_Cr + bTc0_h01_0_Cr + bTc0_h00_0_Cr + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h00_0_Cr]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV, 1) + +ILDB_LABEL(BYPASS_EXT_TOP_EDGE_UV): + + // Set EdgeCntlMap2 = 0, so it always uses bS < 4 algorithm. + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 +// and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag +// (f0.0) jmpi BYPASS_4x4_DEBLOCK_H + +//---------- Deblock U internal horz middle edge ---------- + + //***** Need to take every other bit to form U maskA + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMap_IntMidHorz]<0;1,0>:uw RRampW(0) + + // p1 = Cur MB U row 2 + // p0 = Cur MB U row 3 + // q0 = Cur MB U row 4 + // q1 = Cur MB U row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDClr } // Skip 2 U rows and 2 V rows + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDChk } + + // alpha = bAlphaInternal_Cb, beta = bBetaInternal_Cb + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Cb]<2;2,1>:ub { NoDDClr } + // tc0 has bTc0_h23_Cb + bTc0_h22_Cb + bTc0_h21_Cb + bTc0_h20_Cb + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h20_Cb]<4;4,1>:ub { NoDDChk } + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + + // UV MaskA and MaskB + mov (1) f0.1:uw 0:w + mov (1) MaskB:uw 0:w { NoDDClr } + mov (1) MaskA:uw f0.0:uw { NoDDChk } + + CALL(FILTER_UV, 1) + +//---------- Deblock V internal horz middle edge ---------- + // p1 = Cur MB V row 2 + // p0 = Cur MB V row 3 + // q0 = Cur MB V row 4 + // q1 = Cur MB V row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDClr } // Skip 2 U rows and 2 V rows + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDChk } + + // alpha = bAlphaInternal_Cr, beta = bBetaInternal_Cr + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Cr]<2;2,1>:ub { NoDDClr } + // tc0 has bTc0_h23_Cr + bTc0_h22_Cr + bTc0_h21_Cr + bTc0_h20_Cr + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h20_Cr]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV, 1) + +//BYPASS_4x4_DEBLOCK_H: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_v.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_v.asm new file mode 100644 index 000000000..6da28bf60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_UV_v.asm @@ -0,0 +1,175 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC LDB filter vertical UV /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all vertical edges of UV. +// +// It sssumes the data for vertical de-blocking is already transposed. +// +// Chroma: +// +// +-------+-------+ +// | | | +// | | | +// | | | +// +-------+-------+ +// | | | +// | | | +// | | | +// +-------+-------+ +// +// V0 V1 +// Edge Edge +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBC:w +#endif + +//=============== Chroma deblocking ================ + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterLeftMbEdgeFlag:w // Check for FilterLeftMbEdgeFlag +// (f0.0) jmpi BYPASS_EXT_LEFT_EDGE_UV + + // Get vertical border edge control data. + + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]<0;1,0>:uw RRampW(0) + shr (16) TempRow1(0)<1> r[ECM_AddrReg, wEdgeCntlMapB_ExtLeftVert0]<0;1,0>:uw RRampW(0) + + (f0.0) jmpi ILDB_LABEL(BYPASS_EXT_LEFT_EDGE_UV) + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + and.nz.f0.1 (8) null:w TempRow1(0)<16;8,2> 1:w + +//---------- Deblock U external edge ---------- + // p1 = Prev MB U row 0 + // p0 = Prev MB U row 1 + // q0 = Cur MB U row 0 + // q1 = Cur MB U row 1 + mov (1) P_AddrReg:w PREV_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_U_BASE:w { NoDDChk } + + // alpha = bAlphaLeft0_Cb, beta = bBetaLeft0_Cb + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaLeft0_Cb]<2;2,1>:ub { NoDDClr } + // tc0 has bTc0_v30_0_Cb + bTc0_v20_0_Cb + bTc0_v10_0_Cb + bTc0_v00_0_Cb + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v00_0_Cb]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) MaskA<1>:uw f0.0<2;2,1>:uw + + CALL(FILTER_UV, 1) + +//---------- Deblock V external edge ---------- + // p1 = Prev MB V row 0 + // p0 = Prev MB V row 1 + // q0 = Cur MB V row 0 + // q1 = Cur MB V row 1 + mov (1) P_AddrReg:w PREV_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_V_BASE:w { NoDDChk } + + // for vert edge: alpha = bAlphaLeft0_Cr, beta = bBetaLeft0_Cr + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaLeft0_Cr]<2;2,1>:ub { NoDDClr } + + // tc0 has bTc0_v30_0_Cr + bTc0_v20_0_Cr + bTc0_v10_0_Cr + bTc0_v00_0_Cr + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v00_0_Cr]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV, 1) + + +ILDB_LABEL(BYPASS_EXT_LEFT_EDGE_UV): + // Set EdgeCntlMap2 = 0, so it always uses bS < 4 algorithm. + // Same alpha and beta for all internal vert and horiz edges + + + //***** Need to take every other bit to form U or V maskA + // Get Luma maskA and maskB + shr (16) TempRow0(0)<1> r[ECM_AddrReg, wEdgeCntlMap_IntMidVert]<0;1,0>:uw RRampW(0) + +//---------- Deblock U internal edge ---------- + // p1 = Cur MB U row 2 + // p0 = Cur MB U row 3 + // q0 = Cur MB U row 4 + // q1 = Cur MB U row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_U_BASE:w { NoDDChk } + + // alpha = bAlphaInternal_Cb, beta = bBetaInternal_Cb + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Cb]<2;2,1>:ub { NoDDClr } + + // tc0 has bTc0_v32_Cb + bTc0_v22_Cb + bTc0_v12_Cb + bTc0_v02_Cb + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v02_Cb]<4;4,1>:ub { NoDDChk } + + // Extract UV MaskA and MaskB from every other bit of Y masks + and.nz.f0.0 (8) null:w TempRow0(0)<16;8,2> 1:w + + // UV MaskA and MaskB + mov (1) f0.1:uw 0:w + mov (1) MaskB:uw 0:w { NoDDClr } + mov (1) MaskA:uw f0.0:uw { NoDDChk } + + CALL(FILTER_UV, 1) + + +//---------- Deblock V internal edge ---------- + // P1 = Cur MB V row 2 + // P0 = Cur MB V row 3 + // Q0 = Cur MB V row 4 + // Q1 = Cur MB V row 5 + mov (1) P_AddrReg:w 4*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*UV_ROW_WIDTH+SRC_MB_V_BASE:w { NoDDChk } + + // alpha = bAlphaInternal_Cr, beta = bBetaInternal_Cr + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Cr]<2;2,1>:ub { NoDDClr } + + // tc0 has bTc0_v32_Cr + bTc0_v22_Cr + bTc0_v12_Cr + bTc0_v02_Cr + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v02_Cr]<4;4,1>:ub { NoDDChk } + + // UV MaskA and MaskB + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + CALL(FILTER_UV, 1) + + +//BYPASS_4x4_DEBLOCK_V: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_h.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_h.asm new file mode 100644 index 000000000..45a06326f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_h.asm @@ -0,0 +1,229 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter horizontal Y /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all horizontal edges of Y. +// +// It sssumes the data for horizontal de-blocking is already transposed. +// +// Luma: +// +// +-------+-------+-------+-------+ H0 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H1 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H2 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ H3 Edge +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBB:w +#endif + + +//========== Luma deblocking ========== + + +//---------- Deblock Y external top edge (H0) ---------- + + // Bypass deblocking if it is the top edge of the picture. + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterTopMbEdgeFlag:w // Check for FilterTopMbEdgeFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]:uw 0xFFFF:uw // MaskA = 0? + + // Get (alpha >> 2) + 2 + shr (1) alpha2:w r[ECM_AddrReg, bAlphaTop0_Y]:ub 2:w // alpha >> 2 + + // p3 = Prev MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Prev MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Prev MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Prev MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 0 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 1 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 2 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 3 = r[Q_AddrReg, 48]<16;16,1> +// mov (1) P_AddrReg:w PREV_MB_Y_BASE:w { NoDDClr } + mov (1) P_AddrReg:w TOP_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_Y_BASE:w { NoDDChk } + + // Get horizontal border edge control data + // alpha = bAlphaTop0_Y + // beta = bBetaTop0_Y + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaTop0_Y]<2;2,1>:ub { NoDDClr } // 2 channels for alpha and beta + + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtTopHorz0]<2;2,1>:uw { NoDDClr, NoDDChk } + + // tc0 has bTc0_h03_0_Y | bTc0_h02_0_Y | bTc0_h01_0_Y | bTc0_h00_0_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h00_0_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_EXT_TOP_EDGE_Y +// (f0.0.anyv) jmpi BYPASS_EXT_TOP_EDGE_Y + + add (1) alpha2:w alpha2:w 2:w // alpha2 = (alpha >> 2) + 2 + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_EXT_TOP_EDGE_Y: +//------------------------------------------------------------------ + // Same alpha, alpha2, beta and MaskB for all internal edges + + // Get (alpha >> 2) + 2 + shr (1) alpha2:w r[ECM_AddrReg, bAlphaInternal_Y]:ub 2:w // alpha >> 2 + + // alpha = bAlphaInternal_Y + // beta = bBetaInternal_Y + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Y]<2;2,1>:ub { NoDDClr } + + // Set MaskB = 0 for all 3 int edges, so it always uses bS < 4 algorithm. + mov (1) MaskB:uw 0:w { NoDDChk } + + add (1) alpha2:w alpha2:w 2:w // alpha2 = (alpha >> 2) + 2 + + +//---------- Deblock Y internal top edge (H1) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + + // p3 = Cur MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 4 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 5 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 6 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 7 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntTopHorz]:uw { NoDDClr } + + // tc0 has bTc0_h13_Y + bTc0_h12_Y + bTc0_h11_Y + bTc0_h10_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h10_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_4x4_DEBLOCK_H +// (f0.0.anyv) jmpi BYPASS_4x4_DEBLOCK_H + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_4x4_DEBLOCK_H: +//------------------------------------------------------------------ + + +//---------- Deblock Y internal mid horizontal edge (H2) ---------- + + // Bypass deblocking if FilterInternal8x8EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal8x8EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidHorz]:uw 0xFFFF:uw // MaskA = 0? + + // p3 = Cur MB Y row 4 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 5 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 6 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 7 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 8 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 9 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 10 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 11 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidHorz]:uw { NoDDClr } +// mov (1) MaskB:uw 0:w // Set MaskB = 0, so it always uses bS < 4 algorithm. + + // tc0 has bTc0_h23_Y + bTc0_h22_Y + bTc0_h21_Y + bTc0_h20_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h20_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_8x8_DEBLOCK_H +// (f0.0.anyv) jmpi BYPASS_8x8_DEBLOCK_H + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_8x8_DEBLOCK_H: +//----------------------------------------------- + + +//---------- Deblock Y internal bottom edge (H3) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMap_IntBotHorz]:uw 0xFFFF:uw // MaskA = 0? + + // p3 = Cur MB Y row 8 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 9 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 10 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 11 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 12 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 13 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 14 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 15 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 12*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntBotHorz]:uw { NoDDClr } +// mov (1) MaskB:uw 0:w // Set MaskB = 0, so it always uses bS < 4 algorithm. + + // tc0 has bTc0_h33_Y + bTc0_h32_Y + bTc0_h31_Y + bTc0_h30_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_h30_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_4x4_DEBLOCK_H2 +// (f0.0.anyv) jmpi BYPASS_4x4_DEBLOCK_H2 + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_4x4_DEBLOCK_H2: +//----------------------------------------------- diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_v.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_v.asm new file mode 100644 index 000000000..c6d0a1206 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Filter_Y_v.asm @@ -0,0 +1,233 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////// AVC ILDB filter vertical Y /////////////////////////////////////////////////////// +// +// This filter code prepares the src data and control data for ILDB filtering on all vertical edges of Y. +// +// It sssumes the data for vertical de-blocking is already transposed. +// +// Luma: +// +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// | | | | | +// | | | | | +// | | | | | +// +-------+-------+-------+-------+ +// +// V0 V1 V2 V3 +// Edge Edge Edge Edge +// +///////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xBBBB:w +#endif + + +//========== Luma deblocking ========== + + +//---------- Deblock Y external left edge (V0) ---------- + + // Bypass deblocking if it is left edge of the picture. + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterLeftMbEdgeFlag:w // Check for FilterLeftMbEdgeFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]:uw 0xFFFF:uw // MaskA = 0? + + // Get (alpha >> 2) + 2 + shr (1) alpha2:w r[ECM_AddrReg, bAlphaLeft0_Y]:ub 2:w // alpha >> 2 + + // p3 = Prev MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Prev MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Prev MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Prev MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 0 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 1 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 2 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 3 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w PREV_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w SRC_MB_Y_BASE:w { NoDDChk } + + // Get vertical border edge control data + // alpha = bAlphaLeft0_Y + // beta = bBetaLeft0_Y + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaLeft0_Y]<2;2,1>:ub { NoDDClr } // 2 channels for alpha and beta + + mov (2) MaskA<1>:uw r[ECM_AddrReg, wEdgeCntlMapA_ExtLeftVert0]<2;2,1>:uw { NoDDClr, NoDDChk } + + // tc0 has bTc0_v30_0_Y | bTc0_v20_0_Y | bTc0_v10_0_Y | bTc0_v00_0_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v00_0_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_EXT_LEFT_EDGE_Y +// (f0.0.anyv) jmpi BYPASS_EXT_LEFT_EDGE_Y + + add (1) alpha2:w alpha2:w 2:w // alpha2 = (alpha >> 2) + 2 + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + + +//BYPASS_EXT_LEFT_EDGE_Y: +//------------------------------------------------------------------ + // Same alpha, alpha2, beta and MaskB for all internal edges + + // Get (alpha >> 2) + 2 + shr (1) alpha2:w r[ECM_AddrReg, bAlphaInternal_Y]:ub 2:w // alpha >> 2 + + // alpha = bAlphaInternal_Y + // beta = bBetaInternal_Y + mov (2) alpha<1>:w r[ECM_AddrReg, bAlphaInternal_Y]<2;2,1>:ub { NoDDClr } + + // Set MaskB = 0 for all 3 int edges, so it always uses bS < 4 algorithm. + mov (1) MaskB:uw 0:w { NoDDChk } + + add (1) alpha2:w alpha2:w 2:w // alpha2 = (alpha >> 2) + 2 + + +//---------- Deblock Y internal left edge (V1) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]:uw 0xFFFF:uw // MaskA = 0? + + // p3 = Cur MB Y row 0 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 1 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 2 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 3 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 4 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 5 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 6 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 7 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntLeftVert]:uw { NoDDClr } + + // tc0 has bTc0_v31_Y + bTc0_v21_Y + bTc0_v11_Y + bTc0_v01_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v01_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_4x4_DEBLOCK_V +// (f0.0.anyv) jmpi BYPASS_4x4_DEBLOCK_V + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_4x4_DEBLOCK_V: +//------------------------------------------------------------------ + + +//---------- Deblock Y internal mid vert edge (V2) ---------- + + // Bypass deblocking if FilterInternal8x8EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal8x8EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidVert]:uw 0xFFFF:uw // MaskA = 0? + + // p3 = Cur MB Y row 4 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 5 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 6 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 7 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 8 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 9 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 10 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 11 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 4*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntMidVert]:uw { NoDDClr } +// mov (1) MaskB:uw 0:w // Set MaskB = 0, so it always uses bS < 4 algorithm. + + // tc0 has bTc0_v32_Y + bTc0_v22_Y + bTc0_v12_Y + bTc0_v02_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v02_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_8x8_DEBLOCK_V +// (f0.0.anyv) jmpi BYPASS_8x8_DEBLOCK_V + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_8x8_DEBLOCK_V: +//----------------------------------------------- + + +//---------- Deblock Y interal right edge (V3) ---------- + + // Bypass deblocking if FilterInternal4x4EdgesFlag = 0 + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FilterInternal4x4EdgesFlag:w // Check for FilterInternal4x4EdgesFlag + +// and.z.f0.1 (1) null:uw r[ECM_AddrReg, wEdgeCntlMap_IntRightVert]:uw 0xFFFF:uw // MaskA = 0? + + // p3 = Cur MB Y row 8 = r[P_AddrReg, 0]<16;16,1> + // p2 = Cur MB Y row 9 = r[P_AddrReg, 16]<16;16,1> + // p1 = Cur MB Y row 10 = r[P_AddrReg, 32]<16;16,1> + // p0 = Cur MB Y row 11 = r[P_AddrReg, 48]<16;16,1> + // q0 = Cur MB Y row 12 = r[Q_AddrReg, 0]<16;16,1> + // q1 = Cur MB Y row 13 = r[Q_AddrReg, 16]<16;16,1> + // q2 = Cur MB Y row 14 = r[Q_AddrReg, 32]<16;16,1> + // q3 = Cur MB Y row 15 = r[Q_AddrReg, 48]<16;16,1> + mov (1) P_AddrReg:w 8*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDClr } + mov (1) Q_AddrReg:w 12*Y_ROW_WIDTH+SRC_MB_Y_BASE:w { NoDDChk } + + mov (1) MaskA:uw r[ECM_AddrReg, wEdgeCntlMap_IntRightVert]:uw { NoDDClr } +// mov (1) MaskB:uw 0:w // Set MaskB = 0, so it always uses bS < 4 algorithm. + + // tc0 has bTc0_v33_Y + bTc0_v23_Y + bTc0_v13_Y + bTc0_v03_Y + mov (4) tc0<1>:ub r[ECM_AddrReg, bTc0_v03_Y]<4;4,1>:ub { NoDDChk } + +// (f0.0) jmpi BYPASS_4x4_DEBLOCK_V2 +// (f0.0.anyv) jmpi BYPASS_4x4_DEBLOCK_V2 + +// CALL(FILTER_Y, 1) + PRED_CALL(-f0.0, FILTER_Y, 1) + +//BYPASS_4x4_DEBLOCK_V2: +//----------------------------------------------- diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_ForwardMsg.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_ForwardMsg.asm new file mode 100644 index 000000000..326ba2803 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_ForwardMsg.asm @@ -0,0 +1,87 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//========== Forward message to root thread through gateway ========== +// Each child thread write a byte into the root GRF r50 defiend in open Gataway. + +#if defined(_DEBUG) +mov (1) EntrySignatureC:w 0x7777:w +#endif + +// Init payload to r0 +mov (8) GatewayPayload<1>:ud 0:w //{ NoDDClr } + +// Forward a message: +// Offset = x relative to r50 (defiend in open gataway), x = ORIX >> 4 [bit 28:16] +// Need to shift left 16 + +// shift 2 more bits for byte to word offset + +//shl (1) Offset_Length:ud GateWayOffsetC:w 16:w { NoDDClr, NoDDChk } +shl (1) Offset_Length:ud GateWayOffsetC:w 18:w + +// 2 bytes offset +add (1) Offset_Length:ud Offset_Length:ud 0x00020000:d { NoDDClr } + +// Length = 1 byte, [bit 10:8 = 000] +//000 xxxxxxxxxxxxx 00000 000 00000000 ==> 000x xxxx xxxx xxxx 0000 0000 0000 0000 + +//mov (1) DispatchID:ub r0.20:ub // Dispatch ID + +//Move in EUid and Thread ID that we received from the PARENT thread +mov (1) EUID_TID:uw r0.6:uw { NoDDClr, NoDDChk } + +mov (1) GatewayPayloadKey:uw 0x1212:uw { NoDDClr, NoDDChk } // Key + +//mov (4) GatewayPayload<1>:ud 0:ud { NoDDClr, NoDDChk } // Init payload low 4 dword + +// Write back one byte (value = 0xFF) to root thread GRF to indicate this child thread is finished +// All lower 4 bytes must be assigned to the same byte value. +mov (4) GatewayPayload<1>:ub 0xFFFF:uw { NoDDChk } + +// msg descriptor bit 15 set to '1' for notification +#ifdef GW_DCN +// For ILK, EOT bit should also be set to terminate the thread. This is to fix a timing related HW issue. +// +send (8) null:ud m0 GatewayPayload<8;8,1>:ud MSG_GW_EOT FWDMSGDSC+NOTIFYMSG +#else +send (8) null:ud m0 GatewayPayload<8;8,1>:ud MSG_GW FWDMSGDSC+NOTIFYMSG +#endif // GW_DCN + +//========== Forward Msg Done ======================================== + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_LumaThrdLimit.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_LumaThrdLimit.asm new file mode 100644 index 000000000..3fe8d4598 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_LumaThrdLimit.asm @@ -0,0 +1,76 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//========== Forward message to root thread through gateway ========== + +// Chroma root kenrel updates luma thread limit. + +#if defined(_DEBUG) +mov (1) EntrySignatureC:w 0x7788:w +#endif + +// Init payload to r0 +mov (8) GatewayPayload<1>:ud 0:w { NoDDClr } + +// Forward a message: +// Offset = x relative to r50 (defiend in open gataway), x = ORIX >> 4 [bit 28:16] +// Need to shift left 16 + +mov (1) Offset_Length:ud THREAD_LIMIT_OFFSET:ud { NoDDClr, NoDDChk } + +// Length = 1 byte, [bit 10:8 = 000] +//000 xxxxxxxxxxxxx 00000 000 00000000 ==> 000x xxxx xxxx xxxx 0000 0000 0000 0000 + +//mov (1) DispatchID:ub r0.20:ub // Dispatch ID + +// Copy EUid and Thread ID that we received from the PARENT thread +mov (1) EUID_TID:uw r0.6:uw { NoDDClr, NoDDChk } + +mov (1) GatewayPayloadKey:uw 0x1212:uw { NoDDChk } // Key + +//mov (4) GatewayPayload<1>:ud 0:ud { NoDDClr, NoDDChk } // Init payload low 4 dword + +// Write back one byte (value = 0xFF) to root thread GRF to indicate this child thread is finished +// All lower 4 bytes must be assigned to the same byte value. +add (1) Temp1_W:w MaxThreads:uw -OutstandingThreads:uw +mov (4) GatewayPayload<1>:ub Temp1_B<0;1,0>:ub + +send (8) GatewayResponse:ud m0 GatewayPayload<8;8,1>:ud MSG_GW FWDMSGDSC + +//========== Forward Msg Done ======================================== + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core.asm new file mode 100644 index 000000000..844357e6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core.asm @@ -0,0 +1,449 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__AVC_ILDB_LUMA_CORE__) // Make sure this file is only included once +#define __AVC_ILDB_LUMA_CORE__ + +////////// AVC ILDB Luma Core ///////////////////////////////////////////////////////////////////////////////// +// +// This core performs AVC LUMA ILDB filtering on one horizontal edge (16 pixels) of a MB. +// If data is transposed, it can also de-block a vertical edge. +// +// Bafore calling this subroutine, caller needs to set the following parameters. +// +// - EdgeCntlMap1 // Edge control map A +// - EdgeCntlMap2 // Edge control map B +// - P_AddrReg // Src and dest address register for P pixels +// - Q_AddrReg // Src and dest address register for Q pixels +// - alpha // alpha corresponding to the edge to be filtered +// - beta // beta corresponding to the edge to be filtered +// - tc0 // tc0 corresponding to the edge to be filtered +// +// +// +----+----+----+----+----+----+----+----+ +// | p3 | p2 | P1 | p0 | q0 | q1 | q2 | q3 | +// +----+----+----+----+----+----+----+----+ +// +// p3 = r[P_AddrReg, 0]<16;16,1> +// p2 = r[P_AddrReg, 16]<16;16,1> +// p1 = r[P_AddrReg, 32]<16;16,1> +// p0 = r[P_AddrReg, 48]<16;16,1> +// q0 = r[Q_AddrReg, 0]<16;16,1> +// q1 = r[Q_AddrReg, 16]<16;16,1> +// q2 = r[Q_AddrReg, 32]<16;16,1> +// q3 = r[Q_AddrReg, 48]<16;16,1> +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The region is both src and dest +// P0-P3 and Q0-Q3 should be only used if they have not been modified to new values +#undef P3 +#undef P2 +#undef P1 +#undef P0 +#undef Q0 +#undef Q1 +#undef Q2 +#undef Q3 + +#define P3 r[P_AddrReg, 0]<16;16,1>:ub +#define P2 r[P_AddrReg, 16]<16;16,1>:ub +#define P1 r[P_AddrReg, 32]<16;16,1>:ub +#define P0 r[P_AddrReg, 48]<16;16,1>:ub +#define Q0 r[Q_AddrReg, 0]<16;16,1>:ub +#define Q1 r[Q_AddrReg, 16]<16;16,1>:ub +#define Q2 r[Q_AddrReg, 32]<16;16,1>:ub +#define Q3 r[Q_AddrReg, 48]<16;16,1>:ub + +// New region as dest +#undef NewP2 +#undef NewP1 +#undef NewP0 +#undef NewQ0 +#undef NewQ1 +#undef NewQ2 + +#define NewP2 r[P_AddrReg, 16]<1>:ub +#define NewP1 r[P_AddrReg, 32]<1>:ub +#define NewP0 r[P_AddrReg, 48]<1>:ub +#define NewQ0 r[Q_AddrReg, 0]<1>:ub +#define NewQ1 r[Q_AddrReg, 16]<1>:ub +#define NewQ2 r[Q_AddrReg, 32]<1>:ub + +// Filter one luma edge +FILTER_Y: + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x1111:w +#endif + //---------- Derive filterSampleflag in AVC spec, equition (8-469) ---------- + // bS is in MaskA + + // Src copy of the p3, p2, p1, p0, q0, q1, q2, q3 +// mov (16) p0123_W(0)<1> r[P_AddrReg]<16;16,1>:uw +// mov (16) p0123_W(1)<1> r[P_AddrReg, 32]<16;16,1>:uw +// mov (16) q0123_W(0)<1> r[Q_AddrReg]<16;16,1>:uw +// mov (16) q0123_W(1)<1> r[Q_AddrReg, 32]<16;16,1>:uw + + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + add (16) q0_p0(0)<1> Q0 -P0 // q0-p0 + add (16) TempRow0(0)<1> P1 -P0 // p1-p0 + add (16) TempRow1(0)<1> Q1 -Q0 // q1-q0 + + // Build FilterSampleFlag + // abs(q0-p0) < alpha + (f0.0) cmp.l.f0.0 (16) null:w (abs)q0_p0(0) alpha:w + // abs(p1-p0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow0(0) beta:w + // abs(q1-q0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow1(0) beta:w + + //----------------------------------------------------------------------------------------- + + (f0.0) if (16) Y_ENDIF1 + // For channels whose edge control map1 = 1 ---> perform de-blocking + +// mov (1) f0.1:uw MaskB:uw {NoMask} // Now check for which algorithm to apply + + // (abs)ap = |p2-p0| + add (16) ap(0)<1> P2 -P0 // ap = p2-p0 + // (abs)aq = |q2-q0| + add (16) aq(0)<1> Q2 -Q0 // aq = q2-q0 + + // Make a copy of unmodified p0 and p1 for use in q0'and q1' calculation + mov (16) p0123_W(1)<1> r[P_AddrReg, 32]<16;16,1>:uw {NoMask} + + (f0.1) if (16) Y_ELSE2 + + // For channels whose edge control map2 = 1 ---> bS = 4 algorithm + + // Compute q0', q1' and q2' + //----------------------------------------------------------------------------- + // bS = 4 Algorithm : + // + // gama = |p0-q0| < ((alpha >> 2) + 2) + // deltap = (ap> 3; + // p1' = ( p2 + p1 + p0 + q0 + 2) >> 2; + // p2' = (2*p3 +3*p2 + p1 + p0 + q0 + 4) >> 3; + // } else { + // p0' = ( 2*p1 + p0 + q1 + 2) >> 2; + // } + //----------------------------------------------------------------------------- + + // gama = |p0-q0| < ((alpha >> 2) + 2) = |p0-q0| < alpha2 + cmp.l.f0.1 (16) null:w (abs)q0_p0(0) alpha2:w + + // Common P01 = p0 + p1 + add (16) P0_plus_P1(0)<1> P0 P1 + + // Common Q01 = q0 + q1 + add (16) Q0_plus_Q1(0)<1> Q0 Q1 + +// mov (1) CTemp1_W:w f0.1:uw {NoMask} + mov (1) f0.0:uw f0.1:uw {NoMask} + + // deltap = ((abs)ap < beta) && gama + (f0.1) cmp.l.f0.1 (16) null:w (abs)ap(0) beta<0;1,0>:w // (abs)ap < beta ? + + // deltaq = ((abs)aq < beta) && gama + (f0.0) cmp.l.f0.0 (16) null:w (abs)aq(0) beta<0;1,0>:w // (abs)aq < beta ? + + +// mov (1) CTemp1_W:w f0.0:uw {NoMask} // gama = |p0-q0| < ((alpha >> 2) + 2) for each channel +// and (1) f0.1:w f0.1:uw CTemp1_W:w {NoMask} // deltap = (ap P2 P3 + + // A = (p1 + p0) + q0 = P01 + q0 + add (16) A(0)<1> P0_plus_P1(0) Q0 // A = P01 + q0 + + // Now acc0 = A + + // B = p2 + (p1 + p0 + q0) + 4 = p2 + A + 4 +// add (16) acc0.0<1>:w P2 4:w // p2 + 4 +// add (16) BB(0)<1> acc0.0<16;16,1>:w A(0) // B = p2 + A + 4 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 4:w // p2 + 4 + add (16) BB(0)<1> acc0.0<16;16,1>:w P2 // B = p2 + A + 4 + + // Now acc0 = B + + // p2' = (2*p3 +3*p2 + A + 4) >> 3 = (2*(p3+p2) + B) >> 3 +// mov (16) acc0.0<1>:w BB(0) + mac (16) acc0.0<1>:w P2_plus_P3(0) 2:w + shr.sat (16) TempRow3B(0)<2> acc0.0<16;16,1>:w 3:w + + // p1' = (p2 + A + 2) >> 2 = (B - 2) >> 2 + add (16) acc0.0<1>:w BB(0) -2:w + shr.sat (16) TempRow1B(0)<2> acc0.0<16;16,1>:w 2:w + + // p0' = (p2 +2*A + q1 + 4) >> 3 = (B + A + q1) >> 3 + add (16) acc0.0<1>:w Q1 A(0) // B + A + add (16) acc0.0<1>:w acc0.0<16;16,1>:w BB(0) // B + A + q1 + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 3:w // (B + A + q1) >> 3 + + // p2' = (2*p3 +3*p2 + A + 4) >> 3 = (2*(p3+p2) + B) >> 3 +// mov (16) acc0.0<1>:w BB(0) +// mac (16) acc0.0<1>:w P2_plus_P3(0) 2:w +// shr.sat (16) TempRow3B(0)<2> acc0.0<16;16,1>:w 3:w + + mov (16) NewP2 TempRow3B(0) // p2' + mov (16) NewP1 TempRow1B(0) // p1' + mov (16) NewP0 TempRow0B(0) // p0' + +Y_ELSE3: + else (16) Y_ENDIF3 // for channels its deltap = false + + // p0' = (2*p1 + p0 + q1 + 2) >> 2 = (p1 + P01 + q1 + 2) >> 2 + add (16) acc0.0<1>:w P1 P0_plus_P1(0) // p1 + P01 (TempRow1(0) = P01) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w Q1 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 2:w // p1 + P01 + q1 + 2 + + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 2:w // >> 2 + mov (16) NewP0 TempRow0B(0) // p0' + + endif +Y_ENDIF3: + // Compute q0', q1' and q2' + //----------------------------------------------------------------------------- + // bS = 4 Algorithm (cont): + // + // deltaq = (aq> 3; + // q1' = ( q2 + q1 + q0 + p0 + 2) >> 2; + // q2' = (2*q3 +3*q2 + q1 + q0 + p0 + 4) >> 3; + // } else { + // q0' = ( 2*q1 + q0 + p1 + 2) >> 2; + // } + + // deltaq = ((abs)aq < beta) && gama +// cmp.l.f0.1 (16) null:w (abs)aq(0) beta<0;1,0>:w // (abs)aq < beta ? + + // Common Q01 = q0 + q1 +// add (16) Q0_plus_Q1(0)<1> Q0 Q1 + +// and (1) f0.1:w f0.1:uw CTemp1_W:w {NoMask} // deltaq = ((abs)ap < beta) && gama + + (f0.0) if (16) Y_ELSE4 // for channels its deltaq = true + + add (16) Q2_plus_Q3(0)<1> Q2 Q3 + + // A = (q1 + q0) + p0 = Q01 + p0 + add (16) A(0)<1> Q0_plus_Q1(0) p0(0) // A = q1+q0 + p0 + + // Acc0 = A + + // B = q2 + q1 + q0 + p0 + 4 = q2 + A + 4 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 4:w // q2 + 4 + add (16) BB(0)<1> acc0.0<16;16,1>:w Q2 // B = q2 + A + 4 + + // Acc0 = B + + // q2' = (2*q3 +3*q2 + A + 4) >> 3 = (2*(q3+q2) + B) >> 3 +// mov (16) acc0.0<1>:w BB(0) + mac (16) acc0.0<1>:w Q2_plus_Q3(0) 2:w + shr.sat (16) TempRow3B(0)<2> acc0.0<16;16,1>:w 3:w + + // q1' = (q2 + A + 2) >> 2 = (B - 2) >> 2 + add (16) acc0.0<1>:w BB(0) -2:w + shr.sat (16) TempRow1B(0)<2> acc0.0<16;16,1>:w 2:w + + // q0' = (q2 +2*A + p1 + 4) >> 3 = (B + A + p1) >> 3 + add (16) acc0.0<1>:w p1(0) A(0) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w BB(0) + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 3:w + + mov (16) NewQ2 TempRow3B(0) // q2' + mov (16) NewQ1 TempRow1B(0) // q1' + mov (16) NewQ0 TempRow0B(0) // q0' + +Y_ELSE4: + else (16) Y_ENDIF4 // for channels its deltaq = false + + // q0' = (2*q1 + q0 + p1 + 2) >> 2 = (q1 + Q01 + p1 + 2) >> 2 + // Use original p1 values in p1(0) + add (16) acc0.0<1>:w p1(0) Q0_plus_Q1(0) // p1 + P01 (TempRow1(0) = P01) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w Q1 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 2:w // p1 + P01 + q1 + 2 + + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 2:w // >> 2 + mov (16) NewQ0 TempRow0B(0) // q0' + + endif +Y_ENDIF4: + + + // Done with bS = 4 algorithm + +Y_ELSE2: + else (16) Y_ENDIF2 + // For channels whose edge control map2 = 0 ---> bS < 4 algorithm + + //----------------------------------------------------------------------------- + // bS < 4 Algorithm : + // tc = tc0 + (|p2-p0|> 3)) + // p0' = Clip1(p0 + delta) = Clip3(0, 0xFF, p0 + delta) + // q0' = Clip1(q0 - delta) = Clip3(0, 0xFF, q0 - delta) + // if (|p2-p0|>1) - (p1<<1)) >> 1 ) + // if (|q2-q0|>1) - (q1<<1)) >> 1 ) + //----------------------------------------------------------------------------- + + // Expand tc0 + mov (16) tc_exp(0)<1> tc0<1;4,0>:ub {NoMask} + mov (16) tc0_exp(0)<1> tc0<1;4,0>:ub {NoMask} // tc0_exp = tc0, each tc0 is duplicated 4 times for 4 adjcent 4 pixels + + // tc_exp = tc0_exp + (|p2-p0| tc0_exp(0) // tc = tc0_exp first + + + cmp.l.f0.0 (16) null:w (abs)ap(0) beta:w // |p2-p0|< Beta ? ---> (abs)ap < Beta ? + cmp.l.f0.1 (16) null:w (abs)aq(0) beta:w // |q2-q0|< Beta ? ---> (abs)aq < Beta ? + + //--- Use free cycles here --- + // delta = Clip3(-tc, tc, ((((q0-p0)<<2) + (p1-q1) + 4) >> 3)) + // 4 * (q0-p0) + p1 - q1 + 4 + add (16) acc0<1>:w P1 4:w // p1 + 4 + mac (16) acc0<1>:w q0_p0(0) 4:w // 4 * (q0-p0) + p1 + 4 + add (16) acc0<1>:w acc0<16;16,1>:w -Q1 // 4 * (q0-p0) + p1 - q1 + 4 + shr (16) TempRow0(0)<1> acc0<16;16,1>:w 3:w + + // Continue on getting tc_exp + (f0.0) add (16) tc_exp(0)<1> tc_exp(0) 1:w // tc0_exp + (|p2-p0|:w f0.0<2;2,1>:w {NoMask} // Save |p2-p0| tc_exp(0) 1:w // tc_exp = tc0_exp + (|p2-p0| tc + cmp.l.f0.1 (16) null:w TempRow0(0) -tc_exp(0) // Clip if delta' < -tc + + //--- Use free cycles here --- + // common = (p0+q0+1) >> 1 ---> TempRow2(0) + // Same as avg of p0 and q0 + avg (16) TempRow2(0)<1> P0 Q0 + + // Continue on cliping tc to get delta + (f0.0) mov (16) TempRow0(0)<1> tc_exp(0) + (f0.1) mov (16) TempRow0(0)<1> -tc_exp(0) + + //--- Use free cycles here --- + mov (2) f0.0<1>:w CTemp1_W<2;2,1>:w {NoMask} // CTemp1_W = (|p2-p0| P0 TempRow0(0) // p0+delta + add.sat (16) TempRow0B(0)<2> Q0 -TempRow0(0) // q0-delta + mov (16) NewP0 TempRow1B(0) // p0' + mov (16) NewQ0 TempRow0B(0) // q0' + //----------------------------------------------------------------------- + + // Now compute p1' and q1' + + // if (|p2-p0|> 1 = (p2 + common - (p1*2)) >> 1 + add (16) acc0<1>:w P2 TempRow2(0) // TempRow2(0) = common = (p0+q0+1) >> 1 + mac (16) acc0<1>:w P1 -2:w + shr (16) TempRow1(0)<1> acc0<16;16,1>:w 1:w + + // tc clip to get tc_adj + cmp.g.f0.0 (16) null:w TempRow1(0) tc0_exp(0) // Clip if delta' > tc + cmp.l.f0.1 (16) null:w TempRow1(0) -tc0_exp(0) // Clip if delta' < -tc + + (f0.0) mov (16) TempRow1(0)<1> tc0_exp(0) + (f0.1) mov (16) TempRow1(0)<1> -tc0_exp(0) + + //--- Use free cycles here --- + mov (1) f0.1:w CTemp2_W:w {NoMask} // CTemp2_W = (|q2-q0| P1 TempRow1(0) // p1+tc_adj + mov (16) NewP1 TempRow1B(0) // p1' + + //------------------------------------------------------------------------ +Y_ENDIF6: + endif + + // if (|q2-q0|> 1 + // same as q2 + common - (q1 * 2) + add (16) acc0<1>:w Q2 TempRow2(0) + mac (16) acc0<1>:w Q1 -2:w + shr (16) TempRow1(0)<1> acc0<16;16,1>:w 1:w + + // tc clip to get tc_adj + cmp.g.f0.0 (16) null:w TempRow1(0) tc0_exp(0) // Clip if delta' > tc + cmp.l.f0.1 (16) null:w TempRow1(0) -tc0_exp(0) // Clip if delta' < -tc + + (f0.0) mov (16) TempRow1(0)<1> tc0_exp(0) + (f0.1) mov (16) TempRow1(0)<1> -tc0_exp(0) + + // q1' = q1 + tc_adj + add.sat (16) TempRow1B(0)<2> Q1 TempRow1(0) // q1+tc_adj + mov (16) NewQ1 TempRow1B(0) // q1' + + //------------------------------------------------------------------------ +Y_ENDIF7: + endif + + endif +Y_ENDIF2: +Y_ENDIF1: + endif + +RETURN + +#endif // !defined(__AVC_ILDB_LUMA_CORE__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core_Mbaff.asm new file mode 100644 index 000000000..8ec4152a4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Luma_Core_Mbaff.asm @@ -0,0 +1,421 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__AVC_ILDB_LUMA_CORE_MBAFF__) // Make sure this file is only included once +#define __AVC_ILDB_LUMA_CORE_MBAFF__ + +////////// AVC ILDB Luma Core Mbaff ///////////////////////////////////////////////////////////////////////////////// +// +// This core performs AVC LUMA ILDB filtering on one horizontal edge (16 pixels) of a MB. +// If data is transposed, it can also de-block a vertical edge. +// +// Bafore calling this subroutine, caller needs to set the following parameters. +// +// - EdgeCntlMap1 // Edge control map A +// - EdgeCntlMap2 // Edge control map B +// - P_AddrReg // Src and dest address register for P pixels +// - Q_AddrReg // Src and dest address register for Q pixels +// - alpha // alpha corresponding to the edge to be filtered +// - beta // beta corresponding to the edge to be filtered +// - tc0 // tc0 corresponding to the edge to be filtered +// +// +// +----+----+----+----+----+----+----+----+ +// | p3 | p2 | P1 | p0 | q0 | q1 | q2 | q3 | +// +----+----+----+----+----+----+----+----+ +// +// p3 = r[P_AddrReg, 0]<16;16,1> +// p2 = r[P_AddrReg, 16]<16;16,1> +// p1 = r[P_AddrReg, 32]<16;16,1> +// p0 = r[P_AddrReg, 48]<16;16,1> +// q0 = r[Q_AddrReg, 0]<16;16,1> +// q1 = r[Q_AddrReg, 16]<16;16,1> +// q2 = r[Q_AddrReg, 32]<16;16,1> +// q3 = r[Q_AddrReg, 48]<16;16,1> +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The region is both src and dest +// P0-P3 and Q0-Q3 should be only used if they have not been modified to new values +#undef P3 +#undef P2 +#undef P1 +#undef P0 +#undef Q0 +#undef Q1 +#undef Q2 +#undef Q3 + +#define P3 r[P_AddrReg, 0]<16;16,1>:ub +#define P2 r[P_AddrReg, 16]<16;16,1>:ub +#define P1 r[P_AddrReg, 32]<16;16,1>:ub +#define P0 r[P_AddrReg, 48]<16;16,1>:ub +#define Q0 r[Q_AddrReg, 0]<16;16,1>:ub +#define Q1 r[Q_AddrReg, 16]<16;16,1>:ub +#define Q2 r[Q_AddrReg, 32]<16;16,1>:ub +#define Q3 r[Q_AddrReg, 48]<16;16,1>:ub + +// New region as dest +#undef NewP2 +#undef NewP1 +#undef NewP0 +#undef NewQ0 +#undef NewQ1 +#undef NewQ2 + +#define NewP2 r[P_AddrReg, 16]<1>:ub +#define NewP1 r[P_AddrReg, 32]<1>:ub +#define NewP0 r[P_AddrReg, 48]<1>:ub +#define NewQ0 r[Q_AddrReg, 0]<1>:ub +#define NewQ1 r[Q_AddrReg, 16]<1>:ub +#define NewQ2 r[Q_AddrReg, 32]<1>:ub + + + +// Filter one luma edge - mbaff +FILTER_Y_MBAFF: + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x1111:w +#endif + //---------- Derive filterSampleflag in AVC spec, equition (8-469) ---------- + // bS is in MaskA + + // Src copy of the p3, p2, p1, p0, q0, q1, q2, q3 +// mov (16) p0123_W(0)<1> r[P_AddrReg]<16;16,1>:uw +// mov (16) p0123_W(1)<1> r[P_AddrReg, 32]<16;16,1>:uw +// mov (16) q0123_W(0)<1> r[Q_AddrReg]<16;16,1>:uw +// mov (16) q0123_W(1)<1> r[Q_AddrReg, 32]<16;16,1>:uw + + // Move MaskA and MaskB to flag regs + mov (2) f0.0<1>:uw MaskA<2;2,1>:uw + + add (16) q0_p0(0)<1> Q0 -P0 // q0-p0 + add (16) TempRow0(0)<1> P1 -P0 // p1-p0 + add (16) TempRow1(0)<1> Q1 -Q0 // q1-q0 + + // abs(q0-p0) < alpha + (f0.0) cmp.l.f0.0 (16) null:w (abs)q0_p0(0) Mbaff_ALPHA(0) + // abs(p1-p0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow0(0) Mbaff_BETA(0) + // abs(q1-q0) < Beta + (f0.0) cmp.l.f0.0 (16) null:w (abs)TempRow1(0) Mbaff_BETA(0) + + //----------------------------------------------------------------------------------------- + + (f0.0) if (16) MBAFF_Y_ENDIF1 + // For channels whose edge control map1 = 1 ---> perform de-blocking + +// mov (1) f0.1:uw MaskB:uw {NoMask} // Now check for which algorithm to apply + + // (abs)ap = |p2-p0| + add (16) ap(0)<1> P2 -P0 + + // (abs)aq = |q2-q0| + add (16) aq(0)<1> Q2 -Q0 + + // Make a copy of unmodified p0 and p1 for use in q0'and q1' calculation + mov (16) p0123_W(1)<1> r[P_AddrReg, 32]<16;16,1>:uw {NoMask} + + (f0.1) if (16) MBAFF_Y_ELSE2 + + // For channels whose edge control map2 = 1 ---> bS = 4 algorithm + + // Compute q0', q1' and q2' + //----------------------------------------------------------------------------- + // bS = 4 Algorithm : + // + // gama = |p0-q0| < ((alpha >> 2) + 2) + // deltap = (ap> 3; + // p1' = ( p2 + p1 + p0 + q0 + 2) >> 2; + // p2' = (2*p3 +3*p2 + p1 + p0 + q0 + 4) >> 3; + // } else { + // p0' = ( 2*p1 + p0 + q1 + 2) >> 2; + // } + //----------------------------------------------------------------------------- + + // gama = |p0-q0| < ((alpha >> 2) + 2) = |p0-q0| < alpha2 + cmp.l.f0.1 (16) null:w (abs)q0_p0(0) Mbaff_ALPHA2(0) + + // Common P01 = p0 + p1 + add (16) P0_plus_P1(0)<1> P0 P1 + + // Common Q01 = q0 + q1 + add (16) Q0_plus_Q1(0)<1> Q0 Q1 + + mov (1) f0.0:uw f0.1:uw {NoMask} + + // deltap = ((abs)ap < beta) && gama + (f0.1) cmp.l.f0.1 (16) null:w (abs)ap(0) Mbaff_BETA(0) // (abs)ap < beta ? + + // deltaq = ((abs)aq < beta) && gama + (f0.0) cmp.l.f0.0 (16) null:w (abs)aq(0) Mbaff_BETA(0) // (abs)aq < beta ? + + + (f0.1) if (16) MBAFF_Y_ELSE3 // for channels its deltap = true + + add (16) P2_plus_P3(0)<1> P2 P3 + + // A = p1 + p0 + q0 = P01 + q0 + add (16) A(0)<1> P0_plus_P1(0) Q0 // A = P01 + q0 + + // Now acc0 = A + + // B = p2 + p1 + p0 + q0 + 4 = p2 + A + 4 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 4:w // p2 + 4 + add (16) BB(0)<1> acc0.0<16;16,1>:w P2 // B = p2 + A + 4 + + // Now acc0 = B + + // p2' = (2*p3 +3*p2 + A + 4) >> 3 = (2*(p3+p2) + B) >> 3 + mac (16) acc0.0<1>:w P2_plus_P3(0) 2:w + shr.sat (16) TempRow3B(0)<2> acc0.0<16;16,1>:w 3:w + + // p1' = (p2 + A + 2) >> 2 = (B - 2) >> 2 + add (16) acc0.0<1>:w BB(0) -2:w + shr.sat (16) TempRow1B(0)<2> acc0.0<16;16,1>:w 2:w + + // p0' = (p2 +2*A + q1 + 4) >> 3 = (B + A + q1) >> 3 + add (16) acc0.0<1>:w Q1 A(0) // B + A + add (16) acc0.0<1>:w acc0.0<16;16,1>:w BB(0) // B + A + q1 + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 3:w // (B + A + q1) >> 3 + + mov (16) NewP2 TempRow3B(0) // p2' + mov (16) NewP1 TempRow1B(0) // p1' + mov (16) NewP0 TempRow0B(0) // p0' + +MBAFF_Y_ELSE3: + else (16) MBAFF_Y_ENDIF3 // for channels its deltap = false + + // p0' = (2*p1 + p0 + q1 + 2) >> 2 = (p1 + P01 + q1 + 2) >> 2 + add (16) acc0.0<1>:w P1 P0_plus_P1(0) // p1 + P01 (TempRow1(0) = P01) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w Q1 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 2:w // p1 + P01 + q1 + 2 + + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 2:w // >> 2 + mov (16) NewP0 TempRow0B(0) // p0' + + endif + +MBAFF_Y_ENDIF3: + // Compute q0', q1' and q2' + //----------------------------------------------------------------------------- + // bS = 4 Algorithm (cont): + // + // deltaq = (aq> 3; + // q1' = ( q2 + q1 + q0 + p0 + 2) >> 2; + // q2' = (2*q3 +3*q2 + q1 + q0 + p0 + 4) >> 3; + // } else { + // q0' = ( 2*q1 + q0 + p1 + 2) >> 2; + // } + + (f0.0) if (16) MBAFF_Y_ELSE4 // for channels its deltaq = true + + add (16) Q2_plus_Q3(0)<1> Q2 Q3 + + // A = q1 + q0 + p0 = Q01 + p0 + add (16) A(0)<1> Q0_plus_Q1(0) p0(0) // A = q1+q0 + p0 + + // B = q2 + q1 + q0 + p0 + 4 = q2 + A + 4 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 4:w // q2 + 4 + add (16) BB(0)<1> acc0.0<16;16,1>:w Q2 // B = q2 + A + 4 + + // Acc0 = B + + // q2' = (2*q3 +3*q2 + A + 4) >> 3 = (2*(q3+q2) + B) >> 3 + mac (16) acc0.0<1>:w Q2_plus_Q3(0) 2:w + shr.sat (16) TempRow3B(0)<2> acc0.0<16;16,1>:w 3:w + + // q1' = (q2 + A + 2) >> 2 = (B - 2) >> 2 + add (16) acc0.0<1>:w BB(0) -2:w + shr.sat (16) TempRow1B(0)<2> acc0.0<16;16,1>:w 2:w + + // q0' = (q2 +2*A + p1 + 4) >> 3 = (B + A + p1) >> 3 + add (16) acc0.0<1>:w p1(0) A(0) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w BB(0) + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 3:w + + mov (16) NewQ2 TempRow3B(0) // q2' + mov (16) NewQ1 TempRow1B(0) // q1' + mov (16) NewQ0 TempRow0B(0) // q0' + +MBAFF_Y_ELSE4: + else (16) MBAFF_Y_ENDIF4 // for channels its deltaq = false + + // q0' = (2*q1 + q0 + p1 + 2) >> 2 = (q1 + Q01 + p1 + 2) >> 2 + // Use original p1 values in p1(0) + add (16) acc0.0<1>:w p1(0) Q0_plus_Q1(0) // p1 + P01 (TempRow1(0) = P01) + add (16) acc0.0<1>:w acc0.0<16;16,1>:w Q1 + add (16) acc0.0<1>:w acc0.0<16;16,1>:w 2:w // p1 + P01 + q1 + 2 + + shr.sat (16) TempRow0B(0)<2> acc0.0<16;16,1>:w 2:w // >> 2 + mov (16) NewQ0 TempRow0B(0) // q0' + + endif +MBAFF_Y_ENDIF4: + + + // Done with bS = 4 algorithm + +MBAFF_Y_ELSE2: + else (16) MBAFF_Y_ENDIF2 + // For channels whose edge control map2 = 0 ---> bS < 4 algorithm + + //----------------------------------------------------------------------------- + // bS < 4 Algorithm : + // tc = tc0 + (|p2-p0|> 3)) + // p0' = Clip1(p0 + delta) = Clip3(0, 0xFF, p0 + delta) + // q0' = Clip1(q0 - delta) = Clip3(0, 0xFF, q0 - delta) + // if (|p2-p0|>1) - (p1<<1)) >> 1 ) + // if (|q2-q0|>1) - (q1<<1)) >> 1 ) + //----------------------------------------------------------------------------- + + mov (16) tc_exp(0)<1> Mbaff_TC0(0) // tc = tc0_exp first + + cmp.l.f0.0 (16) null:w (abs)ap(0) Mbaff_BETA(0) // |p2-p0|> 3)) + // 4 * (q0-p0) + p1 - q1 + 4 + add (16) acc0<1>:w P1 4:w // p1 + 4 + mac (16) acc0<1>:w q0_p0(0) 4:w // 4 * (q0-p0) + p1 + 4 + add (16) acc0<1>:w acc0<16;16,1>:w -Q1 // 4 * (q0-p0) + p1 - q1 + 4 + shr (16) TempRow0(0)<1> acc0<16;16,1>:w 3:w + + // Continue on getting tc_exp + (f0.0) add (16) tc_exp(0)<1> tc_exp(0) 1:w // tc0_exp + (|p2-p0|:w f0.0<2;2,1>:w {NoMask} // Save |p2-p0| tc_exp(0) 1:w // tc_exp = tc0_exp + (|p2-p0| tc + cmp.l.f0.1 (16) null:w TempRow0(0) -tc_exp(0) // Clip if delta' < -tc + + //--- Use free cycles here --- + // common = (p0+q0+1) >> 1 ---> TempRow2(0) + // Same as avg of p0 and q0 + avg (16) TempRow2(0)<1> P0 Q0 + + // Continue on cliping tc to get delta + (f0.0) mov (16) TempRow0(0)<1> tc_exp(0) + (f0.1) mov (16) TempRow0(0)<1> -tc_exp(0) + + //--- Use free cycles here --- + mov (2) f0.0<1>:w CTemp1_W<2;2,1>:w {NoMask} // CTemp1_W = (|p2-p0| P0 TempRow0(0) // p0+delta + add.sat (16) TempRow0B(0)<2> Q0 -TempRow0(0) // q0-delta + + mov (16) NewP0 TempRow1B(0) // p0' + mov (16) NewQ0 TempRow0B(0) // q0' + + //----------------------------------------------------------------------- + + // Now compute p1' and q1' + + // if (|p2-p0|> 1 = (p2 + common - (p1*2)) >> 1 + add (16) acc0<1>:w P2 TempRow2(0) // TempRow2(0) = common = (p0+q0+1) >> 1 + mac (16) acc0<1>:w P1 -2:w + shr (16) TempRow1(0)<1> acc0<16;16,1>:w 1:w + + // tc clip to get tc_adj + cmp.g.f0.0 (16) null:w TempRow1(0) Mbaff_TC0(0) // Clip if delta' > tc + cmp.l.f0.1 (16) null:w TempRow1(0) -Mbaff_TC0(0) // Clip if delta' < -tc + + (f0.0) mov (16) TempRow1(0)<1> Mbaff_TC0(0) + (f0.1) mov (16) TempRow1(0)<1> -Mbaff_TC0(0) + + //--- Use free cycles here --- + mov (1) f0.1:w CTemp2_W:w {NoMask} // CTemp2_W = (|q2-q0| P1 TempRow1(0) // p1+tc_adj + mov (16) NewP1 TempRow1B(0) // p1' + //------------------------------------------------------------------------ + +MBAFF_Y_ENDIF6: + endif + + // if (|q2-q0|> 1 + // same as q2 + common - (q1 * 2) + add (16) acc0<1>:w Q2 TempRow2(0) + mac (16) acc0<1>:w Q1 -2:w + shr (16) TempRow1(0)<1> acc0<16;16,1>:w 1:w + + // tc clip to get tc_adj + cmp.g.f0.0 (16) null:w TempRow1(0) Mbaff_TC0(0) // Clip if delta' > tc + cmp.l.f0.1 (16) null:w TempRow1(0) -Mbaff_TC0(0) // Clip if delta' < -tc + + (f0.0) mov (16) TempRow1(0)<1> Mbaff_TC0(0) + (f0.1) mov (16) TempRow1(0)<1> -Mbaff_TC0(0) + + // q1' = q1 + tc_adj + add.sat (16) TempRow1B(0)<2> Q1 TempRow1(0) // q1+tc_adj + mov (16) NewQ1 TempRow1B(0) // q1' + + //------------------------------------------------------------------------ +MBAFF_Y_ENDIF7: + endif + + endif +MBAFF_Y_ENDIF2: +MBAFF_Y_ENDIF1: + endif + +RETURN + +#endif // !defined(__AVC_ILDB_LUMA_CORE_MBAFF__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_OpenGateway.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_OpenGateway.asm new file mode 100644 index 000000000..446ca1d58 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_OpenGateway.asm @@ -0,0 +1,73 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//----- Open a Message Gateway ----- +// The parent thread is the recipient thread + +#if defined(_DEBUG) + mov (1) EntrySignature:w 0x1111:w +#endif + +mov (8) GatewayPayload<1>:ud r0.0<8;8,1>:ud // Init payload to r0 + +// r50- (16 GRFs) are the GRFs child thread can wtite to. + +// Reg base is at bit 28:21, Gateway size is at [bit 10:8] +// r6: 6 = 00000110 +//000 00000110 0000000000 100 00000000 ==> 0000 0000 1100 0000 0000 0100 0000 0000 +mov (1) RegBase_GatewaySize:ud 0x00C00400:ud // Reg base + Gateway size (16 GRFs) + + +//000 00110010 0000000000 100 00000000 ==> 0000 0110 0100 0000 0000 0100 0000 0000 +//mov (1) RegBase_GatewaySize:ud 0x06400400:ud // Reg base (r50 = 0x640 byte offset) + Gateway size (16 GRFs) + +//mov (1) DispatchID:ub r0.20:ub // Dispatch ID +mov (1) GatewayPayloadKey:uw 0x1212:uw // Key=0x1212 + +// Message descriptor +// bit 31 EOD +// 27:24 FFID = 0x0011 for msg gateway +// 23:20 msg length = 1 MRF +// 19:16 Response length = 0 +// 14 AckReg = 1 +// 1:0 SubFuncID = 00 for OpenGateway +// Message descriptor: 0 000 0011 0001 0000 + 0 1 000000000000 00 ==> 0000 0011 0001 0000 0100 0000 0000 0000 +// Send message to gateway: the ack message is put into response GRF r49 ==> Good for debugging +send (8) GatewayResponse:ud m7 GatewayPayload<8;8,1>:ud MSG_GW OGWMSGDSC + +//----- End of Open a Message Gateway ----- diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_UV.asm new file mode 100644 index 000000000..7b492a8c9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_UV.asm @@ -0,0 +1,39 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "AVC_ILDB_Root_UV.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_Y.asm new file mode 100644 index 000000000..ed3dd9a94 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Field_Y.asm @@ -0,0 +1,39 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "AVC_ILDB_Root_Y.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_UV.asm new file mode 100644 index 000000000..9c6b3d087 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_UV.asm @@ -0,0 +1,170 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +///////////////////////////////////////////////////////////////////////////////////// +// Kernel name: AVC_ILDB_Root_Mbaff.asm +// +// Root kernel serves as a scheduler for child threads. +// +// +// ***** Note ***** +// Initial design bundle MB pair for each thread, and share AVC_ILDB_MB_Dep_Check.asm +// with non mbaff kernels. +// +// Optimization will be done later, putting top and bottom MBs on separate threads. +// +// +///////////////////////////////////////////////////////////////////////////////////// +// +// $Revision: 1 $ +// $Date: 10/19/06 5:06p $ +// + +// ---------------------------------------------------- +// AVC_ILDB_ROOT_MBAFF_UV +// ---------------------------------------------------- +#define AVC_ILDB + +.kernel AVC_ILDB_ROOT_MBAFF_UV +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_ROOT_UV): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + + +#if defined(_DEBUG) + +///////////////////////////////////////////////////////////////////////////////////// +// Init URB space for running on RTL. It satisfies reading an unwritten URB entries. +// Will remove it for production release. + + +//mov (8) m1:ud 0x11111111:ud +//mov (8) m2:ud 0x22222222:ud +//mov (8) m3:ud 0x33333333:ud +//mov (8) m4:ud 0x44444444:ud + +//mov (1) Temp1_W:w 0:w + +//ILDB_INIT_URB: +//mul (1) URBOffset:w Temp1_W:w 4:w +//shl (1) URBWriteMsgDescLow:uw URBOffset:w 4:w // Msg descriptor: URB write dest offset (9:4) +//mov (1) URBWriteMsgDescHigh:uw 0x0650:uw // Msg descriptor: URB write 5 MRFs (m0 - m4) +//#include "writeURB.asm" + +//add (1) Temp1_W:w Temp1_W:w 1:w // Increase block count +//cmp.l.f0.0 (1) null Temp1_W:w MBsCntY:w // Check the block count limit +//(f0.0) jmpi ILDB_INIT_URB // Loop back + + +///////////////////////////////////////////////////////////////////////////////////// + + +mov (1) EntrySignature:w 0xEFF0:w + +#endif +//---------------------------------------------------------------------------------------------------------------- + +// Set global variable +mov (32) ChildParam:uw 0:uw // Reset local variables +//mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // Total # of MB pairs +//add (1) GatewayApertureE:w MBsCntY:w GatewayApertureB:w // Aperture End = aperture Head + BlockCntY + + +// 2 URB entries for Y: +// Entry 0 - Child thread R0Hdr +// Entry 1 - input parameter to child kernel (child r1) + +#define URB_ENTRIES_PER_MB 2 + +// URB_ENTRIES_PER_MB in differnt form, the final desired format is (URB_ENTRIES_PER_MB-1) << 10 +mov (1) URB_EntriesPerMB_2:w URB_ENTRIES_PER_MB-1:w +shl (1) URB_EntriesPerMB_2:w URB_EntriesPerMB_2:w 10:w + +#define CHROMA_ROOT // Compiling flag for chroma only +//mul (1) URBOffsetUVBase:w MBsCntY:w URB_ENTRIES_PER_MB:w // Right after Y entries + +// URB base for UV kernels +#if defined(DEV_CL) + mov (1) URBOffsetUVBase:w 240:w +#else + mov (1) URBOffsetUVBase:w 320:w +#endif + + +mov (1) ChildThreadsID:uw 3:uw + +shr (1) ThreadLimit:w MaxThreads:w 1:w // Initial luma thread limit to 50% +mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // MBs to be processed count down from TotalBlocks + +//***** Init CT_R0Hdr fields that are common to all threads ************************* +mov (8) CT_R0Hdr.0:ud r0.0<8;8,1>:ud // Init to root R0 header +mov (1) CT_R0Hdr.7:ud r0.6:ud // Copy Parent Thread Cnt; JJ did the change on 06/20/2006 +mov (1) CT_R0Hdr.31:ub 0:w // Reset the highest byte +mov (1) CT_R0Hdr.3:ud 0x00000000 +mov (1) CT_R0Hdr.6:uw sr0.0:uw // sr0.0: state reg contains general thread states, e.g. EUID/TID. + +//***** Init ChildParam fields that are common to all threads *********************** +mov (8) ChildParam<1>:ud RootParam<8;8,1>:ud // Copy all root parameters +mov (4) CurCol<1>:w 0:w // Reset CurCol, CurRow +add (2) LastCol<1>:w MBsCntX<2;2,1>:w -1:w // Get LastCol and LastRow + +mov (1) URBWriteMsgDesc:ud MSG_LEN(2)+URBWMSGDSC:ud + +//=================================================================================== + +#include "AVC_ILDB_OpenGateway.asm" // Open root thread gateway for receiving notification + +#include "AVC_ILDB_Dep_Check.asm" // Check dependency and spawn all MBs + +//#include "AVC_ILDB_UpdateThrdLimit.asm" // Update thread limit in luma root thread via gateway + +#include "AVC_ILDB_CloseGateway.asm" // Close root thread gateway + +// Chroma root EOT = child send EOT : Request type = 1 + END_CHILD_THREAD + +#undef CHROMA_ROOT + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_Y.asm new file mode 100644 index 000000000..938fc97e8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Mbaff_Y.asm @@ -0,0 +1,170 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +///////////////////////////////////////////////////////////////////////////////////// +// Kernel name: AVC_ILDB_Root_Mbaff.asm +// +// Root kernel serves as a scheduler for child threads. +// +// +// ***** Note ***** +// Initial design bundle MB pair for each thread, and share AVC_ILDB_MB_Dep_Check.asm +// with non mbaff kernels. +// +// Optimization will be done later, putting top and bottom MBs on separate threads. +// +// +///////////////////////////////////////////////////////////////////////////////////// +// +// $Revision: 1 $ +// $Date: 10/19/06 5:06p $ +// + +// ---------------------------------------------------- +// AVC_ILDB_ROOT_MBAFF_Y +// ---------------------------------------------------- +#define AVC_ILDB + +.kernel AVC_ILDB_ROOT_MBAFF_Y +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_ROOT_Y): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + + +#if defined(_DEBUG) + +///////////////////////////////////////////////////////////////////////////////////// +// Init URB space for running on RTL. It satisfies reading an unwritten URB entries. +// Will remove it for production release. + + +//mov (8) m1:ud 0x11111111:ud +//mov (8) m2:ud 0x22222222:ud +//mov (8) m3:ud 0x33333333:ud +//mov (8) m4:ud 0x44444444:ud + +//mov (1) Temp1_W:w 0:w + +//ILDB_INIT_URB: +//mul (1) URBOffset:w Temp1_W:w 4:w +//shl (1) URBWriteMsgDescLow:uw URBOffset:w 4:w // Msg descriptor: URB write dest offset (9:4) +//mov (1) URBWriteMsgDescHigh:uw 0x0650:uw // Msg descriptor: URB write 5 MRFs (m0 - m4) +//#include "writeURB.asm" + +//add (1) Temp1_W:w Temp1_W:w 1:w // Increase block count +//cmp.l.f0.0 (1) null Temp1_W:w MBsCntY:w // Check the block count limit +//(f0.0) jmpi ILDB_INIT_URB // Loop back + +///////////////////////////////////////////////////////////////////////////////////// + + +mov (1) EntrySignature:w 0xEFF0:w + +#endif +//---------------------------------------------------------------------------------------------------------------- + +// Set global variable +mov (32) ChildParam:uw 0:uw // Reset local variables +//mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // Total # of MB pairs +//add (1) GatewayApertureE:w MBsCntY:w GatewayApertureB:w // Aperture End = aperture Head + BlockCntY + + +// 2 URB entries for Y: +// Entry 0 - Child thread R0Hdr +// Entry 1 - input parameter to child kernel (child r1) + +#undef URB_ENTRIES_PER_MB +#define URB_ENTRIES_PER_MB 2 + +// URB_ENTRIES_PER_MB in differnt form, the final desired format is (URB_ENTRIES_PER_MB-1) << 10 +mov (1) URB_EntriesPerMB_2:w URB_ENTRIES_PER_MB-1:w +shl (1) URB_EntriesPerMB_2:w URB_EntriesPerMB_2:w 10:w + +mov (1) ChildThreadsID:uw 1:uw // ChildThreadsID for chroma root + +shr (1) ThreadLimit:w MaxThreads:w 1:w // Initial luma thread limit to 50% +mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // MBs to be processed count down from TotalBlocks + +//***** Init CT_R0Hdr fields that are common to all threads ************************* +mov (8) CT_R0Hdr.0:ud r0.0<8;8,1>:ud // Init to root R0 header +mov (1) CT_R0Hdr.7:ud r0.6:ud // Copy Parent Thread Cnt; JJ did the change on 06/20/2006 +mov (1) CT_R0Hdr.31:ub 0:w // Reset the highest byte +mov (1) CT_R0Hdr.3:ud 0x00000000 +mov (1) CT_R0Hdr.6:uw sr0.0:uw // sr0.0: state reg contains general thread states, e.g. EUID/TID. + +//***** Init ChildParam fields that are common to all threads *********************** +mov (8) ChildParam<1>:ud RootParam<8;8,1>:ud // Copy all root parameters +mov (4) CurCol<1>:w 0:w // Reset CurCol, CurRow +add (2) LastCol<1>:w MBsCntX<2;2,1>:w -1:w // Get LastCol and LastRow + +mov (1) URBWriteMsgDesc:ud MSG_LEN(2)+URBWMSGDSC:ud + +//=================================================================================== + +#include "AVC_ILDB_OpenGateway.asm" // Open root thread gateway for receiving notification + +#if defined(DEV_CL) + mov (1) URBOffset:uw 240:uw // Use chroma URB offset to spawn chroma root +#else + mov (1) URBOffset:uw 320:uw // Use chroma URB offset to spawn chroma root +#endif + +#include "AVC_ILDB_SpawnChromaRoot.asm" // Spawn chroma root + +mov (1) URBOffset:uw 0:uw // Use luma URB offset to spawn luma child +mov (1) ChildThreadsID:uw 2:uw // Starting ChildThreadsID for luma child threads + +#include "AVC_ILDB_Dep_Check.asm" // Check dependency and spawn all MBs + +// Wait for UV root thread to finish +ILDB_LABEL(WAIT_FOR_UV): +cmp.l.f0.0 (1) null:w ThreadLimit:w MaxThreads:w +(f0.0) jmpi ILDB_LABEL(WAIT_FOR_UV) + +#include "AVC_ILDB_CloseGateway.asm" // Close root thread gateway + +END_THREAD // End of root thread + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_UV.asm new file mode 100644 index 000000000..7a8d2cd19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_UV.asm @@ -0,0 +1,157 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: AVC_ILDB_Root_UV.asm +// +// Root kernel serves as a scheduler for child threads +// +// $Revision: 1 $ +// $Date: 10/19/06 5:06p $ +// + +// ---------------------------------------------------- +// AVC_ILDB_ROOT_UV +// ---------------------------------------------------- +#define AVC_ILDB + +.kernel AVC_ILDB_ROOT_UV +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_ROOT_UV): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +#if defined(_DEBUG) +mov (1) EntrySignature:w 0xFF11:w +#endif + +///////////////////////////////////////////////////////////////////////////////////// +#if defined(_DEBUG) + +// Init URB space for running on RTL. It satisfies reading an unwritten URB entries. +// Will remove it for production release. + +mov (8) m1:ud 0x55555555:ud +mov (8) m2:ud 0x66666666:ud +mov (8) m3:ud 0x77777777:ud +mov (8) m4:ud 0x88888888:ud + +mov (1) Temp1_W:w MBsCntY:w +shl (1) Temp2_W:w MBsCntY:w 1:w + +ILDB_LABEL(ILDB_INIT_URB_UV): +mul (1) URBOffset:uw Temp1_W:uw 4:w // Each thread uses 4 URB entries (1 r0 + 1 inline + 2 data) +mov (1) URBWriteMsgDesc:ud MSG_LEN(4)+URBWMSGDSC:ud // Msg descriptor: URB write msg length = 5 +#include "writeURB.asm" + +add (1) Temp1_W:w Temp1_W:w 1:w // Increase block count +cmp.l.f0.0 (1) null Temp1_W:w Temp2_W:w // Check the block count limit +(f0.0) jmpi ILDB_LABEL(ILDB_INIT_URB_UV) // Loop back + +mov (1) EntrySignature:w 0xFFF0:w + +#endif +///////////////////////////////////////////////////////////////////////////////////// + +// Set global variable +mov (32) ChildParam:uw 0:uw // Reset local variables, 2 GRFs +//mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // Total # of blocks +//add (1) GatewayApertureE:w MBsCntY:w GatewayApertureB:w // Aperture End = aperture Head + BlockCntY + +// 4 URB entries for Y: +// Entry 0 - Child thread R0Hdr +// Entry 1 - input parameter to child kernel (child r1) +// Entry 2 - Prev MB data UV 2x8 +// Entry 3 - Unused + +#define URB_ENTRIES_PER_MB 4 + +// URB_ENTRIES_PER_MB in differnt form, the final desired format is (URB_ENTRIES_PER_MB-1) << 10 +mov (1) URB_EntriesPerMB_2:w URB_ENTRIES_PER_MB-1:w +shl (1) URB_EntriesPerMB_2:w URB_EntriesPerMB_2:w 10:w + +#define CHROMA_ROOT // Compiling flag for chroma only + +// URB base for UV kernels +#if defined(DEV_CL) + mov (1) URBOffsetUVBase:w 240:w +#else + mov (1) URBOffsetUVBase:w 320:w +#endif + + +mov (1) ChildThreadsID:uw 3:uw + +shr (1) ThreadLimit:w MaxThreads:w 1:w // Initial luma thread limit to 50% +mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // MBs to be processed count down from TotalBlocks + +//***** Init CT_R0Hdr fields that are common to all threads ************************* +mov (8) CT_R0Hdr.0:ud r0.0<8;8,1>:ud // Init to root R0 header +mov (1) CT_R0Hdr.7:ud r0.6:ud // Copy Parent Thread Cnt; JJ did the change on 06/20/2006 +mov (1) CT_R0Hdr.31:ub 0:w // Reset the highest byte +mov (1) CT_R0Hdr.3:ud 0x00000000 +mov (1) CT_R0Hdr.6:uw sr0.0:uw // sr0.0: state reg contains general thread states, e.g. EUID/TID. + +//***** Init ChildParam fields that are common to all threads *********************** +mov (8) ChildParam<1>:ud RootParam<8;8,1>:ud // Copy all root parameters +mov (4) CurCol<1>:w 0:w // Reset CurCol, CurRow, +add (2) LastCol<1>:w MBsCntX<2;2,1>:w -1:w // Get LastCol and LastRow + +mov (1) URBWriteMsgDesc:ud MSG_LEN(2)+URBWMSGDSC:ud + +//=================================================================================== + +#include "AVC_ILDB_OpenGateway.asm" // Open gateway for receiving notification + +#include "AVC_ILDB_Dep_Check.asm" // Check dependency and spawn all luma child threads in parallel with chroma root + +//#include "AVC_ILDB_LumaThrdLimit.asm" // Update thread limit in luma root thread via gateway + +#include "AVC_ILDB_CloseGateway.asm" // Close root thread gateway + +// Chroma root EOT = child send EOT : Request type = 1 + END_CHILD_THREAD + +#undef CHROMA_ROOT + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Y.asm new file mode 100644 index 000000000..baf992c3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Root_Y.asm @@ -0,0 +1,160 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: AVC_ILDB_Root_Y.asm +// +// Root kernel serves as a scheduler for child threads +// +// $Revision: 1 $ +// $Date: 10/19/06 5:06p $ +// + +// ---------------------------------------------------- +// AVC_ILDB_ROOT_Y +// ---------------------------------------------------- +#define AVC_ILDB + +.kernel AVC_ILDB_ROOT_Y +#if defined(COMBINED_KERNEL) +ILDB_LABEL(AVC_ILDB_ROOT_Y): +#endif + +#include "SetupVPKernel.asm" +#include "AVC_ILDB.inc" + +///////////////////////////////////////////////////////////////////////////////////// +#if defined(_DEBUG) + +// Init URB space for running on RTL. It satisfies reading an unwritten URB entries. +// Will remove it for production release. + +mov (8) m1:ud 0x11111111:ud +mov (8) m2:ud 0x22222222:ud +mov (8) m3:ud 0x33333333:ud +mov (8) m4:ud 0x44444444:ud + +mov (1) Temp1_W:w 0:w + +ILDB_LABEL(ILDB_INIT_URB_Y): +//mul (1) Temp2_W:w Temp1_W:w 4:w // URBOffset +//shl (1) URBWriteMsgDescLow:uw Temp2_W:w 4:w // Msg descriptor: URB write dest offset (9:4) +//mov (1) URBWriteMsgDescHigh:uw 0x0650:uw // Msg descriptor: URB write 5 MRFs (m0 - m4) + +//mul (1) URBOffset:uw Temp1_W:uw 4:w // Each thread uses 4 URB entries (1 r0 + 1 inline + 2 data) +mul (1) URBOffset:uw Temp1_W:uw 2:w // Each thread uses 2 URB entries (1 r0 + 1 inline) +mov (1) URBWriteMsgDesc:ud MSG_LEN(2)+URBWMSGDSC:ud // Msg descriptor: URB write msg length = 3 +#include "writeURB.asm" + +add (1) Temp1_W:w Temp1_W:w 1:w // Increase block count +cmp.l.f0.0 (1) null Temp1_W:w MBsCntY:w // Check the block count limit +(f0.0) jmpi ILDB_LABEL(ILDB_INIT_URB_Y) // Loop back + +mov (1) EntrySignature:w 0xFFF0:w + +#endif +///////////////////////////////////////////////////////////////////////////////////// + + +// Set global variable +mov (32) ChildParam:uw 0:uw // Reset local variables, 2 GRFs +//mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // Total # of blocks +//add (1) GatewayApertureE:w MBsCntY:w GatewayApertureB:w // Aperture End = aperture Head + BlockCntY + +// 4 URB entries for Y: +// Entry 0 - Child thread R0Hdr +// Entry 1 - input parameter to child kernel (child r1) +// Entry 2 - Prev MB data Y 4x16, col 1 and col 0 +// Entry 3 - Prev MB data Y 4x16, col 3 and col 2 + +#undef URB_ENTRIES_PER_MB +#define URB_ENTRIES_PER_MB 4 + +// URB_ENTRIES_PER_MB in differnt form, the final desired format is (URB_ENTRIES_PER_MB-1) << 10 +mov (1) URB_EntriesPerMB_2:w URB_ENTRIES_PER_MB-1:w +shl (1) URB_EntriesPerMB_2:w URB_EntriesPerMB_2:w 10:w + +shr (1) ThreadLimit:w MaxThreads:w 1:w // Initial luma thread limit to 50% +mul (1) TotalBlocks:w MBsCntX:w MBsCntY:w // MBs to be processed count down from TotalBlocks + +//***** Init CT_R0Hdr fields that are common to all threads ************************* +mov (8) CT_R0Hdr.0:ud r0.0<8;8,1>:ud // Init to root R0 header +mov (1) CT_R0Hdr.7:ud r0.6:ud // Copy Parent Thread Cnt; JJ did the change on 06/20/2006 +mov (1) CT_R0Hdr.31:ub 0:w // Reset the highest byte +mov (1) CT_R0Hdr.3:ud 0x00000000 +mov (1) CT_R0Hdr.6:uw sr0.0:uw // sr0.0: state reg contains general thread states, e.g. EUID/TID. + +//***** Init ChildParam fields that are common to all threads *********************** +mov (8) ChildParam<1>:ud RootParam<8;8,1>:ud // Copy all root parameters +mov (4) CurCol<1>:w 0:w // Reset CurCol, CurRow, +add (2) LastCol<1>:w MBsCntX<2;2,1>:w -1:w // Get LastCol and LastRow + +mov (1) URBWriteMsgDesc:ud MSG_LEN(2)+URBWMSGDSC:ud + +//=================================================================================== + +#include "AVC_ILDB_OpenGateway.asm" // Open gateway for receiving notification + +#if defined(DEV_CL) + mov (1) URBOffset:uw 240:uw // Use chroma URB offset to spawn chroma root +#else + mov (1) URBOffset:uw 320:uw // Use chroma URB offset to spawn chroma root +#endif + +#include "AVC_ILDB_SpawnChromaRoot.asm" // Spawn chroma root + +mov (1) URBOffset:uw 0:uw // Use luma URB offset to spawn luma child +mov (1) ChildThreadsID:uw 2:uw // Starting ChildThreadsID for luma child threads + +#include "AVC_ILDB_Dep_Check.asm" // Check dependency and spawn all luma child threads in parallel with chroma root + + +// Wait for UV root thread to finish +ILDB_LABEL(WAIT_FOR_UV): +cmp.l.f0.0 (1) null:w ThreadLimit:w MaxThreads:w +(f0.0) jmpi ILDB_LABEL(WAIT_FOR_UV) + + +#include "AVC_ILDB_CloseGateway.asm" // Close root thread gateway + +END_THREAD // End of root thread + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Spawn.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Spawn.asm new file mode 100644 index 000000000..932177978 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_Spawn.asm @@ -0,0 +1,52 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//=============== Spawn a child thread for a vertical child =============== + +#if defined(_DEBUG) + mov (1) EntrySignature:w 0x6666:w +#endif + + mul (1) URBOffset:uw CurRow:uw 2:w // 5:w // Each row uses 5 URB entries (R0, child R0, 3 GRFs of data from left MB) + + mov (8) CT_R0Hdr.0:ud r0.0<8;8,1>:ud // Init to root R0 header + + // R0.2: Interface Discriptor Ptr. Add offset 16 for next Interface Discriptor for child kernel + add (1) CT_R0Hdr.2:ud r0.2:ud IDesc_Child_Offset:w + + #include "AVC_ILDB_SpawnChild.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChild.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChild.asm new file mode 100644 index 000000000..82682f132 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChild.asm @@ -0,0 +1,85 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//=============== Spawn a child thread for Luma or Chroma =============== + + //----- Create child thread R0 header ----- +#if defined(_DEBUG) + mov (1) EntrySignature:w 0xAAAA:w +#endif + + //***** Set CT_R0Hdr fields that change for every thread + + // Restore CT_R0Hdr.4:ud to r0.4:ud + mov (1) CT_R0Hdr.4:ud r0.4:ud + + // R0.2: Interface Discriptor Ptr. Add a child offset for child kernel +// add (1) CT_R0Hdr.2:ud r0.2:ud CHILD_OFFSET:w + + // Assign a new Thread Count for this child + mov (1) CT_R0Hdr.6:ud ChildThreadsID:uw + + //----- Prepare URB for launching a child thread ----- + mov (16) m2.0:w ChildParam<16;16,1>:w + + shr (1) MRF0.0:uw URBOffset:uw 1:w + + add (1) ChildThreadsID:uw ChildThreadsID:uw 2:uw // Luma child=even, chroma child=odd + + //-------------------------------------------------- +// #include "writeURB.asm" + send null:uw MRF0 null:ud URBWRITE URBWriteMsgDesc:ud // URB write + + //-------------------------------------------------- + // Set URB handle for child thread launching: + // URB handle Length (bit 15:10) - 0000 0000 0000 0000 yyyy yy00 0000 0000 + // URB handle offset (bit 9:0) - 0000 0000 0000 0000 0000 00xx xxxx xxxx + + or (1) CT_R0Hdr.4:ud URB_EntriesPerMB_2:w URBOffset:uw + + // 2 URB entries: + // Entry 0 - CT_R0Hdr + // Entry 1 - input parameter to child kernel + + //----- Spawn a child now ----- + send (8) null:ud CT_R0Hdr null:ud TS TSMSGDSC +// send (8) null:ud CT_Spawn_Reg null:ud 0x07100001 + + + // Restore CT_R0Hdr.4:ud to r0.4:ud for next use +// mov (1) CT_R0Hdr.4:ud r0.4:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChromaRoot.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChromaRoot.asm new file mode 100644 index 000000000..048d295c8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/AVC_ILDB_SpawnChromaRoot.asm @@ -0,0 +1,77 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +//=============== Spawn a chroma root thread =============== + + //----- Create chroma root thread R0 header ----- +#if defined(_DEBUG) + mov (1) EntrySignature:w 0xAABA:w +#endif + + + + // Restore CT_R0Hdr.4:ud to r0.4:ud +// mov (1) CT_R0Hdr.4:ud r0.4:ud + + // R0.2: Interface Discriptor Ptr. Add child offset for child kernel + add (1) CT_R0Hdr.2:ud r0.2:ud CHROMA_ROOT_OFFSET:w + + // Assign a new Thread Count for this child + mov (1) CT_R0Hdr.6:ud 1:w // ThreadID=1 for chroma root + + //----- Copy luma root r1 for launching chroma root thread ----- + mov (16) m2.0:w RootParam<16;16,1>:w + + #include "writeURB.asm" + + //-------------------------------------------------- + // Set URB handle for child thread launching: + // URB handle Length (bit 15:10) - 0000 0000 0000 0000 yyyy yy00 0000 0000 + // URB handle offset (bit 9:0) - 0000 0000 0000 0000 0000 00xx xxxx xxxx + + or (1) CT_R0Hdr.4:ud URB_EntriesPerMB_2:w URBOffset:uw + + // 2 URB entries: + // Entry 0 - CT_R0Hdr + // Entry 1 - input parameter to child kernel + + //----- Spawn a child now ----- + send (8) null:ud CT_R0Hdr null:ud TS TSMSGDSC + + // Restore CT_R0Hdr.4:ud to r0.4:ud for next use + mov (1) CT_R0Hdr.4:ud r0.4:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Child_Undefs.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Child_Undefs.inc new file mode 100644 index 000000000..b867cc026 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Child_Undefs.inc @@ -0,0 +1,54 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Modual name: Child_Undefs.inc +// +// Undefine global symbols for new process in child thread +// + +#undef P1 +#undef P2 +#undef P3 +#undef P4 +#undef P5 +#undef P6 +#undef P7 +#undef P8 +#undef EDGECNTLMAP +#undef CLIP_NEGATIVE +#undef CLIP_DONE diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/ILDB_header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/ILDB_header.inc new file mode 100644 index 000000000..213516d39 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/ILDB_header.inc @@ -0,0 +1,336 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__ILDB_HEADER__) // Make sure this file is only included once +#define __ILDB_HEADER__ + +// Module name: ILDB_header.inc +// + +.default_execution_size (16) +.default_register_type :ub + +#undef NULLREG +#undef RETURN_REG +#undef EOTMSGDSC +#undef MSGSRC +#undef END_THREAD +#undef TSMSGDSC + +// ----------- Common constant definitions ------------ +// +// Bit position constants +// +#define BIT0 0x01 +#define BIT1 0x02 +#define BIT2 0x04 +#define BIT3 0x08 +#define BIT4 0x10 +#define BIT5 0x20 +#define BIT6 0x40 +#define BIT7 0x80 +#define BIT8 0x0100 +#define BIT9 0x0200 +#define BIT10 0x0400 +#define BIT11 0x0800 +#define BIT12 0x1000 +#define BIT13 0x2000 +#define BIT14 0x4000 +#define BIT15 0x8000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +// Common constants +// +#define INST_SIZE 16 // Instruction size in byte + +#define GRFWIB 32 // GRF register width in byte +#define GRFWIW 16 // GRF register width in word +#define GRFWID 8 // GRF register width in dword + +#define TOP_FIELD 0 +#define BOTTOM_FIELD 1 + +#define PREVIOUS_FRAME 0 // Previous frame +#define CURRENT_FRAME 1 // Current frame +#define NEXT_FRAME 2 // Next frame + +#define Y_ROW_WIDTH 16 // in bytes +#define UV_ROW_WIDTH 8 + +// Useful macros +// +#define REGION(Width,HStride) // Region definition when ExecSize = Width + +#define NULLREG null<1>:d +#define NULLREGW null<1>:w + +#define RETURN_REG r62 // Return pointer for all sub-routine calls (type DWORD) + +#define CALL(subFunc, skipInst) add (1) RETURN_REG<1>:ud ip:ud (1+skipInst)*INST_SIZE \n\ + jmpi (1) subFunc + +#define RETURN mov (1) ip:ud RETURN_REG<0;1,0>:ud // Return to calling module + +#define PRED_CALL(flag, subFunc, skipInst) add (1) RETURN_REG<1>:ud ip:ud (1+skipInst)*INST_SIZE \n\ + (flag) jmpi (1) subFunc + + +// Definitions for surface states, GRF regions, and common data fields +// +// Note: Each kernel needs to define a specific symbol before including this +// header file to ensure correct definitions. +// + + + +#if defined(AVC_ILDB) + +.reg_count_total 64 +.reg_count_payload 4 + + // Binding Table Index + #define BI_CNTRL_DATA 0 // Control data map + #define BI_SRC_Y 1 + #define BI_SRC_UV 2 + #define BI_DEST_Y 3 + #define BI_DEST_UV 4 + + + //========== Left MB, 4x16 in r2 and r3 ========== + #define PREV_MB_Y_BASE 64 //2*GRFWIB // Byte offset to r2 + .declare PREV_MB_YD Base=r2 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + .declare PREV_MB_YW Base=r2 ElementSize=2 SrcRegion=REGION(8,1) Type=uw + .declare PREV_MB_YB Base=r2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + #define PREV_MB_U_BASE 64 //2*GRFWIB // seperate thread from Y // Byte offset to r2 + .declare PREV_MB_UD Base=r2 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + .declare PREV_MB_UW Base=r2 ElementSize=2 SrcRegion=REGION(16,1) Type=uw + .declare PREV_MB_UB Base=r2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + #define PREV_MB_V_BASE 65 //2*GRFWIB+1 // NV12 // Byte offset to r2.1 + .declare PREV_MB_VB Base=r2.1 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + //========== Top MB, 16x4 in r4 and r5 ========== + #define TOP_MB_Y_BASE 128 //4*GRFWIB // Byte offset to r4 + .declare TOP_MB_YD Base=r4 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + .declare TOP_MB_YW Base=r4 ElementSize=2 SrcRegion=REGION(8,1) Type=uw + .declare TOP_MB_YB Base=r4 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + #define TOP_MB_U_BASE 128 //4*GRFWIB // seperate thread from Y // Byte offset to r4 + .declare TOP_MB_UD Base=r4 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + .declare TOP_MB_UW Base=r4 ElementSize=2 SrcRegion=REGION(16,1) Type=uw + .declare TOP_MB_UB Base=r4 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + #define TOP_MB_V_BASE 129 //4*GRFWIB+1 // NV12 // Byte offset to r4.1 + .declare TOP_MB_VB Base=r4.1 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + + + //========== Current MB, 16x16 in r6-r13 ========== + #define SRC_MB_Y_BASE 192 //6*GRFWIB // Byte offset to r6 + .declare SRC_YD Base=r6 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // For read and write, 8 GRFs + .declare SRC_YW Base=r6 ElementSize=2 SrcRegion=REGION(8,1) Type=uw + .declare SRC_YB Base=r6 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs + + #define SRC_MB_U_BASE 192 //6*GRFWIB // seperate thread from Y // Byte offset to r6 + .declare SRC_UD Base=r6 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // For read and write, 2 GRFs + .declare SRC_UW Base=r6 ElementSize=2 SrcRegion=REGION(16,1) Type=uw // For read and write, 4 GRFs + .declare SRC_UB Base=r6 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 2 GRFs + + #define SRC_MB_V_BASE 193 // 6*GRFWIB+1 // NV12 // Byte offset to r6.1 + .declare SRC_VD Base=r6.1 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // For read and write, 2 GRFs + .declare SRC_VW Base=r6.1 ElementSize=2 SrcRegion=REGION(16,1) Type=uw // For read and write, 4 GRFs + .declare SRC_VB Base=r6.1 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 2 GRFs + +#else // No kernel specified, define nothing. + +.reg_count_total 64 +.reg_count_payload 2 + + #define SRCAOFF r1.0:ud // Offset into alpha data + #define SRCOFF r1.1:ud // Offset into source YUV data + #define ORIX r1.4 // :w, H. origin of the destination block in pel + #define ORIY r1.5 // :w, V. origin of the destination block in pel + +#endif + +// ----------- Message Payload Header fields------------ +// +#define IDP r0.2:ud // Interface Descriptor Pointer +#define BTP r0.4:ud // Binding Table Pointer + +// ----------- Common Message Descriptor ------------ +// +#ifdef DEV_ILK +#define GW_DCN // Should be enabled only for ILK-B0 and beyond +#define MSG_GW 0x03 // Message Gateway +#define MSG_GW_EOT 0x23 // Message Gateway plus EOT bit set (For ILK only) +#define DAPREAD 0x04 // Data Port Read Extended Message Descriptor, +#define DAPWRITE 0x05 // Data Port Write Extended Message Descriptor, +#define URBWRITE 0x06 // URB +#define TS 0x07 // Thread Spawner Extended Message Descriptor +#define TS_EOT 0x27 // End of Thread Extended Message Descriptor + +#define EOTMSGDSC 0x02000000 // End of Thread Message Descriptor /w URB handle dereferenced (used by root kernel) +#define CHILD_EOTMSGDSC 0x02000012 // End of Child Thread Message Descriptor w/o URB handle dereferenced + +// Data Port Message Descriptor +#define DWBRMSGDSC_RC 0x02086000 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_TF 0x02086600 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_BF 0x02086700 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_SC 0x0208A000 // DWORD Block Read Message Descriptor, reading from sampler cache = A. +#define DWBRMSGDSC_SC_TF 0x0208E600 // DWORD Block Read Message Descriptor, reading top field from field mode sampler cache. +#define DWBRMSGDSC_SC_BF 0x0208E700 // DWORD Block Read Message Descriptor, reading bottom field from field mode sampler cache. + +#define ILDBRMSGDSC 0x02085800 // AVC ILDB Control Data Read Msg Desc on Bearlake-C + +#define DWBWMSGDSC 0x02082000 // DWORD Block Write Message Descriptor +#define DWBWMSGDSC_WC 0x0218A000 // DWORD Block Write Message Descriptor + write commit + +// URB Message Descriptor +#define URBWMSGDSC 0x02080000 // URB Write Message Descriptor + +// Thread Spawner Message Descriptor +#define TSMSGDSC 0x02000001 + +// Message Gateway Message Descriptors +#define OGWMSGDSC 0x02000000 // OpenGateway Message Descriptor +#define CGWMSGDSC 0x02000001 // CloseGateway Message Descriptor +#define FWDMSGDSC 0x02000002 // ForwardMsg Message Descriptor +#define NOTIFYMSG 0x00008000 // Send notification with ForwardMsg message + +#define RESP_LEN(len) 0x100000*len +#define MSG_LEN(len) 0x2000000*len + +#else // Pre DEV_ILK + +#define MSG_GW +#define MSG_GW_EOT +#define DAPREAD +#define DAPWRITE +#define URBWRITE +#define TS +#define TS_EOT + +#define EOTMSGDSC 0x87100000 // End of Thread Message Descriptor /w URB handle dereferenced (used by root kernel) +#define CHILD_EOTMSGDSC 0x87100012 // End of Child Thread Message Descriptor w/o URB handle dereferenced + +// Data Port Message Descriptor +#define DWBRMSGDSC_RC 0x04106000 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_TF 0x04106600 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_BF 0x04106700 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_SC 0x0410A000 // DWORD Block Read Message Descriptor, reading from sampler cache = A. +#define DWBRMSGDSC_SC_TF 0x0410A600 // DWORD Block Read Message Descriptor, reading top field from field mode sampler cache. +#define DWBRMSGDSC_SC_BF 0x0410A700 // DWORD Block Read Message Descriptor, reading bottom field from field mode sampler cache. + +#define ILDBRMSGDSC 0x04105800 // AVC ILDB Control Data Read Msg Desc on Bearlake-C + +#define DWBWMSGDSC 0x05102000 // DWORD Block Write Message Descriptor +#define DWBWMSGDSC_WC 0x0511A000 // DWORD Block Write Message Descriptor + write commit + +// URB Message Descriptor +#define URBWMSGDSC 0x06100000 // URB Write Message Descriptor + +// Thread Spawner Message Descriptor +#define TSMSGDSC 0x07100001 + +// Message Gateway Message Descriptors +#define OGWMSGDSC 0x03100000 // OpenGateway Message Descriptor +#define CGWMSGDSC 0x03100001 // CloseGateway Message Descriptor +#define FWDMSGDSC 0x03100002 // ForwardMsg Message Descriptor +#define NOTIFYMSG 0x00008000 // Send notification with ForwardMsg message + +#define RESP_LEN(len) 0x10000*len +#define MSG_LEN(len) 0x100000*len + +// bits 15 - 0 = 01 011 000 00000000 = 0101 1000 0000 0000 = 5800 +// Render cache, AVC loop rd, +#endif // DEV_ILK + +// Enable frame/field selection in message descriptor +#define ENMSGDSCFM 0x400 // Enable MSGDSC to select frame surface +#define ENMSGDSCTF 0x600 // Enable MSGDSC to select top field surface +#define ENMSGDSCBF 0x700 // Enable MSGDSC to select bottom field surface + +#define END_THREAD send (8) NULLREG MSGHDR r0:ud TS_EOT EOTMSGDSC +#define END_CHILD_THREAD send (8) NULLREG MSGHDR r0:ud TS_EOT CHILD_EOTMSGDSC + +// ----------- Message related register ------------ +// +#define MSGHDR m1 // Message Payload Header +#define MSGHDRY m1 // Message Payload Header register for Y data +#define MSGHDRU m2 // Message Payload Header register for U data +#define MSGHDRV m3 // Message Payload Header register for V data + +#define MSGHDRC m1 // Message Payload Header register for CUR MB +#define MSGHDRL m2 // Message Payload Header register for LEFT MB +#define MSGHDRT m3 // Message Payload Header register for TOP MB + +#define MSGHDRYA m4 // Second Message Payload Header register for Y data +#define MSGSRC r63 // Message source register +#define MSGDSC a0.0:ud // Message Descriptor register (type DWORD) + +#define MH_ORI MSGSRC.0 // DWORD block R/W message header block offset +#define MH_ORIX MSGSRC.0 // DWORD block R/W message header X offset +#define MH_ORIY MSGSRC.1 // DWORD block R/W message header Y offset +#define MH_SIZE MSGSRC.2 // DWORD block R/W message header block width & height + + +// M2 - M9 for message data payload +.declare MSGPAYLOADB Base=m2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare MSGPAYLOADW Base=m2 ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare MSGPAYLOADD Base=m2 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare MSGPAYLOADF Base=m2 ElementSize=4 SrcRegion=REGION(8,1) Type=f + +// End of ILDB_header.inc + +#endif // !defined(__ILDB_HEADER__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data.asm new file mode 100644 index 000000000..53c4489db --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data.asm @@ -0,0 +1,110 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_ILDB_Cntrl_Data.asm +// +// This module loads AVC ILDB control data for one MB. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// CNTRL_DATA_D: CNTRL_DATA_D Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_CNTRL_DATA: Binding table index of control data surface +// +//---------------------------------------------------------------- + + // We need to get control data offset for the bottom MB in mbaff mode. + // That is, get f0.1=1 if MbaffFlag==1 && BotFieldFlag==1 + and (1) CTemp1_W:uw BitFields:uw MbaffFlag+BotFieldFlag:uw // Mute all other bits + + and.nz.f0.0 (1) null:w BitFields:w CntlDataExpFlag:w // Get CntlDataExpFlag + + cmp.e.f0.1 (1) NULLREGW CTemp1_W:uw MbaffFlag+BotFieldFlag:uw // Check mbaff and bot flags + + (f0.0) jmpi ILDB_LABEL(READ_BLC_CNTL_DATA) + + // On Crestline, MB control data in memory occupy 64 DWs (expanded). +// mov (1) MSGSRC.0<1>:ud 0:w { NoDDClr } // Block origin X +// mov (1) MSGSRC.1<1>:ud CntrlDataOffsetY:ud { NoDDClr, NoDDChk } // Block origin Y +// mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16=256 bytes) + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:uw { NoDDClr } // Block origin X,Y + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16=256 bytes) + + (f0.1) add (1) MSGSRC.1:ud MSGSRC.1:ud 16:w // +16 to for bottom MB in a pair + + send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD DWBRMSGDSC_SC+0x00080000+BI_CNTRL_DATA // Receive 8 GRFs + jmpi ILDB_LABEL(READ_CNTL_DATA_DONE) + + +ILDB_LABEL(READ_BLC_CNTL_DATA): + // On Bearlake-C, MB control data in memory occupy 16 DWs. Data port returns 8 GRFs with expanded control data. + + // Global offset + mov (1) MSGSRC.2:ud CntrlDataOffsetY:ud // CntrlDataOffsetY is the global offset + + (f0.1) add (1) MSGSRC.2:ud MSGSRC.2:ud 64:w // +64 to the next MB control data (bot MB) + + send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(8)+ILDBRMSGDSC+BI_CNTRL_DATA // Receive 8 GRFs + +ILDB_LABEL(READ_CNTL_DATA_DONE): + +// End of load_ILDB_Cntrl_Data.asm + + + + +// AVC ILDB control data message header format + +//DWord Bit Description +//M0.7 31:0 Debug +//M0.6 31:0 Debug +//M0.5 31:8 Ignored +// 7:0 Dispatch ID. // This ID is assigned by the fixed function unit and is a unique identifier for the thread. It is used to free up resources used by the thread upon thread completion. +//M0.4 31:0 Ignored +//M0.3 31:0 Ignored +//M0.2 31:0 Global Offset. Specifies the global byte offset into the buffer. + // This offset must be OWord aligned (bits 3:0 MBZ) Format = U32 Range = [0,FFFFFFF0h] +//M0.1 31:0 Ignored +//M0.0 31:0 Ignored + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_16DW.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_16DW.asm new file mode 100644 index 000000000..9d02f265a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_16DW.asm @@ -0,0 +1,92 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_ILDB_Cntrl_Data_16DW.asm +// +// This module loads AVC ILDB 64DW control data for one MB CTG. +// Dataport expands from 16DW to 64DW. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// CNTRL_DATA_D: CNTRL_DATA_D Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_CNTRL_DATA: Binding table index of control data surface +// +//---------------------------------------------------------------- + +// On CTG, MB control data in memory occupy 16 DWs. Data port returns 8 GRFs with expanded control data. + +#if defined(_MBAFF) + // We need to get control data offset for the bottom MB in mbaff mode. + // That is, get f0.1=1 if MbaffFlag==1 && BotFieldFlag==1 +// and (1) CTemp1_W:uw BitFields:uw MbaffFlag+BotFieldFlag:uw // Mute all other bits +// cmp.e.f0.1 (1) NULLREGW CTemp1_W:uw MbaffFlag+BotFieldFlag:uw // Check mbaff and bot flags + + and.ne.f0.1 (1) NULLREGW BitFields:uw BotFieldFlag:uw + + // Global offset + mov (1) MSGSRC.2:ud CntrlDataOffsetY:ud + + (f0.1) add (1) MSGSRC.2:ud MSGSRC.2:ud 64:w // +64 to the next MB control data (bot MB) +#endif + + send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(8)+ILDBRMSGDSC+BI_CNTRL_DATA // Receive 8 GRFs + +// End of load_ILDB_Cntrl_Data_16DW.asm + + + +// AVC ILDB control data message header format + +//DWord Bit Description +//M0.7 31:0 Debug +//M0.6 31:0 Debug +//M0.5 31:8 Ignored +// 7:0 Dispatch ID. // This ID is assigned by the fixed function unit and is a unique identifier for the thread. It is used to free up resources used by the thread upon thread completion. +//M0.4 31:0 Ignored +//M0.3 31:0 Ignored +//M0.2 31:0 Global Offset. Specifies the global byte offset into the buffer. + // This offset must be OWord aligned (bits 3:0 MBZ) Format = U32 Range = [0,FFFFFFF0h] +//M0.1 31:0 Ignored +//M0.0 31:0 Ignored + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_22DW.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_22DW.asm new file mode 100644 index 000000000..be2ddf911 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_22DW.asm @@ -0,0 +1,66 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_ILDB_Cntrl_Data_22DW.asm +// +// ********** Apple only module ********** +// +// This module loads AVC ILDB 22DW control data for one MB for CLN. +// The reduced control data set is for progressive picture ONLY. +// +// Control data memory layout for each MB is 8x11 = 88 bytes. +// It ocuppies 3 GRFs after reading in. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// CNTRL_DATA_D: CNTRL_DATA_D Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 3 GRFs +// +// Binding table index: +// BI_CNTRL_DATA: Binding table index of control data surface +// +//---------------------------------------------------------------- + + mul (1) MSGSRC.0<1>:ud ORIX:uw 8:uw { NoDDClr } // Block origin X + mul (1) MSGSRC.1<1>:ud ORIY:uw 11:uw { NoDDClr, NoDDChk } // Block origin Y + mov (1) MSGSRC.2<1>:ud 0x000A0007:ud { NoDDChk } // Block width and height (8x11=88 bytes) + + send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(3)+DWBRMSGDSC_SC+BI_CNTRL_DATA // Receive 3 GRFs + +// End of load_ILDB_Cntrl_Data_22DW.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_64DW.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_64DW.asm new file mode 100644 index 000000000..ffd168975 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Load_ILDB_Cntrl_Data_64DW.asm @@ -0,0 +1,72 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_ILDB_Cntrl_Data_64DW.asm +// +// This module loads AVC ILDB 64DW control data for one MB for CLN. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// CNTRL_DATA_D: CNTRL_DATA_D Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_CNTRL_DATA: Binding table index of control data surface +// +//---------------------------------------------------------------- + +// On CLN, MB control data in memory occupy 64 DWs. + +#if defined(_MBAFF) + // We need to get control data offset for the bottom MB in mbaff mode. + // That is, set f0.1=1 if MbaffFlag==1 && BotFieldFlag==1 + and (1) acc0.0:uw BitFields:uw MbaffFlag+BotFieldFlag:uw // Mute all other bits + cmp.e.f0.1 (1) NULLREGW acc0.0:uw MbaffFlag+BotFieldFlag:uw // Check mbaff and bot flags +#endif // CTemp1_W + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:uw { NoDDClr } // Block origin X,Y + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16=256 bytes) + +#if defined(_MBAFF) + (f0.1) add (1) MSGSRC.1:ud MSGSRC.1:ud 16:w // +16 to the bottom MB control data (bot MB) +#endif + + send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(8)+DWBRMSGDSC_SC+BI_CNTRL_DATA // Receive 8 GRFs + +// End of load_ILDB_Cntrl_Data_64DW.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.am new file mode 100644 index 000000000..8cc56221b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.am @@ -0,0 +1,98 @@ +INTEL_ILDB_INC = \ + AVC_ILDB.inc \ + Child_Undefs.inc \ + ILDB_header.inc \ + Root_Undefs.inc \ + $(NULL) + +INTEL_ILDB_ASM = \ + AVC_ILDB_Child_Field_UV.asm \ + AVC_ILDB_Child_Field_Y.asm \ + AVC_ILDB_Child_Mbaff_UV.asm \ + AVC_ILDB_Child_Mbaff_Y.asm \ + AVC_ILDB_Child_UV.asm \ + AVC_ILDB_Child_Y.asm \ + AVC_ILDB_Chroma_Core.asm \ + AVC_ILDB_Chroma_Core_Mbaff.asm \ + AVC_ILDB_CloseGateway.asm \ + AVC_ILDB_Dep_Check.asm \ + AVC_ILDB_Filter_Mbaff_UV_h.asm \ + AVC_ILDB_Filter_Mbaff_UV_v.asm \ + AVC_ILDB_Filter_Mbaff_Y_h.asm \ + AVC_ILDB_Filter_Mbaff_Y_v.asm \ + AVC_ILDB_Filter_UV_h.asm \ + AVC_ILDB_Filter_UV_v.asm \ + AVC_ILDB_Filter_Y_h.asm \ + AVC_ILDB_Filter_Y_v.asm \ + AVC_ILDB_ForwardMsg.asm \ + AVC_ILDB_LumaThrdLimit.asm \ + AVC_ILDB_Luma_Core.asm \ + AVC_ILDB_Luma_Core_Mbaff.asm \ + AVC_ILDB_OpenGateway.asm \ + AVC_ILDB_Root_Field_UV.asm \ + AVC_ILDB_Root_Field_Y.asm \ + AVC_ILDB_Root_Mbaff_UV.asm \ + AVC_ILDB_Root_Mbaff_Y.asm \ + AVC_ILDB_Root_UV.asm \ + AVC_ILDB_Root_Y.asm \ + AVC_ILDB_Spawn.asm \ + AVC_ILDB_SpawnChild.asm \ + AVC_ILDB_SpawnChromaRoot.asm \ + Load_ILDB_Cntrl_Data.asm \ + Load_ILDB_Cntrl_Data_16DW.asm \ + Load_ILDB_Cntrl_Data_22DW.asm \ + Load_ILDB_Cntrl_Data_64DW.asm \ + SetupVPKernel.asm \ + TransposeNV12_16x16.asm \ + TransposeNV12_4x16.asm \ + Transpose_Cur_UV_2x8.asm \ + Transpose_Cur_UV_8x8.asm \ + Transpose_Cur_UV_Right_Most_2x8.asm \ + Transpose_Cur_Y_16x16.asm \ + Transpose_Cur_Y_4x16.asm \ + Transpose_Cur_Y_Right_Most_4x16.asm \ + Transpose_Left_UV_2x8.asm \ + Transpose_Left_Y_4x16.asm \ + loadNV12_16x16T.asm \ + loadNV12_16x4.asm \ + load_Cur_UV_8x8T.asm \ + load_Cur_UV_8x8T_Mbaff.asm \ + load_Cur_UV_Right_Most_2x8.asm \ + load_Cur_Y_16x16T.asm \ + load_Cur_Y_16x16T_Mbaff.asm \ + load_Cur_Y_Right_Most_4x16.asm \ + load_Left_UV_2x8T.asm \ + load_Left_UV_2x8T_Mbaff.asm \ + load_Left_Y_4x16T.asm \ + load_Left_Y_4x16T_Mbaff.asm \ + load_Top_UV_8x2.asm \ + load_Top_UV_8x2_Mbaff.asm \ + load_Top_Y_16x4.asm \ + load_Top_Y_16x4_Mbaff.asm \ + saveNV12_16x16.asm \ + saveNV12_16x4.asm \ + saveNV12_16x4T.asm \ + save_Cur_UV_8x8.asm \ + save_Cur_UV_8x8_Mbaff.asm \ + save_Cur_Y_16x16.asm \ + save_Cur_Y_16x16_Mbaff.asm \ + save_Left_UV_8x2T.asm \ + save_Left_UV_8x2T_Mbaff.asm \ + save_Left_Y_16x4T.asm \ + save_Left_Y_16x4T_Mbaff.asm \ + save_Top_UV_8x2.asm \ + save_Top_UV_8x2_Mbaff.asm \ + save_Top_Y_16x4.asm \ + save_Top_Y_16x4_Mbaff.asm \ + writeURB.asm \ + writeURB_UV_Child.asm \ + writeURB_Y_Child.asm \ + $(NULL) + +EXTRA_DIST = \ + $(INTEL_ILDB_ASM) \ + $(INTEL_ILDB_INC) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.in new file mode 100644 index 000000000..743c0fd98 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Makefile.in @@ -0,0 +1,548 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders/h264/ildb +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_ILDB_INC = \ + AVC_ILDB.inc \ + Child_Undefs.inc \ + ILDB_header.inc \ + Root_Undefs.inc \ + $(NULL) + +INTEL_ILDB_ASM = \ + AVC_ILDB_Child_Field_UV.asm \ + AVC_ILDB_Child_Field_Y.asm \ + AVC_ILDB_Child_Mbaff_UV.asm \ + AVC_ILDB_Child_Mbaff_Y.asm \ + AVC_ILDB_Child_UV.asm \ + AVC_ILDB_Child_Y.asm \ + AVC_ILDB_Chroma_Core.asm \ + AVC_ILDB_Chroma_Core_Mbaff.asm \ + AVC_ILDB_CloseGateway.asm \ + AVC_ILDB_Dep_Check.asm \ + AVC_ILDB_Filter_Mbaff_UV_h.asm \ + AVC_ILDB_Filter_Mbaff_UV_v.asm \ + AVC_ILDB_Filter_Mbaff_Y_h.asm \ + AVC_ILDB_Filter_Mbaff_Y_v.asm \ + AVC_ILDB_Filter_UV_h.asm \ + AVC_ILDB_Filter_UV_v.asm \ + AVC_ILDB_Filter_Y_h.asm \ + AVC_ILDB_Filter_Y_v.asm \ + AVC_ILDB_ForwardMsg.asm \ + AVC_ILDB_LumaThrdLimit.asm \ + AVC_ILDB_Luma_Core.asm \ + AVC_ILDB_Luma_Core_Mbaff.asm \ + AVC_ILDB_OpenGateway.asm \ + AVC_ILDB_Root_Field_UV.asm \ + AVC_ILDB_Root_Field_Y.asm \ + AVC_ILDB_Root_Mbaff_UV.asm \ + AVC_ILDB_Root_Mbaff_Y.asm \ + AVC_ILDB_Root_UV.asm \ + AVC_ILDB_Root_Y.asm \ + AVC_ILDB_Spawn.asm \ + AVC_ILDB_SpawnChild.asm \ + AVC_ILDB_SpawnChromaRoot.asm \ + Load_ILDB_Cntrl_Data.asm \ + Load_ILDB_Cntrl_Data_16DW.asm \ + Load_ILDB_Cntrl_Data_22DW.asm \ + Load_ILDB_Cntrl_Data_64DW.asm \ + SetupVPKernel.asm \ + TransposeNV12_16x16.asm \ + TransposeNV12_4x16.asm \ + Transpose_Cur_UV_2x8.asm \ + Transpose_Cur_UV_8x8.asm \ + Transpose_Cur_UV_Right_Most_2x8.asm \ + Transpose_Cur_Y_16x16.asm \ + Transpose_Cur_Y_4x16.asm \ + Transpose_Cur_Y_Right_Most_4x16.asm \ + Transpose_Left_UV_2x8.asm \ + Transpose_Left_Y_4x16.asm \ + loadNV12_16x16T.asm \ + loadNV12_16x4.asm \ + load_Cur_UV_8x8T.asm \ + load_Cur_UV_8x8T_Mbaff.asm \ + load_Cur_UV_Right_Most_2x8.asm \ + load_Cur_Y_16x16T.asm \ + load_Cur_Y_16x16T_Mbaff.asm \ + load_Cur_Y_Right_Most_4x16.asm \ + load_Left_UV_2x8T.asm \ + load_Left_UV_2x8T_Mbaff.asm \ + load_Left_Y_4x16T.asm \ + load_Left_Y_4x16T_Mbaff.asm \ + load_Top_UV_8x2.asm \ + load_Top_UV_8x2_Mbaff.asm \ + load_Top_Y_16x4.asm \ + load_Top_Y_16x4_Mbaff.asm \ + saveNV12_16x16.asm \ + saveNV12_16x4.asm \ + saveNV12_16x4T.asm \ + save_Cur_UV_8x8.asm \ + save_Cur_UV_8x8_Mbaff.asm \ + save_Cur_Y_16x16.asm \ + save_Cur_Y_16x16_Mbaff.asm \ + save_Left_UV_8x2T.asm \ + save_Left_UV_8x2T_Mbaff.asm \ + save_Left_Y_16x4T.asm \ + save_Left_Y_16x4T_Mbaff.asm \ + save_Top_UV_8x2.asm \ + save_Top_UV_8x2_Mbaff.asm \ + save_Top_Y_16x4.asm \ + save_Top_Y_16x4_Mbaff.asm \ + writeURB.asm \ + writeURB_UV_Child.asm \ + writeURB_Y_Child.asm \ + $(NULL) + +EXTRA_DIST = \ + $(INTEL_ILDB_ASM) \ + $(INTEL_ILDB_INC) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/h264/ildb/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/h264/ildb/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Root_Undefs.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Root_Undefs.inc new file mode 100644 index 000000000..e278be6a5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Root_Undefs.inc @@ -0,0 +1,57 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Modual name: Root_Undefs.inc +// +// Undefine global symbols for new process in root thread +// + +#undef READ_BI +#undef WRITE_BI + +#undef ILDB_H_INDEPENDENT +#undef ILDB_H_INDEPENDENT_CONT +#undef ILDB_H_DEPENDENT +#undef ILDB_H_DEPENDENT_SCAN +#undef ILDB_H_NO_DEPENDENT + +#undef ILDB_V_INDEPENDENT +#undef ILDB_V_INDEPENDENT_CONT +#undef ILDB_V_DEPENDENT +#undef ILDB_V_DEPENDENT_SCAN +#undef ILDB_V_NO_DEPENDENT diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/SetupVPKernel.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/SetupVPKernel.asm new file mode 100644 index 000000000..d07f19103 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/SetupVPKernel.asm @@ -0,0 +1,54 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Modual name: SetupVPKernel.asm +// +// Initial setup for running video-processing kernels +// + +#include "ILDB_header.inc" + +// +// Now, begin source code.... +// + +.code + + mov (8) MSGSRC.0<1>:ud r0.0<8;8,1>:ud // Initialize message payload header with R0 + +// End of SetupVPKernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_16x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_16x16.asm new file mode 100644 index 000000000..4ce4635b6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_16x16.asm @@ -0,0 +1,165 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: TransposeNV12_16x16.asm +// +// Transpose a 16x16 NV12 MB. The output is also in NV12 +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_YB: SRC_YB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// SRC_UW: SRC_UW Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// BUF_W: BUF_W Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDA:w +#endif + + +// Transpose Y (16x16 bytes) + +// The first step +mov (16) BUF_B(0,0)<1> SRC_YB(0,0)<16;4,1> +mov (16) BUF_B(0,16)<1> SRC_YB(2,0)<16;4,1> +mov (16) BUF_B(1,0)<1> SRC_YB(4,0)<16;4,1> +mov (16) BUF_B(1,16)<1> SRC_YB(6,0)<16;4,1> + +mov (16) BUF_B(2,0)<1> SRC_YB(0,4)<16;4,1> +mov (16) BUF_B(2,16)<1> SRC_YB(2,4)<16;4,1> +mov (16) BUF_B(3,0)<1> SRC_YB(4,4)<16;4,1> +mov (16) BUF_B(3,16)<1> SRC_YB(6,4)<16;4,1> + +mov (16) BUF_B(4,0)<1> SRC_YB(0,8)<16;4,1> +mov (16) BUF_B(4,16)<1> SRC_YB(2,8)<16;4,1> +mov (16) BUF_B(5,0)<1> SRC_YB(4,8)<16;4,1> +mov (16) BUF_B(5,16)<1> SRC_YB(6,8)<16;4,1> + +mov (16) BUF_B(6,0)<1> SRC_YB(0,12)<16;4,1> +mov (16) BUF_B(6,16)<1> SRC_YB(2,12)<16;4,1> +mov (16) BUF_B(7,0)<1> SRC_YB(4,12)<16;4,1> +mov (16) BUF_B(7,16)<1> SRC_YB(6,12)<16;4,1> + +// The second step +mov (16) SRC_YB(0,0)<1> BUF_B(0,0)<32;8,4> +mov (16) SRC_YB(0,16)<1> BUF_B(0,1)<32;8,4> +mov (16) SRC_YB(1,0)<1> BUF_B(0,2)<32;8,4> +mov (16) SRC_YB(1,16)<1> BUF_B(0,3)<32;8,4> + +mov (16) SRC_YB(2,0)<1> BUF_B(2,0)<32;8,4> +mov (16) SRC_YB(2,16)<1> BUF_B(2,1)<32;8,4> +mov (16) SRC_YB(3,0)<1> BUF_B(2,2)<32;8,4> +mov (16) SRC_YB(3,16)<1> BUF_B(2,3)<32;8,4> + +mov (16) SRC_YB(4,0)<1> BUF_B(4,0)<32;8,4> +mov (16) SRC_YB(4,16)<1> BUF_B(4,1)<32;8,4> +mov (16) SRC_YB(5,0)<1> BUF_B(4,2)<32;8,4> +mov (16) SRC_YB(5,16)<1> BUF_B(4,3)<32;8,4> + +mov (16) SRC_YB(6,0)<1> BUF_B(6,0)<32;8,4> +mov (16) SRC_YB(6,16)<1> BUF_B(6,1)<32;8,4> +mov (16) SRC_YB(7,0)<1> BUF_B(6,2)<32;8,4> +mov (16) SRC_YB(7,16)<1> BUF_B(6,3)<32;8,4> + +// Y is transposed. + + +////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Src U and V are mixed in NV12 format. U on even bytes, V on odd bytes. +// Transpose by treating UV pair as a word. + + +// Src U 8x8 and V 8x8 are mixed. (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 07 07 06 06 05 05 04 04 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 33 33 32 32 31 31 30 30 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |57 57 56 56 55 55 54 54 53 53 52 52 51 51 50 50 47 47 46 46 45 45 44 44 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 73 73 72 72 71 71 70 70 67 67 66 66 65 65 64 64 63 63 62 62 61 61 60 60| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// First step (16) <1>:w <==== <8;4,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |33 33 32 32 31 31 30 30 23 23 22 22 21 21 20 20 13 13 12 12 11 11 10 10 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 73 72 72 71 71 70 70 63 63 62 62 61 61 60 60 53 53 52 52 51 51 50 50 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 27 27 26 26 25 25 24 24 17 17 16 16 15 15 14 14 07 07 06 06 05 05 04 04| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 67 67 66 66 65 65 64 64 57 57 56 56 55 55 54 54 47 47 46 46 45 45 44 44| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Transpose UV (8x8 words), The first step +mov (16) BUF_W(0,0)<1> SRC_UW(0,0)<8;4,1> +mov (16) BUF_W(1,0)<1> SRC_UW(2,0)<8;4,1> +mov (16) BUF_W(2,0)<1> SRC_UW(0,4)<8;4,1> +mov (16) BUF_W(3,0)<1> SRC_UW(2,4)<8;4,1> + + +// Second step (16) <1>:w <=== <16;4,4>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 73 63 63 53 53 43 43 33 33 23 23 13 13 03 03 72 72 62 62 52 52 42 42 32 32 22 22 12 12 02 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |75 75 65 65 55 55 45 45 35 35 25 25 15 15 05 05 74 74 64 64 54 54 44 44 34 34 24 24 14 14 04 04| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 67 67 57 57 47 47 37 37 27 27 17 17 07 07 76 76 66 66 56 56 46 46 36 36 26 26 16 16 06 06| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Transpose UV (8x8 words), The second step +mov (8) SRC_UW(0,0)<1> BUF_W(0,0)<16;4,4> +mov (8) SRC_UW(0,8)<1> BUF_W(0,1)<16;4,4> +mov (8) SRC_UW(1,0)<1> BUF_W(0,2)<16;4,4> +mov (8) SRC_UW(1,8)<1> BUF_W(0,3)<16;4,4> +mov (8) SRC_UW(2,0)<1> BUF_W(2,0)<16;4,4> +mov (8) SRC_UW(2,8)<1> BUF_W(2,1)<16;4,4> +mov (8) SRC_UW(3,0)<1> BUF_W(2,2)<16;4,4> +mov (8) SRC_UW(3,8)<1> BUF_W(2,3)<16;4,4> + +// U and V are now transposed and separated. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_4x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_4x16.asm new file mode 100644 index 000000000..fca485835 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/TransposeNV12_4x16.asm @@ -0,0 +1,124 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: TransposeNV12_4x16.asm +// +// Transpose a 4x16 internal planar to 16x4 internal planar block +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_YB: SRC_YB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// SRC_UW: SRC_UB Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// BUF_W: BUF_W Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDB:w +#endif + +// Transpose Y (4x16) right most 4 columns + +// The first step +mov (16) BUF_B(0,0)<1> SRC_YB(0,0)<16;4,1> // Read 2 rows, write 1 row +mov (16) BUF_B(0,16)<1> SRC_YB(2,0)<16;4,1> +mov (16) BUF_B(1,0)<1> SRC_YB(4,0)<16;4,1> +mov (16) BUF_B(1,16)<1> SRC_YB(6,0)<16;4,1> + +// The second step +mov (16) BUF_B(2,0)<1> BUF_B(0,0)<32;8,4> // Read 2 rows, write 1 row +mov (16) BUF_B(2,16)<1> BUF_B(0,1)<32;8,4> +mov (16) BUF_B(3,0)<1> BUF_B(0,2)<32;8,4> +mov (16) BUF_B(3,16)<1> BUF_B(0,3)<32;8,4> + +// Y is now transposed. the result is in BUF_B(2) and BUF_B(3). + + + +// Transpose UV (4x8), right most 2 columns in word +// Use BUF_W(0) as temp buf + +// Src U 8x8 and V 8x8 are mixed. (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 07 07 06 06 05 05 04 04 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 33 33 32 32 31 31 30 30 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |57 57 56 56 55 55 54 54 53 53 52 52 51 51 50 50 47 47 46 46 45 45 44 44 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 73 73 72 72 71 71 70 70 67 67 66 66 65 65 64 64 63 63 62 62 61 61 60 60| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// First step (8) <1>:w <==== <8;2,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +mov (8) BUF_W(0,0)<1> SRC_UW(0,0)<8;2,1> +mov (8) BUF_W(0,8)<1> SRC_UW(2,0)<8;2,1> + +// Second step (16) <1>:w <==== <1;8,2>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +mov (16) BUF_W(1,0)<1> BUF_W(0,0)<1;8,2> + +// UV are now transposed. the result is in BUF_W(1). + + + +//The first step +//mov (16) BUF_B(0,0)<1> SRC_UW(0,0)<8;2,1> // Read 2 rows, write 1 row +// The second step +//mov (8) SRC_UB(4,0)<1> BUF_B(0,0)<16;8,2> // Read 1 row, write 1 row +//mov (8) SRC_UB(4,8)<1> BUF_B(0,1)<16;8,2> // Read 1 row, write 1 row + +// Transpose V (8x8), right most 2 columns +// The first step +//mov (16) BUF_B(0,0)<1> SRC_VB(0,1)<8;2,1> // Read 2 rows, write 1 row +// The second step +//mov (8) SRC_UB(4,16)<1> BUF_B(0,0)<16;8,2> // Read 1 row, write 1 row +//mov (8) SRC_UB(4,24)<1> BUF_B(0,1)<16;8,2> // Read 1 row, write 1 row + +// U and V are now transposed. the result is in BUF_B(4). + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_2x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_2x8.asm new file mode 100644 index 000000000..51cdcb476 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_2x8.asm @@ -0,0 +1,86 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: Transpose_UV_2x8.asm +// +// Transpose UV 2x8 to 8x2 block (2x8U + 2x8V in NV12) +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_UW: SRC_UB Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +// Temp buffer: +// BUF_W: BUF_W Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDB:w +#endif + +// Transpose UV (4x8), right most 2 columns in word +// Use BUF_W(0) as temp buf + +// Src U 8x8 and V 8x8 are mixed. (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 07 07 06 06 05 05 04 04 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 33 33 32 32 31 31 30 30 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |57 57 56 56 55 55 54 54 53 53 52 52 51 51 50 50 47 47 46 46 45 45 44 44 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 73 73 72 72 71 71 70 70 67 67 66 66 65 65 64 64 63 63 62 62 61 61 60 60| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// First step (8) <1>:w <==== <8;2,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 67 67 66 66 57 57 56 56 47 47 46 46 37 37 36 36 27 27 26 26 17 17 16 16 07 07 06 06| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +mov (8) LEFT_TEMP_W(0,0)<1> SRC_UW(0,6)<8;2,1> { NoDDClr } +mov (8) LEFT_TEMP_W(0,8)<1> SRC_UW(2,6)<8;2,1> { NoDDChk } + +// Second step (16) <1>:w <==== <1;8,2>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 67 67 57 57 47 47 37 37 27 27 17 17 07 07 76 76 66 66 56 56 46 46 36 36 26 26 16 16 06 06| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +mov (16) LEFT_TEMP_W(1,0)<1> LEFT_TEMP_W(0,0)<1;8,2> + +// UV are now transposed. the result is in BUF_W(1) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_8x8.asm new file mode 100644 index 000000000..6d9b531c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_8x8.asm @@ -0,0 +1,115 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: Transpose_UV_8x8.asm +// +// Transpose a 8x8 UV block. (8x8U + 8x8V) The output is also in NV12 +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_UW: SRC_UW Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +// Temp buffer: +// BUF_W: BUF_W Base=rxx ElementSize=2 SrcRegion=REGION(8,1) Type=uw // 4 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDA:w +#endif + +////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Src U and V are mixed in NV12 format. U on even bytes, V on odd bytes. +// Transpose by treating UV pair as a word. + + +// Src U 8x8 and V 8x8 are mixed. (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 07 07 06 06 05 05 04 04 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 33 33 32 32 31 31 30 30 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |57 57 56 56 55 55 54 54 53 53 52 52 51 51 50 50 47 47 46 46 45 45 44 44 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 73 73 72 72 71 71 70 70 67 67 66 66 65 65 64 64 63 63 62 62 61 61 60 60| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// First step (16) <1>:w <==== <8;4,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |33 33 32 32 31 31 30 30 23 23 22 22 21 21 20 20 13 13 12 12 11 11 10 10 03 03 02 02 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 73 72 72 71 71 70 70 63 63 62 62 61 61 60 60 53 53 52 52 51 51 50 50 43 43 42 42 41 41 40 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |37 37 36 36 35 35 34 34 27 27 26 26 25 25 24 24 17 17 16 16 15 15 14 14 07 07 06 06 05 05 04 04| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 76 76 75 75 74 74 67 67 66 66 65 65 64 64 57 57 56 56 55 55 54 54 47 47 46 46 45 45 44 44| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Transpose UV (8x8 words), The first step +mov (16) CUR_TEMP_W(0,0)<1> SRC_UW(0,0)<8;4,1> +mov (16) CUR_TEMP_W(1,0)<1> SRC_UW(2,0)<8;4,1> +mov (16) CUR_TEMP_W(2,0)<1> SRC_UW(0,4)<8;4,1> +mov (16) CUR_TEMP_W(3,0)<1> SRC_UW(2,4)<8;4,1> + + +// Second step (16) <1>:w <=== <16;4,4>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 73 63 63 53 53 43 43 33 33 23 23 13 13 03 03 72 72 62 62 52 52 42 42 32 32 22 22 12 12 02 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |75 75 65 65 55 55 45 45 35 35 25 25 15 15 05 05 74 74 64 64 54 54 44 44 34 34 24 24 14 14 04 04| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |77 77 67 67 57 57 47 47 37 37 27 27 17 17 07 07 76 76 66 66 56 56 46 46 36 36 26 26 16 16 06 06| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Transpose UV (8x8 words), The second step +mov (8) SRC_UW(0,0)<1> CUR_TEMP_W(0,0)<16;4,4> { NoDDClr } +mov (8) SRC_UW(0,8)<1> CUR_TEMP_W(0,1)<16;4,4> { NoDDChk } +mov (8) SRC_UW(1,0)<1> CUR_TEMP_W(0,2)<16;4,4> { NoDDClr } +mov (8) SRC_UW(1,8)<1> CUR_TEMP_W(0,3)<16;4,4> { NoDDChk } +mov (8) SRC_UW(2,0)<1> CUR_TEMP_W(2,0)<16;4,4> { NoDDClr } +mov (8) SRC_UW(2,8)<1> CUR_TEMP_W(2,1)<16;4,4> { NoDDChk } +mov (8) SRC_UW(3,0)<1> CUR_TEMP_W(2,2)<16;4,4> { NoDDClr } +mov (8) SRC_UW(3,8)<1> CUR_TEMP_W(2,3)<16;4,4> { NoDDChk } + +// U and V are now transposed and separated. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_Right_Most_2x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_Right_Most_2x8.asm new file mode 100644 index 000000000..02d9621ba --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_UV_Right_Most_2x8.asm @@ -0,0 +1,55 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Transpose Cur MB Right Most 2x8 to 8x2 +// Assume source is LEFT_TEMP_W(0), and detination is LEFT_TEMP_W(1) + +// Input from dport for transpose: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Output of transpose: <1> <=== <16;8,2>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// mov (8) LEFT_TEMP_W(1,0)<1> LEFT_TEMP_W(0,0)<16;8,2> { NoDDClr } +// mov (8) LEFT_TEMP_W(1,8)<1> LEFT_TEMP_W(0,1)<16;8,2> { NoDDChk } + + mov (16) LEFT_TEMP_W(1,0)<1> LEFT_TEMP_W(0,0)<1;8,2> diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_16x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_16x16.asm new file mode 100644 index 000000000..c09e5b331 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_16x16.asm @@ -0,0 +1,104 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: Transpose_Y_16x16.asm +// +// Transpose Y 16x16 block. +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_YB: SRC_YB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// +// Temp buffer: +// CUR_TEMP_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDA:w +#endif + + +// Transpose Y (16x16 bytes) + +// The first step +mov (16) CUR_TEMP_B(0,0)<1> SRC_YB(0,0)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(0,16)<1> SRC_YB(2,0)<16;4,1> { NoDDChk } +mov (16) CUR_TEMP_B(1,0)<1> SRC_YB(4,0)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(1,16)<1> SRC_YB(6,0)<16;4,1> { NoDDChk } + +mov (16) CUR_TEMP_B(2,0)<1> SRC_YB(0,4)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(2,16)<1> SRC_YB(2,4)<16;4,1> { NoDDChk } +mov (16) CUR_TEMP_B(3,0)<1> SRC_YB(4,4)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(3,16)<1> SRC_YB(6,4)<16;4,1> { NoDDChk } + +mov (16) CUR_TEMP_B(4,0)<1> SRC_YB(0,8)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(4,16)<1> SRC_YB(2,8)<16;4,1> { NoDDChk } +mov (16) CUR_TEMP_B(5,0)<1> SRC_YB(4,8)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(5,16)<1> SRC_YB(6,8)<16;4,1> { NoDDChk } + +mov (16) CUR_TEMP_B(6,0)<1> SRC_YB(0,12)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(6,16)<1> SRC_YB(2,12)<16;4,1> { NoDDChk } +mov (16) CUR_TEMP_B(7,0)<1> SRC_YB(4,12)<16;4,1> { NoDDClr } +mov (16) CUR_TEMP_B(7,16)<1> SRC_YB(6,12)<16;4,1> { NoDDChk } + +// The second step +mov (16) SRC_YB(0,0)<1> CUR_TEMP_B(0,0)<32;8,4> { NoDDClr } +mov (16) SRC_YB(0,16)<1> CUR_TEMP_B(0,1)<32;8,4> { NoDDChk } +mov (16) SRC_YB(1,0)<1> CUR_TEMP_B(0,2)<32;8,4> { NoDDClr } +mov (16) SRC_YB(1,16)<1> CUR_TEMP_B(0,3)<32;8,4> { NoDDChk } + +mov (16) SRC_YB(2,0)<1> CUR_TEMP_B(2,0)<32;8,4> { NoDDClr } +mov (16) SRC_YB(2,16)<1> CUR_TEMP_B(2,1)<32;8,4> { NoDDChk } +mov (16) SRC_YB(3,0)<1> CUR_TEMP_B(2,2)<32;8,4> { NoDDClr } +mov (16) SRC_YB(3,16)<1> CUR_TEMP_B(2,3)<32;8,4> { NoDDChk } + +mov (16) SRC_YB(4,0)<1> CUR_TEMP_B(4,0)<32;8,4> { NoDDClr } +mov (16) SRC_YB(4,16)<1> CUR_TEMP_B(4,1)<32;8,4> { NoDDChk } +mov (16) SRC_YB(5,0)<1> CUR_TEMP_B(4,2)<32;8,4> { NoDDClr } +mov (16) SRC_YB(5,16)<1> CUR_TEMP_B(4,3)<32;8,4> { NoDDChk } + +mov (16) SRC_YB(6,0)<1> CUR_TEMP_B(6,0)<32;8,4> { NoDDClr } +mov (16) SRC_YB(6,16)<1> CUR_TEMP_B(6,1)<32;8,4> { NoDDChk } +mov (16) SRC_YB(7,0)<1> CUR_TEMP_B(6,2)<32;8,4> { NoDDClr } +mov (16) SRC_YB(7,16)<1> CUR_TEMP_B(6,3)<32;8,4> { NoDDChk } + +// Y is transposed. diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_4x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_4x16.asm new file mode 100644 index 000000000..f5768b25e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_4x16.asm @@ -0,0 +1,105 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +////////////////////////////////////////////////////////////////////////////////////////// +// Module name: Transpose_Y_4x16.asm +// +// Transpose a 4x16 internal planar to 16x4 internal planar block. +// The src block is 16x16. Right moft 4 columns are transposed. +// +//---------------------------------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region is :ub +// SRC_YB: SRC_YB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// +////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDDB:w +#endif + +// Transpose Y (4x16) right most 4 columns +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |1f 1e 1d 1c 1b 1a 19 18 17 16 15 14 13 12 11 10 0f 0e 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |3f 3e 3d 3c 3b 3a 39 38 37 36 35 34 33 32 31 30 2f 2e 2d 2c 2b 2a 29 28 27 26 25 24 23 22 21 20| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |5f 5e 5d 5c 5b 5a 59 58 57 56 55 54 53 52 51 50 4f 4e 4d 4c 4b 4a 49 48 47 46 45 44 43 42 41 40| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |7f 7e 7d 7c 7b 7a 79 78 77 76 75 74 73 72 71 70 6f 6e 6d 6c 6b 6a 69 68 67 66 65 64 63 62 61 60| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |9f 9e 9d 9c 9b 9a 99 98 97 96 95 94 93 92 91 90 8f 8e 8d 8c 8b 8a 89 88 87 86 85 84 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |bf be bd bc bb ba b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 af ae ad ac ab aa a9 a8 a7 a6 a5 a4 a3 a2 a1 a0| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |df de dd dc db da d9 d8 d7 d6 d5 d4 d3 d2 d1 d0 cf ce cd cc cb ca c9 c8 c7 c6 c5 c4 c3 c2 c1 c0| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |ff fe fd fc fb fa f9 f8 f7 f6 f5 f4 f3 f2 f1 f0 ef ee ed ec eb ea e9 e8 e7 e6 e5 e4 e3 e2 e1 e0| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// The first step +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |7f 7e 7d 7c 6f 6e 6d 6c 5f 5e 5d 5c 4f 4e 4d 4c 3f 3e 3d 3c 2f 2e 2d 2c 1f 1e 1d 1c 0f 0e 0d 0c| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |ff fe fd fc ef ee ed ec df de dd dc cf ce cd cc bf be bd bc af ae ad ac 9f 9e 9d 9c 8f 8e 8d 8c| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// The second step +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |fd ed dd cd bd ad 9d 8d 7d 6d 5d 4d 3d 2d 1d 0d fc ec dc cc bc ac 9c 8c 7c 6c 5c 4c 3c 2c 1c 0c| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |ff ef df cf bf af 9f 8f 7f 6f 5f 4f 3f 2f 1f 0f fe ee de ce be ae 9e 8e 7e 6e 5e 4e 3e 2e 1e 0e| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + +mov (16) LEFT_TEMP_B(0,0)<1> SRC_YB(0,12)<16;4,1> { NoDDClr } +mov (16) LEFT_TEMP_B(0,16)<1> SRC_YB(2,12)<16;4,1> { NoDDChk } +mov (16) LEFT_TEMP_B(1,0)<1> SRC_YB(4,12)<16;4,1> { NoDDClr } +mov (16) LEFT_TEMP_B(1,16)<1> SRC_YB(6,12)<16;4,1> { NoDDChk } + +// The second step +mov (16) LEFT_TEMP_B(2,0)<1> LEFT_TEMP_B(0,0)<32;8,4> { NoDDClr } +mov (16) LEFT_TEMP_B(2,16)<1> LEFT_TEMP_B(0,1)<32;8,4> { NoDDChk } +mov (16) LEFT_TEMP_B(3,0)<1> LEFT_TEMP_B(0,2)<32;8,4> { NoDDClr } +mov (16) LEFT_TEMP_B(3,16)<1> LEFT_TEMP_B(0,3)<32;8,4> { NoDDChk } + +// Y is now transposed. the result is in LEFT_TEMP_B(2) and LEFT_TEMP_B(3). diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_Right_Most_4x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_Right_Most_4x16.asm new file mode 100644 index 000000000..5f9ea6e8e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Cur_Y_Right_Most_4x16.asm @@ -0,0 +1,61 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Transpose cur Y right most 4x16 to 16x4 +// Assume source is LEFT_TEMP_B(0), and detination is LEFT_TEMP_B(2) + + +// Input received from dport: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// Output of transpose: <1> <= <32;8,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + // Transpose the data, also occupy 2 GRFs + mov (16) LEFT_TEMP_B(2)<1> LEFT_TEMP_B(0, 0)<32;8,4> { NoDDClr } + mov (16) LEFT_TEMP_B(2, 16)<1> LEFT_TEMP_B(0, 1)<32;8,4> { NoDDChk } + mov (16) LEFT_TEMP_B(3)<1> LEFT_TEMP_B(0, 2)<32;8,4> { NoDDClr } + mov (16) LEFT_TEMP_B(3, 16)<1> LEFT_TEMP_B(0, 3)<32;8,4> { NoDDChk } diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_UV_2x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_UV_2x8.asm new file mode 100644 index 000000000..027982e80 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_UV_2x8.asm @@ -0,0 +1,58 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Transpose left MB 2x8 to 8x2 +// Assume source is LEFT_TEMP_W, and detination is PREV_MB_UW + +// Input from dport for transpose: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Output of transpose: <1> <=== <16;8,2>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// mov (8) PREV_MB_UW(0,0)<1> BUF_W(0,0)<16;8,2> { NoDDClr } +// mov (8) PREV_MB_UW(0,8)<1> BUF_W(0,1)<16;8,2> { NoDDChk } + +// mov (8) PREV_MB_UW(0,0)<1> LEFT_TEMP_W(0,0)<16;8,2> { NoDDClr } +// mov (8) PREV_MB_UW(0,8)<1> LEFT_TEMP_W(0,1)<16;8,2> { NoDDChk } + + mov (16) PREV_MB_UW(0,0)<1> LEFT_TEMP_W(0,0)<1;8,2> diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_Y_4x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_Y_4x16.asm new file mode 100644 index 000000000..da1f16312 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/Transpose_Left_Y_4x16.asm @@ -0,0 +1,61 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Transpose left MB 4x16 to 16x4 +// Assume source is LEFT_TEMP_B, and detination is PREV_MB_YB + + +// Input received from dport: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// Output of transpose: <1> <= <32;8,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + // Transpose the data, also occupy 2 GRFs + mov (16) PREV_MB_YB(0)<1> LEFT_TEMP_B(0, 0)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(0, 16)<1> LEFT_TEMP_B(0, 1)<32;8,4> { NoDDChk } + mov (16) PREV_MB_YB(1)<1> LEFT_TEMP_B(0, 2)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(1, 16)<1> LEFT_TEMP_B(0, 3)<32;8,4> { NoDDChk } diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x16T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x16T.asm new file mode 100644 index 000000000..d697af664 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x16T.asm @@ -0,0 +1,83 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: loadNV12_16x16T.asm +// +// Load and transpose NV12 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud (U+V for NV12) // 4 GRFs +// +// Source region is :ub. The same region as :ud region +// SRC_YB: SRC_YB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8 GRFs +// SRC_UB: SRC_UB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 2 GRFs +// SRC_VB: SRC_VB Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 2 GRFs +// +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD1:w +#endif + + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud // Block width and height (16x16) + send (8) SRC_YD(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(8)+DWBRMSGDSC_RC+BI_SRC_Y // Read 8 GRFs + + // Read U+V + asr (1) MSGSRC.1:ud MSGSRC.1:ud 1:w // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2<1>:ud 0x0007000F:ud // NV12 U+V block width and height (16x8) + send (8) SRC_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(4)+DWBRMSGDSC_RC+BI_SRC_UV // Read 4 GRFs + + #include "TransposeNV12_16x16.asm" + +// #include "Transpose_Y_16x16.asm" +// #include "Transpose_NV12_UV_16x8.asm" + +// End of loadNV12_16x16T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x4.asm new file mode 100644 index 000000000..e3d555184 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/loadNV12_16x4.asm @@ -0,0 +1,84 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Loadnv12_16X4.Asm +// +// Load Nv12 16X4 Block +// +//---------------------------------------------------------------- +// Symbols Need To Be Defined Before Including This Module +// +// Source Region In :Ud +// Src_Yd: Src_Yd Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud // 3 Grfs (2 For Y, 1 For U+V) +// +// Source Region Is :Ub. The Same Region As :Ud Region +// Src_Yb: Src_Yb Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub // 2 Grfs +// Src_Ub: Src_Ub Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub // 0.5 Grf +// Src_Vb: Src_Vb Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub // 0.5 Grf +// +// Binding Table Index: +// Bi_Src_Y: Binding Table Index Of Y Surface +// Bi_Src_UV: Binding Table Index Of UV Surface (Nv12) +// +// Temp Buffer: +// Buf_D: Buf_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud +// Buf_B: Buf_B Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD2:w +#endif + + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX<2;2,1>:w // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud // Block width and height (16x4) + send (8) PREV_MB_YD(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(2)+DWBRMSGDSC_RC+BI_SRC_Y // Read 2 GRFs + + // Read U+V + asr (1) MSGSRC.1:ud MSGSRC.1:ud 1:w // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2<1>:ud 0x0001000F:ud // NV12 U+V block width and height (16x2) + + // Load NV12 U+V tp a temp buf + send (8) BUF_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_SRC_UV // Read 1 GRF + + // Convert NV12 U+V to internal planar U and V and place them right after Y. +// mov (16) SRC_UB(0,0)<1> BUF_B(0,0)<32;16,2> +// mov (16) SRC_VB(0,0)<1> BUF_B(0,1)<32;16,2> + +// End of loadNV12_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T.asm new file mode 100644 index 000000000..61ea6e87e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T.asm @@ -0,0 +1,95 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Cur_UV_8x8T.asm +// +// Load and transpose UV 8x8 block (NV12: 8x8U and 8x8V mixed) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud (U+V for NV12) // 4 GRFs +// +// Binding table index: +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD1:w +#endif + + // Read U+V blk +#if defined(_PROGRESSIVE) + mov (1) MSGSRC.0:ud ORIX_CUR:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // NV12 U+V block width and height (16x8 bytes) + + //send (8) SRC_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DWBRMSGDSC_SC+0x00040000+BI_SRC_UV + mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC+BI_SRC_UV:ud +#endif + +#if defined(_FIELD) +// cmp.z.f0.0 (1) NULLREGW PicTypeC:w 0:w // Get pic type flag + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + // they are used later in this file + + mov (1) MSGSRC.0:ud ORIX_CUR:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // NV12 U+V block width and height (16x8 bytes) + + // Set message descriptor + + // Frame picture +// (f0.0) mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV +// (f0.0) jmpi load_UV_8x8T + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC_BF+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC_TF+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV top field + +//load_UV_8x8T: + +#endif + + send (8) SRC_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// #include "Transpose_Cur_UV_8x8.asm" + +// End of load_UV_8x8T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T_Mbaff.asm new file mode 100644 index 000000000..290e5d3a0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_8x8T_Mbaff.asm @@ -0,0 +1,92 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Cur_UV_8x8T.asm +// +// Load and transpose UV 8x8 block (NV12: 8x8U and 8x8V mixed) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud (U+V for NV12) // 4 GRFs +// +// Binding table index: +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD1:w +#endif + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read U+V + mov (1) MSGSRC.0:ud ORIX_CUR:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // NV12 U+V block width and height (16x8 bytes) + + // Set message descriptor + + (f0.0) if (1) ILDB_LABEL(ELSE_UV_8X8T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_UV_8X8T): + else (1) ILDB_LABEL(ENDIF_UV_8X8T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC_BF+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(4)+DWBRMSGDSC_SC_TF+BI_SRC_UV:ud // Read 4 GRFs from SRC_UV top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ILDB_LABEL(ENDIF_UV_8X8T): + + send (8) SRC_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// #include "Transpose_Cur_UV_8x8.asm" + +// End of load_UV_8x8T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_Right_Most_2x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_Right_Most_2x8.asm new file mode 100644 index 000000000..a8e79a89f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_UV_Right_Most_2x8.asm @@ -0,0 +1,91 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Cur_UV_Right_Most_2X8.Asm + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + +#if defined(_PROGRESSIVE) + // Read U+V, (UV MB size = 16x8) + add (1) MSGSRC.0:ud ORIX_CUR:w 12:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + send (8) LEFT_TEMP_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV +#endif + +#if defined(_FIELD) || defined(_MBAFF) + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read U+V + add (1) MSGSRC.0:ud ORIX_CUR:w 12:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + // Load NV12 U+V + + // Set message descriptor + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_2x8T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud // Read 1 GRF from SRC_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_2x8T): + else (1) ILDB_LABEL(ENDIF_Y_2x8T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y top field + + endif +ILDB_LABEL(ENDIF_Y_2x8T): + + // Read 1 GRF from DEST surface as the above MB has been deblocked. +// send (8) BUF_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +#endif + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T.asm new file mode 100644 index 000000000..9b4f57daf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T.asm @@ -0,0 +1,93 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Y_16x16T.asm +// +// Load and transpose Y 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD1:w +#endif + // Read Y + +#if defined(_PROGRESSIVE) + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16) + + //send (8) SRC_YD(0)<1> MSGHDRC MSGSRC<8;8,1>:ud DWBRMSGDSC_SMPLR+0x00080000+BI_SRC_Y + mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC+BI_SRC_Y:ud +#endif + + +#if defined(_FIELD) +// cmp.z.f0.0 (1) NULLREGW PicTypeC:w 0:w // Get pic type flag + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + // they are used later in this file + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16) + + // Set message descriptor + // Frame picture +// (f0.0) mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y +// (f0.0) jmpi load_Y_16x16T + + // Non frame picture + (f0.1) mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC_BF+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC_TF+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y top field + +//load_Y_16x16T: + +#endif + + send (8) SRC_YD(0)<1> MSGHDRC MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// #include "Transpose_Cur_Y_16x16.asm" + +// End of load_Y_16x16T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T_Mbaff.asm new file mode 100644 index 000000000..b005d4974 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_16x16T_Mbaff.asm @@ -0,0 +1,92 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Y_16x16T.asm +// +// Load and transpose Y 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD1:w +#endif + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read Y + mov (2) MSGSRC.0<1>:d ORIX_CUR<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16) + + // Set message descriptor, etc. + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_16x16T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_16x16T): + else (1) ILDB_LABEL(ENDIF_Y_16x16T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC_BF+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(8)+DWBRMSGDSC_SC_TF+BI_SRC_Y:ud // Read 8 GRFs from SRC_Y top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ILDB_LABEL(ENDIF_Y_16x16T): + + send (8) SRC_YD(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// #include "Transpose_Cur_Y_16x16.asm" + +// End of load_Y_16x16T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_Right_Most_4x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_Right_Most_4x16.asm new file mode 100644 index 000000000..418ba1b55 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Cur_Y_Right_Most_4x16.asm @@ -0,0 +1,115 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Cur_Y_Right_Most_4x16.asm +// +// Load luma cur MB right most 4x16 into LEFT_TEMP_B + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + + +#if defined(_PROGRESSIVE) + // Read Y + add (1) MSGSRC.0<1>:ud ORIX_CUR:w 12:w { NoDDClr } // Block origin, move right 12 bytes + mov (1) MSGSRC.1<1>:ud ORIY_CUR:w { NoDDClr, NoDDChk } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // Block width and height (4x16) + send (8) LEFT_TEMP_D(0)<1> MSGHDRL MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y +#endif + + +#if defined(_FIELD) || defined(_MBAFF) + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read Y + add (1) MSGSRC.0<1>:ud ORIX_CUR:w 12:w { NoDDClr } // Block origin, move right 12 bytes + mov (1) MSGSRC.1<1>:ud ORIY_CUR:w { NoDDClr, NoDDChk } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // Block width and height (4x16) + + // Set message descriptor, etc. + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_4x16T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_4x16T): + else (1) ILDB_LABEL(ENDIF_Y_4x16T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y top field + + endif +ILDB_LABEL(ENDIF_Y_4x16T): + +// send (8) BUF_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRL MSGSRC<8;8,1>:ud DAPREAD MSGDSC +#endif + +// Transpose 4x16 to 16x4 + +// Input received from dport: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// Output of transpose: <1> <= <32;8,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +/* + // Transpose the data, also occupy 2 GRFs + mov (16) PREV_MB_YB(0)<1> BUF_B(0, 0)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(0, 16)<1> BUF_B(0, 1)<32;8,4> { NoDDChk } + mov (16) PREV_MB_YB(1)<1> BUF_B(0, 2)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(1, 16)<1> BUF_B(0, 3)<32;8,4> { NoDDChk } +*/ +// End of load_Y_4x16T + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T.asm new file mode 100644 index 000000000..6fdedfd97 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T.asm @@ -0,0 +1,106 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Left_UV_2X8T.Asm +// +// Load UV 8X2 Block +// +//---------------------------------------------------------------- +// Symbols ceed To be defined before including this module +// +// Source Region Is :UB +// BUF_D: BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD + +// Binding Table Index: +// BI_SRC_UV: Binding Table Index Of UV Surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + +#if defined(_PROGRESSIVE) + // Read U+V + mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + send (8) LEFT_TEMP_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV +#endif + +#if defined(_FIELD) || defined(_MBAFF) + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read U+V + mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + // Load NV12 U+V + + // Set message descriptor + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_2x8T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud // Read 1 GRF from SRC_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_2x8T): + else (1) ILDB_LABEL(ENDIF_Y_2x8T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y top field + + endif +ILDB_LABEL(ENDIF_Y_2x8T): + + // Read 1 GRF from DEST surface as the above MB has been deblocked. +// send (8) BUF_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +#endif + +// End of load_Left_UV_2x8T.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T_Mbaff.asm new file mode 100644 index 000000000..c8af1ef61 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_UV_2x8T_Mbaff.asm @@ -0,0 +1,109 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Left_UV_2X8T.Asm +// +// Load UV 8X2 Block +// +//---------------------------------------------------------------- +// Symbols ceed To be defined before including this module +// +// Source Region Is :UB +// BUF_D: BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD + +// Binding Table Index: +// BI_SRC_UV: Binding Table Index Of UV Surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read U+V + mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + // Load NV12 U+V + + // Set message descriptor + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_2x8T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud // Read 1 GRF from SRC_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_2x8T): + else (1) ILDB_LABEL(ENDIF_Y_2x8T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ILDB_LABEL(ENDIF_Y_2x8T): + + // Read 1 GRF from DEST surface as the above MB has been deblocked. +// send (8) BUF_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + + +// Input from dport for transpose: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// Output of transpose: <1> <=== <16;8,2>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +/* + mov (8) PREV_MB_UW(0,0)<1> BUF_W(0,0)<16;8,2> { NoDDClr } + mov (8) PREV_MB_UW(0,8)<1> BUF_W(0,1)<16;8,2> { NoDDChk } +*/ +// End of load_Left_UV_2x8T.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T.asm new file mode 100644 index 000000000..9e4db20e5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T.asm @@ -0,0 +1,126 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Y_4x16T.asm +// +// Load luma left MB 4x16 and transpose 4x16 to 16x4. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// PREV_MB_YD: PREV_MB_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 2 GRFs +// +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + + +#if defined(_PROGRESSIVE) + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // Block width and height (4x16) + +// mov (1) MSGDSC DWBRMSGDSC_RC+0x00020000+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y + send (8) LEFT_TEMP_D(0)<1> MSGHDRL MSGSRC<8;8,1>:ud DAPREAD RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y +#endif + + +#if defined(_FIELD) || defined(_MBAFF) + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // Block width and height (4x16) + + // Set message descriptor, etc. + + (f0.0) if (1) ILDB_LABEL(ELSE_Y_4x16T) + + // Frame picture + mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ILDB_LABEL(ELSE_Y_4x16T): + else (1) ILDB_LABEL(ENDIF_Y_4x16T) + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y top field + + endif +ILDB_LABEL(ENDIF_Y_4x16T): + +// send (8) BUF_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRL MSGSRC<8;8,1>:ud DAPREAD MSGDSC +#endif + +// Transpose 4x16 to 16x4 + +// Input received from dport: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// Output of transpose: <1> <= <32;8,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +/* + // Transpose the data, also occupy 2 GRFs + mov (16) PREV_MB_YB(0)<1> BUF_B(0, 0)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(0, 16)<1> BUF_B(0, 1)<32;8,4> { NoDDChk } + mov (16) PREV_MB_YB(1)<1> BUF_B(0, 2)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(1, 16)<1> BUF_B(0, 3)<32;8,4> { NoDDChk } +*/ +// End of load_Y_4x16T + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T_Mbaff.asm new file mode 100644 index 000000000..c42c4e48c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Left_Y_4x16T_Mbaff.asm @@ -0,0 +1,114 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: load_Y_4x16T.asm +// +// Load luma left MB 4x16 and transpose 4x16 to 16x4. +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// PREV_MB_YD: PREV_MB_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 2 GRFs +// +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD0:w +#endif + + // FieldModeCurrentMbFlag determines how to access left MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // Block width and height (4x16) + + // Set message descriptor, etc. + + (f0.0) if (1) ELSE_Y_4x16T + + // Frame picture + mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ELSE_Y_4x16T: + else (1) ENDIF_Y_4x16T + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud // Read 2 GRFs from DEST_Y top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ENDIF_Y_4x16T: + +// send (8) BUF_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud MSGDSC + send (8) LEFT_TEMP_D(0)<1> MSGHDRL MSGSRC<8;8,1>:ud DAPREAD MSGDSC + + +// Transpose 4x16 to 16x4 + +// Input received from dport: +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + +// Output of transpose: <1> <= <32;8,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +/* + // Transpose the data, also occupy 2 GRFs + mov (16) PREV_MB_YB(0)<1> BUF_B(0, 0)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(0, 16)<1> BUF_B(0, 1)<32;8,4> { NoDDChk } + mov (16) PREV_MB_YB(1)<1> BUF_B(0, 2)<32;8,4> { NoDDClr } + mov (16) PREV_MB_YB(1, 16)<1> BUF_B(0, 3)<32;8,4> { NoDDChk } +*/ +// End of load_Y_4x16T diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2.asm new file mode 100644 index 000000000..1d51e9f19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2.asm @@ -0,0 +1,100 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Top_UV_8X2.Asm +// +// Load UV 8X2 Block +// +//---------------------------------------------------------------- +// Symbols ceed To be defined before including this module +// +// Source Region Is :UB +// BUF_D: BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD + +// Binding Table Index: +// BI_SRC_UV: Binding Table Index Of UV Surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD2:w +#endif + +#if defined(_PROGRESSIVE) + // Read U+V + mov (1) MSGSRC.0:ud ORIX_TOP:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_TOP:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0001000F:ud { NoDDChk } // NV12 U+V block width and height (16x2) + + // Read 1 GRF from DEST surface as the above MB has been deblocked. + //send (8) TOP_MB_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV + mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud +#endif + +#if defined(_FIELD) + +// cmp.z.f0.0 (1) NULLREGW PicTypeC:w 0:w // Get pic type flag + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + // They are used later in this file + + // Read U+V + mov (1) MSGSRC.0:ud ORIX_TOP:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_TOP:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0001000F:ud { NoDDChk } // NV12 U+V block width and height (16x2) + + // Load NV12 U+V + + // Set message descriptor + // Frame picture +// (f0.0) mov (1) MSGDSC DWBRMSGDSC_RC+0x00010000+BI_DEST_UV:ud // Read 1 GRF from SRC_UV +// (f0.0) jmpi Load_Top_UV_8x2 + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y top field + +//Load_Top_UV_8x2: + + // Read 1 GRF from DEST surface as the above MB has been deblocked. +// send (8) PREV_MB_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud MSGDSC + +#endif + + send (8) TOP_MB_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// End of load_Top_UV_8x2.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2_Mbaff.asm new file mode 100644 index 000000000..0171cc9df --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_UV_8x2_Mbaff.asm @@ -0,0 +1,109 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Top_UV_8X2.Asm +// +// Load UV 8X2 Block +// +//---------------------------------------------------------------- +// Symbols ceed To be defined before including this module +// +// Source Region Is :UB +// BUF_D: BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD + +// Binding Table Index: +// BI_SRC_UV: Binding Table Index Of UV Surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD2:w +#endif + + // FieldModeCurrentMbFlag determines how to access above MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + // Read U+V + mov (1) MSGSRC.0:ud ORIX_TOP:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:d ORIY_TOP:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0001000F:ud { NoDDChk } // NV12 U+V block width and height (16x2) + + // Load NV12 U+V + + // Set message descriptor + + (f0.0) if (1) ELSE_UV_8X2 + + // Frame picture + mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud // Read 1 GRF from SRC_UV + + // Add vertical offset 8 for bot MB in MBAFF mode + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w + + // Dual field mode setup + and.z.f0.1 (1) NULLREGW DualFieldMode:w 1:w + (f0.1) jmpi NOT_DUAL_FIELD_UV + + add (1) MSGSRC.1:d MSGSRC.1:d -2:w { NoDDClr } // Load 4 lines in stead of 2 + mov (1) MSGSRC.2:ud 0x0003000F:ud { NoDDChk } // New block width and height (16x8) + + add (1) MSGDSC MSGDSC RESP_LEN(1):ud // 1 more GRF to receive + +NOT_DUAL_FIELD_UV: + +ELSE_UV_8X2: + else (1) ENDIF_UV_8X2 + + // Field picture + asr (1) MSGSRC.1:d ORIY_CUR:w 2:w // asr 1: NV12 U+V block origin y = half of Y comp + // asr 1: Reduce y by half in field access mode + + (f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud // Read 1 GRF from SRC_Y top field + + add (1) MSGSRC.1:d MSGSRC.1:d -2:w // for last 2 rows of above MB + + endif +ENDIF_UV_8X2: + + // Read 1 GRF from DEST surface as the above MB has been deblocked. + send (8) PREV_MB_UD(0)<1> MSGHDRU MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// End of load_Top_UV_8x2.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4.asm new file mode 100644 index 000000000..dad750e9b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4.asm @@ -0,0 +1,100 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Y_16X4.asm +// +// Load Y 16X4 Block to PREV_MB_YD +// +//---------------------------------------------------------------- +// Symbols Need To Be Defined Before Including This Module +// +// Source Region In :Ud +// Src_YD: Src_Yd Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud // 3 Grfs (2 For Y, 1 For U+V) +// +// Source Region Is :Ub. The Same Region As :Ud Region +// Src_YB: Src_Yb Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub // 2 Grfs +// +// Binding Table Index: +// Bi_Src_Y: Binding Table Index Of Y Surface +// +// Temp Buffer: +// Buf_D: Buf_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud +// Buf_B: Buf_B Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD2:w +#endif + +#if defined(_PROGRESSIVE) + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud { NoDDChk } // Block width and height (16x4) + + mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y +#endif + +#if defined(_FIELD) + +// cmp.z.f0.0 (1) NULLREGW PicTypeC:w 0:w // Get pic type flag + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag + // they are used later in this file + + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud { NoDDChk } // Block width and height (16x4) + + // Set message descriptor + + // Frame picture +// (f0.0) mov (1) MSGDSC DWBRMSGDSC_RC+0x00020000+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y +// (f0.0) jmpi load_Y_16x4 + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y top field + +//load_Y_16x4: + // Read 2 GRFs from DEST surface, as the above MB has been deblocked +// send (8) PREV_MB_YD(0)<1> MSGHDRY MSGSRC<8;8,1>:ud MSGDSC + +#endif + + send (8) TOP_MB_YD(0)<1> MSGHDRT MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// End of load_Y_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4_Mbaff.asm new file mode 100644 index 000000000..7a747ae67 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/load_Top_Y_16x4_Mbaff.asm @@ -0,0 +1,111 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module Name: Load_Y_16X4.asm +// +// Load Y 16X4 Block to PREV_MB_YD +// +//---------------------------------------------------------------- +// Symbols Need To Be Defined Before Including This Module +// +// Source Region In :Ud +// Src_YD: Src_Yd Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud // 3 Grfs (2 For Y, 1 For U+V) +// +// Source Region Is :Ub. The Same Region As :Ud Region +// Src_YB: Src_Yb Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub // 2 Grfs +// +// Binding Table Index: +// Bi_Src_Y: Binding Table Index Of Y Surface +// +// Temp Buffer: +// Buf_D: Buf_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud +// Buf_B: Buf_B Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD2:w +#endif + // FieldModeCurrentMbFlag determines how to access above MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + // Read Y + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud { NoDDChk } // Block width and height (16x4) + + // Set message descriptor + + (f0.0) if (1) ELSE_Y_16x4 + + // Frame picture + mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y + + // Add vertical offset 16 for bot MB in MBAFF mode + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w + + // Dual field mode setup + and.z.f0.1 (1) NULLREGW DualFieldMode:w 1:w + (f0.1) jmpi NOT_DUAL_FIELD + + add (1) MSGSRC.1:d MSGSRC.1:d -4:w { NoDDClr } // Load 8 lines in above MB + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // New block width and height (16x8) + + add (1) MSGDSC MSGDSC RESP_LEN(2):ud // 2 more GRF to receive + +NOT_DUAL_FIELD: + +ELSE_Y_16x4: + else (1) ENDIF_Y_16x4 + + asr (1) MSGSRC.1:d ORIY_CUR:w 1:w // Reduce y by half in field access mode + + // Field picture + (f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y bottom field + (-f0.1) mov (1) MSGDSC RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud // Read 2 GRFs from SRC_Y top field + + add (1) MSGSRC.1:d MSGSRC.1:d -4:w // for last 4 rows of above MB + + endif +ENDIF_Y_16x4: + + // Read 2 GRFs from DEST surface, as the above MB has been deblocked + send (8) PREV_MB_YD(0)<1> MSGHDRY MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// End of load_Y_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x16.asm new file mode 100644 index 000000000..6a7425a7d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x16.asm @@ -0,0 +1,83 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: saveNV12_16x16.asm +// +// Save a NV12 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 4 GRF +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD4:w +#endif + + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud // Block width and height (16x16) + + // Pack Y + mov (16) MSGPAYLOADD(0)<1> SRC_YD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_YD(2) + mov (16) MSGPAYLOADD(4)<1> SRC_YD(4) + mov (16) MSGPAYLOADD(6)<1> SRC_YD(6) + + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(8)+DWBWMSGDSC+BI_DEST_Y // Write 8 GRFs + + + + asr (1) MSGSRC.1:ud MSGSRC.1:ud 1:w // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2<1>:ud 0x0007000F:ud // NV12 U+V block width and height (16x8) + + mov (16) MSGPAYLOADD(0)<1> SRC_UD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_UD(2) + + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(4)+DWBWMSGDSC+BI_DEST_UV // Write 4 GRFs + + +// End of saveNV12_16x16.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4.asm new file mode 100644 index 000000000..7c9785a99 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4.asm @@ -0,0 +1,80 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: saveNV12_16x4.asm +// +// Save a NV12 16x4 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 2 GRFs +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 1 GRF +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD5:w +#endif + + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud // Block width and height (16x4) + + // Pack Y + mov (16) MSGPAYLOADD(0)<1> SRC_YD(0) // Compressed inst + + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(2)+DWBWMSGDSC+BI_DEST_Y // Write 2 GRFs + + + asr (1) MSGSRC.1:ud MSGSRC.1:ud 1:w // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2<1>:ud 0x0001000F:ud // NV12 U+V block width and height (16x2) + + // Pack U and V +// mov (16) MSGPAYLOADB(0,0)<2> SRC_UB(0,0) +// mov (16) MSGPAYLOADB(0,1)<2> SRC_VB(0,0) + + mov (8) MSGPAYLOADD(0,0)<1> SRC_UD(0) + + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV // Write 1 GRF + +// End of saveNV12_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4T.asm new file mode 100644 index 000000000..bcca35775 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/saveNV12_16x4T.asm @@ -0,0 +1,143 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: saveNV12_16x4T.asm +// +// Transpose 16x4 to 4x16 YNV12 data and write to memory +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Left MB region: +// PREV_MB_YB: Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub +// PREV_MB_UW: Base=ryy ElementSize=2 SrcRegion=REGION(8,1) Type=uw + +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub +// BUF_W: BUF_W Base=rxx ElementSize=1 SrcRegion=REGION(8,1) Type=uw +// +// +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD6:w +#endif + + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud // 4x16 + +// Transpose Y, save them to MRFs + +// 16x4 Y src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (16) <1> <=== <16;4,1> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 f2 e2 d2 c2 f1 e1 d1 c1 f0 e0 d0 c0 b3 a3 93 83 b2 a2 92 82 b1 a1 91 81 b0 a0 90 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + // The first step + mov (16) BUF_B(0,0)<1> PREV_MB_YB(0,0)<16;4,1> + mov (16) BUF_B(0,16)<1> PREV_MB_YB(0,4)<16;4,1> + mov (16) BUF_B(1,0)<1> PREV_MB_YB(0,8)<16;4,1> + mov (16) BUF_B(1,16)<1> PREV_MB_YB(0,12)<16;4,1> + +// +// Second step (16) <1> <=== <1;4,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// + // The second step +// mov (16) MSGPAYLOADB(0,0)<1> BUF_B(0,0)<32;8,4> // Read 2 rows, write 1 row +// mov (16) MSGPAYLOADB(0,16)<1> BUF_B(0,1)<32;8,4> +// mov (16) MSGPAYLOADB(1,0)<1> BUF_B(0,2)<32;8,4> +// mov (16) MSGPAYLOADB(1,16)<1> BUF_B(0,3)<32;8,4> + + mov (16) MSGPAYLOADB(0,0)<1> BUF_B(0,0)<1;4,4> + mov (16) MSGPAYLOADB(0,16)<1> BUF_B(0,16)<1;4,4> + mov (16) MSGPAYLOADB(1,0)<1> BUF_B(1,0)<1;4,4> + mov (16) MSGPAYLOADB(1,16)<1> BUF_B(1,16)<1;4,4> + +// Transposed Y in 4x16 is ready for writting to dataport. +// + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(2)+DWBWMSGDSC+BI_DEST_Y // Write 2 GRFs + + + +///////////////////////////////////////////////////////////////////////////////////////////////////// + + // Transpose U/V, save them to MRFs in NV12 format + asr (1) MSGSRC.1:ud MSGSRC.1:ud 1:w // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2<1>:ud 0x00070003:ud // NV12 U+V block width and height (4x8) + + +// 16x2 UV src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (8) <1> <=== <8;4,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 70 70 60 60 50 50 40 40 31 31 21 21 11 11 01 01 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) BUF_W(0,0)<1> PREV_MB_UW(0,0)<8;4,1> + mov (8) BUF_W(0,8)<1> PREV_MB_UW(0,4)<8;4,1> + +// Second step (8) <1> <=== <1;2,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) MSGPAYLOADW(0,0)<1> BUF_W(0,0)<1;2,4> + mov (8) MSGPAYLOADW(0,8)<1> BUF_W(0,8)<1;2,4> + +// Transposed U+V in NV12 in 4x8 is ready for writting to dataport. + + send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV // Write 1 GRF + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8.asm new file mode 100644 index 000000000..a4bc922d7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8.asm @@ -0,0 +1,83 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Cur_UV_8x8.asm +// +// Save UV 8x8 block (8x8U + 8x8V in NV12) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 4 GRF +// +// Binding table index: +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD4:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + mov (1) MSGSRC.0:ud ORIX_CUR:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // NV12 U+V block width and height (16x8) + + mov (16) MSGPAYLOADD(0)<1> SRC_UD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_UD(2) + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+BI_DEST_UV:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00400000+BI_DEST_UV +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud // Write 4 GRFs to DEST_UV bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud // Write 4 GRFs to DEST_UV top field + +#endif + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Cur_UV_8x8.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8_Mbaff.asm new file mode 100644 index 000000000..8b5848b0a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_UV_8x8_Mbaff.asm @@ -0,0 +1,92 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Cur_UV_8x8.asm +// +// Save UV 8x8 block (8x8U + 8x8V in NV12) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 4 GRF +// +// Binding table index: +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD4:w +#endif + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + mov (1) MSGSRC.0:ud ORIX_CUR:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_CUR:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0007000F:ud { NoDDChk } // NV12 U+V block width and height (16x8) + + mov (16) MSGPAYLOADD(0)<1> SRC_UD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_UD(2) + + // Set message descriptor + + (f0.0) if (1) ELSE_UV_8X8 + + // Frame picture + mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+BI_DEST_UV:ud // Write 4 GRFs to DEST_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ELSE_UV_8X8: + else (1) ENDIF_UV_8X8 + + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud // Write 4 GRFs to DEST_UV bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud // Write 4 GRFs to DEST_UV top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ENDIF_UV_8X8: + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Cur_UV_8x8.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16.asm new file mode 100644 index 000000000..307152c7e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16.asm @@ -0,0 +1,86 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Cur_Y_16x16.asm +// +// Save a Y 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD4:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16) + + // Pack Y + mov (16) MSGPAYLOADD(0)<1> SRC_YD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_YD(2) + mov (16) MSGPAYLOADD(4)<1> SRC_YD(4) + mov (16) MSGPAYLOADD(6)<1> SRC_YD(6) + + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+BI_DEST_Y:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00800000+BI_DEST_Y +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_Y:ud // Write 8 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_Y:ud // Write 8 GRFs to DEST_Y top field + +#endif + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Cur_Y_16x16.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16_Mbaff.asm new file mode 100644 index 000000000..81d4505ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Cur_Y_16x16_Mbaff.asm @@ -0,0 +1,94 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Cur_Y_16x16.asm +// +// Save a Y 16x16 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 8 GRFs +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD4:w +#endif + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + mov (2) MSGSRC.0<1>:ud ORIX_CUR<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F000F:ud { NoDDChk } // Block width and height (16x16 or 12x16) + + // Pack Y + mov (16) MSGPAYLOADD(0)<1> SRC_YD(0) // Compressed inst + mov (16) MSGPAYLOADD(2)<1> SRC_YD(2) + mov (16) MSGPAYLOADD(4)<1> SRC_YD(4) + mov (16) MSGPAYLOADD(6)<1> SRC_YD(6) + + // Set message descriptor + + (f0.0) if (1) ELSE_Y_16x16 + + // Frame picture + mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+BI_DEST_Y:ud // Write 8 GRFs to DEST_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ELSE_Y_16x16: + else (1) ENDIF_Y_16x16 + + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_Y:ud // Write 8 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(8)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_Y:ud // Write 8 GRFs to DEST_Y top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ENDIF_Y_16x16: + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Cur_Y_16x16.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T.asm new file mode 100644 index 000000000..e177b8924 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T.asm @@ -0,0 +1,102 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Left_UV_8x2T.asm +// +// Transpose 8x2 to 2x8 UV data and write to memory +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Left MB region: +// PREV_MB_UW: Base=ryy ElementSize=2 SrcRegion=REGION(8,1) Type=uw + +// Binding table index: +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +// Temp buffer: +// BUF_W: BUF_W Base=rxx ElementSize=1 SrcRegion=REGION(8,1) Type=uw +// +// +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD6:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + // Transpose U/V, save them to MRFs in NV12 format + mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + +// 16x2 UV src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (8) <1> <=== <8;4,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 70 70 60 60 50 50 40 40 31 31 21 21 11 11 01 01 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) LEFT_TEMP_W(0,0)<1> PREV_MB_UW(0,0)<8;4,1> { NoDDClr } + mov (8) LEFT_TEMP_W(0,8)<1> PREV_MB_UW(0,4)<8;4,1> { NoDDChk } + +// Second step (8) <1> <=== <1;2,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) MSGPAYLOADW(0,0)<1> LEFT_TEMP_W(0,0)<1;2,4> + mov (8) MSGPAYLOADW(0,8)<1> LEFT_TEMP_W(0,8)<1;2,4> + +// Transposed U+V in NV12 in 4x8 is ready for writting to dataport. + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00100000+BI_DEST_UV +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV top field + +#endif + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T_Mbaff.asm new file mode 100644 index 000000000..1c84097b8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_UV_8x2T_Mbaff.asm @@ -0,0 +1,112 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Left_UV_8x2T.asm +// +// Transpose 8x2 to 2x8 UV data and write to memory +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Left MB region: +// PREV_MB_UW: Base=ryy ElementSize=2 SrcRegion=REGION(8,1) Type=uw + +// Binding table index: +// BI_SRC_UV: Binding table index of UV surface (NV12) +// +// Temp buffer: +// BUF_W: BUF_W Base=rxx ElementSize=1 SrcRegion=REGION(8,1) Type=uw +// +// +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD6:w +#endif + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + // Transpose U/V, save them to MRFs in NV12 format + mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) + + +// 16x2 UV src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (8) <1> <=== <8;4,1>:w +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 61 61 51 51 41 41 70 70 60 60 50 50 40 40 31 31 21 21 11 11 01 01 30 30 20 20 10 10 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) BUF_W(0,0)<1> PREV_MB_UW(0,0)<8;4,1> { NoDDClr } + mov (8) BUF_W(0,8)<1> PREV_MB_UW(0,4)<8;4,1> { NoDDChk } + +// Second step (8) <1> <=== <1;2,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + mov (8) MSGPAYLOADW(0,0)<1> BUF_W(0,0)<1;2,4> + mov (8) MSGPAYLOADW(0,8)<1> BUF_W(0,8)<1;2,4> + +// Transposed U+V in NV12 in 4x8 is ready for writting to dataport. + + // Set message descriptor + + (f0.0) if (1) ELSE_UV_8X2T + + // Frame picture + mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV:ud // Write 1 GRF to DEST_UV + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode + +ELSE_UV_8X2T: + else (1) ENDIF_UV_8X2T + + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ENDIF_UV_8X2T: + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T.asm new file mode 100644 index 000000000..8c12f9428 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T.asm @@ -0,0 +1,119 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Left_Y_16x4T.asm +// +// Transpose 16x4 to 4x16 Y data and write to memory +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Left MB region: +// PREV_MB_YB: Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub + +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub +// +// +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD6:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // 4x16 + +// Transpose Y, save them to MRFs + +// 16x4 Y src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (16) <1> <=== <16;4,1> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 f2 e2 d2 c2 f1 e1 d1 c1 f0 e0 d0 c0 b3 a3 93 83 b2 a2 92 82 b1 a1 91 81 b0 a0 90 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + // The first step + mov (16) LEFT_TEMP_B(0,0)<1> PREV_MB_YB(0,0)<16;4,1> { NoDDClr } + mov (16) LEFT_TEMP_B(0,16)<1> PREV_MB_YB(0,4)<16;4,1> { NoDDChk } + mov (16) LEFT_TEMP_B(1,0)<1> PREV_MB_YB(0,8)<16;4,1> { NoDDClr } + mov (16) LEFT_TEMP_B(1,16)<1> PREV_MB_YB(0,12)<16;4,1> { NoDDChk } + +// +// Second step (16) <1> <=== <1;4,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// + // The second step + mov (16) MSGPAYLOADB(0,0)<1> LEFT_TEMP_B(0,0)<1;4,4> + mov (16) MSGPAYLOADB(0,16)<1> LEFT_TEMP_B(0,16)<1;4,4> + mov (16) MSGPAYLOADB(1,0)<1> LEFT_TEMP_B(1,0)<1;4,4> + mov (16) MSGPAYLOADB(1,16)<1> LEFT_TEMP_B(1,16)<1;4,4> + +// Transposed Y in 4x16 is ready for writting to dataport. + + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+BI_DEST_Y:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00200000+BI_DEST_Y +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y top field + +#endif + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T_Mbaff.asm new file mode 100644 index 000000000..c223f3ab1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Left_Y_16x4T_Mbaff.asm @@ -0,0 +1,131 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Left_Y_16x4T.asm +// +// Transpose 16x4 to 4x16 Y data and write to memory +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Left MB region: +// PREV_MB_YB: Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub + +// Binding table index: +// BI_SRC_Y: Binding table index of Y surface +// +// Temp buffer: +// BUF_B: BUF_B Base=rxx ElementSize=1 SrcRegion=REGION(16,1) Type=ub +// +// +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD6:w +#endif + + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + mov (2) MSGSRC.0<1>:ud ORIX_LEFT<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x000F0003:ud { NoDDChk } // 4x16 + +// Transpose Y, save them to MRFs + +// 16x4 Y src in GRF (each pix is specified as yx) +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// +// First step (16) <1> <=== <16;4,1> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 e3 d3 c3 f2 e2 d2 c2 f1 e1 d1 c1 f0 e0 d0 c0 b3 a3 93 83 b2 a2 92 82 b1 a1 91 81 b0 a0 90 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ + + // The first step + mov (16) BUF_B(0,0)<1> PREV_MB_YB(0,0)<16;4,1> { NoDDClr } + mov (16) BUF_B(0,16)<1> PREV_MB_YB(0,4)<16;4,1> { NoDDChk } + mov (16) BUF_B(1,0)<1> PREV_MB_YB(0,8)<16;4,1> { NoDDClr } + mov (16) BUF_B(1,16)<1> PREV_MB_YB(0,12)<16;4,1> { NoDDChk } + +// +// Second step (16) <1> <=== <1;4,4> +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// |f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80| +// +-----------------------+-----------------------+-----------------------+-----------------------+ +// + // The second step + mov (16) MSGPAYLOADB(0,0)<1> BUF_B(0,0)<1;4,4> + mov (16) MSGPAYLOADB(0,16)<1> BUF_B(0,16)<1;4,4> + mov (16) MSGPAYLOADB(1,0)<1> BUF_B(1,0)<1;4,4> + mov (16) MSGPAYLOADB(1,16)<1> BUF_B(1,16)<1;4,4> + +// Transposed Y in 4x16 is ready for writting to dataport. + + //***** Left MB is loaded the same as indicated by FieldModeCurrentMbFlag. + + // Set message descriptor + + (f0.0) if (1) ELSE_Y_16x4T + + // Frame picture + mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y + + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w // Add vertical offset 16 for bot MB in MBAFF mode + +ELSE_Y_16x4T: + else (1) ENDIF_Y_16x4T + + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y top field + + asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode + + endif +ENDIF_Y_16x4T: + + send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2.asm new file mode 100644 index 000000000..0552a78ca --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2.asm @@ -0,0 +1,82 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Top_UV_8x2.asm +// +// Save UV 8x2 block (8x2U + 8x2V in NV12) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 1 GRF +// +// Binding table index: +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD5:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + mov (1) MSGSRC.0:ud ORIX_TOP:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_TOP:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0001000F:ud { NoDDChk } // NV12 U+V block width and height (16x2) + + mov (8) MSGPAYLOADD(0,0)<1> TOP_MB_UD(0) + + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+BI_DEST_UV:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00100000+BI_DEST_UV +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+ENMSGDSCBF+BI_DEST_UV:ud // Write 1 GRF to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+ENMSGDSCTF+BI_DEST_UV:ud // Write 1 GRF to DEST_Y top field + +#endif + + send (8) WritebackResponse(0)<1> MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC +// End of save_Top_UV_8x2.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2_Mbaff.asm new file mode 100644 index 000000000..74d0c8ba9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_UV_8x2_Mbaff.asm @@ -0,0 +1,99 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Top_UV_8x2.asm +// +// Save UV 8x2 block (8x2U + 8x2V in NV12) +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_UD: SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 1 GRF +// +// Binding table index: +// BI_DEST_UV: Binding table index of UV surface (NV12) +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD5:w +#endif + and.z.f0.1 (8) NULLREGW DualFieldMode<0;1,0>:w 1:w + + // FieldModeCurrentMbFlag determines how to access above MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + // Pack U and V + mov (1) MSGSRC.0:ud ORIX_TOP:w { NoDDClr } // Block origin + asr (1) MSGSRC.1:ud ORIY_TOP:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp + mov (1) MSGSRC.2:ud 0x0001000F:ud { NoDDChk } // NV12 U+V block width and height (16x2) + + // Dual field mode + (f0.1) mov (8) MSGPAYLOADD(0)<1> PREV_MB_UD(0) + (-f0.1) mov (8) MSGPAYLOADD(0)<1> PREV_MB_UD(1) // for dual field mode, write last 2 rows + + // Set message descriptor + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + (f0.0) if (1) ELSE_UV_8X2_SAVE + + // Frame picture + mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+BI_DEST_UV:ud // Write 1 GRFs to DEST_UV + + // Add vertical offset 8 for bot MB in MBAFF mode + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w + +ELSE_UV_8X2_SAVE: + else (1) ENDIF_UV_8X2_SAVE + + asr (1) MSGSRC.1:d ORIY_CUR:w 2:w // asr 1: NV12 U+V block origin y = half of Y comp + // asr 1: Reduce y by half in field access mode + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+ENMSGDSCBF+BI_DEST_UV:ud // Write 1 GRF to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC_WC+ENMSGDSCTF+BI_DEST_UV:ud // Write 1 GRF to DEST_Y top field + + add (1) MSGSRC.1:d MSGSRC.1:d -2:w // for last 4 rows of above MB + + endif +ENDIF_UV_8X2_SAVE: + + send (8) WritebackResponse(0)<1> MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Top_UV_8x2.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4.asm new file mode 100644 index 000000000..8e70da1dd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4.asm @@ -0,0 +1,82 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Top_Y_16x4.asm +// +// Save a Y 16x4 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 2 GRFs +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD5:w +#endif + +#if defined(_FIELD) + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w // Get bottom field flag +#endif + + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud { NoDDChk } // Block width and height (16x4) + + // Pack Y + mov (16) MSGPAYLOADD(0)<1> TOP_MB_YD(0) // Compressed inst + + +#if defined(_PROGRESSIVE) + mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+BI_DEST_Y:ud +// send (8) NULLREG MSGHDR MSGSRC<8;8,1>:ud DWBWMSGDSC+0x00200000+BI_DEST_Y +#endif + +#if defined(_FIELD) + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+ENMSGDSCBF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+ENMSGDSCTF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y top field + +#endif + + send (8) WritebackResponse(0)<1> MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC +// End of save_Top_Y_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4_Mbaff.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4_Mbaff.asm new file mode 100644 index 000000000..31798ae97 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/save_Top_Y_16x4_Mbaff.asm @@ -0,0 +1,99 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_Top_Y_16x4.asm +// +// Save a Y 16x4 block +// +//---------------------------------------------------------------- +// Symbols need to be defined before including this module +// +// Source region in :ud +// SRC_YD: SRC_YD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud // 2 GRFs +// +// Binding table index: +// BI_DEST_Y: Binding table index of Y surface +// +//---------------------------------------------------------------- + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0xDDD5:w +#endif + + and.z.f0.1 (16) NULLREGW DualFieldMode<0;1,0>:w 1:w + + // FieldModeCurrentMbFlag determines how to access above MB + and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w + + mov (2) MSGSRC.0<1>:ud ORIX_TOP<2;2,1>:w { NoDDClr } // Block origin + mov (1) MSGSRC.2<1>:ud 0x0003000F:ud { NoDDChk } // Block width and height (16x4) + + // Pack Y + // Dual field mode + (f0.1) mov (16) MSGPAYLOADD(0)<1> PREV_MB_YD(0) // Compressed inst + (-f0.1) mov (16) MSGPAYLOADD(0)<1> PREV_MB_YD(2) // for dual field mode, write last 4 rows + + // Set message descriptor + + and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w + + (f0.0) if (1) ELSE_Y_16x4_SAVE + + // Frame picture + mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y + + // Add vertical offset 16 for bot MB in MBAFF mode + (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 16:w + +ELSE_Y_16x4_SAVE: + else (1) ENDIF_Y_16x4_SAVE + + asr (1) MSGSRC.1:d ORIY_CUR:w 1:w // Reduce y by half in field access mode + + // Field picture + (f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+ENMSGDSCBF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y bottom field + (-f0.1) mov (1) MSGDSC MSG_LEN(2)+DWBWMSGDSC_WC+ENMSGDSCTF+BI_DEST_Y:ud // Write 2 GRFs to DEST_Y top field + + add (1) MSGSRC.1:d MSGSRC.1:d -4:w // for last 4 rows of above MB + + endif +ENDIF_Y_16x4_SAVE: + + send (8) WritebackResponse(0)<1> MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_Top_Y_16x4.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB.asm new file mode 100644 index 000000000..5233e194a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB.asm @@ -0,0 +1,68 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: WriteURB.asm +// +// General purpose module to write data to URB using the URB handle/offset in r0 +// +//---------------------------------------------------------------- +// Assume: +// - a0.0 and a0.1 is meg desc, has been assign with URB offset and msg size +// - MRFs are alrady assigned with data. +//---------------------------------------------------------------- +// +// 16x16 byte pixel block can be saved using just 1 "send" instruction. + +#if defined(_DEBUG) + mov (1) EntrySignature:w 0x3535:w +#endif + +// URB write header: +//mov (8) MSGSRC.0:ud r0.0<8;8,1>:ud // Copy parent R0 header + +//shr (1) Temp2_W:uw URBOffset:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. +//add (1) MSGSRC.0:uw r0.0:uw Temp2_W:uw + + +shr (1) MSGSRC.0:uw URBOffset:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. +//mov (1) MSGSRC.0:uw URBOffset_2:uw + +//mov (1) MSGSRC.1:ud 0:ud // Reset Handle 1 + +send null:uw m0 MSGSRC<8;8,1>:uw URBWRITE URBWriteMsgDesc:ud // URB write +//send null:ud MRF0 null:ud URBWriteMsgDesc:ud // URB write diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_UV_Child.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_UV_Child.asm new file mode 100644 index 000000000..c98ab21b0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_UV_Child.asm @@ -0,0 +1,69 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: WriteURB_Child.asm +// +// General purpose module to write data to URB using the URB handle/offset in r0 +// +//---------------------------------------------------------------- +// Assume: +// - a0.0 and a0.1 is meg desc, has been assign with URB offset and msg size +// - MRFs are alrady assigned with data. +//---------------------------------------------------------------- +// +// 16x16 byte pixel block can be saved using just 1 "send" instruction. + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x3535:w +#endif + +// URB write header: +//mov (8) MSGSRC.0:ud r0.0<8;8,1>:ud // Copy parent R0 header + +//shr (1) Temp2_W:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. +//add (1) MSGSRC.0:uw r0.0:uw Temp2_W:uw + +shr (1) MSGSRC.0:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. + +//mov (1) MSGSRC.1:ud 0:ud // Reset Handle 1 + + // URB write 1 MRFs, + // Current MB offset is in URBOffset, use it as write origin + // Add 2 to offset to store data be be passed to the right MB + +send null:uw m0 MSGSRC<8;8,1>:uw URBWRITE MSG_LEN(1)+URBWMSGDSC+0x20 // URB write diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_Y_Child.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_Y_Child.asm new file mode 100644 index 000000000..d27cfb716 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/ildb/writeURB_Y_Child.asm @@ -0,0 +1,70 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: WriteURB_Child.asm +// +// General purpose module to write data to URB using the URB handle/offset in r0 +// +//---------------------------------------------------------------- +// Assume: +// - a0.0 and a0.1 is meg desc, has been assign with URB offset and msg size +// - MRFs are alrady assigned with data. +//---------------------------------------------------------------- +// +// 16x16 byte pixel block can be saved using just 1 "send" instruction. + +#if defined(_DEBUG) + mov (1) EntrySignatureC:w 0x3535:w +#endif + +// URB write header: +//mov (8) MSGSRC.0:ud r0.0<8;8,1>:ud // Copy parent R0 header + +//shr (1) Temp2_W:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. +//add (1) MSGSRC.0:uw r0.0:uw Temp2_W:uw + +shr (1) MSGSRC.0:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits. + +//mov (1) MSGSRC.1:ud 0:ud // Reset Handle 1 + + // URB write 2 MRFs, + // Current MB offset is in URBOffset, use it as write origin + // Add 2 to offset to store data be be passed to the right MB + //mov (1) URBWriteMsgDesc:ud 0x06300020:ud + +send null:uw m0 MSGSRC<8;8,1>:uw URBWRITE MSG_LEN(2)+URBWMSGDSC+0x20 // URB write diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AVCMCInter.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AVCMCInter.asm new file mode 100644 index 000000000..96f1e8d50 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AVCMCInter.asm @@ -0,0 +1,284 @@ +/* + * All inter-prediction macroblock kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: AVCMCInter.asm + +#ifdef INTERLABEL +#undef INTERLABEL +#endif + +#if defined(MBAFF) +// < MBaff_Motion > +#define INTERLABEL(x) x##_##MBF +#elif defined(FIELD) +// < FieldMB_Motion > +#define INTERLABEL(x) x##_##FLD +#else // FRAME +// < FrameMB_Motion > +#define INTERLABEL(x) x##_##FRM +#endif +// +// Decoding an inter-prediction macroblock (conditional compile) +// -DMBAFF : MBAff picture MB +// -DFRAME : Frame picture MB +// -DFIELD : Field picture MB +// -DMBAFF -DMONO : MBAff mono picture MB +// -DFRAME -DMONO : Frame mono picture MB +// -DFIELD -DMONO : Field mono picture MB + + +//#if !defined(__AVCMCInter__) // Make sure this is only included once +//#define __AVCMCInter__ + + +// TODO: header files need to be in sync with intra prediction +#include "header.inc" +#include "inter_Header.inc" + +// TODO: Kernel names for mono cases +#if defined(MBAFF) +.kernel MBAff_Motion +MBAFF_MB: +#elif defined(FIELD) +.kernel FieldMB_Motion +FIELD_MB: +#else // Frame +.kernel FrameMB_Motion +FRAME_MB: +#endif + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +#if defined(MBAFF) +mov (1) acc0:ud 0x0aaa55a5:ud +#elif defined(FIELD) +mov (1) acc0:ud 0x0baa55a5:ud +#else // Frame +mov (1) acc0:ud 0x0caa55a5:ud +#endif +#endif + + +#ifdef SW_SCOREBOARD + CALL(scoreboard_start_inter,1) +#endif + + mov (8) gMSGSRC<1>:ud r0.0<8;8,1>:ud // Initialize message header payload with R0 + + and (1) gwMBTYPE<1> gMBTYPE:ub nMBTYPE_MASK:w // MB type + shl (2) gX<1>:w gORIX<2;2,1>:ub 4:w // Convert MB origin to pixel unit + +// #include "process_inter16x16.asm" // Handle B_L0_16x16 case with zero MVs and weighted pred off. + // In the case of B_L0_16x16 with zero MVs and weighted pred off, the kernel jumps to INTERLABEL(EXIT_LOOP). + +INTERLABEL(INIT_MBPARA): + #include "initialize_MBPara.asm" + + + //========================= BEGIN - LOOP_SUBMB =========================== + mov (1) gLOOP_SUBMB:uw 0:uw // 0, 2, 4, 6 +INTERLABEL(LOOP_SUBMB): + + //========================== BEGIN - LOOP_DIR ============================ + // Prediction flag (gPREDFLAG - 0:Pred_L0, 1:Pred_L1, 2:BiPred) + asr (1) gPREDFLAG:w gSUBMB_MODE:ub gLOOP_SUBMB:uw + mov (1) gLOOP_DIR:uw 1:uw // 1, 0 + and (1) gPREDFLAG:w gPREDFLAG:w 0x3:w +INTERLABEL(LOOP_DIR): + + cmp.e.f0.0 (1) null:w gLOOP_DIR:w gPREDFLAG:w + (f0.0) jmpi INTERLABEL(LOOP_DIR_CONTINUE) + + // Get binding table index + // & reference picture parity (gREFPARITY - 0:top, 0x100:bottom, x:frame) + // & address of interpolation result + cmp.e.f0.1 (1) null:w gLOOP_DIR:w 1:w + (f0.1) mov (1) gpINTP:ud nOFFSET_INTP0:ud {NoDDClr} // + (f0.1) and (1) gBIDX:w r[pBIDX]:ub 0x7f:w {NoDDChk} // + (-f0.1) mov (1) gpINTP:ud nOFFSET_INTP1:ud {NoDDClr} // + (-f0.1) and (1) gBIDX:w r[pBIDX,4]:ub 0x7f:w {NoDDChk} // +#if defined(MBAFF) || defined(FIELD) + (f0.1) and (1) gREFPARITY:w r[pBIDX]:ub 0x80:w + (-f0.1) and (1) gREFPARITY:w r[pBIDX,4]:ub 0x80:w + shl (1) gREFPARITY:w gREFPARITY<0;1,0>:w 1:w +#endif + + // Sub MB shape + asr (1) gSHAPETEMP:w gSUBMB_SHAPE:ub gLOOP_SUBMB:w + + // Chroma MV adjustment & Set message descriptor for frame/field read +#if defined(MBAFF) + #include "chromaMVAdjust.asm" + and.nz.f0.0 (1) null:uw gFIELDMBFLAG:ub nFIELDMB_MASK:uw + (f0.0) add (1) gD0:ud gBIDX:uw nDWBRMSGDSC_SC_TF:ud + (-f0.0) add (1) gMSGDSC_R:ud gBIDX:uw nDWBRMSGDSC_SC:ud + (f0.0) add (1) gMSGDSC_R:ud gD0:ud gREFPARITY:uw +#elif defined(FIELD) + #include "chromaMVAdjust.asm" + add (1) gMSGDSC_R:ud gBIDX:uw nDWBRMSGDSC_SC_TF:ud + add (1) gMSGDSC_R:ud gMSGDSC_R:ud gREFPARITY:uw +#else // FRAME + add (1) gMSGDSC_R:ud gBIDX:uw nDWBRMSGDSC_SC:ud +#endif + + and.nz.f0.1 (1) null:w gSHAPETEMP:w 3:w + (f0.1) jmpi INTERLABEL(PROCESS4x4) + + //======================== BEGIN - PROCESS 8x8 =========================== + + // Reference block load + #include "loadRef_Y_16x13.asm" +#ifndef MONO +#if defined(MBAFF) || defined(FIELD) + add (1) r[pMV,2]:w r[pMV,2]:w gCHRMVADJ:w +#endif + #include "loadRef_C_10x5.asm" +#endif + + // Interpolation + //CALL_INTER(INTERLABEL(Interpolate_Y_8x8_Func), 1) + #include "interpolate_Y_8x8.asm" +#ifndef MONO + //CALL_INTER(INTERLABEL(Interpolate_C_4x4_Func), 1) + #include "interpolate_C_4x4.asm" +#endif + + jmpi INTERLABEL(ROUND_SHIFT_C) + //========================= END - PROCESS 8x8 ============================ + + //======================== BEGIN - LOOP_SUBMBPT ========================== +INTERLABEL(PROCESS4x4): + + mov (1) gLOOP_SUBMBPT:uw 4:uw // 4, 3, 2, 1 +INTERLABEL(LOOP_SUBMBPT): + + // Reference block load + #include "loadRef_Y_16x9.asm" +#ifndef MONO +#if defined(MBAFF) || defined(FIELD) + add (1) r[pMV,2]:w r[pMV,2]:w gCHRMVADJ:w +#endif + #include "loadRef_C_6x3.asm" +#endif + + // Interpolation + #include "interpolate_Y_4x4.asm" +#ifndef MONO + #include "interpolate_C_2x2.asm" +#endif + + cmp.e.f0.0 (1) null:w gLOOP_SUBMBPT:uw 3:w + add.z.f0.1 (1) gLOOP_SUBMBPT:uw gLOOP_SUBMBPT:uw -1:w + add (1) pMV:w pMV:w 8:w + (-f0.0) add (1) gpINTP:ud gpINTP:ud 0x00080008:ud // 8 & 8 + (f0.0) add (1) gpINTP:ud gpINTP:ud 0x00180038:ud // 24 & 56 + (-f0.1) jmpi INTERLABEL(LOOP_SUBMBPT) + + cmp.e.f0.1 null:w gLOOP_DIR:w 1:w + add (1) pMV:w pMV:w -32:w + (f0.1) mov (1) gpINTP:ud nOFFSET_INTP0:ud + (-f0.1) mov (1) gpINTP:ud nOFFSET_INTP1:ud + + mov (1) pRESULT:uw gpINTPC:uw + + //========================= END - LOOP_SUBMBPT =========================== + +INTERLABEL(ROUND_SHIFT_C): + +#ifndef MONO + #include "roundShift_C_4x4.asm" +#endif + +INTERLABEL(LOOP_DIR_CONTINUE): + + add.nz.f0.1 (1) gLOOP_DIR:uw gLOOP_DIR:uw -1:w + add (1) pMV:w pMV:w 4:w + (-f0.1) jmpi INTERLABEL(LOOP_DIR) + //=========================== END - LOOP_DIR ============================= + +INTERLABEL(Weighted_Prediction): + #include "weightedPred.asm" + + and.z.f0.1 (16) null<1>:w gLOOP_SUBMB<0;1,0>:uw 2:w + + #include "recon_Y_8x8.asm" +#ifndef MONO + #include "recon_C_4x4.asm" + + (-f0.1) add (1) pERRORC:w pERRORC:w 48:w +#endif + + cmp.e.f0.1 (1) null:w gLOOP_SUBMB:uw 6:w + add (1) gLOOP_SUBMB:uw gLOOP_SUBMB:uw 2:w + + add (1) pWGT_BIDX:ud pWGT_BIDX:ud 0x00100001:ud // 12 & 1 + add (1) pMV:w pMV:w gMVSTEP:w + + (-f0.1) jmpi INTERLABEL(LOOP_SUBMB) + //========================== END - LOOP_SUBMB ============================ + +INTERLABEL(EXIT_LOOP): + #include "writeRecon_YC.asm" + +#ifdef SW_SCOREBOARD + wait n0:ud // Now wait for scoreboard to response + #include "Soreboard_update.asm" // scorboard update function +#else +// Check for write commit first if SW scoreboard is disabled + mov (1) gREG_WRITE_COMMIT_Y<1>:ud gREG_WRITE_COMMIT_Y<0;1,0>:ud // Make sure Y write is committed + mov (1) gREG_WRITE_COMMIT_UV<1>:ud gREG_WRITE_COMMIT_UV<0;1,0>:ud // Make sure U/V write is committed +#endif + +// Terminate the thread +// + END_THREAD + + +//#include "Interpolate_Y_8x8_Func.asm" +//#include "Interpolate_C_4x4_Func.asm" +//#include "WeightedPred_Y_Func.asm" +//#include "WeightedPred_C_Func.asm" + + +.end_code + +.end_kernel + + +//#endif // !defined(__AVCMCInter__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC.asm new file mode 100644 index 000000000..b63b73877 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC.asm @@ -0,0 +1,469 @@ +/* + * All HWMC kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Kernel name: AllAVC.asm +// +// All HWMC kernels merged into this file +// +// $Revision: 2 $ +// $Date: 9/10/06 2:02a $ +// + +// Note: To enable SW scoreboard for ILK AVC kernels, simply toggle the HW_SCOREBOARD +// and SW_SCOREBOARD definition as described below. +// +// ---------------------------------------------------- +// Main: ALLINTRA +// ---------------------------------------------------- + +#define COMBINED_KERNEL +#define ENABLE_ILDB + +// WA for *Stim tool issue, should be removed later + +#ifdef DEV_ILK +#define INSTFACTOR 2 // 128-bit count as 2 instructions +#else +#define INSTFACTOR 1 // 128-bit is 1 instruction +#endif // DEV_ILK + +#ifdef DEV_CTG + #define SW_SCOREBOARD // SW Scoreboard should be enabled for CTG and earlier + #undef HW_SCOREBOARD // HW Scoreboard should be disabled for CTG and earlier +#else + #define HW_SCOREBOARD // HW Scoreboard should be enabled for ILK and beyond + #undef SW_SCOREBOARD // SW Scoreboard should be disabled for ILK and beyond +#endif // DEV_CTG +#ifdef BOOTSTRAP +# ifdef ENABLE_ILDB +# define ALL_SPAWNED_UV_ILDB_FRAME_IP 0 +# define SLEEP_ENTRY_UV_ILDB_FRAME_IP 0 +# define POST_SLEEP_UV_ILDB_FRAME_IP 0 +# define ALL_SPAWNED_Y_ILDB_FRAME_IP 0 +# define SLEEP_ENTRY_Y_ILDB_FRAME_IP 0 +# define POST_SLEEP_Y_ILDB_FRAME_IP 0 +# endif +#elif defined(DEV_ILK) +# include "export.inc.gen5" +#elif defined(DEV_CTG) +# include "export.inc" +#endif +#if defined(_EXPORT) + #include "AllAVC_Export.inc" +#elif defined(_BUILD) + #include "AllAVC.ich" // ISAasm dumped .exports + #include "AllAVC_Export.inc" // Keep jumping targets aligned, only for CTG and beyond + #include "AllAVC_Build.inc" +#else +#endif + +.kernel AllAVC + +// Build all intra prediction kernels +// +#ifdef INTRA_16x16_PAD_NENOP + $for(0; +#define _PROGRESSIVE +#define ILDB_LABEL(x) x##_ILDB_FRAME +#ifdef AVC_ILDB_ROOT_Y_ILDB_FRAME_PAD_NENOP + $for(0; +#define _FIELD +#define ILDB_LABEL(x) x##_ILDB_FIELD +#ifdef AVC_ILDB_ROOT_Y_ILDB_FIELD_PAD_NENOP + $for(0; +#define _MBAFF +#define ILDB_LABEL(x) x##_ILDB_MBAFF +#ifdef AVC_ILDB_ROOT_Y_ILDB_MBAFF_PAD_NENOP + $for(0; , Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// 2857702934 // 0xAA551616 - GUID for Intra_16x16 luma prediction mode offsets +// 0 // Offset to Intra_16x16 luma prediction mode 0 +// 9 // Offset to Intra_16x16 luma prediction mode 1 +// 19 // Offset to Intra_16x16 luma prediction mode 2 +// 42 // Offset to Intra_16x16 luma prediction mode 3 +// 2857699336 // 0xAA550808 - GUID for Intra_8x8 luma prediction mode offsets +// 0 // Offset to Intra_8x8 luma prediction mode 0 +// 5 // Offset to Intra_8x8 luma prediction mode 1 +// 10 // Offset to Intra_8x8 luma prediction mode 2 +// 26 // Offset to Intra_8x8 luma prediction mode 3 +// 36 // Offset to Intra_8x8 luma prediction mode 4 +// 50 // Offset to Intra_8x8 luma prediction mode 5 +// 68 // Offset to Intra_8x8 luma prediction mode 6 +// 85 // Offset to Intra_8x8 luma prediction mode 7 +// 95 // Offset to Intra_8x8 luma prediction mode 8 +// 2857698308 // 0xAA550404 - GUID for Intra_4x4 luma prediction mode offsets +// 0 // Offset to Intra_4x4 luma prediction mode 0 +// 2 // Offset to Intra_4x4 luma prediction mode 1 +// 4 // Offset to Intra_4x4 luma prediction mode 2 +// 16 // Offset to Intra_4x4 luma prediction mode 3 +// 23 // Offset to Intra_4x4 luma prediction mode 4 +// 32 // Offset to Intra_4x4 luma prediction mode 5 +// 45 // Offset to Intra_4x4 luma prediction mode 6 +// 59 // Offset to Intra_4x4 luma prediction mode 7 +// 66 // Offset to Intra_4x4 luma prediction mode 8 +// 2857700364 // 0xAA550C0C - GUID for intra chroma prediction mode offsets +// 0 // Offset to intra chroma prediction mode 0 +// 30 // Offset to intra chroma prediction mode 1 +// 36 // Offset to intra chroma prediction mode 2 +// 41 // Offset to intra chroma prediction mode 3 + +// Kernel name: AllAVCField.asm +// +// All field picture HWMC kernels merged into this file +// +// $Revision: 1 $ +// $Date: 4/13/06 4:35p $ +// + +// ---------------------------------------------------- +// Main: AllAVCField +// ---------------------------------------------------- + +#define ALLHWMC +#define COMBINED_KERNEL + +.kernel AllAVCField + + #include "Intra_PCM.asm" + #include "Intra_16x16.asm" + #include "Intra_8x8.asm" + #include "Intra_4x4.asm" + #include "scoreboard.asm" + + #define FIELD + #include "AVCMCInter.asm" + +// End of AllAVCField + +.end_kernel + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCFrame.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCFrame.asm new file mode 100644 index 000000000..de43b6745 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCFrame.asm @@ -0,0 +1,99 @@ +/* + * All frame picture HWMC kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// 2857702934 // 0xAA551616 - GUID for Intra_16x16 luma prediction mode offsets +// 0 // Offset to Intra_16x16 luma prediction mode 0 +// 9 // Offset to Intra_16x16 luma prediction mode 1 +// 19 // Offset to Intra_16x16 luma prediction mode 2 +// 42 // Offset to Intra_16x16 luma prediction mode 3 +// 2857699336 // 0xAA550808 - GUID for Intra_8x8 luma prediction mode offsets +// 0 // Offset to Intra_8x8 luma prediction mode 0 +// 5 // Offset to Intra_8x8 luma prediction mode 1 +// 10 // Offset to Intra_8x8 luma prediction mode 2 +// 26 // Offset to Intra_8x8 luma prediction mode 3 +// 36 // Offset to Intra_8x8 luma prediction mode 4 +// 50 // Offset to Intra_8x8 luma prediction mode 5 +// 68 // Offset to Intra_8x8 luma prediction mode 6 +// 85 // Offset to Intra_8x8 luma prediction mode 7 +// 95 // Offset to Intra_8x8 luma prediction mode 8 +// 2857698308 // 0xAA550404 - GUID for Intra_4x4 luma prediction mode offsets +// 0 // Offset to Intra_4x4 luma prediction mode 0 +// 2 // Offset to Intra_4x4 luma prediction mode 1 +// 4 // Offset to Intra_4x4 luma prediction mode 2 +// 16 // Offset to Intra_4x4 luma prediction mode 3 +// 23 // Offset to Intra_4x4 luma prediction mode 4 +// 32 // Offset to Intra_4x4 luma prediction mode 5 +// 45 // Offset to Intra_4x4 luma prediction mode 6 +// 59 // Offset to Intra_4x4 luma prediction mode 7 +// 66 // Offset to Intra_4x4 luma prediction mode 8 +// 2857700364 // 0xAA550C0C - GUID for intra chroma prediction mode offsets +// 0 // Offset to intra chroma prediction mode 0 +// 30 // Offset to intra chroma prediction mode 1 +// 36 // Offset to intra chroma prediction mode 2 +// 41 // Offset to intra chroma prediction mode 3 + +// Kernel name: AllAVCFrame.asm +// +// All frame picture HWMC kernels merged into this file +// +// $Revision: 1 $ +// $Date: 4/13/06 4:35p $ +// + +// ---------------------------------------------------- +// Main: AllAVCFrame +// ---------------------------------------------------- + +#define ALLHWMC +#define COMBINED_KERNEL + +.kernel AllAVCFrame + + #include "Intra_PCM.asm" + #include "Intra_16x16.asm" + #include "Intra_8x8.asm" + #include "Intra_4x4.asm" + #include "scoreboard.asm" + + #include "AVCMCInter.asm" + +// End of AllAVCFrame + +.end_kernel + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCMBAFF.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCMBAFF.asm new file mode 100644 index 000000000..62aab2f12 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVCMBAFF.asm @@ -0,0 +1,100 @@ +/* + * All MBAFF frame picture HWMC kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// 2857702934 // 0xAA551616 - GUID for Intra_16x16 luma prediction mode offsets +// 0 // Offset to Intra_16x16 luma prediction mode 0 +// 9 // Offset to Intra_16x16 luma prediction mode 1 +// 19 // Offset to Intra_16x16 luma prediction mode 2 +// 42 // Offset to Intra_16x16 luma prediction mode 3 +// 2857699336 // 0xAA550808 - GUID for Intra_8x8 luma prediction mode offsets +// 0 // Offset to Intra_8x8 luma prediction mode 0 +// 5 // Offset to Intra_8x8 luma prediction mode 1 +// 10 // Offset to Intra_8x8 luma prediction mode 2 +// 26 // Offset to Intra_8x8 luma prediction mode 3 +// 36 // Offset to Intra_8x8 luma prediction mode 4 +// 50 // Offset to Intra_8x8 luma prediction mode 5 +// 68 // Offset to Intra_8x8 luma prediction mode 6 +// 85 // Offset to Intra_8x8 luma prediction mode 7 +// 95 // Offset to Intra_8x8 luma prediction mode 8 +// 2857698308 // 0xAA550404 - GUID for Intra_4x4 luma prediction mode offsets +// 0 // Offset to Intra_4x4 luma prediction mode 0 +// 2 // Offset to Intra_4x4 luma prediction mode 1 +// 4 // Offset to Intra_4x4 luma prediction mode 2 +// 16 // Offset to Intra_4x4 luma prediction mode 3 +// 23 // Offset to Intra_4x4 luma prediction mode 4 +// 32 // Offset to Intra_4x4 luma prediction mode 5 +// 45 // Offset to Intra_4x4 luma prediction mode 6 +// 59 // Offset to Intra_4x4 luma prediction mode 7 +// 66 // Offset to Intra_4x4 luma prediction mode 8 +// 2857700364 // 0xAA550C0C - GUID for intra chroma prediction mode offsets +// 0 // Offset to intra chroma prediction mode 0 +// 30 // Offset to intra chroma prediction mode 1 +// 36 // Offset to intra chroma prediction mode 2 +// 41 // Offset to intra chroma prediction mode 3 + +// Kernel name: AllAVCMBAFF.asm +// +// All MBAFF frame picture HWMC kernels merged into this file +// +// $Revision: 1 $ +// $Date: 4/13/06 4:35p $ +// + +// ---------------------------------------------------- +// Main: AllAVCMBAFF +// ---------------------------------------------------- + +#define ALLHWMC +#define COMBINED_KERNEL + +.kernel AllAVCMBAFF + + #include "Intra_PCM.asm" + #include "Intra_16x16.asm" + #include "Intra_8x8.asm" + #include "Intra_4x4.asm" + #include "scoreboard.asm" + + #define MBAFF + #include "AVCMCInter.asm" + +// End of AllAVCMBAFF + +.end_kernel + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Build.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Build.inc new file mode 100644 index 000000000..11baa68f5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Build.inc @@ -0,0 +1,112 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +$table { +AllAVC_END_IP/INSTFACTOR // Total instruction count +#if (defined(SW_SCOREBOARD) || defined(HW_SCOREBOARD)) && defined(ENABLE_ILDB) +// 23 // Total kernel count +#elif defined(SW_SCOREBOARD) || defined(HW_SCOREBOARD) +// 11 // Total kernel count +#elif defined(ENABLE_ILDB) +// 21 // Total kernel count +#else +// 11 // Total kernel count +#endif +INTRA_16x16_ENTRY/INSTFACTOR // Instruction offset to 'Intra_16x16' +INTRA_8x8_ENTRY/INSTFACTOR // Instruction offset to 'Intra_8x8' +INTRA_4x4_ENTRY/INSTFACTOR // Instruction offset to 'Intra_4x4' +INTRA_PCM_ENTRY/INSTFACTOR // Instruction offset to 'Intra_PCM' +FRAME_MB_ENTRY/INSTFACTOR // Instruction offset to 'FrameMB_Motion' +FIELD_MB_ENTRY/INSTFACTOR // Instruction offset to 'FieldMB_Motion' +MBAFF_MB_ENTRY/INSTFACTOR // Instruction offset to 'MBAff_Motion' +#ifdef SW_SCOREBOARD +SCOREBOARD_ENTRY/INSTFACTOR // Instruction offset to 'scoreboard' +SCOREBOARD_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'scoreboard_MBAFF' +#elif defined(HW_SCOREBOARD) +SETHWSCOREBOARD_ENTRY/INSTFACTOR // Instruction offset to 'AVC_SetIntraDepend' +SETHWSCOREBOARD_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'AVC_SetIntraDependMBAFF' +#endif // SW_SCOREBOARD +#ifdef ENABLE_ILDB +AVC_ILDB_ROOT_Y_ILDB_FRAME_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_Y' +AVC_ILDB_CHILD_Y_ILDB_FRAME_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_Y' +AVC_ILDB_ROOT_UV_ILDB_FRAME_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_UV' +AVC_ILDB_CHILD_UV_ILDB_FRAME_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_UV' +AVC_ILDB_ROOT_Y_ILDB_FIELD_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_Field_Y' +AVC_ILDB_CHILD_Y_ILDB_FIELD_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_Field_Y' +AVC_ILDB_ROOT_UV_ILDB_FIELD_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_Field_UV' +AVC_ILDB_CHILD_UV_ILDB_FIELD_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_Field_UV' +AVC_ILDB_ROOT_Y_ILDB_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_Mbaff_Y' +AVC_ILDB_CHILD_Y_ILDB_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_Mbaff_Y' +AVC_ILDB_ROOT_UV_ILDB_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Root_Mbaff_UV' +AVC_ILDB_CHILD_UV_ILDB_MBAFF_ENTRY/INSTFACTOR // Instruction offset to 'AVC_ILDB_Child_Mbaff_UV' +#endif // ENABLE_ILDB +BSDRESET_ENTRY/INSTFACTOR // Instruction offset to 'BSDReset' +DCRESETDUMMY_ENTRY/INSTFACTOR // Instruction offset to 'DCResetDummy' + +// 0 // Instruction offset to Intra_4x4_luma_prediction_mode_0 +INTRA_4X4_HORIZONTAL_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_1 +INTRA_4X4_DC_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_2 +INTRA_4X4_DIAG_DOWN_LEFT_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_3 +INTRA_4X4_DIAG_DOWN_RIGHT_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_4 +INTRA_4X4_VERT_RIGHT_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_5 +INTRA_4X4_HOR_DOWN_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_6 +INTRA_4X4_VERT_LEFT_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_7 +INTRA_4X4_HOR_UP_IP-INTRA_4X4_VERTICAL_IP // Instruction offset to Intra_4x4_luma_prediction_mode_8 + +// 0 // Instruction offset to Intra_8x8_luma_prediction_mode_0 +INTRA_8X8_HORIZONTAL_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_1 +INTRA_8X8_DC_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_2 +INTRA_8X8_DIAG_DOWN_LEFT_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_3 +INTRA_8X8_DIAG_DOWN_RIGHT_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_4 +INTRA_8X8_VERT_RIGHT_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_5 +INTRA_8X8_HOR_DOWN_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_6 +INTRA_8X8_VERT_LEFT_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_7 +INTRA_8X8_HOR_UP_IP-INTRA_8X8_VERTICAL_IP // Instruction offset to Intra_8x8_luma_prediction_mode_8 + +// 0 // Instruction offset to Intra_16x16_luma_prediction_mode_0 +INTRA_16x16_HORIZONTAL_IP-INTRA_16x16_VERTICAL_IP // Instruction offset to Intra_16x16_luma_prediction_mode_1 +INTRA_16x16_DC_IP-INTRA_16x16_VERTICAL_IP // Instruction offset to Intra_16x16_luma_prediction_mode_2 +INTRA_16x16_PLANE_IP-INTRA_16x16_VERTICAL_IP // Instruction offset to Intra_16x16_luma_prediction_mode_3 + +// 0 // Instruction offset to intra_chroma_prediction_mode_0 +INTRA_CHROMA_HORIZONTAL_IP-INTRA_CHROMA_DC_IP // Instruction offset to intra_chroma_prediction_mode_1 +INTRA_CHROMA_VERTICAL_IP-INTRA_CHROMA_DC_IP // Instruction offset to intra_chroma_prediction_mode_2 +INTRA_Chroma_PLANE_IP-INTRA_CHROMA_DC_IP // Instruction offset to intra_chroma_prediction_mode_3 + +intra_Pred_4x4_Y_IP-ADD_ERROR_SB3_IP*0x100+intra_Pred_4x4_Y_IP-ADD_ERROR_SB2_IP*0x100+intra_Pred_4x4_Y_IP-ADD_ERROR_SB1_IP*0x100+intra_Pred_4x4_Y_IP-ADD_ERROR_SB0_IP // Instruction offset to intra_4x4_pred_module +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Export.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Export.inc new file mode 100644 index 000000000..eae934827 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllAVC_Export.inc @@ -0,0 +1,202 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +.export entry_point INTRA_16x16 +.export entry_point INTRA_8x8 +.export entry_point INTRA_4x4 +.export entry_point INTRA_PCM +.export entry_point FRAME_MB +.export entry_point FIELD_MB +.export entry_point MBAFF_MB +#ifdef SW_SCOREBOARD +.export entry_point SCOREBOARD +.export entry_point SCOREBOARD_MBAFF +#elif defined(HW_SCOREBOARD) +.export entry_point SETHWSCOREBOARD +.export entry_point SETHWSCOREBOARD_MBAFF +#endif // SW_SCOREBOARD + +#ifdef ENABLE_ILDB +.export entry_point AVC_ILDB_ROOT_Y_ILDB_FRAME +.export entry_point AVC_ILDB_CHILD_Y_ILDB_FRAME +.export entry_point AVC_ILDB_ROOT_UV_ILDB_FRAME +.export entry_point AVC_ILDB_CHILD_UV_ILDB_FRAME +.export entry_point AVC_ILDB_ROOT_Y_ILDB_FIELD +.export entry_point AVC_ILDB_CHILD_Y_ILDB_FIELD +.export entry_point AVC_ILDB_ROOT_UV_ILDB_FIELD +.export entry_point AVC_ILDB_CHILD_UV_ILDB_FIELD +.export entry_point AVC_ILDB_ROOT_Y_ILDB_MBAFF +.export entry_point AVC_ILDB_CHILD_Y_ILDB_MBAFF +.export entry_point AVC_ILDB_ROOT_UV_ILDB_MBAFF +.export entry_point AVC_ILDB_CHILD_UV_ILDB_MBAFF +#endif // ENABLE_ILDB + +.export entry_point BSDRESET +.export entry_point DCRESETDUMMY + +.export label INTRA_16x16_VERTICAL +.export label INTRA_16x16_HORIZONTAL +.export label INTRA_16x16_DC +.export label INTRA_16x16_PLANE + +.export label INTRA_8X8_VERTICAL +.export label INTRA_8X8_HORIZONTAL +.export label INTRA_8X8_DC +.export label INTRA_8X8_DIAG_DOWN_LEFT +.export label INTRA_8X8_DIAG_DOWN_RIGHT +.export label INTRA_8X8_VERT_RIGHT +.export label INTRA_8X8_HOR_DOWN +.export label INTRA_8X8_VERT_LEFT +.export label INTRA_8X8_HOR_UP + +.export label INTRA_4X4_VERTICAL +.export label INTRA_4X4_HORIZONTAL +.export label INTRA_4X4_DC +.export label INTRA_4X4_DIAG_DOWN_LEFT +.export label INTRA_4X4_DIAG_DOWN_RIGHT +.export label INTRA_4X4_VERT_RIGHT +.export label INTRA_4X4_HOR_DOWN +.export label INTRA_4X4_VERT_LEFT +.export label INTRA_4X4_HOR_UP + +.export label INTRA_CHROMA_DC +.export label INTRA_CHROMA_HORIZONTAL +.export label INTRA_CHROMA_VERTICAL +.export label INTRA_Chroma_PLANE + +.export label intra_Pred_4x4_Y +.export label ADD_ERROR_SB0 +.export label ADD_ERROR_SB1 +.export label ADD_ERROR_SB2 +.export label ADD_ERROR_SB3 + +.export label AllAVC_END + +#ifdef SW_SCOREBOARD +.export label MB_Loop +.export label No_Message +.export label Dependency_Check +.export label Notify_MSG +.export label Update_CurMB +.export label MBAFF_MB_Loop +.export label MBAFF_No_Message +.export label MBAFF_Dependency_Check +.export label MBAFF_Notify_MSG +.export label MBAFF_Update_CurMB + +//.export label + +// Definitions for first pass MC kernel building +#ifndef No_Message_IP +#define No_Message_IP 0 +#endif + +#ifndef Dependency_Check_IP +#define Dependency_Check_IP 0 +#endif + +#ifndef Notify_MSG_IP +#define Notify_MSG_IP 0 +#endif + +#ifndef Update_CurMB_IP +#define Update_CurMB_IP 0 +#endif + +#ifndef MBAFF_No_Message_IP +#define MBAFF_No_Message_IP 0 +#endif + +#ifndef MBAFF_Dependency_Check_IP +#define MBAFF_Dependency_Check_IP 0 +#endif + +#ifndef MBAFF_Notify_MSG_IP +#define MBAFF_Notify_MSG_IP 0 +#endif + +#ifndef AS_ENABLED + #ifndef MBAFF_MB_Loop_IP + #define MBAFF_MB_Loop_IP 0 + #endif + + #ifndef MB_Loop_IP + #define MB_Loop_IP 0 + #endif +#endif // End AS_ENABLED + +#ifndef MBAFF_Update_CurMB_IP +#define MBAFF_Update_CurMB_IP 0 +#endif + +#endif // SW_SCOREBOARD + +#ifdef ENABLE_ILDB +.export label ALL_SPAWNED_UV_ILDB_FRAME +.export label SLEEP_ENTRY_UV_ILDB_FRAME +.export label POST_SLEEP_UV_ILDB_FRAME +.export label ALL_SPAWNED_Y_ILDB_FRAME +.export label SLEEP_ENTRY_Y_ILDB_FRAME +.export label POST_SLEEP_Y_ILDB_FRAME + +// Definitions for first pass ILDB kernel building +#ifndef ALL_SPAWNED_UV_ILDB_FRAME_IP +#define ALL_SPAWNED_UV_ILDB_FRAME_IP 0 +#endif + +#ifndef SLEEP_ENTRY_UV_ILDB_FRAME_IP +#define SLEEP_ENTRY_UV_ILDB_FRAME_IP 0 +#endif + +#ifndef POST_SLEEP_UV_ILDB_FRAME_IP +#define POST_SLEEP_UV_ILDB_FRAME_IP 0 +#endif + +#ifndef ALL_SPAWNED_Y_ILDB_FRAME_IP +#define ALL_SPAWNED_Y_ILDB_FRAME_IP 0 +#endif + +#ifndef SLEEP_ENTRY_Y_ILDB_FRAME_IP +#define SLEEP_ENTRY_Y_ILDB_FRAME_IP 0 +#endif + +#ifndef POST_SLEEP_Y_ILDB_FRAME_IP +#define POST_SLEEP_Y_ILDB_FRAME_IP 0 +#endif + +#endif // ENABLE_ILDB diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllIntra.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllIntra.asm new file mode 100644 index 000000000..f63344665 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/AllIntra.asm @@ -0,0 +1,98 @@ +/* + * All intra-prediction macroblock kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// 2857702934 // 0xAA551616 - GUID for Intra_16x16 luma prediction mode offsets +// 0 // Offset to Intra_16x16 luma prediction mode 0 +// 9 // Offset to Intra_16x16 luma prediction mode 1 +// 19 // Offset to Intra_16x16 luma prediction mode 2 +// 42 // Offset to Intra_16x16 luma prediction mode 3 +// 2857699336 // 0xAA550808 - GUID for Intra_8x8 luma prediction mode offsets +// 0 // Offset to Intra_8x8 luma prediction mode 0 +// 5 // Offset to Intra_8x8 luma prediction mode 1 +// 10 // Offset to Intra_8x8 luma prediction mode 2 +// 26 // Offset to Intra_8x8 luma prediction mode 3 +// 36 // Offset to Intra_8x8 luma prediction mode 4 +// 50 // Offset to Intra_8x8 luma prediction mode 5 +// 68 // Offset to Intra_8x8 luma prediction mode 6 +// 85 // Offset to Intra_8x8 luma prediction mode 7 +// 95 // Offset to Intra_8x8 luma prediction mode 8 +// 2857698308 // 0xAA550404 - GUID for Intra_4x4 luma prediction mode offsets +// 0 // Offset to Intra_4x4 luma prediction mode 0 +// 2 // Offset to Intra_4x4 luma prediction mode 1 +// 4 // Offset to Intra_4x4 luma prediction mode 2 +// 16 // Offset to Intra_4x4 luma prediction mode 3 +// 23 // Offset to Intra_4x4 luma prediction mode 4 +// 32 // Offset to Intra_4x4 luma prediction mode 5 +// 45 // Offset to Intra_4x4 luma prediction mode 6 +// 59 // Offset to Intra_4x4 luma prediction mode 7 +// 66 // Offset to Intra_4x4 luma prediction mode 8 +// 2857700364 // 0xAA550C0C - GUID for intra chroma prediction mode offsets +// 0 // Offset to intra chroma prediction mode 0 +// 30 // Offset to intra chroma prediction mode 1 +// 36 // Offset to intra chroma prediction mode 2 +// 41 // Offset to intra chroma prediction mode 3 + +// Kernel name: AllIntra.asm +// +// All HWMC kernels merged into this file +// +// $Revision: 1 $ +// $Date: 4/13/06 4:35p $ +// + +// ---------------------------------------------------- +// Main: ALLINTRA +// ---------------------------------------------------- + +#define ALLHWMC +#define COMBINED_KERNEL + +.kernel ALLINTRA + + // All frame destination HWMC kernels + // + #include "Intra_PCM.asm" + #include "Intra_16x16.asm" + #include "Intra_8x8.asm" + #include "Intra_4x4.asm" + +// End of ALLINTRA + +.end_kernel + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/BSDReset.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/BSDReset.asm new file mode 100644 index 000000000..c440df8f4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/BSDReset.asm @@ -0,0 +1,73 @@ +/* + * Initial kernel for filling initial BSD command buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: BSDReset.asm +// +// Initial kernel for filling initial BSD command buffer +// + +// ---------------------------------------------------- +// Main: BSDReset +// ---------------------------------------------------- + +.kernel BSDReset +BSDRESET: + +#include "header.inc" + +.code +#ifdef SW_SCOREBOARD + CALL(scoreboard_start_inter,1) + wait n0:ud // Now wait for scoreboard to response + +#define BSDRESET_ENABLE + #include "scoreboard_update.asm" // scorboard update function +#undef BSDRESET_ENABLE + +#endif // defined(SW_SCOREBOARD) + +// Terminate the thread +// + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif // !defined(COMBINED_KERNEL) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/DCResetDummy.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/DCResetDummy.asm new file mode 100644 index 000000000..274f8a23a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/DCResetDummy.asm @@ -0,0 +1,64 @@ +/* + * Dummy kernel + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: DCResetDummy.asm +// +// Dummy kernel used by driver for debug-counter reset SW WA +// + +// ---------------------------------------------------- +// Main: DCResetDummy +// ---------------------------------------------------- + +.kernel DCResetDummy +DCRESETDUMMY: + +#include "header.inc" + +.code + +// Terminate the thread +// + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif // !defined(COMBINED_KERNEL) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Decode_Chroma_Intra.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Decode_Chroma_Intra.asm new file mode 100644 index 000000000..c02526d41 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Decode_Chroma_Intra.asm @@ -0,0 +1,59 @@ +/* + * Decode both intra chroma blocks + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__DECODE_CHROMA_INTRA__) // Make sure this is only included once +#define __DECODE_CHROMA_INTRA__ + +// Module name: Decode_Chroma_Intra.asm +// +// Decode both intra chroma blocks +// + +decode_Chroma_Intra: +#ifndef MONO + #include "load_Intra_Ref_UV.asm" // Load intra U/V reference data + #include "intra_Pred_Chroma.asm" // Intra predict chroma blocks + #include "add_Error_UV.asm" // Add error data to predicted U/V data blocks +#endif // !defined(MONO) + #include "save_8x8_UV.asm" // Save to destination U/V frame surface + + RETURN +// End of Decode_Chroma_Intra + +#endif // !defined(__DECODE_CHROMA_INTRA__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/EndIntraThread.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/EndIntraThread.asm new file mode 100644 index 000000000..cd6f3e8c7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/EndIntraThread.asm @@ -0,0 +1,60 @@ +/* + * Common module to end current intra thread + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: EndIntraThread.asm +// +// Common module to end current intra thread +// +#ifndef SW_SCOREBOARD +// Check for write commit first if SW scoreboard is disabled + mov (1) REG_WRITE_COMMIT_Y<1>:ud REG_WRITE_COMMIT_Y<0;1,0>:ud // Make sure Y write is committed + mov (1) REG_WRITE_COMMIT_UV<1>:ud REG_WRITE_COMMIT_UV<0;1,0>:ud // Make sure U/V write is committed +#endif + + END_THREAD + + #include "Intra_funcLib.asm" + +#ifndef COMBINED_KERNEL // For standalone kernel only +.end_code + +.end_kernel +#endif // COMBINED_KERNEL + +// End of EndIntraThread diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/HwmcOnlyHeader.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/HwmcOnlyHeader.inc new file mode 100644 index 000000000..6904ab4e2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/HwmcOnlyHeader.inc @@ -0,0 +1,59 @@ +/* + * Header file used only in HWMC_ONLY mode + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: HwmcOnlyHeader.inc +// +// Header file used only in HWMC_ONLY mode +// + +#include "header.inc" + +#if !defined(__HWMCONLYHEADER__) // Make sure the following are only included once +#define __HWMCONLYHEADER__ + +.reg_count_total 64 +.reg_count_payload 2 + +// +// Now, begin source code.... +// + +.code +#endif // !defined(__HWMCONLYHEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_16x16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_16x16.asm new file mode 100644 index 000000000..1541320d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_16x16.asm @@ -0,0 +1,101 @@ +/* + * Decode Intra_16x16 macroblock + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Intra_16x16.asm +// +// Decoding of Intra_16x16 macroblock +// +// $Revision: 8 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: Intra_16x16 +// ---------------------------------------------------- + +#define INTRA_16X16 + +.kernel Intra_16x16 +INTRA_16x16: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0x00aa55a5:ud +#endif + +#include "SetupForHWMC.asm" + +#ifdef SW_SCOREBOARD + CALL(scoreboard_start_intra,1) +#endif + +#ifdef SW_SCOREBOARD + wait n0:ud // Now wait for scoreboard to response +#endif + +// +// Decode Y blocks +// +// Load reference data from neighboring macroblocks + CALL(load_Intra_Ref_Y,1) + +// Intra predict Intra_16x16 luma block + #include "intra_pred_16x16_Y.asm" + +// Add error data to predicted intra data + #include "add_Error_16x16_Y.asm" + +// Save decoded Y picture + CALL(save_16x16_Y,1) +// +// Decode U/V blocks +// +// Note: The decoding for chroma blocks will be the same for all intra prediction mode +// + CALL(decode_Chroma_Intra,1) + +#ifdef SW_SCOREBOARD + #include "scoreboard_update.asm" +#endif + +// Terminate the thread +// + #include "EndIntraThread.asm" + +// End of Intra_16x16 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_4x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_4x4.asm new file mode 100644 index 000000000..f60567bb5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_4x4.asm @@ -0,0 +1,205 @@ +/* + * Decode Intra_4x4 macroblock + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Intra_4x4.asm +// +// Decoding of Intra_4x4 macroblock +// +// $Revision: 12 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: Intra_4x4 +// ---------------------------------------------------- + +#define INTRA_4X4 + +.kernel Intra_4x4 +INTRA_4x4: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0x02aa55a5:ud +#endif + +#include "SetupForHWMC.asm" + +#undef PPREDBUF_Y +#define PPREDBUF_Y a0.3 // Pointer to predicted Y picture + +#define REG_INTRA_PRED_AVAIL REG_INTRA_TEMP_4 +#define REG_INTRA_4X4_PRED REG_INTRA_TEMP_7 // Store predicted Intra_4x4 data + +// Offset where 4x4 predicted data blocks are stored +#define PREDSUBBLK0 0*GRFWIB +#define PREDSUBBLK1 1*GRFWIB +#define PREDSUBBLK2 2*GRFWIB +#define PREDSUBBLK3 3*GRFWIB +#define PREDSUBBLK4 4*GRFWIB +#define PREDSUBBLK5 5*GRFWIB +#define PREDSUBBLK6 6*GRFWIB +#define PREDSUBBLK7 7*GRFWIB +#define PREDSUBBLK8 8*GRFWIB +#define PREDSUBBLK9 9*GRFWIB +#define PREDSUBBLK10 10*GRFWIB +#define PREDSUBBLK11 11*GRFWIB +#define PREDSUBBLK12 12*GRFWIB +#define PREDSUBBLK13 13*GRFWIB +#define PREDSUBBLK14 14*GRFWIB +#define PREDSUBBLK15 15*GRFWIB + +// 4x4 error block byte offset within the 8x8 error block +#define ERRBLK0 0 +#define ERRBLK1 8 +#define ERRBLK2 64 +#define ERRBLK3 72 + +#ifdef SW_SCOREBOARD + CALL(scoreboard_start_intra,1) +#endif + +#ifdef SW_SCOREBOARD + wait n0:ud // Now wait for scoreboard to response +#endif + +// +// Decode Y blocks +// +// Load reference data from neighboring macroblocks + CALL(load_Intra_Ref_Y,1) + + mov (1) PERROR<1>:w ERRBUF*GRFWIB:w // Pointer to macroblock error data + mov (1) PPREDBUF_Y<1>:w PREDBUF*GRFWIB:w // Pointer to predicted data + shr (2) REG_INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL_FLAG_BYTE<0;1,0>:ub 0x40:v + and.nz.f0.0 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG_BYTE<0;1,0>:ub 4:w // Top-right macroblock available for intra prediction? + (-f0.0.any8h) mov (8) INTRA_REF_TOP(0,16)<1> INTRA_REF_TOP(0,15)REGION(1,0) // Extend right boundary of MB B to C + +// Intra predict Intra_4x4 luma blocks +// +// Sub-macroblock 0 ***************** + mov (16) REF_TOP0(0)<1> INTRA_REF_TOP0(0) // Top reference data + mov (8) REF_LEFT(0)<1> INTRA_REF_LEFT(0)REGION(8,4) // Left reference data + shr (4) PRED_MODE<1>:w INTRA_PRED_MODE(0)<1;2,0> 0x4040:v // Expand IntraPredMode to 1 byte/block + CALL(intra_Pred_4x4_Y_4,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + + or (1) REG_INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 0x1:w // Left neighbor is available now + +// Sub-macroblock 1 ***************** + + mov (16) REF_TOP0(0)<1> INTRA_REF_TOP0(0,8) // Top reference data + mov (4) REF_LEFT(0)<1> r[PPREDBUF_Y,PREDSUBBLK1+6]<8;1,0>:ub // Left reference data (top half) + mov (4) REF_LEFT(0,4)<1> r[PPREDBUF_Y,PREDSUBBLK3+6]<8;1,0>:ub // Left reference data (bottom half) + shr (4) PRED_MODE<1>:w INTRA_PRED_MODE(0,2)<1;2,0> 0x4040:v // Expand IntraPredMode to 1 byte/block + add (1) PPREDBUF_Y<1>:w PPREDBUF_Y<0;1,0>:w 4*GRFWIB:w // Pointer to predicted sub-macroblock 1 + CALL(intra_Pred_4x4_Y_4,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + + or (1) REG_INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL.1<0;1,0>:w 0x2:w // Top neighbor is available now + +// Pack constructed data from word-aligned to byte-aligned format +// to speed up save_4x4_Y module later +// PPREDBUF_Y now points to sub-block #4 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK4]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK4]<32;16,2>:ub // Sub-block 0 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK4+16]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK3]<32;16,2>:ub // Sub-block 1 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK2]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK2]<32;16,2>:ub // Sub-block 2 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK2+16]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK1]<32;16,2>:ub // Sub-block 3 + + mov (16) r[PPREDBUF_Y,-PREDSUBBLK3]<1>:ub r[PPREDBUF_Y]<32;16,2>:ub // Sub-block 4 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK3+16]<1>:ub r[PPREDBUF_Y,PREDSUBBLK1]<32;16,2>:ub // Sub-block 5 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK1]<1>:ub r[PPREDBUF_Y,PREDSUBBLK2]<32;16,2>:ub // Sub-block 6 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK1+16]<1>:ub r[PPREDBUF_Y,PREDSUBBLK3]<32;16,2>:ub // Sub-block 7 + +// Sub-macroblock 2 ***************** + + mov (4) REF_TOP0(0)<1> INTRA_REF_LEFT0(0,28)REGION(4,1) // Top-left reference data + mov (8) REF_TOP0(0,4)<1> r[PPREDBUF_Y,0-2*GRFWIB+12]<16;4,1>:ub // Top reference data from SB 2,3 + mov (8) REF_TOP0(0,12)<1> r[PPREDBUF_Y,0-GRFWIB+12]<16;4,1>:ub // Top reference data from SB 6,7 + mov (8) REF_TOP0(0,20)<1> r[PPREDBUF_Y,0-GRFWIB+31]<0;1,0>:ub // Top-right reference data + mov (16) REG_INTRA_REF_TOP<1>:w REF_TOP_W(0) // Store top reference data for SubMB #2 and #3. + mov (8) REF_LEFT(0)<1> INTRA_REF_LEFT(1)REGION(8,4) // Left reference data + shr (4) PRED_MODE<1>:w INTRA_PRED_MODE(0,4)<1;2,0> 0x4040:v // Expand IntraPredMode to 1 byte/block + CALL(intra_Pred_4x4_Y_4,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + + or (1) REG_INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 0x1:w // Left neighbor is available now + +// Sub-macroblock 3 ***************** + + mov (16) REF_TOP0(0)<1> INTRA_REF_TOP0(0,8) // Top reference data + mov (8) REF_TOP0(0,16)<1> INTRA_REF_TOP0(0,24)REGION(8,1) // Top reference data + mov (4) REF_LEFT(0)<1> r[PPREDBUF_Y,PREDSUBBLK1+6]<8;1,0>:ub // Left reference data (top half) + mov (4) REF_LEFT(0,4)<1> r[PPREDBUF_Y,PREDSUBBLK3+6]<8;1,0>:ub // Left reference data (bottom half) + shr (4) PRED_MODE<1>:w INTRA_PRED_MODE(0,6)<1;2,0> 0x4040:v // Expand IntraPredMode to 1 byte/block + add (1) PPREDBUF_Y<1>:w PPREDBUF_Y<0;1,0>:w 4*GRFWIB:w // Pointer to predicted sub-macroblock 3 + CALL(intra_Pred_4x4_Y_4,1) + +// Pack constructed data from word-aligned to byte-aligned format +// to speed up save_4x4_Y module later +// PPREDBUF_Y now points to sub-block #12 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK4]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK4]<32;16,2>:ub // Sub-block 8 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK4+16]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK3]<32;16,2>:ub // Sub-block 9 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK2]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK2]<32;16,2>:ub // Sub-block 10 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK2+16]<1>:ub r[PPREDBUF_Y,-PREDSUBBLK1]<32;16,2>:ub // Sub-block 11 + + mov (16) r[PPREDBUF_Y,-PREDSUBBLK3]<1>:ub r[PPREDBUF_Y]<32;16,2>:ub // Sub-block 12 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK3+16]<1>:ub r[PPREDBUF_Y,PREDSUBBLK1]<32;16,2>:ub // Sub-block 13 + mov (16) r[PPREDBUF_Y,-PREDSUBBLK1]<1>:ub r[PPREDBUF_Y,PREDSUBBLK2]<32;16,2>:ub // Sub-block 14 + mov (16) r[PPREDBUF_Y,0-PREDSUBBLK1+16]<1>:ub r[PPREDBUF_Y,PREDSUBBLK3]<32;16,2>:ub // Sub-block 15 + +// All 4 sub-macroblock (containing 4 intra_4x4 blocks) have be constructed +// Save constructed Y picture + CALL(save_4x4_Y,1) // Save Intra_4x4 predicted luma data. +// +// Decode U/V blocks +// +// Note: The decoding for chroma blocks will be the same for all intra prediction mode +// + CALL(decode_Chroma_Intra,1) + +#ifdef SW_SCOREBOARD + #include "scoreboard_update.asm" +#endif + +// Terminate the thread +// + #include "EndIntraThread.asm" + +// End of Intra_4x4 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_8x8.asm new file mode 100644 index 000000000..fb1e9477a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_8x8.asm @@ -0,0 +1,222 @@ +/* + * Decode Intra_8x8 macroblock + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Intra_8x8.asm +// +// Decoding of Intra_8x8 macroblock +// +// $Revision: 12 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: Intra_8x8 +// ---------------------------------------------------- + +#define INTRA_8X8 + +.kernel Intra_8x8 +INTRA_8x8: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0x01aa55a5:ud +#endif + +#include "SetupForHWMC.asm" + +#define REG_INTRA_PRED_AVAIL REG_INTRA_TEMP_4 +#define INTRA_PRED_AVAIL REG_INTRA_TEMP_4.4 + +// Offset where 8x8 predicted data blocks are stored +#define PREDBLK0 0*GRFWIB +#define PREDBLK1 4*GRFWIB +#define PREDBLK2 8*GRFWIB +#define PREDBLK3 12*GRFWIB + +#ifdef SW_SCOREBOARD + +// Update "E" flag with "F" flag information + mov (1) REG_INTRA_TEMP_0<1>:w REG_INTRA_PRED_AVAIL_FLAG_WORD<0;1,0>:w // Store original Intra_Pred_Avail_Flag + and.nz.f0.0 (1) NULLREG REG_MBAFF_PIC MBAFF_PIC // Is current MBAFF picture + and.z.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG // Is "A" not available? + (f0.0) and.z.f0.0 (1) NULLREG REG_FIELD_MACROBLOCK_FLAG FIELD_MACROBLOCK_FLAG // Is current frame MB? + (f0.1) and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_8X8_BLK2_AVAIL_FLAG INTRA_PRED_8X8_BLK2_AVAIL_FLAG // Is "F" flag set? + (f0.0.allv) or (1) REG_INTRA_PRED_AVAIL_FLAG_WORD<1>:w REG_INTRA_PRED_AVAIL_FLAG_WORD<0;1,0>:w INTRA_PRED_LEFT_BH_AVAIL_FLAG // Set "E" to 1 if all conditions meet + + CALL(scoreboard_start_intra,1) + mov (1) REG_INTRA_PRED_AVAIL_FLAG_WORD<1>:w REG_INTRA_TEMP_0<0;1,0>:w // Restore original Intra_Pred_Avail_Flag +#endif + +#ifdef SW_SCOREBOARD + wait n0:ud // Now wait for scoreboard to response +#endif + +// +// Decode Y blocks +// +// Load reference data from neighboring macroblocks + CALL(load_Intra_Ref_Y,1) + + mov (1) PERROR<1>:w ERRBUF*GRFWIB:w // Pointer to macroblock error data + mov (1) PDECBUF_UD<1>:ud 0x00010001*PREDBUF*GRFWIB+0x00100000:ud // Pointers to predicted data + shr (2) REG_INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL_FLAG_BYTE<0;1,0>:ub 0x40:v + +#if 1 + mov (4) REF_LEFT_D(0,0)<1> 0:ud // This is to make validation easier. Without it, DRAM mismatch occurs. +#endif + +// Intra predict Intra_8x8 luma blocks +// +// Sub-macroblock 0 ***************** + mov (16) REF_TOP_W(0)<1> REG_INTRA_REF_TOP<16;16,1>:w // Copy entire top reference data + and.nz.f0.0 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_LEFT_AVAIL_FLAG // Is "D" available? + (-f0.0) mov (1) REF_TOP(0,-1)<1> INTRA_REF_TOP(0)REGION(1,0) // p[-1,-1] = p[0,-1] + + mov (8) REF_LEFT(0,2)<1> INTRA_REF_LEFT(0) // Left reference data, (leave 2 for reference filtering) + (-f0.0) mov (1) REF_LEFT(0,1)<1> INTRA_REF_LEFT(0)REGION(1,0) // p[-1,-1]=p[-1,0] + (f0.0.any2h) mov (2) REF_LEFT(0,0)<1> INTRA_REF_TOP(0,-1)REGION(1,0) // p'[-1,y] (y=0,1) = p[-1,-1] + and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_AVAIL_FLAG // Is "B" available? + (f0.1) mov (1) REF_LEFT(0,0)<1> INTRA_REF_TOP(0,0)REGION(1,0) // p[0,-1] for left filtering + and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG // Is "A" available? + (-f0.1) mov (1) REF_LEFT(0,2)<1> INTRA_REF_TOP(0,-1)REGION(1,0) // p'[-1,2] = p[-1,-1] + + and (1) PRED_MODE<1>:w INTRA_PRED_MODE(0)REGION(1,0) 0x0F:w // Intra pred mode for current block + mov (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w // Top/Left neighbor available flags + CALL(intra_Pred_8x8_Y,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + +// Sub-macroblock 1 ***************** + mov (16) REF_TOP0(0)<1> INTRA_REF_TOP(0,4) // Top reference data + and.nz.f0.1 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_RIGHT_AVAIL_FLAG // Is "C" available? + (f0.1.any8h) mov (8) REF_TOP(0,8)<1> INTRA_REF_TOP(0,16)<8;8,1> // Take data from "C" + (-f0.1.any8h) mov (8) REF_TOP(0,8)<1> INTRA_REF_TOP(0,15)REGION(1,0) // Repeat last pixel from "B" + + mov (4) REF_LEFT(0,2)<1> DEC_Y(0,14)<16;1,0> // Left reference data (top half) (leave 2 for reference filtering) + mov (4) REF_LEFT(0,6)<1> DEC_Y(2,14)<16;1,0> // Left reference data (bottom half) + mov (2) REF_LEFT(0,0)<1> INTRA_REF_TOP(0,7)REGION(1,0) // p'[-1,y] (y=0,1) = p[-1,-1] + and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_AVAIL_FLAG // Is "B" available? + (f0.1) mov (1) REF_LEFT(0,0)<1> INTRA_REF_TOP(0,8)REGION(1,0) // p[-1,-1] for left filtering + (-f0.1) mov (1) REF_LEFT(0,1)<1> DEC_Y(0,14)REGION(1,0) // p[-1,-1] = p[-1,0] + + shr (1) PRED_MODE<1>:w INTRA_PRED_MODE(0)REGION(1,0) 4:w // Intra pred mode for current block + add (2) PPREDBUF_Y<1>:w PPREDBUF_Y<2;2,1>:w 4*GRFWIB:w // Pointer to predicted sub-macroblock 1 + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 1:w // Left neighbor is available + CALL(intra_Pred_8x8_Y,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + +// Pack constructed data from word-aligned to byte-aligned format and interlace Y0 and Y1(every two Y rows) +// to speed up save_8x8_Y module later +// PPREDBUF_Y now points to sub-macroblock Y1 + mov (32) r[PPREDBUF_Y,-PREDBLK1]<1>:ub DEC_Y(0)<32;16,2> {Compr} // First 4 Y0 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+32]<1>:ub DEC_Y(4)<32;16,2> {Compr} // First 4 Y1 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+64]<1>:ub DEC_Y(2)<32;16,2> {Compr} // Second 4 Y0 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+96]<1>:ub DEC_Y(6)<32;16,2> {Compr} // Second 4 Y1 rows + +// Sub-macroblock 2 ***************** +// Intra_8x8 special available flag handling + and.nz.f0.0 (1) NULLREG REG_MBAFF_PIC MBAFF_PIC // Is current MBAFF picture + and.z.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG // Is "A" not available? + (f0.0) and.z.f0.0 (1) NULLREG REG_FIELD_MACROBLOCK_FLAG FIELD_MACROBLOCK_FLAG // Is current frame MB? + (f0.1) and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_8X8_BLK2_AVAIL_FLAG INTRA_PRED_8X8_BLK2_AVAIL_FLAG // Is special intra_8x8 available flag set? + (f0.0.allv) mov (1) REF_TOP(0,-1)<1> INTRA_REF_LEFT0(0,31)REGION(1,0) // Top-left reference data + (f0.0.allv) jmpi (1) INTRA_8x8_BLK2 +// Done intra_8x8 special available flag handling + + and.nz.f0.0 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG // Is top-half "A" available? + (f0.0.any4h) mov (4) REF_TOP0(0)<1> INTRA_REF_LEFT0(0,28)REGION(4,1) // Top-left reference data + (-f0.0) mov (1) REF_TOP(0,-1)<1> DEC_Y(2,24)REGION(1,0) // p[-1,-1] = p[0,-1] +INTRA_8x8_BLK2: + mov (8) REF_TOP(0)<1> DEC_Y(2,24)REGION(8,1) // Top reference data + mov (8) REF_TOP(0,8)<1> DEC_Y(3,24)REGION(8,1) // Top reference data + + mov (8) REF_LEFT(0,2)<1> INTRA_REF_LEFT(1) // Left reference data, (leave 2 for reference filtering) + mov (1) REF_LEFT(0,0)<1> DEC_Y(2,24)REGION(1,0) // p'[-1,0] = p[0,-1] since "B" is always available + (f0.0) mov (1) REF_LEFT(0,1)<1> INTRA_REF_LEFT(0,28)REGION(1,0) // p[-1,1] = p[-1,-1] if top-half "A" available + (-f0.0) mov (1) REF_LEFT(0,1)<1> INTRA_REF_LEFT(1)REGION(1,0) // p[-1,1] = p[-1,0] + and.nz.f0.1 (1) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_BH_AVAIL_FLAG // Is bottom-half "A" available? + (-f0.1) mov (1) REF_LEFT(0,2)<1> INTRA_REF_LEFT(0,28)REGION(1,0) // p'[-1,2] = p[-1,-1] + + and (1) PRED_MODE<1>:w INTRA_PRED_MODE(0,1)REGION(1,0) 0x0F:w // Intra pred mode for current block + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL.1<0;1,0>:w 2:w // Top neighbor is available + CALL(intra_Pred_8x8_Y,1) + add (1) PERROR<1>:w PERROR<0;1,0>:w 0x0080:w // Pointers to next error block + +// Sub-macroblock 3 ***************** + mov (4) REF_TOP0(0)<1> DEC_Y(2,28)REGION(4,1) // Top-left reference data + mov (8) REF_TOP(0)<1> DEC_Y(3,24)REGION(8,1) // Top reference data + mov (16) REF_TOP(0,8)<1> DEC_Y(3,31)REGION(1,0) // Top-right reference data + + mov (4) REF_LEFT(0,2)<1> DEC_Y(4,14)<16;1,0> // Left reference data (top half) (leave 2 for reference filtering) + mov (4) REF_LEFT(0,6)<1> DEC_Y(6,14)<16;1,0> // Left reference data (bottom half) + mov (1) REF_LEFT(0,0)<1> DEC_Y(3,24)REGION(1,0) // p[-1,0] = p[0,-1] + mov (1) REF_LEFT(0,1)<1> DEC_Y(2,31)REGION(1,0) // p[-1,1] = p[-1,-1] + + shr (1) PRED_MODE<1>:w INTRA_PRED_MODE(0,1)REGION(1,0) 4:w // Intra pred mode for current block + add (2) PPREDBUF_Y<1>:w PPREDBUF_Y<2;2,1>:w 4*GRFWIB:w // Pointer to predicted sub-macroblock 3 + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 3:w // Top and Left neighbor are available + CALL(intra_Pred_8x8_Y,1) + +// Pack constructed data from word-aligned to byte-aligned format +// to speed up save_8x8_Y module later +// PPREDBUF_Y now points to sub-macroblock Y1 + mov (32) r[PPREDBUF_Y,-PREDBLK1]<1>:ub DEC_Y(4)<32;16,2> {Compr} // First 4 Y2 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+32]<1>:ub DEC_Y(8)<32;16,2> {Compr} // First 4 Y3 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+64]<1>:ub DEC_Y(6)<32;16,2> {Compr} // Second 4 Y2 rows + mov (32) r[PPREDBUF_Y,0-PREDBLK1+96]<1>:ub DEC_Y(10)<32;16,2> {Compr} // Second 4 Y3 rows + +// All 4 sub-macroblock (containing 4 intra_8x8 blocks) have be constructed +// Save constructed Y picture + CALL(save_8x8_Y,1) // Save Intra_8x8 predicted luma data. +// +// Decode U/V blocks +// +// Note: The decoding for chroma blocks will be the same for all intra prediction mode +// + CALL(decode_Chroma_Intra,1) + +#ifdef SW_SCOREBOARD + #include "scoreboard_update.asm" +#endif + +// Terminate the thread +// + #include "EndIntraThread.asm" + +// End of Intra_8x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_PCM.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_PCM.asm new file mode 100644 index 000000000..5e2cb0701 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_PCM.asm @@ -0,0 +1,86 @@ +/* + * Decode Intra_PCM macroblock + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Intra_PCM.asm +// +// Decoding of I_PCM macroblock +// +// $Revision: 8 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: Intra_PCM +// ---------------------------------------------------- + +.kernel Intra_PCM +INTRA_PCM: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0x03aa55a5:ud +#endif + +#include "SetupForHWMC.asm" + +// Not actually needed here but just want to slow down the Intra-PCM to avoid race condition +// +#ifdef SW_SCOREBOARD + and (1) REG_INTRA_PRED_AVAIL_FLAG_WORD<1>:w REG_INTRA_PRED_AVAIL_FLAG_WORD<0;1,0>:w 0xffe0:w // Ensure all neighbor avail flags are "0" + CALL(scoreboard_start_intra,1) + wait n0:ud // Now wait for scoreboard to response +#endif + +// +// Decoding Y blocks +// +// In I_PCM mode, the samples are already arranged in raster scan order within the macroblock. +// We just need to save them to picture buffers +// + #include "save_I_PCM.asm" // Save to destination picture buffers + +#ifdef SW_SCOREBOARD + #include "scoreboard_update.asm" +#endif + +// Terminate the thread +// + #include "EndIntraThread.asm" + +// End of Intra_PCM diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_funcLib.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_funcLib.asm new file mode 100644 index 000000000..87a2d5ac2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Intra_funcLib.asm @@ -0,0 +1,72 @@ +/* + * Library of common modules shared among different intra prediction kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: Intra_funcLib.asm +// +// Library of common modules shared among different intra prediction kernels +// +// Note: Any sub-modules, if they are #included in more than one kernel, +// should be moved to this module. +// +#if defined(INTRA_16X16) +#undef INTRA_16X16 + #include "load_Intra_Ref_Y.asm" // Load intra Y reference data + #include "Decode_Chroma_Intra.asm" // Decode chroma blocks + #include "save_16x16_Y.asm" // Save to destination Y frame surface +#elif defined(INTRA_8X8) +#undef INTRA_8X8 + #include "load_Intra_Ref_Y.asm" // Load intra Y reference data + #include "Decode_Chroma_Intra.asm" // Decode chroma blocks + #include "intra_Pred_8x8_Y.asm" // Intra predict Intra_4x4 blocks + #include "save_8x8_Y.asm" // Save to destination Y frame surface +#elif defined(INTRA_4X4) +#undef INTRA_4X4 + #include "load_Intra_Ref_Y.asm" // Load intra Y reference data + #include "Decode_Chroma_Intra.asm" // Decode chroma blocks + #include "intra_Pred_4x4_Y_4.asm" // Intra predict Intra_4x4 blocks + #include "save_4x4_Y.asm" // Save to destination Y frame surface +#else // For all merged kernels +#endif + +#ifdef SW_SCOREBOARD + #include "scoreboard_start_intra.asm" // scorboard intra start function + #include "scoreboard_start_inter.asm" // scorboard inter start function +#endif // SW_SCOREBOARD + +// End of Intra_funcLib diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.am new file mode 100644 index 000000000..51705033d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.am @@ -0,0 +1,224 @@ + +INTEL_G4I = + +INTEL_G4A = null.g4a + +INTEL_G4B = null.g4b + +INTEL_G4B_GEN5 = null.g4b.gen5 + +INTEL_MC_G4B = avc_mc.g4b +INTEL_MC_G4B_GEN5 = avc_mc.g4b.gen5 +INTEL_MC_EXPORT = export.inc +INTEL_MC_EXPORT_GEN5 = export.inc.gen5 + +INTEL_MC_ASM = \ + add_Error_16x16_Y.asm \ + add_Error_UV.asm \ + AllAVC.asm \ + AllAVCField.asm \ + AllAVCFrame.asm \ + AllAVCMBAFF.asm \ + AllIntra.asm \ + AVCMCInter.asm \ + BSDReset.asm \ + chromaMVAdjust.asm \ + DCResetDummy.asm \ + Decode_Chroma_Intra.asm \ + EndIntraThread.asm \ + initialize_MBPara.asm \ + interpolate_C_2x2.asm \ + interpolate_C_4x4.asm \ + interpolate_Y_4x4.asm \ + interpolate_Y_8x8.asm \ + Intra_16x16.asm \ + Intra_4x4.asm \ + Intra_8x8.asm \ + Intra_funcLib.asm \ + Intra_PCM.asm \ + intra_pred_16x16_Y.asm \ + intra_Pred_4x4_Y_4.asm \ + intra_Pred_8x8_Y.asm \ + intra_Pred_Chroma.asm \ + load_Intra_Ref_UV.asm \ + load_Intra_Ref_Y.asm \ + loadRef_C_10x5.asm \ + loadRef_C_6x3.asm \ + loadRef_Y_16x13.asm \ + loadRef_Y_16x9.asm \ + recon_C_4x4.asm \ + recon_Y_8x8.asm \ + roundShift_C_4x4.asm \ + save_16x16_Y.asm \ + save_4x4_Y.asm \ + save_8x8_UV.asm \ + save_8x8_Y.asm \ + save_I_PCM.asm \ + scoreboard.asm \ + scoreboard_MBAFF.asm \ + scoreboard_restore_AS.asm \ + scoreboard_save_AS.asm \ + scoreboard_sip.asm \ + scoreboard_start_inter.asm \ + scoreboard_start_intra.asm \ + scoreboard_update.asm \ + SetHWScoreboard.asm \ + SetHWScoreboard_MBAFF.asm \ + set_SB_offset.asm \ + SetupForHWMC.asm \ + weightedPred.asm \ + writeRecon_C_8x4.asm \ + writeRecon_Y_16x8.asm \ + writeRecon_YC.asm + +INTEL_MC_INC = \ + AllAVC_Build.inc \ + AllAVC_Export.inc \ + export.inc \ + header.inc \ + HwmcOnlyHeader.inc \ + inter_Header.inc \ + intra_Header.inc \ + Scoreboard_header.inc \ + SetHWScoreboard_header.inc \ + $(NULL) + +INTEL_ILDB_ASM = \ + ../ildb/AVC_ILDB_Child_Field_UV.asm \ + ../ildb/AVC_ILDB_Child_Field_Y.asm \ + ../ildb/AVC_ILDB_Child_Mbaff_UV.asm \ + ../ildb/AVC_ILDB_Child_Mbaff_Y.asm \ + ../ildb/AVC_ILDB_Child_UV.asm \ + ../ildb/AVC_ILDB_Child_Y.asm \ + ../ildb/AVC_ILDB_Chroma_Core.asm \ + ../ildb/AVC_ILDB_Chroma_Core_Mbaff.asm \ + ../ildb/AVC_ILDB_CloseGateway.asm \ + ../ildb/AVC_ILDB_Dep_Check.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_UV_h.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_UV_v.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_Y_h.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_Y_v.asm \ + ../ildb/AVC_ILDB_Filter_UV_h.asm \ + ../ildb/AVC_ILDB_Filter_UV_v.asm \ + ../ildb/AVC_ILDB_Filter_Y_h.asm \ + ../ildb/AVC_ILDB_Filter_Y_v.asm \ + ../ildb/AVC_ILDB_ForwardMsg.asm \ + ../ildb/AVC_ILDB_Luma_Core.asm \ + ../ildb/AVC_ILDB_Luma_Core_Mbaff.asm \ + ../ildb/AVC_ILDB_LumaThrdLimit.asm \ + ../ildb/AVC_ILDB_OpenGateway.asm \ + ../ildb/AVC_ILDB_Root_Field_UV.asm \ + ../ildb/AVC_ILDB_Root_Field_Y.asm \ + ../ildb/AVC_ILDB_Root_Mbaff_UV.asm \ + ../ildb/AVC_ILDB_Root_Mbaff_Y.asm \ + ../ildb/AVC_ILDB_Root_UV.asm \ + ../ildb/AVC_ILDB_Root_Y.asm \ + ../ildb/AVC_ILDB_Spawn.asm \ + ../ildb/AVC_ILDB_SpawnChild.asm \ + ../ildb/AVC_ILDB_SpawnChromaRoot.asm \ + ../ildb/load_Cur_UV_8x8T.asm \ + ../ildb/load_Cur_UV_8x8T_Mbaff.asm \ + ../ildb/load_Cur_UV_Right_Most_2x8.asm \ + ../ildb/load_Cur_Y_16x16T.asm \ + ../ildb/load_Cur_Y_16x16T_Mbaff.asm \ + ../ildb/load_Cur_Y_Right_Most_4x16.asm \ + ../ildb/Load_ILDB_Cntrl_Data_16DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data_22DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data_64DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data.asm \ + ../ildb/load_Left_UV_2x8T.asm \ + ../ildb/load_Left_UV_2x8T_Mbaff.asm \ + ../ildb/load_Left_Y_4x16T.asm \ + ../ildb/load_Left_Y_4x16T_Mbaff.asm \ + ../ildb/loadNV12_16x16T.asm \ + ../ildb/loadNV12_16x4.asm \ + ../ildb/load_Top_UV_8x2.asm \ + ../ildb/load_Top_UV_8x2_Mbaff.asm \ + ../ildb/load_Top_Y_16x4.asm \ + ../ildb/load_Top_Y_16x4_Mbaff.asm \ + ../ildb/save_Cur_UV_8x8.asm \ + ../ildb/save_Cur_UV_8x8_Mbaff.asm \ + ../ildb/save_Cur_Y_16x16.asm \ + ../ildb/save_Cur_Y_16x16_Mbaff.asm \ + ../ildb/save_Left_UV_8x2T.asm \ + ../ildb/save_Left_UV_8x2T_Mbaff.asm \ + ../ildb/save_Left_Y_16x4T.asm \ + ../ildb/save_Left_Y_16x4T_Mbaff.asm \ + ../ildb/saveNV12_16x16.asm \ + ../ildb/saveNV12_16x4.asm \ + ../ildb/saveNV12_16x4T.asm \ + ../ildb/save_Top_UV_8x2.asm \ + ../ildb/save_Top_UV_8x2_Mbaff.asm \ + ../ildb/save_Top_Y_16x4.asm \ + ../ildb/save_Top_Y_16x4_Mbaff.asm \ + ../ildb/SetupVPKernel.asm \ + ../ildb/Transpose_Cur_UV_2x8.asm \ + ../ildb/Transpose_Cur_UV_8x8.asm \ + ../ildb/Transpose_Cur_UV_Right_Most_2x8.asm \ + ../ildb/Transpose_Cur_Y_16x16.asm \ + ../ildb/Transpose_Cur_Y_4x16.asm \ + ../ildb/Transpose_Cur_Y_Right_Most_4x16.asm \ + ../ildb/Transpose_Left_UV_2x8.asm \ + ../ildb/Transpose_Left_Y_4x16.asm \ + ../ildb/TransposeNV12_16x16.asm \ + ../ildb/TransposeNV12_4x16.asm \ + ../ildb/writeURB.asm \ + ../ildb/writeURB_UV_Child.asm \ + ../ildb/writeURB_Y_Child.asm + +INTEL_MC_GEN5_ASM = avc_mc.gen5.asm + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_MC_G4B_GEN5) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g4a .g4b .gen5.asm + +if HAVE_GEN4ASM +.g4a.g4b: + $(AM_V_GEN)m4 $*.g4a > $*.g4m && \ + $(AM_V_GEN)$(GEN4ASM) -o $@ $*.g4m && \ + $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@.gen5 $*.g4m && \ + rm $*.g4m + +$(INTEL_MC_GEN5_ASM): $(INTEL_MC_ASM) $(INTEL_MC_INC) $(INTEL_ILDB_ASM) + $(AM_V_GEN)cpp -DDEV_ILK -DBOOTSTRAP -I $(srcdir)/../ildb/ $(srcdir)/AllAVC.asm > _mc0.$@ && \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _mc0.$@ $@ && \ + $(GEN4ASM) -l $(srcdir)/list -a -e tmp.$(INTEL_MC_EXPORT_GEN5) -g 5 $@ \ + -o /dev/null && \ + mv tmp.$(INTEL_MC_EXPORT_GEN5) $(INTEL_MC_EXPORT_GEN5) && \ + cpp -DDEV_ILK -I $(srcdir)/../ildb/ $(srcdir)/AllAVC.asm > _mc1.$@ && \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _mc1.$@ $@ && \ + rm _mc0.$@ _mc1.$@ + +$(INTEL_MC_G4B_GEN5): $(INTEL_MC_GEN5_ASM) + $(AM_V_GEN)$(GEN4ASM) -l $(srcdir)/list -a -e tmp.$(INTEL_MC_EXPORT_GEN5) -g 5 $< \ + -o $@ && \ + cat tmp.$(INTEL_MC_EXPORT_GEN5) | sed "s/_IP/_IP_GEN5/g" \ + > $(INTEL_MC_EXPORT_GEN5) && \ + rm tmp.$(INTEL_MC_EXPORT_GEN5) + +$(INTEL_G4B): $(INTEL_G4I) +endif + +CLEANFILES = $(INTEL_MC_GEN5_ASM) + +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_MC_ASM) \ + $(INTEL_MC_EXPORT) \ + $(INTEL_MC_EXPORT_GEN5) \ + $(INTEL_MC_G4B) \ + $(INTEL_MC_G4B_GEN5) \ + $(INTEL_MC_INC) \ + list \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.in new file mode 100644 index 000000000..2e798b9a7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Makefile.in @@ -0,0 +1,663 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_MC_G4B_GEN5) +subdir = src/shaders/h264/mc +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_G4I = +INTEL_G4A = null.g4a +INTEL_G4B = null.g4b +INTEL_G4B_GEN5 = null.g4b.gen5 +INTEL_MC_G4B = avc_mc.g4b +INTEL_MC_G4B_GEN5 = avc_mc.g4b.gen5 +INTEL_MC_EXPORT = export.inc +INTEL_MC_EXPORT_GEN5 = export.inc.gen5 +INTEL_MC_ASM = \ + add_Error_16x16_Y.asm \ + add_Error_UV.asm \ + AllAVC.asm \ + AllAVCField.asm \ + AllAVCFrame.asm \ + AllAVCMBAFF.asm \ + AllIntra.asm \ + AVCMCInter.asm \ + BSDReset.asm \ + chromaMVAdjust.asm \ + DCResetDummy.asm \ + Decode_Chroma_Intra.asm \ + EndIntraThread.asm \ + initialize_MBPara.asm \ + interpolate_C_2x2.asm \ + interpolate_C_4x4.asm \ + interpolate_Y_4x4.asm \ + interpolate_Y_8x8.asm \ + Intra_16x16.asm \ + Intra_4x4.asm \ + Intra_8x8.asm \ + Intra_funcLib.asm \ + Intra_PCM.asm \ + intra_pred_16x16_Y.asm \ + intra_Pred_4x4_Y_4.asm \ + intra_Pred_8x8_Y.asm \ + intra_Pred_Chroma.asm \ + load_Intra_Ref_UV.asm \ + load_Intra_Ref_Y.asm \ + loadRef_C_10x5.asm \ + loadRef_C_6x3.asm \ + loadRef_Y_16x13.asm \ + loadRef_Y_16x9.asm \ + recon_C_4x4.asm \ + recon_Y_8x8.asm \ + roundShift_C_4x4.asm \ + save_16x16_Y.asm \ + save_4x4_Y.asm \ + save_8x8_UV.asm \ + save_8x8_Y.asm \ + save_I_PCM.asm \ + scoreboard.asm \ + scoreboard_MBAFF.asm \ + scoreboard_restore_AS.asm \ + scoreboard_save_AS.asm \ + scoreboard_sip.asm \ + scoreboard_start_inter.asm \ + scoreboard_start_intra.asm \ + scoreboard_update.asm \ + SetHWScoreboard.asm \ + SetHWScoreboard_MBAFF.asm \ + set_SB_offset.asm \ + SetupForHWMC.asm \ + weightedPred.asm \ + writeRecon_C_8x4.asm \ + writeRecon_Y_16x8.asm \ + writeRecon_YC.asm + +INTEL_MC_INC = \ + AllAVC_Build.inc \ + AllAVC_Export.inc \ + export.inc \ + header.inc \ + HwmcOnlyHeader.inc \ + inter_Header.inc \ + intra_Header.inc \ + Scoreboard_header.inc \ + SetHWScoreboard_header.inc \ + $(NULL) + +INTEL_ILDB_ASM = \ + ../ildb/AVC_ILDB_Child_Field_UV.asm \ + ../ildb/AVC_ILDB_Child_Field_Y.asm \ + ../ildb/AVC_ILDB_Child_Mbaff_UV.asm \ + ../ildb/AVC_ILDB_Child_Mbaff_Y.asm \ + ../ildb/AVC_ILDB_Child_UV.asm \ + ../ildb/AVC_ILDB_Child_Y.asm \ + ../ildb/AVC_ILDB_Chroma_Core.asm \ + ../ildb/AVC_ILDB_Chroma_Core_Mbaff.asm \ + ../ildb/AVC_ILDB_CloseGateway.asm \ + ../ildb/AVC_ILDB_Dep_Check.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_UV_h.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_UV_v.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_Y_h.asm \ + ../ildb/AVC_ILDB_Filter_Mbaff_Y_v.asm \ + ../ildb/AVC_ILDB_Filter_UV_h.asm \ + ../ildb/AVC_ILDB_Filter_UV_v.asm \ + ../ildb/AVC_ILDB_Filter_Y_h.asm \ + ../ildb/AVC_ILDB_Filter_Y_v.asm \ + ../ildb/AVC_ILDB_ForwardMsg.asm \ + ../ildb/AVC_ILDB_Luma_Core.asm \ + ../ildb/AVC_ILDB_Luma_Core_Mbaff.asm \ + ../ildb/AVC_ILDB_LumaThrdLimit.asm \ + ../ildb/AVC_ILDB_OpenGateway.asm \ + ../ildb/AVC_ILDB_Root_Field_UV.asm \ + ../ildb/AVC_ILDB_Root_Field_Y.asm \ + ../ildb/AVC_ILDB_Root_Mbaff_UV.asm \ + ../ildb/AVC_ILDB_Root_Mbaff_Y.asm \ + ../ildb/AVC_ILDB_Root_UV.asm \ + ../ildb/AVC_ILDB_Root_Y.asm \ + ../ildb/AVC_ILDB_Spawn.asm \ + ../ildb/AVC_ILDB_SpawnChild.asm \ + ../ildb/AVC_ILDB_SpawnChromaRoot.asm \ + ../ildb/load_Cur_UV_8x8T.asm \ + ../ildb/load_Cur_UV_8x8T_Mbaff.asm \ + ../ildb/load_Cur_UV_Right_Most_2x8.asm \ + ../ildb/load_Cur_Y_16x16T.asm \ + ../ildb/load_Cur_Y_16x16T_Mbaff.asm \ + ../ildb/load_Cur_Y_Right_Most_4x16.asm \ + ../ildb/Load_ILDB_Cntrl_Data_16DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data_22DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data_64DW.asm \ + ../ildb/Load_ILDB_Cntrl_Data.asm \ + ../ildb/load_Left_UV_2x8T.asm \ + ../ildb/load_Left_UV_2x8T_Mbaff.asm \ + ../ildb/load_Left_Y_4x16T.asm \ + ../ildb/load_Left_Y_4x16T_Mbaff.asm \ + ../ildb/loadNV12_16x16T.asm \ + ../ildb/loadNV12_16x4.asm \ + ../ildb/load_Top_UV_8x2.asm \ + ../ildb/load_Top_UV_8x2_Mbaff.asm \ + ../ildb/load_Top_Y_16x4.asm \ + ../ildb/load_Top_Y_16x4_Mbaff.asm \ + ../ildb/save_Cur_UV_8x8.asm \ + ../ildb/save_Cur_UV_8x8_Mbaff.asm \ + ../ildb/save_Cur_Y_16x16.asm \ + ../ildb/save_Cur_Y_16x16_Mbaff.asm \ + ../ildb/save_Left_UV_8x2T.asm \ + ../ildb/save_Left_UV_8x2T_Mbaff.asm \ + ../ildb/save_Left_Y_16x4T.asm \ + ../ildb/save_Left_Y_16x4T_Mbaff.asm \ + ../ildb/saveNV12_16x16.asm \ + ../ildb/saveNV12_16x4.asm \ + ../ildb/saveNV12_16x4T.asm \ + ../ildb/save_Top_UV_8x2.asm \ + ../ildb/save_Top_UV_8x2_Mbaff.asm \ + ../ildb/save_Top_Y_16x4.asm \ + ../ildb/save_Top_Y_16x4_Mbaff.asm \ + ../ildb/SetupVPKernel.asm \ + ../ildb/Transpose_Cur_UV_2x8.asm \ + ../ildb/Transpose_Cur_UV_8x8.asm \ + ../ildb/Transpose_Cur_UV_Right_Most_2x8.asm \ + ../ildb/Transpose_Cur_Y_16x16.asm \ + ../ildb/Transpose_Cur_Y_4x16.asm \ + ../ildb/Transpose_Cur_Y_Right_Most_4x16.asm \ + ../ildb/Transpose_Left_UV_2x8.asm \ + ../ildb/Transpose_Left_Y_4x16.asm \ + ../ildb/TransposeNV12_16x16.asm \ + ../ildb/TransposeNV12_4x16.asm \ + ../ildb/writeURB.asm \ + ../ildb/writeURB_UV_Child.asm \ + ../ildb/writeURB_Y_Child.asm + +INTEL_MC_GEN5_ASM = avc_mc.gen5.asm +TARGETS = $(am__append_1) +SUFFIXES = .g4a .g4b .gen5.asm +CLEANFILES = $(INTEL_MC_GEN5_ASM) +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_MC_ASM) \ + $(INTEL_MC_EXPORT) \ + $(INTEL_MC_EXPORT_GEN5) \ + $(INTEL_MC_G4B) \ + $(INTEL_MC_G4B_GEN5) \ + $(INTEL_MC_INC) \ + list \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g4a .g4b .gen5.asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/h264/mc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/h264/mc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@.g4a.g4b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 $*.g4a > $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -o $@ $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@.gen5 $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ rm $*.g4m + +@HAVE_GEN4ASM_TRUE@$(INTEL_MC_GEN5_ASM): $(INTEL_MC_ASM) $(INTEL_MC_INC) $(INTEL_ILDB_ASM) +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -DDEV_ILK -DBOOTSTRAP -I $(srcdir)/../ildb/ $(srcdir)/AllAVC.asm > _mc0.$@ && \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _mc0.$@ $@ && \ +@HAVE_GEN4ASM_TRUE@ $(GEN4ASM) -l $(srcdir)/list -a -e tmp.$(INTEL_MC_EXPORT_GEN5) -g 5 $@ \ +@HAVE_GEN4ASM_TRUE@ -o /dev/null && \ +@HAVE_GEN4ASM_TRUE@ mv tmp.$(INTEL_MC_EXPORT_GEN5) $(INTEL_MC_EXPORT_GEN5) && \ +@HAVE_GEN4ASM_TRUE@ cpp -DDEV_ILK -I $(srcdir)/../ildb/ $(srcdir)/AllAVC.asm > _mc1.$@ && \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _mc1.$@ $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _mc0.$@ _mc1.$@ + +@HAVE_GEN4ASM_TRUE@$(INTEL_MC_G4B_GEN5): $(INTEL_MC_GEN5_ASM) +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -l $(srcdir)/list -a -e tmp.$(INTEL_MC_EXPORT_GEN5) -g 5 $< \ +@HAVE_GEN4ASM_TRUE@ -o $@ && \ +@HAVE_GEN4ASM_TRUE@ cat tmp.$(INTEL_MC_EXPORT_GEN5) | sed "s/_IP/_IP_GEN5/g" \ +@HAVE_GEN4ASM_TRUE@ > $(INTEL_MC_EXPORT_GEN5) && \ +@HAVE_GEN4ASM_TRUE@ rm tmp.$(INTEL_MC_EXPORT_GEN5) + +@HAVE_GEN4ASM_TRUE@$(INTEL_G4B): $(INTEL_G4I) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Scoreboard_header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Scoreboard_header.inc new file mode 100644 index 000000000..a98bdb812 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/Scoreboard_header.inc @@ -0,0 +1,115 @@ +/* + * Common header file for both scoreboard and scoreboard_MBAFF kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SCOREBOARD_HEADER__) // Make sure this file is only included once +#define __SCOREBOARD_HEADER__ + +// Module name: scoreboard_header.inc +// +// Common header file for both scoreboard and scoreboard_MBAFF kernels +// + +#define ONE_MB_WA // Enable WA for 1-MB wide pictures. To disable WA, simply comment out this line. + +#define INLINE_REG_OFF 1 +#define INLINE_REG r1 +#define INLINE_REG1 r2 + +#define DONEFLAG 0x40 // Bit mask of "completed" thread flag + +// GRF r1 map +// +#define WIDTHINMB_1 INLINE_REG.0 // :uw type. Picture width in MB - 1 +#define HEIGHTINMB_1 INLINE_REG.1 // :uw type. Picture height in MB - 1 +#define TotalMB INLINE_REG.2 // :uw type. Total number of macroblocks +#define WFLen_B INLINE_REG.3 // :uw type. Bottom MB Wavefront length (Reserved for MBAFF scoreboard) +#define WFLen INLINE_REG.4 // :uw type. Wavefront length (used as loop counter) +#define WFLenY INLINE_REG.5 // :uw type. Wavefront length (vertical component) +#define StartX INLINE_REG.6 // :uw type. Start X of current wavefront +#define StartY INLINE_REG.7 // :uw type. Start Y of current wavefront +#define StartXD INLINE_REG.3 // :ud type. Start (X,Y) of current wavefront +#define CASE00PTR INLINE_REG.4 // :ud type. Pointer to "inter start" handler +#define WFLen_Save INLINE_REG.10 // :uw type. Saved Wavefront length (Reserved for MBAFF scoreboard) +#define CASE10PTR INLINE_REG.6 // :ud type. Pointer to "intra start" handler +#define CASE11PTR INLINE_REG.7 // :ud type. Pointer to "inter complete" handler + +// GRF r2 map +// +.declare WFStart Base=GRF(2) ElementSize=2 SrcRegion=REGION(4,1) Type=w // Start MB of recent 4 wavefronts, actually use 5 WORDs +.declare WFStart_T Base=GRF(2) ElementSize=2 SrcRegion=REGION(4,1) Type=w // Start MB of recent 4 wavefronts +.declare WFStart_B Base=GRF(2).4 ElementSize=2 SrcRegion=REGION(4,1) Type=w // Start MB of recent 4 wavefronts + +#define NewWFOffsetD INLINE_REG1.5 // :d type. Offsets used for new wavefront = 0x01ffff00 (0, -1, -1, 1) +#define NewWFOffset INLINE_REG1.20 // :b type. Offsets used for new wavefront = 0x01ffff00 (0, -1, -1, 1) + +#define AVAILFLAGD INLINE_REG1.6 // :ud type. Neighbor available flags = 0x08020401 (in ACBD order) +#define AVAILFLAG INLINE_REG1.24 // :ub type. Neighbor available flags as above +#define AVAILFLAG1D INLINE_REG1.7 // :ud type. Top-half neighbor available flags = 0x80402010 (in A_Bxxx order) + +.declare MBINDEX Base=GRF(3) ElementSize=2 SrcRegion=REGION(16,1) Type=w // MB order # of current MB group (Cur, ACBD and AC_B_D_) +#define AR_SAVE r3.8 // :uw type. Saved Address Register information + +#define CMDPTR a0.0 // :uw type. DWORD Pointer to the scoreboard +#define DEPPTR a0.0 // :uw type. Pointer to the dependency scoreboard - Current MB +#define DEPPTRL a0.1 // :uw type. Pointer to the dependency scoreboard - Left MB +#define DEPPTRTR a0.2 // :uw type. Pointer to the dependency scoreboard - Top right MB +#define DEPPTRT a0.3 // :uw type. Pointer to the dependency scoreboard - Top MB +#define DEPPTRTL a0.4 // :uw type. Pointer to the dependency scoreboard - Top left MB +#define DEPPTRLB a0.5 // :uw type. Pointer to the dependency scoreboard - Left bottom-half MB + +#define PMSGSEL a0.7 // :uw type. Pointer to current message in message handling table + +#define CMD_SB_REG_OFF 4 +.declare CMD_SB Base=GRF(4) ElementSize=4 SrcRegion=REGION(8,1) Type=ud // Command scoreboard (64 GRF) + +#ifdef AS_ENABLED +// Definitions for Advanced Scheduler support +#define AS_INT BIT23 // "Preemption Exception Status" bit in cr0.1:ud control register +#define AS_INT_EN BIT10 // "Preemption Exception Enable" bit in cr0.1:ud control register +#define TH_INT BIT2 // "Thread Interrupted" bit in message descriptor +#define TH_RES BIT0 // "Thread Restart Enable" bit in R0 header r0.2 + +#define AS_SAVE 34 // Surface state for saving scoreboard contents + // Ensure not to conflict with existing binding table entries +#endif // End AS_ENABLED + +// End of scoreboard_header + +#endif // !defined(__SCOREBOARD_HEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard.asm new file mode 100644 index 000000000..d6d700623 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard.asm @@ -0,0 +1,239 @@ +/* + * Set dependency control HW scoreboard kernel + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: SetHWScoreboard.asm +// +// Set dependency control HW scoreboard kernel +// + +// ---------------------------------------------------- +// Main: SetHWScoreboard +// ---------------------------------------------------- + +.kernel SetHWScoreboard + +SETHWSCOREBOARD: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0xf0aa55a5:ud +#endif + +#include "header.inc" +#include "SetHWScoreboard_header.inc" + +// +// Now, begin source code.... +// + +.code + +// Separate the TotalMB so TotalMB will be multiple of 8 +// and RemainderMB will hold the TotalMB%8 +// + and.z.f0.1 (1) RemainderMB<1>:uw TotalMB<0;1,0>:uw 0x0007:uw // number of %8 commands + and.z.f0.0 (1) TotalMB<1>:uw TotalMB<0;1,0>:uw 0xfff8:uw // Number of 8-command blocks + + mov (1) MB_SHIFT_MASK_W<1>:uw 0x100*16+12:w // Set up shift values (12, 16) + +// Initialize common DAP read header +// + mov (8) MRF_READ_HEADER_SRC<1>:ud r0.0<8;8,1>:ud + shl (1) MRF_READ_HEADER_SRC.2<1>:ud StartingMB<0;1,0>:uw 6:uw // Byte-aligned offset being read + +// Initialize Inter DAP write header + mov (8) MRF_INTER_WRITE_HEADER<1>:ud r0.0<8;8,1>:ud + + (f0.0) jmpi (1) SetHWScoreboard_Remainder // Jump if TotalMB < 8 + +//------------------------------------------------------------------------ +// Command buffer parsing loop +// Each loop will handle 8 commands +//------------------------------------------------------------------------ +// +SetHWScoreboard_Loop: +// Load block 0 (Commands 0/1) + mov (8) MRF_READ_HEADER0.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + send (16) CMD_BUFFER_W(0)<1> MRF_READ_HEADER0 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 1 (Commands 2/3) + mov (8) MRF_READ_HEADER1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(4)<1> MRF_READ_HEADER1 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 2 (Commands 4/5) + mov (8) MRF_READ_HEADER2.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER2.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(8)<1> MRF_READ_HEADER2 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 3 (Commands 6/7) + mov (8) MRF_READ_HEADER3.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER3.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(12)<1> MRF_READ_HEADER3 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Start parsing commands + $for(0; <16; 2) { + and.nz.f0.1 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_INTRA_MB:ud // Is it an "Intra" MB? + or (1) CMD_BUFFER_D(%1,2)<1> CMD_BUFFER_D(%1,2)<0;1,0> BIT21:ud // Set "Use Scoreboard" for every MB + shl (2) CMD_BUFFER_W(%1,2)<1> CMD_BUFFER_W(%1,14)<0;1,0> MB_SHIFT_MASK_B<2;2,1>:b // Set HW SB masks + mov (2) CMD_BUFFER_B(%1,4)<2> CMD_BUFFER_B(%1,20)<2;2,1> // Set scoreboard (X,Y) for intra MB + (-f0.1) mov (2) CMD_BUFFER_W(%1,2)<1> CMD_BUFFER_B(%1,20)<2;2,1> // Set scoreboard (X,Y) for inter MB + (f0.1) jmpi (1) Parse_8_Loop_%1 + +// Inter Macroblock +// Output MEDIA_OBJECT command in raster scan order + mul (16) acc0<1>:uw CMD_BUFFER_B(%1,21)<0;1,0> PicWidthMB<0;1,0>:uw // MB offset = Y*W + add (16) acc0<1>:uw acc0<8;8,1>:uw CMD_BUFFER_B(%1,20)<0;1,0> // MB offset = Y*W+X + shl (1) MRF_INTER_WRITE_HEADER.2<1>:ud acc0.2<0;1,0>:uw 6:uw // Byte-aligned MB offset + mov (16) MRF_INTER_WRITE_DATA0<1>:ud CMD_BUFFER_D(%1)<8;8,1> {Compr} // Copy entire command to inter buffer + mov (16) CMD_BUFFER_D(%1)<1> 0:ud {Compr} // Clear original command + send (16) NULLREGW MRF_INTER_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + +Parse_8_Loop_%1: + } + + add.z.f0.0 (1) TotalMB<1>:w TotalMB<0;1,0>:w -8:w // Update remaining number of 8-command blocks + +// Output modified intra commands +// Write block 0 + mov (8) MRF_INTRA_WRITE_HEADER.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + $for(0; <4; 2) { + mov (16) MRF_CMD_BUF_D(%1)<1> CMD_BUFFER_D(%1)<8;8,1> {Compr} + } + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 1 + mov (8) m1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) m1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + mov (16) m2<1>:ud CMD_BUFFER_D(4)<8;8,1> {Compr} + mov (16) m4<1>:ud CMD_BUFFER_D(6)<8;8,1> {Compr} + send (16) NULLREGW m1 null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 2 + add (1) MRF_INTRA_WRITE_HEADER.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + $for(0; <4; 2) { + mov (16) MRF_CMD_BUF_D(%1)<1> CMD_BUFFER_D(%1+8)<8;8,1> {Compr} + } + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 3 + add (1) m1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + mov (16) m2<1>:ud CMD_BUFFER_D(12)<8;8,1> {Compr} + mov (16) m4<1>:ud CMD_BUFFER_D(14)<8;8,1> {Compr} + send (16) NULLREGW m1 null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Update message header for next DAP read + add (1) MRF_READ_HEADER_SRC.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 512:ud // Point to next block of 8-commands + + cmp.z.f0.1 (1) NULLREG RemainderMB<0;1,0>:w 0:uw // Check if remainder MB = 0 + (-f0.0) jmpi (1) SetHWScoreboard_Loop // Continue if more command blocks remain + +SetHWScoreboard_Remainder: +// f0.1 should have been set to indicate if RemainderMB = 0 +// + (f0.1) jmpi (1) SetHWScoreboard_Done // Stop if all commands have been updated + +// Blindly load next 8 commands anyway +// +// Load block 0 (Commands 0/1) + mov (8) MRF_READ_HEADER0.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + send (16) CMD_BUFFER_W(0)<1> MRF_READ_HEADER0 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 1 (Commands 2/3) + mov (8) MRF_READ_HEADER1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(4)<1> MRF_READ_HEADER1 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 2 (Commands 4/5) + mov (8) MRF_READ_HEADER2.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER2.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(8)<1> MRF_READ_HEADER2 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 3 (Commands 6/7) + mov (8) MRF_READ_HEADER3.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER3.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(12)<1> MRF_READ_HEADER3 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Initialize necessary pointers + mov (1) a0.1<1>:ud ((CMD_BUFFER_REG_OFF+1)*0x10000+CMD_BUFFER_REG_OFF)*32 // a0.2:w points to command buffer (first half) + // a0.3:w points to command buffer (second half) +// Initialize Inter DAP write header + mov (8) MRF_INTER_WRITE_HEADER<1>:ud r0.0<8;8,1>:ud + +SetHWScoreboard_Remainder_Loop: + and.nz.f0.1 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_INTRA_MB:ud // Is it an "Intra" MB? + add.z.f0.0 (1) RemainderMB<1>:w RemainderMB<0;1,0>:w -1:w // Decrement MB # + or (1) r[a0.2,2*4]<1>:ud r[a0.2,2*4]<0;1,0>:ud BIT21:ud // Set "Use Scoreboard" for every MB + shl (2) r[a0.2,2*2]<1>:uw r[a0.2,14*2]<0;1,0>:uw MB_SHIFT_MASK_B<2;2,1>:b // Set HW SB masks + mov (2) r[a0.2,4*1]<2>:ub r[a0.2,5*4]<2;2,1>:ub // Set scoreboard (X,Y) for intra MB + + (-f0.1) mov (2) r[a0.2,4*1]<1>:uw r[a0.2,5*4]<2;2,1>:ub // Set scoreboard (X,Y) for inter MB + (f0.1) jmpi (1) Output_Remainder_Intra + +// Inter Macroblock +// Output MEDIA_OBJECT command in raster scan order + mul (16) acc0<1>:uw r[a0.2,21]<0;1,0>:ub PicWidthMB<0;1,0>:uw // MB offset = Y*W + add (16) acc0<1>:uw acc0<8;8,1>:uw r[a0.2,20]<0;1,0>:ub // MB offset = Y*W+X + shl (1) MRF_INTER_WRITE_HEADER.2<1>:ud acc0.2<0;1,0>:uw 6:uw // Byte-aligned MB offset + mov (16) MRF_INTER_WRITE_DATA0<1>:ud r[a0.2]<8;8,1>:ud {Compr} // Copy entire command to inter buffer + mov (16) r[a0.2]<1>:ud 0:ud {Compr} // Clear original command + send (16) NULLREGW MRF_INTER_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + +Output_Remainder_Intra: +// Intra MB command always output + mov (8) MRF_INTRA_WRITE_HEADER.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + mov (16) MRF_CMD_BUF_D(0)<1> r[a0.2]<8;8,1>:ud {Compr} // Copy entire command to intra buffer + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + + add (1) MRF_READ_HEADER_SRC.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 64:ud // Point to next command + add (1) a0.1<1>:ud a0.1<0;1,0>:ud 0x00400040:ud // Update pointers + (-f0.0) jmpi (1) SetHWScoreboard_Remainder_Loop + +// All MBs have been decoded. Terminate the thread now +// +SetHWScoreboard_Done: + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif + +// End of SetHWScoreboard diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_MBAFF.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_MBAFF.asm new file mode 100644 index 000000000..eb7d65888 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_MBAFF.asm @@ -0,0 +1,309 @@ +/* + * Set dependency control HW scoreboard kernel for MBAFF picture + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: SetHWScoreboard_MBAFF.asm +// +// Set dependency control HW scoreboard kernel for MBAFF picture +// + +// ---------------------------------------------------- +// Main: SetHWScoreboard_MBAFF +// ---------------------------------------------------- + +.kernel SetHWScoreboard_MBAFF + +SETHWSCOREBOARD_MBAFF: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0xf1aa55a5:ud +#endif + +#include "header.inc" +#include "SetHWScoreboard_header.inc" + +// +// Now, begin source code.... +// + +.code + +// Separate the TotalMB so TotalMB will be multiple of 8 +// and RemainderMB will hold the TotalMB%8 +// + and.z.f0.1 (1) RemainderMB<1>:uw TotalMB<0;1,0>:uw 0x0007:uw // number of %8 commands + and.z.f0.0 (1) TotalMB<1>:uw TotalMB<0;1,0>:uw 0xfff8:uw // Number of 8-command blocks + +// Initialize common DAP read header +// + mov (8) MRF_READ_HEADER_SRC<1>:ud r0.0<8;8,1>:ud + shl (1) MRF_READ_HEADER_SRC.2<1>:ud StartingMB<0;1,0>:uw 6:uw // Byte-aligned offset being read + +// Initialize Inter DAP write header + mov (8) MRF_INTER_WRITE_HEADER<1>:ud r0.0<8;8,1>:ud + + (f0.0) jmpi (1) SetHWScoreboard_MBAFF_Remainder // Jump if TatalMB < 8 + +//------------------------------------------------------------------------ +// Command buffer parsing loop +// Each loop will handle 8 commands +//------------------------------------------------------------------------ +// +SetHWScoreboard_MBAFF_Loop: +// Load block 0 (Commands 0/1) + mov (8) MRF_READ_HEADER0.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + send (16) CMD_BUFFER_W(0)<1> MRF_READ_HEADER0 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 1 (Commands 2/3) + mov (8) MRF_READ_HEADER1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(4)<1> MRF_READ_HEADER1 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 2 (Commands 4/5) + mov (8) MRF_READ_HEADER2.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER2.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(8)<1> MRF_READ_HEADER2 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 3 (Commands 6/7) + mov (8) MRF_READ_HEADER3.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER3.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(12)<1> MRF_READ_HEADER3 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Start parsing commands + $for(0; <16; 2) { +// Adjust MB Y origin for field MBs +// + mov (2) TEMP_FD_X_W<1>:uw CMD_BUFFER_B(%1,20)<2;2,1> // Initialize temp (X,Y) location + and.nz.f0.1 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_BOT_FD:ud // Is it a "Bottom Field MB"? + and.nz.f0.0 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_FIELD_MB:ud // Is it a "Field MB"? + mul (8) acc0<1>:w CMD_BUFFER_B(%1,21)<0;1,0> 2:w + (-f0.1) mov (1) TEMP_FD_Y_W<1>:w acc0<0;1,0>:w + (f0.1) add (1) TEMP_FD_Y_W<1>:w acc0<0;1,0>:w 1:w + (-f0.0) mov (1) TEMP_FD_Y_W<1>:w CMD_BUFFER_B(%1,21)<0;1,0> // Discard field MB Y origin handling + + and.nz.f0.0 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_INTRA_MB:ud // Is it an "Intra" MB? + and.nz.f0.1 (8) NULLREG TEMP_FD_Y_W<0;1,0>:uw BIT0 // Is it "Bottom MB"? + or (1) CMD_BUFFER_D(%1,2)<1> CMD_BUFFER_D(%1,2)<0;1,0> BIT21 // Set "Use Scoreboard" + mov (2) CMD_BUFFER_W(%1,2)<1> TEMP_FD_X_W<2;2,1>:uw // Set scoreboard (X,Y) for inter MB + (f0.0) jmpi (1) SET_SB_MBAFF_INTRA_%1 // Jump if intra MB. + +// Inter Macroblock +// Output MEDIA_OBJECT command in raster scan order + mul (16) acc0<1>:uw TEMP_FD_Y_W<0;1,0>:uw PicWidthMB<0;1,0>:uw // MB offset = Y*W + add (16) acc0<1>:uw acc0<8;8,1>:uw TEMP_FD_X_W<0;1,0>:uw // MB offset = Y*W+X + shl (1) MRF_INTER_WRITE_HEADER.2<1>:ud acc0.2<0;1,0>:uw 6:uw // Byte-aligned MB offset + mov (16) MRF_INTER_WRITE_DATA0<1>:ud CMD_BUFFER_D(%1)<8;8,1> {Compr} // Copy entire command to inter buffer + mov (16) CMD_BUFFER_D(%1)<1> 0:ud {Compr} // Clear original command + send (16) NULLREGW MRF_INTER_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + jmpi (1) NEXT_MB_MBAFF_%1 // Done for inter MB. Move to next MB. + +SET_SB_MBAFF_INTRA_%1: +// Intra MB +// + and.nz.f0.0 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_FIELD_MB:ud // Is it an "Field" MB? + (f0.1) sel (2) MB_MASK_D<1>:ud BOT_FD_MASK1_D<2;2,1>:ud TOP_FD_MASK1_D<2;2,1>:ud // Assume field MB + mov (1) TEMP_INTRA_FLAG_W<1>:uw CMD_BUFFER_W(%1,14)<0;1,0> // Don't want to alter original in-line data + (f0.0) jmpi (1) SET_SB_MBAFF_%1 // Jump if it's really field MB + +// Frame MB +// +// Derive E' + and.nz.f0.0 (8) NULLREG CMD_BUFFER_W(%1,14)<0;1,0> E_FLAG // Is "E" = 1 + (f0.1) sel (2) MB_MASK_D<1>:ud BOT_FM_MASK1_D<2;2,1>:ud TOP_FM_MASK1_D<2;2,1>:ud + and.z.f0.1 (8) NULLREG CMD_BUFFER_W(%1,14)<0;1,0> A_FLAG // "A" = 0? + (f0.0) jmpi (1) SET_SB_MBAFF_%1 // If "E" flag = 1, skip the rest of derivation + (f0.1) and.nz.f0.1 (8) NULLREG CMD_BUFFER_D(%1,4)<0;1,0> IS_INTRA8X8 + (f0.1) and.nz.f0.1 (8) NULLREG CMD_BUFFER_W(%1,14)<0;1,0> F_FLAG + (f0.1) or (1) TEMP_INTRA_FLAG_W<1>:uw CMD_BUFFER_W(%1,14)<0;1,0> E_FLAG + +SET_SB_MBAFF_%1: + and.nz.f0.1 (16) NULLREGW TEMP_INTRA_FLAG_W<0;1,0>:uw MB_MASK_B<0;8,1>:ub + shl (1) CMD_BUFFER_W(%1,2)<1> f0.1<0;1,0>:uw 12:w // Masks 0-3 + and (1) CMD_BUFFER_W(%1,3)<1> f0.1<0;1,0>:uw 0xf000:uw // Masks 4-7 + + mov (2) CMD_BUFFER_B(%1,4)<2> TEMP_FD_X_B<4;2,2>:ub // Set scoreboard (X,Y) for intra MB + +NEXT_MB_MBAFF_%1: + } + + add.z.f0.0 (1) TotalMB<1>:w TotalMB<0;1,0>:w -8:w // Update remaining number of 8-command blocks + +// Output modified intra commands +// Write block 0 + mov (8) MRF_INTRA_WRITE_HEADER.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + $for(0; <4; 2) { + mov (16) MRF_CMD_BUF_D(%1)<1> CMD_BUFFER_D(%1)<8;8,1> {Compr} + } + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 1 + mov (8) m1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) m1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + mov (16) m2<1>:ud CMD_BUFFER_D(4)<8;8,1> {Compr} + mov (16) m4<1>:ud CMD_BUFFER_D(6)<8;8,1> {Compr} + send (16) NULLREGW m1 null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 2 + add (1) MRF_INTRA_WRITE_HEADER.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + $for(0; <4; 2) { + mov (16) MRF_CMD_BUF_D(%1)<1> CMD_BUFFER_D(%1+8)<8;8,1> {Compr} + } + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Write block 3 + add (1) m1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + mov (16) m2<1>:ud CMD_BUFFER_D(12)<8;8,1> {Compr} + mov (16) m4<1>:ud CMD_BUFFER_D(14)<8;8,1> {Compr} + send (16) NULLREGW m1 null:uw DAPWRITE MSG_LEN(4)+OWBWMSGDSC+OWORD_8+BI_CMD_BUFFER + +// Update message header for next DAP read + add (1) MRF_READ_HEADER_SRC.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 512:ud // Point to next block of 8-commands + + cmp.z.f0.1 (1) NULLREG RemainderMB<0;1,0>:w 0:uw // Check if remaining MB = 0 + (-f0.0) jmpi (1) SetHWScoreboard_MBAFF_Loop // Continue if more command blocks remain + +SetHWScoreboard_MBAFF_Remainder: +// f0.1 should have been set to indicate if RemainderMB = 0 +// + (f0.1) jmpi (1) SetHWScoreboard_MBAFF_Done // Stop if all commands have been updated + +// Blindly load next 8 commands anyway +// +// Load block 0 (Commands 0/1) + mov (8) MRF_READ_HEADER0.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + send (16) CMD_BUFFER_W(0)<1> MRF_READ_HEADER0 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 1 (Commands 2/3) + mov (8) MRF_READ_HEADER1.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER1.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 128:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(4)<1> MRF_READ_HEADER1 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 2 (Commands 4/5) + mov (8) MRF_READ_HEADER2.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER2.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 256:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(8)<1> MRF_READ_HEADER2 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Load block 3 (Commands 6/7) + mov (8) MRF_READ_HEADER3.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + add (1) MRF_READ_HEADER3.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 384:ud // Point to next 2-command block + send (16) CMD_BUFFER_W(12)<1> MRF_READ_HEADER3 null:uw DAPREAD RESP_LEN(4)+OWBRMSGDSC_SC+OWORD_8+BI_CMD_BUFFER + +// Initialize necessary pointers + mov (1) a0.1<1>:ud ((CMD_BUFFER_REG_OFF+1)*0x10000+CMD_BUFFER_REG_OFF)*32 // a0.2:w points to command buffer (first half) + // a0.3:w points to command buffer (second half) +// Initialize Inter DAP write header + mov (8) MRF_INTER_WRITE_HEADER<1>:ud r0.0<8;8,1>:ud + +SetHWScoreboard_MBAFF_Remainder_Loop: +// Adjust MB Y origin for field MBs +// + mov (2) TEMP_FD_X_W<1>:uw r[a0.2,5*4]<2;2,1>:ub // Initialize temp (X,Y) location + and.nz.f0.1 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_BOT_FD:ud // Is it a "Bottom Field MB"? + and.nz.f0.0 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_FIELD_MB:ud // Is it a "Field MB"? + mul (8) acc0<1>:w r[a0.2,21]<0;1,0>:ub 2:w + (-f0.1) mov (1) TEMP_FD_Y_W<1>:w acc0<0;1,0>:w + (f0.1) add (1) TEMP_FD_Y_W<1>:w acc0<0;1,0>:w 1:w + (-f0.0) mov (1) TEMP_FD_Y_W<1>:w r[a0.2,5*4+1]<0;1,0>:ub // Discard field MB Y origin handling + + and.nz.f0.0 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_INTRA_MB:ud // Is it an "Intra" MB? + add.z.f0.1 (1) RemainderMB<1>:w RemainderMB<0;1,0>:w -1:w // Decrement MB # + or (1) r[a0.2,2*4]<1>:ud r[a0.2,2*4]<0;1,0>:ud BIT21:ud // Set "Use Scoreboard" + mov (2) r[a0.2,2*2]<1>:uw TEMP_FD_X_W<2;2,1>:uw // Set scoreboard (X,Y) for inter MB + (f0.0) jmpi (1) SET_SB_MBAFF_REM_INTRA // Jump if intra MB. + +// Inter Macroblock +// Output MEDIA_OBJECT command in raster scan order + mul (16) acc0<1>:uw TEMP_FD_Y_W<0;1,0>:uw PicWidthMB<0;1,0>:uw // MB offset = Y*W + add (16) acc0<1>:uw acc0<8;8,1>:uw TEMP_FD_X_W<0;1,0>:uw // MB offset = Y*W+X + shl (1) MRF_INTER_WRITE_HEADER.2<1>:ud acc0.2<0;1,0>:uw 6:uw // Byte-aligned MB offset + mov (16) MRF_INTER_WRITE_DATA0<1>:ud r[a0.2]<8;8,1>:ud {Compr} // Copy entire command to inter buffer + mov (16) r[a0.2]<1>:ud 0:ud {Compr} // Clear original command + send (16) NULLREGW MRF_INTER_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + jmpi (1) Output_MBAFF_Remainder_Intra // Done for inter MB. Move to dump intra MB. + +SET_SB_MBAFF_REM_INTRA: +// Intra MB +// + and.nz.f0.1 (8) NULLREG TEMP_FD_Y_W<0;1,0>:uw BIT0:ud // Is it "Bottom MB"? + and.nz.f0.0 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_FIELD_MB:ud // Is it "Field MB"? + mov (1) TEMP_INTRA_FLAG_W<1>:uw r[a0.2,14*2]<0;1,0>:uw // Don't want to alter original in-line data + (f0.1) sel (2) MB_MASK_D<1>:ud BOT_FD_MASK1_D<2;2,1>:ud TOP_FD_MASK1_D<2;2,1>:ud // Assume field MB + (f0.0) jmpi (1) SET_SB_MBAFF_REM // Jump if it's really field MB + +// Frame MB +// +// Derive E' + and.nz.f0.0 (8) NULLREG r[a0.2,14*2]<0;1,0>:uw E_FLAG // Is "E" = 1 + (f0.1) sel (2) MB_MASK_D<1>:ud BOT_FM_MASK1_D<2;2,1>:ud TOP_FM_MASK1_D<2;2,1>:ud + and.z.f0.1 (8) NULLREG r[a0.2,14*2]<0;1,0>:uw A_FLAG // "A" = 0? + (f0.0) jmpi (1) SET_SB_MBAFF_REM // If "E" flag = 1, skip the rest of derivation + (f0.1) and.nz.f0.1 (8) NULLREG r[a0.2,4*4]<0;1,0>:ud IS_INTRA8X8 + (f0.1) and.nz.f0.1 (8) NULLREG r[a0.2,14*2]<0;1,0>:uw F_FLAG + (f0.1) or (1) TEMP_INTRA_FLAG_W<1>:uw r[a0.2,14*2]<0;1,0>:uw E_FLAG + +SET_SB_MBAFF_REM: + and.nz.f0.0 (16) NULLREGW TEMP_INTRA_FLAG_W<0;1,0>:uw MB_MASK_B<0;8,1>:ub + add.z.f0.1 (1) RemainderMB<1>:w RemainderMB<0;1,0>:w 0:w // Check remaining MB # + shl (1) r[a0.2,2*2]<1>:uw f0.0<0;1,0>:uw 12:w // Masks 0-3 + and (1) r[a0.2,3*2]<1>:uw f0.0<0;1,0>:uw 0xf000:uw // Masks 4-7 + + mov (2) r[a0.2,4*1]<2>:ub TEMP_FD_X_B<4;2,2>:ub // Set scoreboard (X,Y) for intra MB + +Output_MBAFF_Remainder_Intra: +// Intra MB command always output + mov (8) MRF_INTRA_WRITE_HEADER.0<1>:ud MRF_READ_HEADER_SRC.0<8;8,1>:ud + mov (16) MRF_CMD_BUF_D(0)<1> r[a0.2]<8;8,1>:ud {Compr} // Copy entire command to intra buffer + send (16) NULLREGW MRF_INTRA_WRITE_HEADER null:uw DAPWRITE MSG_LEN(2)+OWBWMSGDSC+OWORD_4+BI_CMD_BUFFER + + add (1) MRF_READ_HEADER_SRC.2<1>:ud MRF_READ_HEADER_SRC.2<0;1,0>:ud 64:ud // Point to next command + add (1) a0.1<1>:ud a0.1<0;1,0>:ud 0x00400040:ud // Update pointers + (-f0.1) jmpi (1) SetHWScoreboard_MBAFF_Remainder_Loop + +// All MBs have been decoded. Terminate the thread now +// +SetHWScoreboard_MBAFF_Done: + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif + +// End of SetHWScoreboard_MBAFF diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_header.inc new file mode 100644 index 000000000..65358af61 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetHWScoreboard_header.inc @@ -0,0 +1,164 @@ +/* + * Common header file for both SetHWScoreboard and SetHWScoreboard_MBAFF kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SETHWSCOREBOARD_HEADER__) // Make sure this file is only included once +#define __SETHWSCOREBOARD_HEADER__ + +// Module name: SetHWScoreboard_header.inc +// +// Common header file for both SetHWScoreboard and SetHWScoreboard_MBAFF kernels +// + +#define BI_CMD_BUF 0 // Binding table index for command buffer + +// GRF r1 map +// +// For use by setting HW scoreboard kernel for MBAFF picture +// +// CURBE data +#define TOP_FM_MASK1_D r1.0 // Bit mask for first half of top frame MB SB mask +#define TOP_FM_MASK1_B r1.0 // Bit mask for first half of top frame MB SB mask +#define TOP_FM_MASK2_D r1.1 // Bit mask for second half of top frame MB SB mask +#define TOP_FM_MASK2_B r1.4 // Bit mask for second half of top frame MB SB mask +#define BOT_FM_MASK1_D r1.2 // Bit mask for first half of bottom frame MB SB mask +#define BOT_FM_MASK1_B r1.8 // Bit mask for first half of bottom frame MB SB mask +#define BOT_FM_MASK2_D r1.3 // Bit mask for second half of bottom frame MB SB mask +#define BOT_FM_MASK2_B r1.12 // Bit mask for second half of bottom frame MB SB mask +#define TOP_FD_MASK1_D r1.4 // Bit mask for first half of top field MB SB mask +#define TOP_FD_MASK1_B r1.16 // Bit mask for first half of top field MB SB mask +#define TOP_FD_MASK2_D r1.5 // Bit mask for second half of top field MB SB mask +#define TOP_FD_MASK2_B r1.20 // Bit mask for second half of top field MB SB mask +#define BOT_FD_MASK1_D r1.6 // Bit mask for first half of bottom field MB SB mask +#define BOT_FD_MASK1_B r1.24 // Bit mask for first half of bottom field MB SB mask +#define BOT_FD_MASK2_D r1.7 // Bit mask for second half of bottom field MB SB mask +#define BOT_FD_MASK2_B r1.28 // Bit mask for second half of bottom field MB SB mask + +// For use by setting HW scoreboard kernel for non-MBAFF picture +#define MB_SHIFT_MASK_W r1.0 // :w type. Shift values for two parts of the MB SB mask +#define MB_SHIFT_MASK_B r1.0 // :b type. Shift values for two parts of the MB SB mask + +// GRF r2 map +// +// In-line data +// +#define INLINE_REG_OFFSET 1 +#define INLINE_REG r2 + +#define StartingMB INLINE_REG.0 // :uw type. Starting MB number +#define TotalMB INLINE_REG.1 // :uw type. Total number of MB to be processed +#define PicWidthMB INLINE_REG.2 // :uw type. Picture width in MB + +// GRF r3 map +// +// Temporary variables +// +#define RemainderMB r3.0 // :uw type. Remainder of MB (<16) to be processed + +#define TEMP_FD_X_W r3.2 // :w type. Temporary variable for field MB X origin in MBAFF picture +#define TEMP_FD_X_B r3.4 // :b type. Temporary variable for field MB X origin in MBAFF picture +#define TEMP_FD_Y_W r3.3 // :w type. Temporary variable for field MB Y origin in MBAFF picture +#define TEMP_FD_Y_B r3.6 // :b type. Temporary variable for field MB Y origin in MBAFF picture + +#define TEMP_INTRA_FLAG_W r3.4 // :uw type. Temporary intra available flag + +#define MB_MASK_D r3.4 // :ud type. Bit masks for MBAFF MB +#define MB_MASK_B r3.16 // :ub type. Bit masks for MBAFF MB + +#define MRF_READ_HEADER_SRC r63 + +// MEDIA_OBJECT_EX Command map +// +// In DW1 of each MEDIA_OBJECT_EX command (VFE DWORD) +#define CUR_X 0 // Byte 0 +#define CUR_Y 0 // Byte 2 + +// In DW2 of each MEDIA_OBJECT_EX command +#define USE_SCOREBOARD BIT21 + +// In DW4 of each MEDIA_OBJECT_EX command +#define F_FLAG BIT4 +#define IS_INTRA_MB BIT13 +#define IS_FIELD_MB BIT14 +#define IS_INTRA8X8 BIT15 +#define IS_BOT_FD BIT24 + +// In DW7 of each MEDIA_OBJECT_EX command +#define A_FLAG BIT0 +#define B_FLAG BIT1 +#define C_FLAG BIT2 +#define D_FLAG BIT3 +#define E_FLAG BIT4 + +#define CMD_BUFFER_REG_OFF 4 +.declare CMD_BUFFER_D Base=GRF(4) ElementSize=4 SrcRegion=REGION(8,1) Type=ud // Command buffer (32 GRF) +.declare CMD_BUFFER_W Base=GRF(4) ElementSize=2 SrcRegion=REGION(16,1) Type=uw // Command buffer (32 GRF) +.declare CMD_BUFFER_B Base=GRF(4) ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Command buffer (32 GRF) + +#define MRF_READ_HEADER m1 +#define MRF_READ_HEADER0 m1 +#define MRF_READ_HEADER1 m2 +#define MRF_READ_HEADER2 m3 +#define MRF_READ_HEADER3 m4 + +#define MRF_INTER_WRITE_HEADER m5 +#define MRF_INTER_WRITE_DATA0 m6 +#define MRF_INTER_WRITE_DATA1 m7 + +#define MRF_WRITE_HEADER m11 +#define MRF_INTRA_WRITE_HEADER m11 + +#define MRF_CMD_BUF_REG_OFF 12 +.declare MRF_CMD_BUF_D Base=m12 ElementSize=4 SrcRegion=REGION(8,1) Type=ud // Command buffer stored in MRF +.declare MRF_CMD_BUF_W Base=m12 ElementSize=2 SrcRegion=REGION(16,1) Type=uw // Command buffer stored in MRF +.declare MRF_CMD_BUF_B Base=m12 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Command buffer stored in MRF + +#define BI_CMD_BUFFER 0 + +#define OWBRMSGDSC_SC 0x02088000 // OWORD Block Read Message Descriptor, reading from sampler cache = A. +#define OWBWMSGDSC 0x02080000 // OWORD Block Write Message Descriptor + +#define OWORD_1 0x000 +#define OWORD_2 0x200 +#define OWORD_4 0x300 +#define OWORD_8 0x400 + +// End of SETHWSCOREBOARD_HEADER + +#endif // !defined(__SETHWSCOREBOARD_HEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetupForHWMC.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetupForHWMC.asm new file mode 100644 index 000000000..c27089ba7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/SetupForHWMC.asm @@ -0,0 +1,63 @@ +/* + * Initial setup for running HWMC kernels in HWMC-Only decoding mode + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: SetupForHWMC.asm +// +// Initial setup for running HWMC kernels in HWMC-Only decoding mode +// +#include "header.inc" +#include "intra_Header.inc" + +#if !defined(__SETUPFORHWMC__) // Make sure the following are only included once +#define __SETUPFORHWMC__ + +.reg_count_total 64 +.reg_count_payload 2 + +// +// Now, begin source code.... +// + +.code +#endif // !defined(__SETUPFORHWMC__) + + mov (8) MSGSRC<1>:ud r0.0<8;8,1>:ud // Initialize message header payload with R0 + shl (2) I_ORIX<1>:uw ORIX<2;2,1>:ub 4:w // Convert MB origin to pixel unit + +// End of SetupForHWMC diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_16x16_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_16x16_Y.asm new file mode 100644 index 000000000..254693536 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_16x16_Y.asm @@ -0,0 +1,81 @@ +/* + * Add macroblock correction Y data blocks to predicted picture + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: add_Error_16x16_Y.asm +// +// Add macroblock correction Y data blocks to predicted picture +// + +// Every line of predicted Y data is added to Y error data if CBP bit is set + + mov (1) PERROR_UD<1>:ud 0x10001*ERRBUF*GRFWIB+0x00100000:ud // Pointers to first and second row of error block + + and.z.f0.1 (1) NULLREG REG_CBPCY CBP_Y_MASK + (f0.1) jmpi (1) End_add_Error_16x16_Y // Skip all blocks + +// Block Y0 +// + $for(0,0; <8; 2,1) { + add.sat (16) DEC_Y(%1)<2> r[PERROR,%2*GRFWIB]REGION(8,1):w PRED_Y(%1)REGION(8,2) {Compr} + } + +// Block Y1 +// + $for(0,0; <8; 2,1) { + add.sat (16) DEC_Y(%1,16)<2> r[PERROR,%2*GRFWIB+0x80]REGION(8,1):w PRED_Y(%1,16)REGION(8,2) {Compr} + } + +// Block Y2 +// + $for(8,0; <16; 2,1) { + add.sat (16) DEC_Y(%1)<2> r[PERROR,%2*GRFWIB+0x100]REGION(8,1):w PRED_Y(%1)REGION(8,2) {Compr} + } + +// Block Y3 +// + $for(8,0; <16; 2,1) { + add.sat (16) DEC_Y(%1,16)<2> r[PERROR,%2*GRFWIB+0x180]REGION(8,1):w PRED_Y(%1,16)REGION(8,2) {Compr} + } + +End_add_Error_16x16_Y: + add (1) PERROR_UD<1>:ud PERROR_UD:ud 0x01800180:ud // Pointers to Y3 error block + +// End of add_Error_16x16_Y + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_UV.asm new file mode 100644 index 000000000..c14ce576f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/add_Error_UV.asm @@ -0,0 +1,68 @@ +/* + * Add macroblock correction UV data blocks to predicted picture + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#if !defined(__ADD_ERROR_UV__) // Make sure this is only included once +#define __ADD_ERROR_UV__ + +// Module name: add_Error_UV.asm +// +// Add macroblock correction UV data blocks to predicted picture + +// PERROR points to error block Y3 after decoding Y component + +// Update address register used in instruction compression +// + +// U component +// + add (1) PERROR1<1>:w PERROR:w 0x00010:w // Pointers to next error row + $for(0,0; <8; 2,1) { + add.sat (16) DEC_UV(%1)<4> r[PERROR,%2*GRFWIB+0x80]REGION(8,1):w PRED_UV(%1)REGION(8,4) {Compr} + } + +// V component +// + $for(0,0; <8; 2,1) { + add.sat (16) DEC_UV(%1,2)<4> r[PERROR,%2*GRFWIB+0x100]REGION(8,1):w PRED_UV(%1,2)REGION(8,4) {Compr} + } + +// End of add_Error_UV + +#endif // !defined(__ADD_ERROR_UV__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b new file mode 100644 index 000000000..cdee6ac36 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b @@ -0,0 +1,5251 @@ + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x00000005, 0x220e3e2c, 0x00000070, 0x000f000f }, + { 0x00000001, 0x26a00221, 0x00009c38, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x00a02001, 0x24000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25c00229, 0x00b10624, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x22080060, 0x00000000, 0x06440640 }, + { 0x00a02001, 0x24000229, 0x00009003, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x0000900b, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00009013, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x0000901b, 0x00000000 }, + { 0x00a02001, 0x25000229, 0x00009023, 0x00000000 }, + { 0x00a02001, 0x25400229, 0x0000902b, 0x00000000 }, + { 0x00a02001, 0x25800229, 0x00009033, 0x00000000 }, + { 0x00a02001, 0x25c00229, 0x0000903b, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x02600005, 0x20000c20, 0x0000006c, 0x00000002 }, + { 0x00600005, 0x24000c20, 0x0000006c, 0x00000011 }, + { 0x01600007, 0x20000c00, 0x028d0400, 0x00000011 }, + { 0x00780001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x66430231, 0x028d0624, 0x00000000 }, + { 0x00780001, 0x66630231, 0x028d062c, 0x00000000 }, + { 0x00780001, 0x26240231, 0x00cf0643, 0x00000000 }, + { 0x00780001, 0x262c0231, 0x00cf0663, 0x00000000 }, + { 0x00800040, 0x25e04629, 0x00cf0643, 0x00b10624 }, + { 0x00600040, 0x25e02529, 0x008d05e0, 0x008d05f0 }, + { 0x00400040, 0x25e02529, 0x006905e0, 0x006905e8 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00a02040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00a02040, 0x24003d8c, 0x00b10400, 0x00100010 }, + { 0x00a02008, 0x24003d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24403d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24803d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24c03d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25003d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25403d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25803d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25c03d89, 0x00b10400, 0x00050005 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00600041, 0x26806e2d, 0x008d062c, 0x89abcdef }, + { 0x00600041, 0x26906e2d, 0x008d0623, 0xfedcba98 }, + { 0x00600041, 0x26a06e2d, 0x00cf0663, 0x89abcdef }, + { 0x00600041, 0x26b06e2d, 0x00cf0643, 0x0fedcba9 }, + { 0x00000041, 0x26be3e2d, 0x00000623, 0xfff8fff8 }, + { 0x00802040, 0x268035ad, 0x008d4680, 0x008d0690 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0688 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0684 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0682 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00200020 }, + { 0x00200048, 0x24003dac, 0x00a00680, 0x00050005 }, + { 0x00200008, 0x26e03d8d, 0x00450400, 0x00060006 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x00000633, 0x00100010 }, + { 0x00800048, 0x26c03e2d, 0x0000067f, 0x00100010 }, + { 0x00800048, 0x272055ad, 0x000006e0, 0x00b10040 }, + { 0x00600041, 0x268055ad, 0x000006e2, 0x00ae0040 }, + { 0x00600041, 0x26a055ad, 0x000006e2, 0x00ae0041 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00680 }, + { 0x80a02008, 0x44003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00682 }, + { 0x80a02008, 0x44403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00684 }, + { 0x80a02008, 0x44803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00686 }, + { 0x80a02008, 0x44c03d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00688 }, + { 0x80a02008, 0x45003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068a }, + { 0x80a02008, 0x45403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068c }, + { 0x80a02008, 0x45803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068e }, + { 0x80a02008, 0x45c03d91, 0x00b10400, 0x00050005 }, + { 0x00000001, 0x22040060, 0x00000000, 0x00900080 }, + { 0x01000005, 0x20000c20, 0x02000068, 0x00003c00 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000020 }, + { 0x80802040, 0x440045b1, 0x008d8800, 0x00ae0400 }, + { 0x80802040, 0x444045b1, 0x008d8820, 0x00ae0440 }, + { 0x80802040, 0x448045b1, 0x008d8840, 0x00ae0480 }, + { 0x80802040, 0x44c045b1, 0x008d8860, 0x00ae04c0 }, + { 0x80802040, 0x441045b1, 0x008d8880, 0x00ae0410 }, + { 0x80802040, 0x445045b1, 0x008d88a0, 0x00ae0450 }, + { 0x80802040, 0x449045b1, 0x008d88c0, 0x00ae0490 }, + { 0x80802040, 0x44d045b1, 0x008d88e0, 0x00ae04d0 }, + { 0x80802040, 0x450045b1, 0x008d8900, 0x00ae0500 }, + { 0x80802040, 0x454045b1, 0x008d8920, 0x00ae0540 }, + { 0x80802040, 0x458045b1, 0x008d8940, 0x00ae0580 }, + { 0x80802040, 0x45c045b1, 0x008d8960, 0x00ae05c0 }, + { 0x80802040, 0x451045b1, 0x008d8980, 0x00ae0510 }, + { 0x80802040, 0x455045b1, 0x008d89a0, 0x00ae0550 }, + { 0x80802040, 0x459045b1, 0x008d89c0, 0x00ae0590 }, + { 0x80802040, 0x45d045b1, 0x008d89e0, 0x00ae05d0 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x01800180 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e2 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00200440, 0x27c055a5, 0x004507fa, 0x0045002a }, + { 0x00000801, 0x27c80061, 0x00000000, 0x0000001b }, + { 0x00000040, 0x22000d20, 0x00000062, 0x02186000 }, + { 0x01600031, 0x26200021, 0x408d07c0, 0x00000200 }, + { 0x00000440, 0x27c43ca5, 0x000007c4, 0x00010001 }, + { 0x00000801, 0x27c80061, 0x00000000, 0x000f0003 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00100000 }, + { 0x02600031, 0x26400021, 0x408d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000008, 0x27fc3dad, 0x000007fc, 0x00010001 }, + { 0x00200440, 0x27c055a5, 0x004507fa, 0x0045002a }, + { 0x00000801, 0x27c80061, 0x00000000, 0x00000013 }, + { 0x00000040, 0x22000c00, 0x00000200, 0xefffc001 }, + { 0x01600031, 0x26200021, 0x408d07c0, 0x00000200 }, + { 0x00000440, 0x27c43ca5, 0x000007c4, 0x00010001 }, + { 0x00000801, 0x27c80061, 0x00000000, 0x00070003 }, + { 0x05600031, 0x26400021, 0x408d07c0, 0x00000200 }, + { 0x00000008, 0x220e3e2c, 0x0000006c, 0x00060006 }, + { 0x00000001, 0x26a002a5, 0x00009c3c, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x02600005, 0x20000c20, 0x0000006c, 0x00000002 }, + { 0x00780001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000001 }, + { 0x00560001, 0x46420129, 0x02690624, 0x00000000 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000010 }, + { 0x00560001, 0x46520129, 0x0269062c, 0x00000000 }, + { 0x00780001, 0x26240129, 0x00ae0642, 0x00000000 }, + { 0x00800040, 0x24004629, 0x00b10624, 0x00650642 }, + { 0x00600040, 0x24002529, 0x00650400, 0x00650404 }, + { 0x00600040, 0x25202529, 0x00050400, 0x00050404 }, + { 0x00600040, 0x25702529, 0x00050408, 0x0005040c }, + { 0x00560001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x00460001, 0x26240129, 0x028a0652, 0x00000000 }, + { 0x00560001, 0x46520129, 0x02690624, 0x00000000 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000001 }, + { 0x00560001, 0x46420169, 0x02000000, 0x80808080 }, + { 0x00460001, 0x46420129, 0x0069062c, 0x00000000 }, + { 0x00560001, 0x262c0129, 0x008a0642, 0x00000000 }, + { 0x00600040, 0x24004629, 0x008d0624, 0x00650652 }, + { 0x00600040, 0x24104629, 0x00650642, 0x008d062c }, + { 0x00600040, 0x24002529, 0x00650400, 0x00650404 }, + { 0x00600040, 0x25302529, 0x00050408, 0x0005040c }, + { 0x00600040, 0x25602529, 0x00050400, 0x00050404 }, + { 0x00a02040, 0x24003d2c, 0x00b10520, 0x00040004 }, + { 0x00a02008, 0x24003d89, 0x00b10400, 0x00030003 }, + { 0x00a02008, 0x24403d89, 0x00b10400, 0x00030003 }, + { 0x00a02040, 0x24003d2c, 0x00b10560, 0x00040004 }, + { 0x00a02008, 0x24803d89, 0x00b10400, 0x00030003 }, + { 0x00a02008, 0x24c03d89, 0x00b10400, 0x00030003 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x22080060, 0x00000000, 0x06440640 }, + { 0x00a02001, 0x24000229, 0x00059002, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x0005900a, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00059012, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x0005901a, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000003c }, + { 0x00a02001, 0x24000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x00b10624, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00600041, 0x26806e2d, 0x008d062c, 0x44332211 }, + { 0x00600041, 0x26906e2d, 0x008d0622, 0xffeeddcc }, + { 0x00600041, 0x26a06e2d, 0x00650652, 0x44332211 }, + { 0x00600041, 0x26b06e2d, 0x00650642, 0x00ffeedd }, + { 0x00200041, 0x26bc3e2d, 0x00450622, 0xfffcfffc }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0690 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0688 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0684 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00200020 }, + { 0x00400048, 0x24003dac, 0x00a50680, 0x00220022 }, + { 0x00400008, 0x26e03d8d, 0x00690400, 0x00060006 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x00050632, 0x00100010 }, + { 0x00800048, 0x26c03e2d, 0x0005065e, 0x00100010 }, + { 0x00800048, 0x272055ad, 0x000506e0, 0x00240044 }, + { 0x00600041, 0x268055ad, 0x000506e4, 0x00440044 }, + { 0x00600041, 0x26a055ad, 0x000506e4, 0x00440045 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050680 }, + { 0x80a02008, 0x44003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050684 }, + { 0x80a02008, 0x44403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050688 }, + { 0x80a02008, 0x44803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x0005068c }, + { 0x80a02008, 0x44c03d91, 0x00b10400, 0x00050005 }, + { 0x00000040, 0x22063d8c, 0x00000204, 0x00100010 }, + { 0x80802040, 0x640045b1, 0x008d8880, 0x00cf0400 }, + { 0x80802040, 0x644045b1, 0x008d88a0, 0x00cf0440 }, + { 0x80802040, 0x648045b1, 0x008d88c0, 0x00cf0480 }, + { 0x80802040, 0x64c045b1, 0x008d88e0, 0x00cf04c0 }, + { 0x80802040, 0x640245b1, 0x008d8900, 0x00cf0402 }, + { 0x80802040, 0x644245b1, 0x008d8920, 0x00cf0442 }, + { 0x80802040, 0x648245b1, 0x008d8940, 0x00cf0482 }, + { 0x80802040, 0x64c245b1, 0x008d8960, 0x00cf04c2 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x0007000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x08004000 }, + { 0x00800001, 0x20400232, 0x00d20400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20420, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20440, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d20460, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d20480, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d204a0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d204c0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d204e0, 0x00000000 }, + { 0x01600031, 0x27a00021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00000001, 0x22080060, 0x00000000, 0x04400400 }, + { 0x00a02001, 0x20400232, 0x00d29000, 0x00000000 }, + { 0x00a02001, 0x20500232, 0x00d29020, 0x00000000 }, + { 0x00a02001, 0x20800232, 0x00d29080, 0x00000000 }, + { 0x00a02001, 0x20900232, 0x00d290a0, 0x00000000 }, + { 0x00a02001, 0x20c00232, 0x00d29100, 0x00000000 }, + { 0x00a02001, 0x20d00232, 0x00d29120, 0x00000000 }, + { 0x00a02001, 0x21000232, 0x00d29180, 0x00000000 }, + { 0x00a02001, 0x21100232, 0x00d291a0, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff04 }, + { 0x00000001, 0x220401ec, 0x00000000, 0x00800080 }, + { 0x00000001, 0x22080060, 0x00000000, 0x04100400 }, + { 0x00200008, 0x27006e2d, 0x0000006c, 0x00000040 }, + { 0x00400001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x272001a9, 0x00b10620, 0x00000000 }, + { 0x02600005, 0x20001c20, 0x0000006c, 0x00000008 }, + { 0x00110001, 0x27230231, 0x00000624, 0x00000000 }, + { 0x00600001, 0x27420231, 0x00cf0643, 0x00000000 }, + { 0x00110001, 0x27410231, 0x00000643, 0x00000000 }, + { 0x00240001, 0x27400231, 0x00000623, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000002 }, + { 0x00010001, 0x27400231, 0x02000624, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000001 }, + { 0x00110001, 0x27420231, 0x02000623, 0x00000000 }, + { 0x00000005, 0x26803e2d, 0x00000070, 0x000f000f }, + { 0x00000001, 0x270801ad, 0x00000700, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000084 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x02600005, 0x20001c20, 0x0200006c, 0x00000004 }, + { 0x00680001, 0x272c0231, 0x028d0634, 0x00000000 }, + { 0x00780001, 0x272c0231, 0x02000633, 0x00000000 }, + { 0x00400001, 0x27420231, 0x00a0040e, 0x00000000 }, + { 0x00400001, 0x27460231, 0x00a0044e, 0x00000000 }, + { 0x00200001, 0x27400231, 0x0000062b, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000002 }, + { 0x00010001, 0x27400231, 0x0200062c, 0x00000000 }, + { 0x00110001, 0x27410231, 0x0200040e, 0x00000000 }, + { 0x00000008, 0x26803e2d, 0x00000070, 0x00040004 }, + { 0x00200040, 0x22083d8c, 0x00450208, 0x00800080 }, + { 0x00000006, 0x27083dad, 0x00000700, 0x00010001 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00a02001, 0xb3800231, 0x00d20400, 0x00000000 }, + { 0x00a02001, 0xb3a00231, 0x00d20480, 0x00000000 }, + { 0x00a02001, 0xb3c00231, 0x00d20440, 0x00000000 }, + { 0x00a02001, 0xb3e00231, 0x00d204c0, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x00000060, 0x00000002 }, + { 0x01000005, 0x20001c20, 0x0200006c, 0x00000001 }, + { 0x01010005, 0x20001c20, 0x00000060, 0x00004000 }, + { 0x02010005, 0x20001c20, 0x02000060, 0x00000010 }, + { 0x00030001, 0x27230231, 0x0000065f, 0x00000000 }, + { 0x00030220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02600005, 0x20001c20, 0x0000006c, 0x00000001 }, + { 0x00460001, 0x27200231, 0x0069065c, 0x00000000 }, + { 0x00110001, 0x27230231, 0x00000458, 0x00000000 }, + { 0x00600001, 0x27240231, 0x008d0458, 0x00000000 }, + { 0x00600001, 0x272c0231, 0x008d0478, 0x00000000 }, + { 0x00600001, 0x27420231, 0x00cf0663, 0x00000000 }, + { 0x00000001, 0x27400231, 0x00000458, 0x00000000 }, + { 0x00010001, 0x27410231, 0x0000065f, 0x00000000 }, + { 0x00110001, 0x27410231, 0x00000663, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000010 }, + { 0x00110001, 0x27420231, 0x0200065f, 0x00000000 }, + { 0x00000005, 0x26803e2d, 0x00000071, 0x000f000f }, + { 0x00000006, 0x27083dad, 0x00000702, 0x00020002 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00400001, 0x27200231, 0x0069045c, 0x00000000 }, + { 0x00600001, 0x27240231, 0x008d0478, 0x00000000 }, + { 0x00800001, 0x272c0231, 0x0000047f, 0x00000000 }, + { 0x00400001, 0x27420231, 0x00a0048e, 0x00000000 }, + { 0x00400001, 0x27460231, 0x00a004ce, 0x00000000 }, + { 0x00000001, 0x27400231, 0x00000478, 0x00000000 }, + { 0x00000001, 0x27410231, 0x0000045f, 0x00000000 }, + { 0x00000008, 0x26803e2d, 0x00000071, 0x00040004 }, + { 0x00200040, 0x22083d8c, 0x00450208, 0x00800080 }, + { 0x00000006, 0x27083dad, 0x00000700, 0x00030003 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00a02001, 0xb3800231, 0x00d20480, 0x00000000 }, + { 0x00a02001, 0xb3a00231, 0x00d20500, 0x00000000 }, + { 0x00a02001, 0xb3c00231, 0x00d204c0, 0x00000000 }, + { 0x00a02001, 0xb3e00231, 0x00d20540, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000100 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffe74 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000001, 0x27340231, 0x00000733, 0x00000000 }, + { 0x00600001, 0x274a0231, 0x00000749, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b10723, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00010001 }, + { 0x00800008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x00b10740, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10741, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10742, 0x00010001 }, + { 0x00800008, 0x26a03d8d, 0x008d0400, 0x00020002 }, + { 0x00800001, 0x27240231, 0x00d206c0, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00ae06a2, 0x00000000 }, + { 0x00000001, 0x27230231, 0x000006a0, 0x00000000 }, + { 0x00000005, 0x220e3dac, 0x00000680, 0x000f000f }, + { 0x00000001, 0x26a00221, 0x00009c2c, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x80800040, 0xd00045b1, 0x00b18800, 0x000d0724 }, + { 0x80800040, 0xd02045b1, 0x00b18820, 0x000d0724 }, + { 0x80800040, 0xd04045b1, 0x00b18840, 0x000d0724 }, + { 0x80800040, 0xd06045b1, 0x00b18860, 0x000d0724 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x80800040, 0xd00045b1, 0x00b18800, 0x002c0740 }, + { 0x80800040, 0xd02045b1, 0x00b18820, 0x002c0742 }, + { 0x80800040, 0xd04045b1, 0x00b18840, 0x002c0744 }, + { 0x80800040, 0xd06045b1, 0x00b18860, 0x002c0746 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x02802005, 0x20003da0, 0x00000708, 0x00020002 }, + { 0x02600005, 0x20003da0, 0x02000708, 0x00010001 }, + { 0x009a0001, 0x27200169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x27400231, 0x028d0724, 0x00000000 }, + { 0x00780001, 0x27240231, 0x008d0740, 0x00000000 }, + { 0x00600040, 0x25e04629, 0x008d0724, 0x008d0740 }, + { 0x00400040, 0x25e02529, 0x006905e0, 0x006905e8 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00800040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00800040, 0x24003d8c, 0x008d0400, 0x00080008 }, + { 0x00800008, 0x26803d8d, 0x008d0400, 0x00040004 }, + { 0x80800040, 0xd00035b1, 0x00b18800, 0x00b10680 }, + { 0x80800040, 0xd02035b1, 0x00b18820, 0x00b10680 }, + { 0x80800040, 0xd04035b1, 0x00b18840, 0x00b10680 }, + { 0x80800040, 0xd06035b1, 0x00b18860, 0x00b10680 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27340231, 0x008d0733, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b10726, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00010001 }, + { 0x00800008, 0x26803d8d, 0x00b10400, 0x00020002 }, + { 0x80800040, 0xd00035b1, 0x00b18800, 0x002d0680 }, + { 0x80800040, 0xd02035b1, 0x00b18820, 0x002d0684 }, + { 0x80800040, 0xd04035b1, 0x00b18840, 0x002d0688 }, + { 0x80800040, 0xd06035b1, 0x00b18860, 0x002d068c }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00cf06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a0, 0x00010001 }, + { 0x00800008, 0x26a03d8d, 0x00b10400, 0x00020002 }, + { 0x00200040, 0x220c3eac, 0x00450056, 0x06a006a0 }, + { 0x80800040, 0xd06035b1, 0x01ed9800, 0x00b18860 }, + { 0x80800040, 0xd04035b1, 0x01ed9804, 0x00b18840 }, + { 0x80800040, 0xd02035b1, 0x01ed9808, 0x00b18820 }, + { 0x80800040, 0xd00035b1, 0x01ed980c, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00cf06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b106a8, 0x00b106a9 }, + { 0x00800040, 0x24003e2c, 0x00b106a3, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00010001 }, + { 0x00800008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00600001, 0x26a00231, 0x00ae06c0, 0x00000000 }, + { 0x00600001, 0x46a60231, 0x00ae06cc, 0x00000000 }, + { 0x00600001, 0x46a70231, 0x00ae05c0, 0x00000000 }, + { 0x00200040, 0x220c3eac, 0x00450036, 0x06a006a0 }, + { 0x80800040, 0xd0603631, 0x01ee9800, 0x00b18860 }, + { 0x80800040, 0xd0403631, 0x01ee9802, 0x00b18840 }, + { 0x80800040, 0xd0203631, 0x01ee9804, 0x00b18820 }, + { 0x80800040, 0xd0003631, 0x01ee9806, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00ab06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a0, 0x00010001 }, + { 0x00800008, 0x25c03d89, 0x008d0400, 0x00020002 }, + { 0x00800042, 0x26a0462d, 0x00b106a0, 0x00b106a1 }, + { 0x00600001, 0x46a10231, 0x00ae05c0, 0x00000000 }, + { 0x00600001, 0x26b00231, 0x00ae05d0, 0x00000000 }, + { 0x00200040, 0x220c3eac, 0x00450056, 0x06a006a0 }, + { 0x80800040, 0xd0603631, 0x01ed9800, 0x00b18860 }, + { 0x80800040, 0xd0403631, 0x01ed9804, 0x00b18840 }, + { 0x80800040, 0xd0203631, 0x01ed9808, 0x00b18820 }, + { 0x80800040, 0xd0003631, 0x01ed980c, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b10724, 0x00b10725 }, + { 0x00800040, 0x24003e2c, 0x00b10726, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00010001 }, + { 0x00800008, 0x25e03d89, 0x002d0400, 0x00020002 }, + { 0x80800040, 0xd0003531, 0x00ad05c0, 0x00b18800 }, + { 0x80800040, 0xd0203531, 0x00ad05c2, 0x00b18820 }, + { 0x80800040, 0xd0403531, 0x00ad05c4, 0x00b18840 }, + { 0x80800040, 0xd0603531, 0x00ad05c6, 0x00b18860 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27480231, 0x00000747, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b10740, 0x00b10741 }, + { 0x00800040, 0x24003e2c, 0x00b10742, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10741, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10740, 0x00010001 }, + { 0x00800008, 0x25e03d89, 0x002d0400, 0x00020002 }, + { 0x00800001, 0x45c10231, 0x00d205e0, 0x00000000 }, + { 0x80800040, 0xd0003631, 0x004d05c0, 0x00b18800 }, + { 0x80800040, 0xd0203631, 0x004d05c4, 0x00b18820 }, + { 0x80800040, 0xd0403631, 0x004d05c8, 0x00b18840 }, + { 0x80800040, 0xd0603631, 0x004d05cc, 0x00b18860 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00800001, 0x20400232, 0x00cd0400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00cd0408, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00cd0410, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00cd0418, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00cd0440, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00cd0448, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00cd0450, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00cd0458, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00cd0480, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00cd0488, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00cd0490, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00cd0498, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00cd04c0, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00cd04c8, 0x00000000 }, + { 0x00800001, 0x21200232, 0x00cd04d0, 0x00000000 }, + { 0x00800001, 0x21300232, 0x00cd04d8, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffd34 }, + { 0x00000001, 0x220401ec, 0x00000000, 0x00800080 }, + { 0x00000001, 0x220601ec, 0x00000000, 0x04000400 }, + { 0x00200008, 0x27006e2d, 0x0000006c, 0x00000040 }, + { 0x02600005, 0x20003e20, 0x0000006c, 0x00040004 }, + { 0x00780001, 0x26340231, 0x00000633, 0x00000000 }, + { 0x00800001, 0x27200231, 0x00b10620, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00cf0643, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240070, 0x00004040 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000700, 0x00010001 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c26, 0x00000000 }, + { 0x00400001, 0x27440231, 0x00808c66, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240072, 0x00004040 }, + { 0x00000040, 0x22063d8c, 0x00000206, 0x00800080 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000702, 0x00020002 }, + { 0x00800001, 0xaf800231, 0x00d28f80, 0x00000000 }, + { 0x00800001, 0xaf900231, 0x00d28fa0, 0x00000000 }, + { 0x00800001, 0xafc00231, 0x00d28fc0, 0x00000000 }, + { 0x00800001, 0xafd00231, 0x00d28fe0, 0x00000000 }, + { 0x00800001, 0xafa00231, 0x00d28c00, 0x00000000 }, + { 0x00800001, 0xafb00231, 0x00d28c20, 0x00000000 }, + { 0x00800001, 0xafe00231, 0x00d28c40, 0x00000000 }, + { 0x00800001, 0xaff00231, 0x00d28c60, 0x00000000 }, + { 0x00400001, 0x27200231, 0x0069065c, 0x00000000 }, + { 0x00600001, 0x27240231, 0x00a98fcc, 0x00000000 }, + { 0x00600001, 0x272c0231, 0x00a98fec, 0x00000000 }, + { 0x00600001, 0x27340231, 0x00008fff, 0x00000000 }, + { 0x00800001, 0x2620012d, 0x00b10720, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00cf0663, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240074, 0x00004040 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000700, 0x00010001 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x00600001, 0x27300231, 0x008d0638, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c26, 0x00000000 }, + { 0x00400001, 0x27440231, 0x00808c66, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240076, 0x00004040 }, + { 0x00000040, 0x22063d8c, 0x00000206, 0x00800080 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800001, 0xaf800231, 0x00d28f80, 0x00000000 }, + { 0x00800001, 0xaf900231, 0x00d28fa0, 0x00000000 }, + { 0x00800001, 0xafc00231, 0x00d28fc0, 0x00000000 }, + { 0x00800001, 0xafd00231, 0x00d28fe0, 0x00000000 }, + { 0x00800001, 0xafa00231, 0x00d28c00, 0x00000000 }, + { 0x00800001, 0xafb00231, 0x00d28c20, 0x00000000 }, + { 0x00800001, 0xafe00231, 0x00d28c40, 0x00000000 }, + { 0x00800001, 0xaff00231, 0x00d28c60, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e0 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffcce }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00600001, 0x27800231, 0x008d0740, 0x00000000 }, + { 0x00400005, 0x22083dac, 0x00690680, 0x000f000f }, + { 0x00400040, 0x26a04625, 0x01e09020, 0x00690058 }, + { 0x00000001, 0x26d001ad, 0x00000700, 0x00000000 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x80600040, 0xcc0035b1, 0x00898800, 0x008d0760 }, + { 0x80600040, 0xcc1035b1, 0x00898820, 0x008d0770 }, + { 0x00800001, 0x27200231, 0x008d0724, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c06, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00010001 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a4 }, + { 0x80600040, 0xcc2035b1, 0x00898808, 0x008d0760 }, + { 0x80600040, 0xcc3035b1, 0x00898828, 0x008d0770 }, + { 0x00000001, 0x27230231, 0x00000783, 0x00000000 }, + { 0x00400001, 0x27240231, 0x008a8c18, 0x00000000 }, + { 0x00400001, 0x27280231, 0x008a8c38, 0x00000000 }, + { 0x00400001, 0x272c0231, 0x00008c3e, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00690784, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00020002 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a8 }, + { 0x80600040, 0xcc4035b1, 0x00898840, 0x008d0760 }, + { 0x80600040, 0xcc5035b1, 0x00898860, 0x008d0770 }, + { 0x00800001, 0x27200231, 0x008d0724, 0x00000000 }, + { 0x00600001, 0x27280231, 0x00000727, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c46, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00030003 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006ac }, + { 0x80600040, 0xcc6035b1, 0x00898848, 0x008d0760 }, + { 0x80600040, 0xcc7035b1, 0x00898868, 0x008d0770 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00800001, 0x2760022d, 0x00090724, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00800001, 0x2760022d, 0x00280740, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x02802005, 0x20003da0, 0x000006d0, 0x00020002 }, + { 0x02802005, 0x20003da0, 0x020006d0, 0x00010001 }, + { 0x009a0001, 0x27200169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x27400231, 0x028d0724, 0x00000000 }, + { 0x00780001, 0x27240231, 0x008d0740, 0x00000000 }, + { 0x00400040, 0x25e04629, 0x00690724, 0x00690740 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00800040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00800040, 0x24003d8c, 0x008d0400, 0x00040004 }, + { 0x00800008, 0x27603d8d, 0x008d0400, 0x00030003 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600001, 0x26c00231, 0x008d0724, 0x00000000 }, + { 0x00400001, 0x26c80231, 0x0069072b, 0x00000000 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d06c0, 0x00010001 }, + { 0x00800008, 0x27603d2d, 0x002905e0, 0x00020002 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x26c03e2d, 0x008d06c0, 0x00010001 }, + { 0x00400040, 0x22083eac, 0x00690054, 0x06c006c0 }, + { 0x00800008, 0x27603dad, 0x01e99000, 0x00020002 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600042, 0x25c04629, 0x008d06c4, 0x008d06c5 }, + { 0x00600040, 0x24003e2c, 0x008d06c3, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00010001 }, + { 0x00600008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00400001, 0x46c401ad, 0x006906c4, 0x00000000 }, + { 0x00400001, 0x46c6012d, 0x006905c0, 0x00000000 }, + { 0x00400040, 0x22083eac, 0x00690054, 0x06c006c0 }, + { 0x00800001, 0x276001ad, 0x01ea9000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600042, 0x25c04629, 0x008d06c0, 0x008d06c1 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x26e03e2d, 0x008d06c0, 0x00010001 }, + { 0x00400008, 0x46c23dad, 0x006906e0, 0x00020002 }, + { 0x00200008, 0x26d03dad, 0x004506e8, 0x00020002 }, + { 0x00400001, 0x46c0012d, 0x006905c0, 0x00000000 }, + { 0x00400009, 0x22083eac, 0x00690054, 0x00010001 }, + { 0x00400040, 0x22083d8c, 0x00690208, 0x06c006c0 }, + { 0x00800001, 0x276001ad, 0x01e99000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600042, 0x45c04629, 0x008d0724, 0x008d0725 }, + { 0x00600040, 0x24003e2c, 0x008d0726, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d0725, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d0724, 0x00010001 }, + { 0x00600008, 0x45c23d29, 0x008d05e0, 0x00020002 }, + { 0x00800001, 0x2760012d, 0x002a05c0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600001, 0x27440231, 0x00000743, 0x00000000 }, + { 0x00600042, 0x45c04629, 0x008d0740, 0x008d0741 }, + { 0x00600040, 0x24003e2c, 0x008d0742, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d0741, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d0740, 0x00010001 }, + { 0x00600008, 0x45c23d29, 0x008d05e0, 0x00020002 }, + { 0x00800001, 0x2760012d, 0x004905c0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00800001, 0x20400232, 0x00a90400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00a90404, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00a90408, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00a9040c, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00a90440, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00a90444, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00a90448, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00a9044c, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00a90480, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00a90484, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00a90488, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00a9048c, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00a904c0, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00a904c4, 0x00000000 }, + { 0x00800001, 0x21200232, 0x00a904c8, 0x00000000 }, + { 0x00800001, 0x21300232, 0x00a904cc, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200809, 0x27c03e21, 0x00450064, 0x00040004 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a000 }, + { 0x00a02401, 0x20400232, 0x00b10080, 0x00000000 }, + { 0x00a02801, 0x20500232, 0x00b10090, 0x00000000 }, + { 0x00a02401, 0x20800232, 0x00b100c0, 0x00000000 }, + { 0x00a02801, 0x20900232, 0x00b100d0, 0x00000000 }, + { 0x00a02401, 0x20c00232, 0x00b10100, 0x00000000 }, + { 0x00a02801, 0x20d00232, 0x00b10110, 0x00000000 }, + { 0x00a02401, 0x21000232, 0x00b10140, 0x00000000 }, + { 0x00a02801, 0x21100232, 0x00b10150, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000401, 0x20280062, 0x00000000, 0x0007000f }, + { 0x0000080c, 0x20243c22, 0x000007c4, 0x00010001 }, + { 0x00000040, 0x22001c00, 0x00000200, 0xf8000001 }, + { 0x00800001, 0x40400232, 0x00b10180, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00b101c0, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00b10190, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00b101d0, 0x00000000 }, + { 0x00800001, 0x40800232, 0x00b101a0, 0x00000000 }, + { 0x00800001, 0x40810232, 0x00b101e0, 0x00000000 }, + { 0x00800001, 0x40a00232, 0x00b101b0, 0x00000000 }, + { 0x00800001, 0x40a10232, 0x00b101f0, 0x00000000 }, + { 0x01600031, 0x27a00001, 0x508d0000, 0x00000200 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000002fe }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x20780d21, 0x0000045a, 0x0208a002 }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001be }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000126 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee6 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffcf8 }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc36 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21401c21, 0x508d0040, 0x1218a000 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21601c21, 0x508d0040, 0x0a18a001 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x00000005, 0x203e2e29, 0x00000063, 0x00010001 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000316 }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x00010005, 0x245c3e2d, 0x02008800, 0x00800080 }, + { 0x00110005, 0x245c3e2d, 0x02008804, 0x00800080 }, + { 0x00000009, 0x245c3dad, 0x0000045c, 0x00010001 }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x240035ac, 0x0000003e, 0x0000045c }, + { 0x01000010, 0x20003d8c, 0x00210400, 0x00010001 }, + { 0x01000010, 0x20003d8c, 0x02210400, 0x01000100 }, + { 0x00000001, 0x203c01ed, 0x00000000, 0x00000000 }, + { 0x00010001, 0x203c01ed, 0x00000000, 0x00020002 }, + { 0x00010001, 0x203c01ed, 0x02000000, 0xfffefffe }, + { 0x00000040, 0x20780d21, 0x0000045a, 0x0208e602 }, + { 0x00000040, 0x20782421, 0x00000078, 0x0000045c }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001c0 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000128 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee4 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffce0 }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc1e }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a600 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21400021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x0a18a601 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21600021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x02000005, 0x20002e28, 0x00000061, 0x00400040 }, + { 0x00010005, 0x203e2e29, 0x00000063, 0x00010001 }, + { 0x00110001, 0x203e0169, 0x00000000, 0x00030003 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000031a }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x00010005, 0x245c3e2d, 0x02008800, 0x00800080 }, + { 0x00110005, 0x245c3e2d, 0x02008804, 0x00800080 }, + { 0x00000009, 0x245c3dad, 0x0000045c, 0x00010001 }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x240035ac, 0x0000003e, 0x0000045c }, + { 0x01000010, 0x20003d8c, 0x00210400, 0x00010001 }, + { 0x01000010, 0x20003d8c, 0x02210400, 0x01000100 }, + { 0x00000001, 0x203c01ed, 0x00000000, 0x00000000 }, + { 0x00010001, 0x203c01ed, 0x00000000, 0x00020002 }, + { 0x00010001, 0x203c01ed, 0x02000000, 0xfffefffe }, + { 0x02000005, 0x20002e28, 0x00000061, 0x00400040 }, + { 0x00010040, 0x244c0d21, 0x0000045a, 0x0208e602 }, + { 0x00110040, 0x20780d21, 0x0000045a, 0x0208a002 }, + { 0x00010040, 0x20782421, 0x0000044c, 0x0000045c }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001c0 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000128 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee4 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffcdc }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc1a }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a000 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21400021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x0a18a001 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21600021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20602d29, 0x02000042, 0x00070007 }, + { 0x01000005, 0x20422d29, 0x00000042, 0xfff8fff8 }, + { 0x00000001, 0x202001e9, 0x00000000, 0x100c100c }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00000009, 0x27e82d21, 0x00000040, 0x00060006 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000100 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x02600005, 0x20000c20, 0x02000090, 0x00002000 }, + { 0x00000006, 0x20880c21, 0x00000088, 0x00200000 }, + { 0x00200009, 0x20845529, 0x0000009c, 0x00450020 }, + { 0x00200001, 0x40840231, 0x00450094, 0x00000000 }, + { 0x00310001, 0x20840229, 0x02450094, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000095, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000094 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x20800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x020000d0, 0x00002000 }, + { 0x00000006, 0x20c80c21, 0x000000c8, 0x00200000 }, + { 0x00200009, 0x20c45529, 0x000000dc, 0x00450020 }, + { 0x00200001, 0x40c40231, 0x004500d4, 0x00000000 }, + { 0x00310001, 0x20c40229, 0x024500d4, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x000000d5, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x000000d4 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000110, 0x00002000 }, + { 0x00000006, 0x21080c21, 0x00000108, 0x00200000 }, + { 0x00200009, 0x21045529, 0x0000011c, 0x00450020 }, + { 0x00200001, 0x41040231, 0x00450114, 0x00000000 }, + { 0x00310001, 0x21040229, 0x02450114, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000115, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000114 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000150, 0x00002000 }, + { 0x00000006, 0x21480c21, 0x00000148, 0x00200000 }, + { 0x00200009, 0x21445529, 0x0000015c, 0x00450020 }, + { 0x00200001, 0x41440231, 0x00450154, 0x00000000 }, + { 0x00310001, 0x21440229, 0x02450154, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000155, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000154 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000190, 0x00002000 }, + { 0x00000006, 0x21880c21, 0x00000188, 0x00200000 }, + { 0x00200009, 0x21845529, 0x0000019c, 0x00450020 }, + { 0x00200001, 0x41840231, 0x00450194, 0x00000000 }, + { 0x00310001, 0x21840229, 0x02450194, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000195, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000194 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x020001d0, 0x00002000 }, + { 0x00000006, 0x21c80c21, 0x000001c8, 0x00200000 }, + { 0x00200009, 0x21c45529, 0x000001dc, 0x00450020 }, + { 0x00200001, 0x41c40231, 0x004501d4, 0x00000000 }, + { 0x00310001, 0x21c40229, 0x024501d4, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x000001d5, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x000001d4 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d01c0, 0x00000000 }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000210, 0x00002000 }, + { 0x00000006, 0x22080c21, 0x00000208, 0x00200000 }, + { 0x00200009, 0x22045529, 0x0000021c, 0x00450020 }, + { 0x00200001, 0x42040231, 0x00450214, 0x00000000 }, + { 0x00310001, 0x22040229, 0x02450214, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000215, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000214 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000250, 0x00002000 }, + { 0x00000006, 0x22480c21, 0x00000248, 0x00200000 }, + { 0x00200009, 0x22445529, 0x0000025c, 0x00450020 }, + { 0x00200001, 0x42440231, 0x00450254, 0x00000000 }, + { 0x00310001, 0x22440229, 0x02450254, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000255, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000254 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00802001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x01000040, 0x20423dad, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d00c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000080 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0140, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x21680c22, 0x000007e8, 0x00000100 }, + { 0x00802001, 0x21800022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d01c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000180 }, + { 0x00802001, 0x20400022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0240, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000200 }, + { 0x01000010, 0x20002da0, 0x02000060, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffff00 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000040 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00000001, 0x220400e0, 0x00000000, 0x00a00080 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02008810, 0x00002000 }, + { 0x01000040, 0x20603dad, 0x00000060, 0xffffffff }, + { 0x00000006, 0xa8080c21, 0x00008808, 0x00200000 }, + { 0x00200009, 0xa8045529, 0x0000881c, 0x00450020 }, + { 0x00200001, 0xc8040231, 0x00458814, 0x00000000 }, + { 0x00310001, 0xa8040229, 0x02458814, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00008815, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00008814 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d8800, 0x00000000 }, + { 0x00802001, 0xa8000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d8800, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000040 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffda }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20602d29, 0x02000042, 0x00070007 }, + { 0x01000005, 0x20422d29, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00000009, 0x27e82d21, 0x00000040, 0x00060006 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000260 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00200001, 0x20640229, 0x00450094, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000090, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000095, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000095, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x20881c21, 0x00000088, 0x00200000 }, + { 0x00200001, 0x20840129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x20800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000009c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000009c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200009c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000090, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200009c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200009c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x20843d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x20862d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x40840231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x004500d4, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x020000d0, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x000000d5, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x000000d5, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x20c81c21, 0x000000c8, 0x00200000 }, + { 0x00200001, 0x20c40129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x000000dc, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x000000dc, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x020000dc, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x020000d0, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x020000dc, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x020000dc, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x20c43d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x20c62d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x40c40231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450114, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000110, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000115, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000115, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21081c21, 0x00000108, 0x00200000 }, + { 0x00200001, 0x21040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000011c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000011c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200011c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000110, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200011c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200011c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21043d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21062d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41040231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450154, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000150, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000155, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000155, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21481c21, 0x00000148, 0x00200000 }, + { 0x00200001, 0x21440129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000015c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000015c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200015c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000150, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200015c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200015c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21443d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21462d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41440231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450194, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000190, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000195, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000195, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21881c21, 0x00000188, 0x00200000 }, + { 0x00200001, 0x21840129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000019c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000019c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200019c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000190, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200019c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200019c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21843d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21862d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41840231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x004501d4, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x020001d0, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x000001d5, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x000001d5, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21c81c21, 0x000001c8, 0x00200000 }, + { 0x00200001, 0x21c40129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d01c0, 0x00000000 }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x000001dc, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x000001dc, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x020001dc, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x020001d0, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x020001dc, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x020001dc, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21c43d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21c62d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41c40231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450214, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000210, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000215, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000215, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x22081c21, 0x00000208, 0x00200000 }, + { 0x00200001, 0x22040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000021c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000021c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200021c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000210, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200021c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200021c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x22043d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x22062d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x42040231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450254, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000250, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000255, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000255, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x22481c21, 0x00000248, 0x00200000 }, + { 0x00200001, 0x22440129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00802001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000025c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000025c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200025c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000250, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200025c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200025c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x22443d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x22462d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x42440231, 0x00660064, 0x00000000 }, + { 0x01000040, 0x20423dad, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d00c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000080 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0140, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x21680c22, 0x000007e8, 0x00000100 }, + { 0x00802001, 0x21800022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d01c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000180 }, + { 0x00802001, 0x20400022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0240, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000200 }, + { 0x01000010, 0x20002da0, 0x02000060, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffda0 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000006e }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00000001, 0x220400e0, 0x00000000, 0x00a00080 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00458814, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02008810, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00008815, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00008815, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00002000 }, + { 0x01000040, 0x20603dad, 0x02000060, 0xffffffff }, + { 0x00000006, 0xa8080c21, 0x00008808, 0x00200000 }, + { 0x00200001, 0xa8040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d8800, 0x00000000 }, + { 0x00802001, 0xa8000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x02600005, 0x20000d20, 0x02000066, 0x00000001 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00004000 }, + { 0x00000001, 0x20680129, 0x0000881c, 0x00000000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000881c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200881c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02008810, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200881c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200881c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x00000068, 0x000d0070 }, + { 0x01000040, 0x20603dad, 0x02000060, 0x00000000 }, + { 0x00000009, 0xa8043d09, 0x00000600, 0x000c000c }, + { 0x00000005, 0xa8062d09, 0x00000600, 0xf000f000 }, + { 0x00200001, 0xc8040231, 0x00660064, 0x00000000 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d8800, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000040 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xffffffac }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x20263d29, 0x00000036, 0x00040004 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000178 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000176 }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x0288a001 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x03600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00000008, 0x25e83e2d, 0x00009080, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459080, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699060, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000134 }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000110 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000102 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06082003 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000008, 0x25e83e2d, 0x00009082, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459082, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699070, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x12082003 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00802001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0618a003 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c01, 0x27e401a1, 0x000005c2, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x02600031, 0x23401c25, 0x408d07e0, 0x02286003 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00800040, 0x2400462d, 0x00b19c00, 0x00b1d830 }, + { 0x00800040, 0x2340462d, 0x00b19820, 0x00b1d830 }, + { 0x00800040, 0x2360462d, 0x00b19c10, 0x00b1dc00 }, + { 0x05810010, 0x200035ac, 0x008d2400, 0x000005d0 }, + { 0x05810010, 0x200035ac, 0x008d2340, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2360, 0x000005d2 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x000000ca }, + { 0x00800040, 0x2440462d, 0x00b19810, 0x00b1d830 }, + { 0x00800040, 0x2460462d, 0x00b19c20, 0x00b1dc00 }, + { 0x00800201, 0x24a00129, 0x00b19820, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000066 }, + { 0x05800010, 0x200035ac, 0x028d2400, 0x000005e8 }, + { 0x00800040, 0x2520462d, 0x00b19830, 0x00b19820 }, + { 0x00800040, 0x2540462d, 0x00b19c00, 0x00b19c10 }, + { 0x00000201, 0x26000108, 0x00000602, 0x00000000 }, + { 0x05810010, 0x200035ac, 0x028d2440, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2460, 0x000005d2 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00800040, 0x2560462d, 0x00b19810, 0x00b19800 }, + { 0x00800040, 0x238045ad, 0x008d0520, 0x00b19c00 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19810 }, + { 0x00800048, 0x24003dac, 0x008d0560, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x00b19c10, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xb8100231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x00b19820, 0x008d0520 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800040, 0x2580462d, 0x00b19c20, 0x00b19c30 }, + { 0x00800040, 0x238045ad, 0x008d0540, 0x008d04b0 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19c20 }, + { 0x00800048, 0x24003dac, 0x008d0580, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xbc200231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x008d0540 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001005c }, + { 0x00800201, 0x23e0022d, 0x002805d4, 0x00000000 }, + { 0x00800201, 0x23c0022d, 0x002805d4, 0x00000000 }, + { 0x05800010, 0x200035ac, 0x008d2440, 0x000005d2 }, + { 0x05800010, 0x200035ac, 0x028d2460, 0x000005d2 }, + { 0x00800040, 0x24003e2c, 0x00b19820, 0x00040004 }, + { 0x00800048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b1dc10 }, + { 0x00800008, 0x23403d8d, 0x00b10400, 0x00030003 }, + { 0x00810040, 0x23e03dad, 0x008d03e0, 0x00010001 }, + { 0x00200201, 0x25ec018d, 0x00450600, 0x00000000 }, + { 0x00810040, 0x23e03dad, 0x028d03e0, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05800010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00800042, 0x24c0462d, 0x00b19830, 0x00b19c00 }, + { 0x00810001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00810001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x00200201, 0x260001ac, 0x004505ec, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19830, 0x008d0340 }, + { 0x80800040, 0x43403631, 0x00b19c00, 0x008d4340 }, + { 0x00800001, 0xb8300231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00800040, 0x2400362c, 0x00b19810, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19820, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0360, 0x008d03c0 }, + { 0x05800010, 0x200035ac, 0x028d0360, 0x008d43c0 }, + { 0x00810001, 0x236001ad, 0x008d03c0, 0x00000000 }, + { 0x00810001, 0x236001ad, 0x028d43c0, 0x00000000 }, + { 0x00000201, 0x260201ac, 0x000005ee, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19820, 0x008d0360 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00800040, 0x2400362c, 0x00b19c20, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19c10, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0360, 0x008d03c0 }, + { 0x05800010, 0x200035ac, 0x028d0360, 0x008d43c0 }, + { 0x00810001, 0x236001ad, 0x008d03c0, 0x00000000 }, + { 0x00810001, 0x236001ad, 0x028d43c0, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19c10, 0x008d0360 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x01400140 }, + { 0x00000048, 0x20263dad, 0x00000036, 0x00040004 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000126 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000124 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x0248a002 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x02600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c0, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a0, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000fc }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590c8, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b0, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000ee }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d8 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b4, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000ca }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x04082004 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c2, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00810081 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590ca, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000078 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000054 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0a082004 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0418a004 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00600401, 0x2340012d, 0x008500cc, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x0085010c, 0x00000000 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x02600031, 0x23401c25, 0x408d07e0, 0x02186004 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00600040, 0x2400462d, 0x00ae9c00, 0x00aed810 }, + { 0x00600040, 0x2340462d, 0x00ae9800, 0x00aed810 }, + { 0x00600040, 0x2360462d, 0x00ae9c10, 0x00aedc00 }, + { 0x05810010, 0x200035ac, 0x008d2400, 0x000005d0 }, + { 0x05810010, 0x200035ac, 0x008d2340, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2360, 0x000005d2 }, + { 0x00618022, 0x34001c00, 0x00001400, 0x00000038 }, + { 0x00618022, 0x34001c00, 0x02001400, 0x00000016 }, + { 0x00600040, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9810 }, + { 0x80600008, 0x43403d91, 0x008d0400, 0x00020002 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9c00 }, + { 0x80600008, 0x43603d91, 0x008d0400, 0x00020002 }, + { 0x00600001, 0xd8100231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0360, 0x00000000 }, + { 0x00608024, 0x34001c00, 0x00001400, 0x00010020 }, + { 0x00600201, 0x2400022c, 0x002405d4, 0x00000000 }, + { 0x00600040, 0x23e03d8d, 0x008d0400, 0x00010001 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00040004 }, + { 0x00600048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00aedc10 }, + { 0x00600008, 0x23403d8d, 0x008d0400, 0x00030003 }, + { 0x03600010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05600010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00610001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00610001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x80600040, 0x43603631, 0x00ae9810, 0x008d0340 }, + { 0x80600040, 0x43403631, 0x00ae9c00, 0x008d4340 }, + { 0x00600001, 0xd8100231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x20263d29, 0x00000036, 0x00040004 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x0000018c }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000018a }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x0288e701 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0288e601 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x03600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00000008, 0x25e83e2d, 0x00009080, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459080, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699060, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb8c }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb76 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb68 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb5a }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x06082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x06082603 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000008, 0x25e83e2d, 0x00009082, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459082, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699070, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffaea }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffad4 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffac6 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffab8 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x12082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x12082603 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00802001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0618a703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0618a603 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c01, 0x27e401a1, 0x000005c2, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x00010008 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x01400140 }, + { 0x00000048, 0x20263dad, 0x00000036, 0x00040004 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x0000013a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000138 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x0248e702 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0248e602 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x02600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c0, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a0, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffc0c }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590c8, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b0, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbfe }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbe8 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b4, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbda }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x04082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x04082604 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c2, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb92 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00810081 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590ca, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb84 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb6e }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb60 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0a082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0a082604 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0418a704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0418a604 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00600401, 0x2340012d, 0x008500cc, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x0085010c, 0x00000000 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x00010008 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00010001 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x22600169, 0x00000000, 0x00010001 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00400441, 0x45c03dad, 0x00000034, 0x00100010 }, + { 0x00400841, 0x45c23dad, 0x00000036, 0x00200020 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x25e42c21, 0x000005e4, 0x00800080 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00000005, 0x202a3dad, 0x0000002a, 0xfffdfffd }, + { 0x02000005, 0x20002d2c, 0x0200002a, 0x00020002 }, + { 0x00000001, 0x27e80021, 0x000005e4, 0x00000000 }, + { 0x00010040, 0x27e83c21, 0x020007e8, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000005, 0x25ec2e29, 0x00009002, 0x000a000a }, + { 0x00000005, 0x25ea2e29, 0x00009002, 0x00060006 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000252 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000250 }, + { 0x01000010, 0x20003d2c, 0x000005ec, 0x00080008 }, + { 0x00000005, 0x25e03d8d, 0x00000600, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a5, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0288a001 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0288e701 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0288e601 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x00800401, 0x20400231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x20500231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x20600231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x20700231, 0x00cf0343, 0x00000000 }, + { 0x01600010, 0x20003d2c, 0x000005ea, 0x00040004 }, + { 0x01600010, 0x20003d2c, 0x020005ea, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009080, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009081, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289060, 0x00000000 }, + { 0x00610401, 0x41c00229, 0x00009080, 0x00000000 }, + { 0x00610801, 0x41c20229, 0x00009090, 0x00000000 }, + { 0x00610401, 0x41e00229, 0x00009081, 0x00000000 }, + { 0x00610801, 0x41e20229, 0x00009091, 0x00000000 }, + { 0x00610401, 0x42000229, 0x00249060, 0x00000000 }, + { 0x00610801, 0x42020229, 0x00249098, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00610401, 0x21c00229, 0x02009080, 0x00000000 }, + { 0x00610801, 0x21d00229, 0x02009090, 0x00000000 }, + { 0x00610401, 0x21e00229, 0x02009081, 0x00000000 }, + { 0x00610801, 0x21f00229, 0x02009091, 0x00000000 }, + { 0x00610401, 0x22000229, 0x02249060, 0x00000000 }, + { 0x00610801, 0x22100229, 0x02249098, 0x00000000 }, + { 0x00800008, 0x25a03d29, 0x008d01c0, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200001, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001b4 }, + { 0x00800008, 0x25a03e29, 0x00009084, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009084, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009085, 0x00000000 }, + { 0x00000001, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000001, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000019c }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000018e }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000001, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000180 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06082003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x06082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x06082603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x01000005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000440, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00200000 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00010001 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20400021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000001, 0x260201ac, 0x000005e0, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009082, 0x00020002 }, + { 0x00200001, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00009082, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009083, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289070, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000050 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000a }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05400540 }, + { 0x00800001, 0x25000129, 0x00ad0040, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad0080, 0x00000000 }, + { 0x00800001, 0x25400129, 0x00ad00c0, 0x00000000 }, + { 0x00800001, 0x25600129, 0x00ad0100, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000c2 }, + { 0x00600001, 0x20600129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20800129, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x20a00129, 0x008d0530, 0x00000000 }, + { 0x00600001, 0x20c00129, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x20e00129, 0x008d0550, 0x00000000 }, + { 0x00600001, 0x21000129, 0x008d0560, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009092, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05400540 }, + { 0x00800001, 0x25000129, 0x00ad0050, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad0090, 0x00000000 }, + { 0x00800001, 0x25400129, 0x00ad00d0, 0x00000000 }, + { 0x00800001, 0x25600129, 0x00ad0110, 0x00000000 }, + { 0x00200001, 0x25d80129, 0x0045905c, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00009092, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009093, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028909c, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000009a }, + { 0x00600001, 0x20700129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20900129, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x20b00129, 0x008d0530, 0x00000000 }, + { 0x00600001, 0x20d00129, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x20f00129, 0x008d0550, 0x00000000 }, + { 0x00600001, 0x21100129, 0x008d0560, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009084, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009084, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009085, 0x00000000 }, + { 0x00000001, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000001, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000068 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000001, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x12082003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x12082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x12082603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01800005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00812001, 0x20400022, 0x028d0040, 0x00000000 }, + { 0x00912001, 0x20400022, 0x028d0080, 0x00000000 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0618a003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00010001 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0618a703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0618a603 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x0000002a, 0x00020002 }, + { 0x00000006, 0x202a3dad, 0x0000002a, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffd94 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00800040, 0x2400462d, 0x00b19c00, 0x00b1d830 }, + { 0x00800040, 0x2340462d, 0x00b19820, 0x00b1d830 }, + { 0x00800040, 0x2360462d, 0x00b19c10, 0x00b1dc00 }, + { 0x05810010, 0x200025ac, 0x008d2400, 0x008d01c0 }, + { 0x05810010, 0x200025ac, 0x008d2340, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2360, 0x008d01e0 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x000000c8 }, + { 0x00800040, 0x2440462d, 0x00b19810, 0x00b1d830 }, + { 0x00800040, 0x2460462d, 0x00b19c20, 0x00b1dc00 }, + { 0x00800201, 0x24a00129, 0x00b19820, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000066 }, + { 0x05800010, 0x200025ac, 0x028d2400, 0x008d05a0 }, + { 0x00800040, 0x2520462d, 0x00b19830, 0x00b19820 }, + { 0x00800040, 0x2540462d, 0x00b19c00, 0x00b19c10 }, + { 0x00000201, 0x26000108, 0x00000602, 0x00000000 }, + { 0x05810010, 0x200025ac, 0x028d2440, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2460, 0x008d01e0 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00800040, 0x2560462d, 0x00b19810, 0x00b19800 }, + { 0x00800040, 0x238045ad, 0x008d0520, 0x00b19c00 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19810 }, + { 0x00800048, 0x24003dac, 0x008d0560, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x00b19c10, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xb8100231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x00b19820, 0x008d0520 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800040, 0x2580462d, 0x00b19c20, 0x00b19c30 }, + { 0x00800040, 0x238045ad, 0x008d0540, 0x008d04b0 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19c20 }, + { 0x00800048, 0x24003dac, 0x008d0580, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xbc200231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x008d0540 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001005a }, + { 0x00800001, 0x23e0012d, 0x008d0200, 0x00000000 }, + { 0x05800010, 0x200025ac, 0x008d2440, 0x008d01e0 }, + { 0x05800010, 0x200025ac, 0x028d2460, 0x008d01e0 }, + { 0x00800040, 0x24003e2c, 0x00b19820, 0x00040004 }, + { 0x00800048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b1dc10 }, + { 0x00800008, 0x23403d8d, 0x00b10400, 0x00030003 }, + { 0x00810040, 0x23e03dad, 0x008d03e0, 0x00010001 }, + { 0x00200201, 0x25ec018d, 0x00450600, 0x00000000 }, + { 0x00810040, 0x23e03dad, 0x028d03e0, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05800010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00800042, 0x24c0462d, 0x00b19830, 0x00b19c00 }, + { 0x00810001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00810001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x00200201, 0x260001ac, 0x004505ec, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19830, 0x008d0340 }, + { 0x80800040, 0x43403631, 0x00b19c00, 0x008d4340 }, + { 0x00800001, 0xb8300231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00800040, 0x2400362c, 0x00b19810, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19820, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200025ac, 0x008d0360, 0x008d0200 }, + { 0x05800010, 0x200025ac, 0x028d0360, 0x008d4200 }, + { 0x00810001, 0x2360012d, 0x008d0200, 0x00000000 }, + { 0x00810001, 0x2360012d, 0x028d4200, 0x00000000 }, + { 0x00000201, 0x260201ac, 0x000005ee, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19820, 0x008d0360 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00800040, 0x2400362c, 0x00b19c20, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19c10, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200025ac, 0x008d0360, 0x008d0200 }, + { 0x05800010, 0x200025ac, 0x028d0360, 0x008d4200 }, + { 0x00810001, 0x2360012d, 0x008d0200, 0x00000000 }, + { 0x00810001, 0x2360012d, 0x028d4200, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19c10, 0x008d0360 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00010001 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00400441, 0x45c03dad, 0x00000034, 0x00100010 }, + { 0x00400841, 0x45c23dad, 0x00000036, 0x00200020 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x25e42c21, 0x000005e4, 0x00800080 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00000005, 0x202a3dad, 0x0000002a, 0xfffdfffd }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x02000005, 0x20002d2c, 0x0200002a, 0x00020002 }, + { 0x00000001, 0x27e80021, 0x000005e4, 0x00000000 }, + { 0x00010040, 0x27e83c21, 0x020007e8, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000005, 0x25ec2e29, 0x00009002, 0x000a000a }, + { 0x00000005, 0x25ea2e29, 0x00009002, 0x00060006 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000252 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000250 }, + { 0x01000010, 0x20003d2c, 0x000005ec, 0x00080008 }, + { 0x00000005, 0x25e03d8d, 0x00000600, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0248a002 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0248e702 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0248e602 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x00800001, 0x204001a9, 0x002e0340, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x01000010, 0x20003d2c, 0x020005ea, 0x00040004 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000010, 0x20003d2c, 0x000005ea, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x02600005, 0x20003dac, 0x00650340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02650360, 0x00010001 }, + { 0x00400401, 0x41c00229, 0x000090c0, 0x00000000 }, + { 0x00400801, 0x41c20229, 0x000090e0, 0x00000000 }, + { 0x00400401, 0x41e00229, 0x000090c1, 0x00000000 }, + { 0x00400801, 0x41e20229, 0x000090e1, 0x00000000 }, + { 0x00400401, 0x42000229, 0x006990a0, 0x00000000 }, + { 0x00400801, 0x42020229, 0x006990e8, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00400401, 0x21c00229, 0x000090c0, 0x00000000 }, + { 0x00400801, 0x21c80229, 0x000090e0, 0x00000000 }, + { 0x00400401, 0x21e00229, 0x000090c1, 0x00000000 }, + { 0x00400801, 0x21e80229, 0x000090e1, 0x00000000 }, + { 0x00400401, 0x22000229, 0x006990a0, 0x00000000 }, + { 0x00400801, 0x22080229, 0x006990e8, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00600001, 0x21c00229, 0x000090c0, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c1, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a0, 0x00000000 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001c8 }, + { 0x01400010, 0x20003d2c, 0x000005ea, 0x00040004 }, + { 0x01400010, 0x20003d2c, 0x020005ea, 0x00020002 }, + { 0x00600001, 0x21c00229, 0x000090c8, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c9, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b0, 0x00000000 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00410401, 0x41c00229, 0x000090c8, 0x00000000 }, + { 0x00410801, 0x41c20229, 0x000090f0, 0x00000000 }, + { 0x00410401, 0x41e00229, 0x000090c9, 0x00000000 }, + { 0x00410801, 0x41e20229, 0x000090f1, 0x00000000 }, + { 0x00410401, 0x42000229, 0x006990b0, 0x00000000 }, + { 0x00410801, 0x42020229, 0x006990f8, 0x00000000 }, + { 0x00410401, 0x21c00229, 0x020090c8, 0x00000000 }, + { 0x00410801, 0x21c80229, 0x020090f0, 0x00000000 }, + { 0x00410401, 0x21e00229, 0x020090c9, 0x00000000 }, + { 0x00410801, 0x21e80229, 0x020090f1, 0x00000000 }, + { 0x00410401, 0x22000229, 0x026990b0, 0x00000000 }, + { 0x00410801, 0x22080229, 0x026990f8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000019c }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00600001, 0x21c00229, 0x000090c4, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c5, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000184 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090cc, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cd, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b4, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000174 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x04082004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x04082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x04082604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da5, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x01000005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000440, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00100000 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00020002 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x20400021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000001, 0x260201ac, 0x000005e0, 0x00000000 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000026 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00600001, 0x21c00229, 0x000090c2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00600001, 0x21c00229, 0x000090ca, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cb, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e0 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05200520 }, + { 0x00800001, 0x25000129, 0x00ad0040, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad00c0, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090c2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000c6 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05010501 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05210521 }, + { 0x00600001, 0x21c00229, 0x000090ca, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cb, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000b6 }, + { 0x00800008, 0x2340352d, 0x0000905c, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x0000905e, 0x008d0220 }, + { 0x00600001, 0x20600129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20c00129, 0x008d0520, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05200520 }, + { 0x00800001, 0x25000129, 0x00ad0050, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad00d0, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090e2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090e3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490ec, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05010501 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05210521 }, + { 0x00600001, 0x21c00229, 0x000090f2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090f3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490fc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00600001, 0x20700129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20d00129, 0x008d0520, 0x00000000 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00600001, 0x21c00229, 0x000090c4, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c5, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00600001, 0x21c00229, 0x000090cc, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cd, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0a082004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0a082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0a082604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01600005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00610001, 0x20400022, 0x028d0040, 0x00000000 }, + { 0x00710001, 0x20400022, 0x028d0060, 0x00000000 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0418a004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00020002 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0418a704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0418a604 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x0000002a, 0x00020002 }, + { 0x00000006, 0x202a3dad, 0x0000002a, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffd94 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00600040, 0x2400462d, 0x00ae9c00, 0x00aed810 }, + { 0x00600040, 0x2340462d, 0x00ae9800, 0x00aed810 }, + { 0x00600040, 0x2360462d, 0x00ae9c10, 0x00aedc00 }, + { 0x05810010, 0x200025ac, 0x008d2400, 0x008d01c0 }, + { 0x05810010, 0x200025ac, 0x008d2340, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2360, 0x008d01e0 }, + { 0x00618022, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00618022, 0x34001c00, 0x02001400, 0x00000016 }, + { 0x00600040, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9810 }, + { 0x80600008, 0x43403d91, 0x008d0400, 0x00020002 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9c00 }, + { 0x80600008, 0x43603d91, 0x008d0400, 0x00020002 }, + { 0x00600001, 0xd8100231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0360, 0x00000000 }, + { 0x00608024, 0x34001c00, 0x00001400, 0x0001001e }, + { 0x00600040, 0x23e03d2d, 0x008d0200, 0x00010001 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00040004 }, + { 0x00600048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00aedc10 }, + { 0x00600008, 0x23403d8d, 0x008d0400, 0x00030003 }, + { 0x03600010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05600010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00610001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00610001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x80600040, 0x43603631, 0x00ae9810, 0x008d0340 }, + { 0x80600040, 0x43403631, 0x00ae9c00, 0x008d4340 }, + { 0x00600001, 0xd8100231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b.gen5 new file mode 100644 index 000000000..7048e1f6b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/avc_mc.g4b.gen5 @@ -0,0 +1,5251 @@ + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x00000005, 0x220e3e2c, 0x00000070, 0x000f000f }, + { 0x00000001, 0x26a00221, 0x00009c38, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x00a02001, 0x24000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x25c00229, 0x00b10624, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x22080060, 0x00000000, 0x06440640 }, + { 0x00a02001, 0x24000229, 0x00009003, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x0000900b, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00009013, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x0000901b, 0x00000000 }, + { 0x00a02001, 0x25000229, 0x00009023, 0x00000000 }, + { 0x00a02001, 0x25400229, 0x0000902b, 0x00000000 }, + { 0x00a02001, 0x25800229, 0x00009033, 0x00000000 }, + { 0x00a02001, 0x25c00229, 0x0000903b, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x02600005, 0x20000c20, 0x0000006c, 0x00000002 }, + { 0x00600005, 0x24000c20, 0x0000006c, 0x00000011 }, + { 0x01600007, 0x20000c00, 0x028d0400, 0x00000011 }, + { 0x00780001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x66430231, 0x028d0624, 0x00000000 }, + { 0x00780001, 0x66630231, 0x028d062c, 0x00000000 }, + { 0x00780001, 0x26240231, 0x00cf0643, 0x00000000 }, + { 0x00780001, 0x262c0231, 0x00cf0663, 0x00000000 }, + { 0x00800040, 0x25e04629, 0x00cf0643, 0x00b10624 }, + { 0x00600040, 0x25e02529, 0x008d05e0, 0x008d05f0 }, + { 0x00400040, 0x25e02529, 0x006905e0, 0x006905e8 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00a02040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00a02040, 0x24003d8c, 0x00b10400, 0x00100010 }, + { 0x00a02008, 0x24003d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24403d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24803d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x24c03d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25003d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25403d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25803d89, 0x00b10400, 0x00050005 }, + { 0x00a02008, 0x25c03d89, 0x00b10400, 0x00050005 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00600041, 0x26806e2d, 0x008d062c, 0x89abcdef }, + { 0x00600041, 0x26906e2d, 0x008d0623, 0xfedcba98 }, + { 0x00600041, 0x26a06e2d, 0x00cf0663, 0x89abcdef }, + { 0x00600041, 0x26b06e2d, 0x00cf0643, 0x0fedcba9 }, + { 0x00000041, 0x26be3e2d, 0x00000623, 0xfff8fff8 }, + { 0x00802040, 0x268035ad, 0x008d4680, 0x008d0690 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0688 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0684 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0682 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00200020 }, + { 0x00200048, 0x24003dac, 0x00a00680, 0x00050005 }, + { 0x00200008, 0x26e03d8d, 0x00450400, 0x00060006 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x00000633, 0x00100010 }, + { 0x00800048, 0x26c03e2d, 0x0000067f, 0x00100010 }, + { 0x00800048, 0x272055ad, 0x000006e0, 0x00b10040 }, + { 0x00600041, 0x268055ad, 0x000006e2, 0x00ae0040 }, + { 0x00600041, 0x26a055ad, 0x000006e2, 0x00ae0041 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00680 }, + { 0x80a02008, 0x44003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00682 }, + { 0x80a02008, 0x44403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00684 }, + { 0x80a02008, 0x44803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00686 }, + { 0x80a02008, 0x44c03d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b00688 }, + { 0x80a02008, 0x45003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068a }, + { 0x80a02008, 0x45403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068c }, + { 0x80a02008, 0x45803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00b0068e }, + { 0x80a02008, 0x45c03d91, 0x00b10400, 0x00050005 }, + { 0x00000001, 0x22040060, 0x00000000, 0x00900080 }, + { 0x01000005, 0x20000c20, 0x02000068, 0x00003c00 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000020 }, + { 0x80802040, 0x440045b1, 0x008d8800, 0x00ae0400 }, + { 0x80802040, 0x444045b1, 0x008d8820, 0x00ae0440 }, + { 0x80802040, 0x448045b1, 0x008d8840, 0x00ae0480 }, + { 0x80802040, 0x44c045b1, 0x008d8860, 0x00ae04c0 }, + { 0x80802040, 0x441045b1, 0x008d8880, 0x00ae0410 }, + { 0x80802040, 0x445045b1, 0x008d88a0, 0x00ae0450 }, + { 0x80802040, 0x449045b1, 0x008d88c0, 0x00ae0490 }, + { 0x80802040, 0x44d045b1, 0x008d88e0, 0x00ae04d0 }, + { 0x80802040, 0x450045b1, 0x008d8900, 0x00ae0500 }, + { 0x80802040, 0x454045b1, 0x008d8920, 0x00ae0540 }, + { 0x80802040, 0x458045b1, 0x008d8940, 0x00ae0580 }, + { 0x80802040, 0x45c045b1, 0x008d8960, 0x00ae05c0 }, + { 0x80802040, 0x451045b1, 0x008d8980, 0x00ae0510 }, + { 0x80802040, 0x455045b1, 0x008d89a0, 0x00ae0550 }, + { 0x80802040, 0x459045b1, 0x008d89c0, 0x00ae0590 }, + { 0x80802040, 0x45d045b1, 0x008d89e0, 0x00ae05d0 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x01800180 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e2 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00200440, 0x27c055a5, 0x004507fa, 0x0045002a }, + { 0x00000801, 0x27c80061, 0x00000000, 0x0000001b }, + { 0x00000040, 0x22000d20, 0x00000062, 0x02186000 }, + { 0x01600031, 0x26200021, 0x408d07c0, 0x00000200 }, + { 0x00000440, 0x27c43ca5, 0x000007c4, 0x00010001 }, + { 0x00000801, 0x27c80061, 0x00000000, 0x000f0003 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00100000 }, + { 0x02600031, 0x26400021, 0x408d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000008, 0x27fc3dad, 0x000007fc, 0x00010001 }, + { 0x00200440, 0x27c055a5, 0x004507fa, 0x0045002a }, + { 0x00000801, 0x27c80061, 0x00000000, 0x00000013 }, + { 0x00000040, 0x22000c00, 0x00000200, 0xefffc001 }, + { 0x01600031, 0x26200021, 0x408d07c0, 0x00000200 }, + { 0x00000440, 0x27c43ca5, 0x000007c4, 0x00010001 }, + { 0x00000801, 0x27c80061, 0x00000000, 0x00070003 }, + { 0x05600031, 0x26400021, 0x408d07c0, 0x00000200 }, + { 0x00000008, 0x220e3e2c, 0x0000006c, 0x00060006 }, + { 0x00000001, 0x26a002a5, 0x00009c3c, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x02600005, 0x20000c20, 0x0000006c, 0x00000002 }, + { 0x00780001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000001 }, + { 0x00560001, 0x46420129, 0x02690624, 0x00000000 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000010 }, + { 0x00560001, 0x46520129, 0x0269062c, 0x00000000 }, + { 0x00780001, 0x26240129, 0x00ae0642, 0x00000000 }, + { 0x00800040, 0x24004629, 0x00b10624, 0x00650642 }, + { 0x00600040, 0x24002529, 0x00650400, 0x00650404 }, + { 0x00600040, 0x25202529, 0x00050400, 0x00050404 }, + { 0x00600040, 0x25702529, 0x00050408, 0x0005040c }, + { 0x00560001, 0x26240169, 0x00000000, 0x80808080 }, + { 0x00460001, 0x26240129, 0x028a0652, 0x00000000 }, + { 0x00560001, 0x46520129, 0x02690624, 0x00000000 }, + { 0x02400005, 0x20000c20, 0x0200006c, 0x00000001 }, + { 0x00560001, 0x46420169, 0x02000000, 0x80808080 }, + { 0x00460001, 0x46420129, 0x0069062c, 0x00000000 }, + { 0x00560001, 0x262c0129, 0x008a0642, 0x00000000 }, + { 0x00600040, 0x24004629, 0x008d0624, 0x00650652 }, + { 0x00600040, 0x24104629, 0x00650642, 0x008d062c }, + { 0x00600040, 0x24002529, 0x00650400, 0x00650404 }, + { 0x00600040, 0x25302529, 0x00050408, 0x0005040c }, + { 0x00600040, 0x25602529, 0x00050400, 0x00050404 }, + { 0x00a02040, 0x24003d2c, 0x00b10520, 0x00040004 }, + { 0x00a02008, 0x24003d89, 0x00b10400, 0x00030003 }, + { 0x00a02008, 0x24403d89, 0x00b10400, 0x00030003 }, + { 0x00a02040, 0x24003d2c, 0x00b10560, 0x00040004 }, + { 0x00a02008, 0x24803d89, 0x00b10400, 0x00030003 }, + { 0x00a02008, 0x24c03d89, 0x00b10400, 0x00030003 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x22080060, 0x00000000, 0x06440640 }, + { 0x00a02001, 0x24000229, 0x00059002, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x0005900a, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00059012, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x0005901a, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000003c }, + { 0x00a02001, 0x24000229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24400229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24800229, 0x00b10624, 0x00000000 }, + { 0x00a02001, 0x24c00229, 0x00b10624, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00600041, 0x26806e2d, 0x008d062c, 0x44332211 }, + { 0x00600041, 0x26906e2d, 0x008d0622, 0xffeeddcc }, + { 0x00600041, 0x26a06e2d, 0x00650652, 0x44332211 }, + { 0x00600041, 0x26b06e2d, 0x00650642, 0x00ffeedd }, + { 0x00200041, 0x26bc3e2d, 0x00450622, 0xfffcfffc }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0690 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0688 }, + { 0x00802040, 0x268035ad, 0x008d0680, 0x008d0684 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00200020 }, + { 0x00400048, 0x24003dac, 0x00a50680, 0x00220022 }, + { 0x00400008, 0x26e03d8d, 0x00690400, 0x00060006 }, + { 0x00800001, 0x240001ec, 0x00000000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x00050632, 0x00100010 }, + { 0x00800048, 0x26c03e2d, 0x0005065e, 0x00100010 }, + { 0x00800048, 0x272055ad, 0x000506e0, 0x00240044 }, + { 0x00600041, 0x268055ad, 0x000506e4, 0x00440044 }, + { 0x00600041, 0x26a055ad, 0x000506e4, 0x00440045 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050680 }, + { 0x80a02008, 0x44003d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050684 }, + { 0x80a02008, 0x44403d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x00050688 }, + { 0x80a02008, 0x44803d91, 0x00b10400, 0x00050005 }, + { 0x00a02040, 0x240035ac, 0x00b10720, 0x0005068c }, + { 0x80a02008, 0x44c03d91, 0x00b10400, 0x00050005 }, + { 0x00000040, 0x22063d8c, 0x00000204, 0x00100010 }, + { 0x80802040, 0x640045b1, 0x008d8880, 0x00cf0400 }, + { 0x80802040, 0x644045b1, 0x008d88a0, 0x00cf0440 }, + { 0x80802040, 0x648045b1, 0x008d88c0, 0x00cf0480 }, + { 0x80802040, 0x64c045b1, 0x008d88e0, 0x00cf04c0 }, + { 0x80802040, 0x640245b1, 0x008d8900, 0x00cf0402 }, + { 0x80802040, 0x644245b1, 0x008d8920, 0x00cf0442 }, + { 0x80802040, 0x648245b1, 0x008d8940, 0x00cf0482 }, + { 0x80802040, 0x64c245b1, 0x008d8960, 0x00cf04c2 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x0007000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x08004000 }, + { 0x00800001, 0x20400232, 0x00d20400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20420, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20440, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d20460, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d20480, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d204a0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d204c0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d204e0, 0x00000000 }, + { 0x01600031, 0x27a00021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00000001, 0x22080060, 0x00000000, 0x04400400 }, + { 0x00a02001, 0x20400232, 0x00d29000, 0x00000000 }, + { 0x00a02001, 0x20500232, 0x00d29020, 0x00000000 }, + { 0x00a02001, 0x20800232, 0x00d29080, 0x00000000 }, + { 0x00a02001, 0x20900232, 0x00d290a0, 0x00000000 }, + { 0x00a02001, 0x20c00232, 0x00d29100, 0x00000000 }, + { 0x00a02001, 0x20d00232, 0x00d29120, 0x00000000 }, + { 0x00a02001, 0x21000232, 0x00d29180, 0x00000000 }, + { 0x00a02001, 0x21100232, 0x00d291a0, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff04 }, + { 0x00000001, 0x220401ec, 0x00000000, 0x00800080 }, + { 0x00000001, 0x22080060, 0x00000000, 0x04100400 }, + { 0x00200008, 0x27006e2d, 0x0000006c, 0x00000040 }, + { 0x00400001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x272001a9, 0x00b10620, 0x00000000 }, + { 0x02600005, 0x20001c20, 0x0000006c, 0x00000008 }, + { 0x00110001, 0x27230231, 0x00000624, 0x00000000 }, + { 0x00600001, 0x27420231, 0x00cf0643, 0x00000000 }, + { 0x00110001, 0x27410231, 0x00000643, 0x00000000 }, + { 0x00240001, 0x27400231, 0x00000623, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000002 }, + { 0x00010001, 0x27400231, 0x02000624, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000001 }, + { 0x00110001, 0x27420231, 0x02000623, 0x00000000 }, + { 0x00000005, 0x26803e2d, 0x00000070, 0x000f000f }, + { 0x00000001, 0x270801ad, 0x00000700, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000084 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x02600005, 0x20001c20, 0x0200006c, 0x00000004 }, + { 0x00680001, 0x272c0231, 0x028d0634, 0x00000000 }, + { 0x00780001, 0x272c0231, 0x02000633, 0x00000000 }, + { 0x00400001, 0x27420231, 0x00a0040e, 0x00000000 }, + { 0x00400001, 0x27460231, 0x00a0044e, 0x00000000 }, + { 0x00200001, 0x27400231, 0x0000062b, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000002 }, + { 0x00010001, 0x27400231, 0x0200062c, 0x00000000 }, + { 0x00110001, 0x27410231, 0x0200040e, 0x00000000 }, + { 0x00000008, 0x26803e2d, 0x00000070, 0x00040004 }, + { 0x00200040, 0x22083d8c, 0x00450208, 0x00800080 }, + { 0x00000006, 0x27083dad, 0x00000700, 0x00010001 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00a02001, 0xb3800231, 0x00d20400, 0x00000000 }, + { 0x00a02001, 0xb3a00231, 0x00d20480, 0x00000000 }, + { 0x00a02001, 0xb3c00231, 0x00d20440, 0x00000000 }, + { 0x00a02001, 0xb3e00231, 0x00d204c0, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x00000060, 0x00000002 }, + { 0x01000005, 0x20001c20, 0x0200006c, 0x00000001 }, + { 0x01010005, 0x20001c20, 0x00000060, 0x00004000 }, + { 0x02010005, 0x20001c20, 0x02000060, 0x00000010 }, + { 0x00030001, 0x27230231, 0x0000065f, 0x00000000 }, + { 0x00030220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02600005, 0x20001c20, 0x0000006c, 0x00000001 }, + { 0x00460001, 0x27200231, 0x0069065c, 0x00000000 }, + { 0x00110001, 0x27230231, 0x00000458, 0x00000000 }, + { 0x00600001, 0x27240231, 0x008d0458, 0x00000000 }, + { 0x00600001, 0x272c0231, 0x008d0478, 0x00000000 }, + { 0x00600001, 0x27420231, 0x00cf0663, 0x00000000 }, + { 0x00000001, 0x27400231, 0x00000458, 0x00000000 }, + { 0x00010001, 0x27410231, 0x0000065f, 0x00000000 }, + { 0x00110001, 0x27410231, 0x00000663, 0x00000000 }, + { 0x02000005, 0x20001c20, 0x0200006c, 0x00000010 }, + { 0x00110001, 0x27420231, 0x0200065f, 0x00000000 }, + { 0x00000005, 0x26803e2d, 0x00000071, 0x000f000f }, + { 0x00000006, 0x27083dad, 0x00000702, 0x00020002 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00400001, 0x27200231, 0x0069045c, 0x00000000 }, + { 0x00600001, 0x27240231, 0x008d0478, 0x00000000 }, + { 0x00800001, 0x272c0231, 0x0000047f, 0x00000000 }, + { 0x00400001, 0x27420231, 0x00a0048e, 0x00000000 }, + { 0x00400001, 0x27460231, 0x00a004ce, 0x00000000 }, + { 0x00000001, 0x27400231, 0x00000478, 0x00000000 }, + { 0x00000001, 0x27410231, 0x0000045f, 0x00000000 }, + { 0x00000008, 0x26803e2d, 0x00000071, 0x00040004 }, + { 0x00200040, 0x22083d8c, 0x00450208, 0x00800080 }, + { 0x00000006, 0x27083dad, 0x00000700, 0x00030003 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00a02001, 0xb3800231, 0x00d20480, 0x00000000 }, + { 0x00a02001, 0xb3a00231, 0x00d20500, 0x00000000 }, + { 0x00a02001, 0xb3c00231, 0x00d204c0, 0x00000000 }, + { 0x00a02001, 0xb3e00231, 0x00d20540, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000100 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffe74 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00000001, 0x27340231, 0x00000733, 0x00000000 }, + { 0x00600001, 0x274a0231, 0x00000749, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b10723, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00010001 }, + { 0x00800008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x00b10740, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10741, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10742, 0x00010001 }, + { 0x00800008, 0x26a03d8d, 0x008d0400, 0x00020002 }, + { 0x00800001, 0x27240231, 0x00d206c0, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00ae06a2, 0x00000000 }, + { 0x00000001, 0x27230231, 0x000006a0, 0x00000000 }, + { 0x00000005, 0x220e3dac, 0x00000680, 0x000f000f }, + { 0x00000001, 0x26a00221, 0x00009c2c, 0x00000000 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x80800040, 0xd00045b1, 0x00b18800, 0x000d0724 }, + { 0x80800040, 0xd02045b1, 0x00b18820, 0x000d0724 }, + { 0x80800040, 0xd04045b1, 0x00b18840, 0x000d0724 }, + { 0x80800040, 0xd06045b1, 0x00b18860, 0x000d0724 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x80800040, 0xd00045b1, 0x00b18800, 0x002c0740 }, + { 0x80800040, 0xd02045b1, 0x00b18820, 0x002c0742 }, + { 0x80800040, 0xd04045b1, 0x00b18840, 0x002c0744 }, + { 0x80800040, 0xd06045b1, 0x00b18860, 0x002c0746 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x02802005, 0x20003da0, 0x00000708, 0x00020002 }, + { 0x02600005, 0x20003da0, 0x02000708, 0x00010001 }, + { 0x009a0001, 0x27200169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x27400231, 0x028d0724, 0x00000000 }, + { 0x00780001, 0x27240231, 0x008d0740, 0x00000000 }, + { 0x00600040, 0x25e04629, 0x008d0724, 0x008d0740 }, + { 0x00400040, 0x25e02529, 0x006905e0, 0x006905e8 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00800040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00800040, 0x24003d8c, 0x008d0400, 0x00080008 }, + { 0x00800008, 0x26803d8d, 0x008d0400, 0x00040004 }, + { 0x80800040, 0xd00035b1, 0x00b18800, 0x00b10680 }, + { 0x80800040, 0xd02035b1, 0x00b18820, 0x00b10680 }, + { 0x80800040, 0xd04035b1, 0x00b18840, 0x00b10680 }, + { 0x80800040, 0xd06035b1, 0x00b18860, 0x00b10680 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27340231, 0x008d0733, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b10726, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00010001 }, + { 0x00800008, 0x26803d8d, 0x00b10400, 0x00020002 }, + { 0x80800040, 0xd00035b1, 0x00b18800, 0x002d0680 }, + { 0x80800040, 0xd02035b1, 0x00b18820, 0x002d0684 }, + { 0x80800040, 0xd04035b1, 0x00b18840, 0x002d0688 }, + { 0x80800040, 0xd06035b1, 0x00b18860, 0x002d068c }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00cf06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a0, 0x00010001 }, + { 0x00800008, 0x26a03d8d, 0x00b10400, 0x00020002 }, + { 0x00200040, 0x220c3eac, 0x00450056, 0x06a006a0 }, + { 0x80800040, 0xd06035b1, 0x01ed9800, 0x00b18860 }, + { 0x80800040, 0xd04035b1, 0x01ed9804, 0x00b18840 }, + { 0x80800040, 0xd02035b1, 0x01ed9808, 0x00b18820 }, + { 0x80800040, 0xd00035b1, 0x01ed980c, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00cf06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b106a8, 0x00b106a9 }, + { 0x00800040, 0x24003e2c, 0x00b106a3, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00010001 }, + { 0x00800008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00600001, 0x26a00231, 0x00ae06c0, 0x00000000 }, + { 0x00600001, 0x46a60231, 0x00ae06cc, 0x00000000 }, + { 0x00600001, 0x46a70231, 0x00ae05c0, 0x00000000 }, + { 0x00200040, 0x220c3eac, 0x00450036, 0x06a006a0 }, + { 0x80800040, 0xd0603631, 0x01ee9800, 0x00b18860 }, + { 0x80800040, 0xd0403631, 0x01ee9802, 0x00b18840 }, + { 0x80800040, 0xd0203631, 0x01ee9804, 0x00b18820 }, + { 0x80800040, 0xd0003631, 0x01ee9806, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00400009, 0x26c05421, 0x00000744, 0x00690050 }, + { 0x00400009, 0x26d05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26a00231, 0x00ab06c3, 0x00000000 }, + { 0x00800001, 0x26a80231, 0x00b10723, 0x00000000 }, + { 0x00800040, 0x24003e2c, 0x00b106a2, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a1, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b106a0, 0x00010001 }, + { 0x00800008, 0x25c03d89, 0x008d0400, 0x00020002 }, + { 0x00800042, 0x26a0462d, 0x00b106a0, 0x00b106a1 }, + { 0x00600001, 0x46a10231, 0x00ae05c0, 0x00000000 }, + { 0x00600001, 0x26b00231, 0x00ae05d0, 0x00000000 }, + { 0x00200040, 0x220c3eac, 0x00450056, 0x06a006a0 }, + { 0x80800040, 0xd0603631, 0x01ed9800, 0x00b18860 }, + { 0x80800040, 0xd0403631, 0x01ed9804, 0x00b18840 }, + { 0x80800040, 0xd0203631, 0x01ed9808, 0x00b18820 }, + { 0x80800040, 0xd0003631, 0x01ed980c, 0x00b18800 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b10724, 0x00b10725 }, + { 0x00800040, 0x24003e2c, 0x00b10726, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10725, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10724, 0x00010001 }, + { 0x00800008, 0x25e03d89, 0x002d0400, 0x00020002 }, + { 0x80800040, 0xd0003531, 0x00ad05c0, 0x00b18800 }, + { 0x80800040, 0xd0203531, 0x00ad05c2, 0x00b18820 }, + { 0x80800040, 0xd0403531, 0x00ad05c4, 0x00b18840 }, + { 0x80800040, 0xd0603531, 0x00ad05c6, 0x00b18860 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27480231, 0x00000747, 0x00000000 }, + { 0x00800042, 0x25c04629, 0x00b10740, 0x00b10741 }, + { 0x00800040, 0x24003e2c, 0x00b10742, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10741, 0x00020002 }, + { 0x00800048, 0x24003e2c, 0x00b10740, 0x00010001 }, + { 0x00800008, 0x25e03d89, 0x002d0400, 0x00020002 }, + { 0x00800001, 0x45c10231, 0x00d205e0, 0x00000000 }, + { 0x80800040, 0xd0003631, 0x004d05c0, 0x00b18800 }, + { 0x80800040, 0xd0203631, 0x004d05c4, 0x00b18820 }, + { 0x80800040, 0xd0403631, 0x004d05c8, 0x00b18840 }, + { 0x80800040, 0xd0603631, 0x004d05cc, 0x00b18860 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00800001, 0x20400232, 0x00cd0400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00cd0408, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00cd0410, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00cd0418, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00cd0440, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00cd0448, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00cd0450, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00cd0458, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00cd0480, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00cd0488, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00cd0490, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00cd0498, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00cd04c0, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00cd04c8, 0x00000000 }, + { 0x00800001, 0x21200232, 0x00cd04d0, 0x00000000 }, + { 0x00800001, 0x21300232, 0x00cd04d8, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffd34 }, + { 0x00000001, 0x220401ec, 0x00000000, 0x00800080 }, + { 0x00000001, 0x220601ec, 0x00000000, 0x04000400 }, + { 0x00200008, 0x27006e2d, 0x0000006c, 0x00000040 }, + { 0x02600005, 0x20003e20, 0x0000006c, 0x00040004 }, + { 0x00780001, 0x26340231, 0x00000633, 0x00000000 }, + { 0x00800001, 0x27200231, 0x00b10620, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00cf0643, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240070, 0x00004040 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000700, 0x00010001 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c26, 0x00000000 }, + { 0x00400001, 0x27440231, 0x00808c66, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240072, 0x00004040 }, + { 0x00000040, 0x22063d8c, 0x00000206, 0x00800080 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000702, 0x00020002 }, + { 0x00800001, 0xaf800231, 0x00d28f80, 0x00000000 }, + { 0x00800001, 0xaf900231, 0x00d28fa0, 0x00000000 }, + { 0x00800001, 0xafc00231, 0x00d28fc0, 0x00000000 }, + { 0x00800001, 0xafd00231, 0x00d28fe0, 0x00000000 }, + { 0x00800001, 0xafa00231, 0x00d28c00, 0x00000000 }, + { 0x00800001, 0xafb00231, 0x00d28c20, 0x00000000 }, + { 0x00800001, 0xafe00231, 0x00d28c40, 0x00000000 }, + { 0x00800001, 0xaff00231, 0x00d28c60, 0x00000000 }, + { 0x00400001, 0x27200231, 0x0069065c, 0x00000000 }, + { 0x00600001, 0x27240231, 0x00a98fcc, 0x00000000 }, + { 0x00600001, 0x272c0231, 0x00a98fec, 0x00000000 }, + { 0x00600001, 0x27340231, 0x00008fff, 0x00000000 }, + { 0x00800001, 0x2620012d, 0x00b10720, 0x00000000 }, + { 0x00600001, 0x27400231, 0x00cf0663, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240074, 0x00004040 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00000040, 0x22043d8c, 0x00000204, 0x00800080 }, + { 0x00000006, 0x27003dad, 0x00000700, 0x00010001 }, + { 0x00800001, 0x27200231, 0x00b10628, 0x00000000 }, + { 0x00600001, 0x27300231, 0x008d0638, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c26, 0x00000000 }, + { 0x00400001, 0x27440231, 0x00808c66, 0x00000000 }, + { 0x00400008, 0x26806e2d, 0x00240076, 0x00004040 }, + { 0x00000040, 0x22063d8c, 0x00000206, 0x00800080 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800001, 0xaf800231, 0x00d28f80, 0x00000000 }, + { 0x00800001, 0xaf900231, 0x00d28fa0, 0x00000000 }, + { 0x00800001, 0xafc00231, 0x00d28fc0, 0x00000000 }, + { 0x00800001, 0xafd00231, 0x00d28fe0, 0x00000000 }, + { 0x00800001, 0xafa00231, 0x00d28c00, 0x00000000 }, + { 0x00800001, 0xafb00231, 0x00d28c20, 0x00000000 }, + { 0x00800001, 0xafe00231, 0x00d28c40, 0x00000000 }, + { 0x00800001, 0xaff00231, 0x00d28c60, 0x00000000 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e0 }, + { 0x00000040, 0x27e01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffcce }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00600001, 0x27800231, 0x008d0740, 0x00000000 }, + { 0x00400005, 0x22083dac, 0x00690680, 0x000f000f }, + { 0x00400040, 0x26a04625, 0x01e09020, 0x00690058 }, + { 0x00000001, 0x26d001ad, 0x00000700, 0x00000000 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a0 }, + { 0x80600040, 0xcc0035b1, 0x00898800, 0x008d0760 }, + { 0x80600040, 0xcc1035b1, 0x00898820, 0x008d0770 }, + { 0x00800001, 0x27200231, 0x008d0724, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c06, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00010001 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a4 }, + { 0x80600040, 0xcc2035b1, 0x00898808, 0x008d0760 }, + { 0x80600040, 0xcc3035b1, 0x00898828, 0x008d0770 }, + { 0x00000001, 0x27230231, 0x00000783, 0x00000000 }, + { 0x00400001, 0x27240231, 0x008a8c18, 0x00000000 }, + { 0x00400001, 0x27280231, 0x008a8c38, 0x00000000 }, + { 0x00400001, 0x272c0231, 0x00008c3e, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00690784, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00020002 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006a8 }, + { 0x80600040, 0xcc4035b1, 0x00898840, 0x008d0760 }, + { 0x80600040, 0xcc5035b1, 0x00898860, 0x008d0770 }, + { 0x00800001, 0x27200231, 0x008d0724, 0x00000000 }, + { 0x00600001, 0x27280231, 0x00000727, 0x00000000 }, + { 0x00400001, 0x27400231, 0x00808c46, 0x00000000 }, + { 0x00000006, 0x26d03dad, 0x00000700, 0x00030003 }, + { 0x00000040, 0x27e41c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001400, 0x00001400, 0x000006ac }, + { 0x80600040, 0xcc6035b1, 0x00898848, 0x008d0760 }, + { 0x80600040, 0xcc7035b1, 0x00898868, 0x008d0770 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x00800001, 0x2760022d, 0x00090724, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00800001, 0x2760022d, 0x00280740, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x02802005, 0x20003da0, 0x000006d0, 0x00020002 }, + { 0x02802005, 0x20003da0, 0x020006d0, 0x00010001 }, + { 0x009a0001, 0x27200169, 0x00000000, 0x80808080 }, + { 0x00780001, 0x27400231, 0x028d0724, 0x00000000 }, + { 0x00780001, 0x27240231, 0x008d0740, 0x00000000 }, + { 0x00400040, 0x25e04629, 0x00690724, 0x00690740 }, + { 0x00200040, 0x25e02529, 0x004505e0, 0x004505e4 }, + { 0x00800040, 0x2400252c, 0x000005e0, 0x000005e2 }, + { 0x00800040, 0x24003d8c, 0x008d0400, 0x00040004 }, + { 0x00800008, 0x27603d8d, 0x008d0400, 0x00030003 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600001, 0x26c00231, 0x008d0724, 0x00000000 }, + { 0x00400001, 0x26c80231, 0x0069072b, 0x00000000 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d06c0, 0x00010001 }, + { 0x00800008, 0x27603d2d, 0x002905e0, 0x00020002 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x26c03e2d, 0x008d06c0, 0x00010001 }, + { 0x00400040, 0x22083eac, 0x00690054, 0x06c006c0 }, + { 0x00800008, 0x27603dad, 0x01e99000, 0x00020002 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600042, 0x25c04629, 0x008d06c4, 0x008d06c5 }, + { 0x00600040, 0x24003e2c, 0x008d06c3, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00010001 }, + { 0x00600008, 0x26c03d8d, 0x008d0400, 0x00020002 }, + { 0x00400001, 0x46c401ad, 0x006906c4, 0x00000000 }, + { 0x00400001, 0x46c6012d, 0x006905c0, 0x00000000 }, + { 0x00400040, 0x22083eac, 0x00690054, 0x06c006c0 }, + { 0x00800001, 0x276001ad, 0x01ea9000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00400009, 0x26e05421, 0x00000740, 0x00690050 }, + { 0x00600001, 0x26c40231, 0x008d0723, 0x00000000 }, + { 0x00400001, 0x26c00231, 0x00ab06e3, 0x00000000 }, + { 0x00600042, 0x25c04629, 0x008d06c0, 0x008d06c1 }, + { 0x00600040, 0x24003e2c, 0x008d06c2, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d06c1, 0x00020002 }, + { 0x00600048, 0x26e03e2d, 0x008d06c0, 0x00010001 }, + { 0x00400008, 0x46c23dad, 0x006906e0, 0x00020002 }, + { 0x00200008, 0x26d03dad, 0x004506e8, 0x00020002 }, + { 0x00400001, 0x46c0012d, 0x006905c0, 0x00000000 }, + { 0x00400009, 0x22083eac, 0x00690054, 0x00010001 }, + { 0x00400040, 0x22083d8c, 0x00690208, 0x06c006c0 }, + { 0x00800001, 0x276001ad, 0x01e99000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600042, 0x45c04629, 0x008d0724, 0x008d0725 }, + { 0x00600040, 0x24003e2c, 0x008d0726, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d0725, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d0724, 0x00010001 }, + { 0x00600008, 0x45c23d29, 0x008d05e0, 0x00020002 }, + { 0x00800001, 0x2760012d, 0x002a05c0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00600001, 0x27440231, 0x00000743, 0x00000000 }, + { 0x00600042, 0x45c04629, 0x008d0740, 0x008d0741 }, + { 0x00600040, 0x24003e2c, 0x008d0742, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x008d0741, 0x00020002 }, + { 0x00600048, 0x25e03e29, 0x008d0740, 0x00010001 }, + { 0x00600008, 0x45c23d29, 0x008d05e0, 0x00020002 }, + { 0x00800001, 0x2760012d, 0x004905c0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007e4, 0x00000000 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200801, 0x27c001a1, 0x004507fa, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00000200, 0x0ff04000 }, + { 0x00800001, 0x20400232, 0x00a90400, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00a90404, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00a90408, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00a9040c, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00a90440, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00a90444, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00a90448, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00a9044c, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00a90480, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00a90484, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00a90488, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00a9048c, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00a904c0, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00a904c4, 0x00000000 }, + { 0x00800001, 0x21200232, 0x00a904c8, 0x00000000 }, + { 0x00800001, 0x21300232, 0x00a904cc, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000001, 0x34000020, 0x000007e0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0000, 0x00000000 }, + { 0x00200009, 0x27fa3e29, 0x00450064, 0x00040004 }, + { 0x00000401, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00200809, 0x27c03e21, 0x00450064, 0x00040004 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a000 }, + { 0x00a02401, 0x20400232, 0x00b10080, 0x00000000 }, + { 0x00a02801, 0x20500232, 0x00b10090, 0x00000000 }, + { 0x00a02401, 0x20800232, 0x00b100c0, 0x00000000 }, + { 0x00a02801, 0x20900232, 0x00b100d0, 0x00000000 }, + { 0x00a02401, 0x20c00232, 0x00b10100, 0x00000000 }, + { 0x00a02801, 0x20d00232, 0x00b10110, 0x00000000 }, + { 0x00a02401, 0x21000232, 0x00b10140, 0x00000000 }, + { 0x00a02801, 0x21100232, 0x00b10150, 0x00000000 }, + { 0x01600031, 0x27800021, 0x508d07c0, 0x00000200 }, + { 0x00000401, 0x20280062, 0x00000000, 0x0007000f }, + { 0x0000080c, 0x20243c22, 0x000007c4, 0x00010001 }, + { 0x00000040, 0x22001c00, 0x00000200, 0xf8000001 }, + { 0x00800001, 0x40400232, 0x00b10180, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00b101c0, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00b10190, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00b101d0, 0x00000000 }, + { 0x00800001, 0x40800232, 0x00b101a0, 0x00000000 }, + { 0x00800001, 0x40810232, 0x00b101e0, 0x00000000 }, + { 0x00800001, 0x40a00232, 0x00b101b0, 0x00000000 }, + { 0x00800001, 0x40a10232, 0x00b101f0, 0x00000000 }, + { 0x01600031, 0x27a00001, 0x508d0000, 0x00000200 }, + { 0x00000001, 0x27800021, 0x00000780, 0x00000000 }, + { 0x00000001, 0x27a00021, 0x000007a0, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000002fe }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x20780d21, 0x0000045a, 0x0208a002 }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001be }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000126 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee6 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffcf8 }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc36 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21401c21, 0x508d0040, 0x1218a000 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21601c21, 0x508d0040, 0x0a18a001 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x00000005, 0x203e2e29, 0x00000063, 0x00010001 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000316 }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x00010005, 0x245c3e2d, 0x02008800, 0x00800080 }, + { 0x00110005, 0x245c3e2d, 0x02008804, 0x00800080 }, + { 0x00000009, 0x245c3dad, 0x0000045c, 0x00010001 }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x240035ac, 0x0000003e, 0x0000045c }, + { 0x01000010, 0x20003d8c, 0x00210400, 0x00010001 }, + { 0x01000010, 0x20003d8c, 0x02210400, 0x01000100 }, + { 0x00000001, 0x203c01ed, 0x00000000, 0x00000000 }, + { 0x00010001, 0x203c01ed, 0x00000000, 0x00020002 }, + { 0x00010001, 0x203c01ed, 0x02000000, 0xfffefffe }, + { 0x00000040, 0x20780d21, 0x0000045a, 0x0208e602 }, + { 0x00000040, 0x20782421, 0x00000078, 0x0000045c }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001c0 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000128 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee4 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffce0 }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc1e }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a600 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21400021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x0a18a601 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21600021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0000, 0x00000000 }, + { 0x00000005, 0x20203e2d, 0x00000061, 0x001f001f }, + { 0x00200009, 0x20643e2d, 0x00450064, 0x00040004 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000020, 0x00160016 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x01200010, 0x20003e2c, 0x0200006c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000024 }, + { 0x00800009, 0x25403dad, 0x00050064, 0x00020002 }, + { 0x00000001, 0x203a01ed, 0x00000000, 0x00180018 }, + { 0x00200040, 0x45483dad, 0x00660548, 0x00100010 }, + { 0x00200040, 0x45523dad, 0x00660552, 0x00100010 }, + { 0x00400040, 0x25583dad, 0x00690558, 0x00100010 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0x00200020 }, + { 0x00800040, 0x20a035ad, 0x00b100a0, 0x00b10540 }, + { 0x00600040, 0x45423dad, 0x00ae0542, 0x00200020 }, + { 0x00800040, 0x20e035ad, 0x00b100e0, 0x00b10540 }, + { 0x00600040, 0x45403dad, 0x00ae0540, 0xffe0ffe0 }, + { 0x00800040, 0x20c035ad, 0x00b100c0, 0x00b10540 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x06600010, 0x20003dac, 0x02000020, 0x00030003 }, + { 0x00000001, 0x206c0171, 0x00000000, 0x00000000 }, + { 0x00610001, 0x208000a5, 0x02050080, 0x00000000 }, + { 0x00610001, 0x212000a5, 0x02090100, 0x00000000 }, + { 0x00410001, 0x211000a5, 0x02690100, 0x00000000 }, + { 0x00200009, 0x25403dad, 0x00450064, 0x00020002 }, + { 0x00800040, 0x208035ad, 0x00b10080, 0x00050540 }, + { 0x00200040, 0x40883dad, 0x00660088, 0x00200020 }, + { 0x00200040, 0x40923dad, 0x00660092, 0x00200020 }, + { 0x00400040, 0x20983dad, 0x00690098, 0x00200020 }, + { 0x00200401, 0x22080060, 0x00000000, 0x03400140 }, + { 0x00000c01, 0x220c0060, 0x00000000, 0x04400080 }, + { 0x00000801, 0x22040060, 0x00000000, 0x01000070 }, + { 0x02000005, 0x20002e28, 0x00000061, 0x00400040 }, + { 0x00010005, 0x203e2e29, 0x00000063, 0x00010001 }, + { 0x00110001, 0x203e0169, 0x00000000, 0x00030003 }, + { 0x00000001, 0x20200169, 0x00000000, 0x00000000 }, + { 0x0000000c, 0x2458262d, 0x0000006d, 0x00000020 }, + { 0x00000001, 0x210e0169, 0x00000000, 0x00010001 }, + { 0x00000005, 0x24583dad, 0x00000458, 0x00030003 }, + { 0x01000010, 0x200035ac, 0x0000010e, 0x00000458 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000031a }, + { 0x01000010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00010401, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00010805, 0x245a3e2d, 0x02008800, 0x007f007f }, + { 0x00110401, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00110805, 0x245a3e2d, 0x02008804, 0x007f007f }, + { 0x00010005, 0x245c3e2d, 0x02008800, 0x00800080 }, + { 0x00110005, 0x245c3e2d, 0x02008804, 0x00800080 }, + { 0x00000009, 0x245c3dad, 0x0000045c, 0x00010001 }, + { 0x0000000c, 0x211e362d, 0x0000006c, 0x00000020 }, + { 0x00000040, 0x240035ac, 0x0000003e, 0x0000045c }, + { 0x01000010, 0x20003d8c, 0x00210400, 0x00010001 }, + { 0x01000010, 0x20003d8c, 0x02210400, 0x01000100 }, + { 0x00000001, 0x203c01ed, 0x00000000, 0x00000000 }, + { 0x00010001, 0x203c01ed, 0x00000000, 0x00020002 }, + { 0x00010001, 0x203c01ed, 0x02000000, 0xfffefffe }, + { 0x02000005, 0x20002e28, 0x00000061, 0x00400040 }, + { 0x00010040, 0x244c0d21, 0x0000045a, 0x0208e602 }, + { 0x00110040, 0x20780d21, 0x0000045a, 0x0208a002 }, + { 0x00010040, 0x20782421, 0x0000044c, 0x0000045c }, + { 0x02000005, 0x20003dac, 0x0200011e, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000001c0 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00700000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c000c }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x0007000c }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00400000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00110040, 0x20441da5, 0x02000442, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x000c0007 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00070007 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x01600006, 0x20003dac, 0x0000044a, 0x00000000 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00010040, 0x22000c20, 0x00000078, 0x00200010 }, + { 0x00110040, 0x22000c20, 0x00000078, 0x00300010 }, + { 0x00010001, 0x20480061, 0x00000000, 0x00030009 }, + { 0x00110001, 0x20480061, 0x00000000, 0x00040009 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x00009800, 0x00030003 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00600001, 0x26220231, 0x008d05c0, 0x00000000 }, + { 0x00600401, 0x26120231, 0x008d05b8, 0x00000000 }, + { 0x00600801, 0x26020231, 0x008d05b0, 0x00000000 }, + { 0x00600401, 0x25f20231, 0x008d05a8, 0x00000000 }, + { 0x00600801, 0x25e20231, 0x008d05a0, 0x00000000 }, + { 0x00600401, 0x25d20231, 0x008d0598, 0x00000000 }, + { 0x00600801, 0x25c20231, 0x008d0590, 0x00000000 }, + { 0x00600401, 0x25b20231, 0x008d0588, 0x00000000 }, + { 0x00600801, 0x25a20231, 0x008d0580, 0x00000000 }, + { 0x00600401, 0x25920231, 0x008d0578, 0x00000000 }, + { 0x00600801, 0x25820231, 0x008d0570, 0x00000000 }, + { 0x00600001, 0x25720231, 0x008d0568, 0x00000000 }, + { 0x00600001, 0x25620231, 0x008d0560, 0x00000000 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00810001, 0xbc000229, 0x02ad8000, 0x00000000 }, + { 0x00810001, 0xbc200229, 0x02ad8020, 0x00000000 }, + { 0x00810001, 0xbc400229, 0x02ad8040, 0x00000000 }, + { 0x00810001, 0xbc600229, 0x02ad8060, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000012a }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000066 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000064 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04a00480 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00a02040, 0x2400462c, 0x00ad8000, 0x00ad8005 }, + { 0x00a02048, 0x24003e2c, 0x00ad8001, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8002, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8003, 0x00140014 }, + { 0x00a02048, 0xb8003e2d, 0x00ad8004, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8040, 0x00ad8045 }, + { 0x00a02048, 0x24003e2c, 0x00ad8041, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8042, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8043, 0x00140014 }, + { 0x00a02048, 0xb8403e2d, 0x00ad8044, 0xfffbfffb }, + { 0x00a02040, 0x2400462c, 0x00ad8080, 0x00ad8085 }, + { 0x00a02048, 0x24003e2c, 0x00ad8081, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8082, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8083, 0x00140014 }, + { 0x00a02048, 0xb8803e2d, 0x00ad8084, 0xfffbfffb }, + { 0x00600040, 0x2400462c, 0x008d80c0, 0x008d80c5 }, + { 0x00600048, 0x24003e2c, 0x008d80c1, 0xfffbfffb }, + { 0x00600048, 0x24003e2c, 0x008d80c2, 0x00140014 }, + { 0x00600048, 0x24003e2c, 0x008d80c3, 0x00140014 }, + { 0x00600048, 0xb8c03e2d, 0x008d80c4, 0xfffbfffb }, + { 0x00000401, 0x22000060, 0x00000000, 0x04a00480 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04a00490 }, + { 0x00010802, 0x220c2d28, 0x00000454, 0x04800480 }, + { 0x00a02040, 0x24003dac, 0x00b18000, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8800, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8820, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18020, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8820, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8840, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18040, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x000a000a }, + { 0x00a02040, 0x24003dac, 0x00b18040, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x01ed8840, 0xfffbfffb }, + { 0x00800048, 0x24203dac, 0x01ed8860, 0xfffbfffb }, + { 0x00a02048, 0x24003dac, 0x00b18060, 0x00140014 }, + { 0x00800048, 0x24003dac, 0x01ed8860, 0x00140014 }, + { 0x00800048, 0x24203dac, 0x01ed8880, 0x00140014 }, + { 0x00a02048, 0x24003dac, 0x00b18080, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed8880, 0x00010001 }, + { 0x00800048, 0x24203dac, 0x01ed88a0, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x000a000a }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x000000b4 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000004c }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000004a }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010002, 0x220c2d28, 0x02000454, 0x04800480 }, + { 0x00800040, 0x24003e2c, 0x01ed8000, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8001, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8021, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8002, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8022, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8003, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8023, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8004, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8024, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8005, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8025, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00800040, 0x24003e2c, 0x01ed8040, 0x00100010 }, + { 0x00800040, 0x24203e2c, 0x01ed8060, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8041, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8061, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8042, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8062, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8043, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8063, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8044, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8064, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8045, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8065, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00200401, 0x22000128, 0x0066044c, 0x00000000 }, + { 0x00200c01, 0x22040128, 0x0045044e, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x03400010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220c0168, 0x02000000, 0x04800480 }, + { 0x00a02040, 0x24003e2c, 0x00ad83e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8be0, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8800, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8800, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8820, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0x00010001 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8203d91, 0x00b10420, 0x00050005 }, + { 0x00a02040, 0x24003e2c, 0x00ad8020, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01ed8820, 0xfffbfffb }, + { 0x00800048, 0x24203e2c, 0x01ed8840, 0xfffbfffb }, + { 0x00a02048, 0x24003e2c, 0x00ad8040, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01ed8840, 0x00140014 }, + { 0x00800048, 0x24203e2c, 0x01ed8860, 0x00140014 }, + { 0x00a02048, 0x24003e2c, 0x00ad8060, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01ed8860, 0x00010001 }, + { 0x00800048, 0x24203e2c, 0x01ed8880, 0x00010001 }, + { 0x8080000c, 0xd8403d91, 0x00b10400, 0x00050005 }, + { 0x8080100c, 0xd8603d91, 0x00b10420, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001c }, + { 0x00200401, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00000801, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x01200010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01200010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00210040, 0x22002d08, 0x00450200, 0x00010001 }, + { 0x00210040, 0x22002d08, 0x02450200, 0x00100010 }, + { 0x00800001, 0xb8000229, 0x01ed8000, 0x00000000 }, + { 0x00800001, 0xb8200229, 0x01ed8020, 0x00000000 }, + { 0x00800001, 0xb8400229, 0x01ed8040, 0x00000000 }, + { 0x00800001, 0xb8600229, 0x01ed8060, 0x00000000 }, + { 0x80800042, 0xd8004631, 0x00d29800, 0x00d20480 }, + { 0x80800042, 0xd8204631, 0x00d29820, 0x00d204a0 }, + { 0x80800042, 0xd8404631, 0x00d29840, 0x00d204c0 }, + { 0x80800042, 0xd8604631, 0x00d29860, 0x00d204e0 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000c01, 0x220201e8, 0x00000000, 0x07100710 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00200040, 0x244c3d09, 0x00450200, 0x00100010 }, + { 0x00800041, 0x24002628, 0x00ad8000, 0x00000540 }, + { 0x00800041, 0x24202628, 0x00ad8020, 0x00000540 }, + { 0x00800048, 0x24002628, 0x00ad8002, 0x00000542 }, + { 0x00800048, 0x24202628, 0x00ad8022, 0x00000542 }, + { 0x00200001, 0x22000128, 0x0045044c, 0x00000000 }, + { 0x00800048, 0x24002628, 0x01ed8000, 0x00000544 }, + { 0x00800048, 0x24202628, 0x01ed8020, 0x00000544 }, + { 0x00800048, 0xbc002629, 0x01ed8002, 0x00000546 }, + { 0x00801048, 0xbc202629, 0x01ed8022, 0x00000546 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000128 }, + { 0x00000001, 0x20220169, 0x00000000, 0x00040004 }, + { 0x00200005, 0x24443dad, 0x00459800, 0x00030003 }, + { 0x0020000c, 0x24403dad, 0x00459800, 0x00020002 }, + { 0x01600006, 0x20003dac, 0x02000446, 0x00000000 }, + { 0x00010040, 0x22000c20, 0x02000078, 0x00200000 }, + { 0x00110040, 0x22000c20, 0x02000078, 0x00500000 }, + { 0x00310040, 0x20401da5, 0x02450440, 0xfffffffe }, + { 0x00110001, 0x20480061, 0x02000000, 0x00080008 }, + { 0x00010040, 0x20401da5, 0x02000440, 0xfffffffe }, + { 0x00010001, 0x204401a5, 0x02000442, 0x00000000 }, + { 0x00010001, 0x20480061, 0x02000000, 0x00030008 }, + { 0x01600031, 0x25600021, 0x408d0040, 0x00000200 }, + { 0x00000040, 0xb80235ad, 0x00009802, 0x0000003c }, + { 0x00000040, 0x22000c20, 0x00000078, 0x00100010 }, + { 0x0020040c, 0x24403dad, 0x00459800, 0x00030003 }, + { 0x00200805, 0x24483dad, 0x00459800, 0x00070007 }, + { 0x00200001, 0x204001a5, 0x00450440, 0x00000000 }, + { 0x00000009, 0x20403ca5, 0x00000040, 0x00010001 }, + { 0x00000001, 0x20480061, 0x00000000, 0x00020005 }, + { 0x02600031, 0x27000021, 0x408d0040, 0x00000200 }, + { 0x00110001, 0x220001ec, 0x02000000, 0x05820582 }, + { 0x00010001, 0x220001ec, 0x02000000, 0x05620562 }, + { 0x00000001, 0x220e0128, 0x00000454, 0x00000000 }, + { 0x01800006, 0x200035ac, 0x02000446, 0x00000444 }, + { 0x00410001, 0xbc000229, 0x02698000, 0x00000000 }, + { 0x00410001, 0xbc100229, 0x02698010, 0x00000000 }, + { 0x00410001, 0xbc200229, 0x02698020, 0x00000000 }, + { 0x00410001, 0xbc300229, 0x02698030, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000be }, + { 0x00600001, 0x2024018d, 0x008d0200, 0x00000000 }, + { 0x01000041, 0x245e35ad, 0x00000446, 0x00000444 }, + { 0x02000005, 0x20003db0, 0x0200045e, 0x00010001 }, + { 0x00000040, 0x22022d08, 0x00000200, 0x00100010 }, + { 0x00200040, 0x22042d08, 0x00450200, 0x00200020 }, + { 0x00400001, 0x244c0109, 0x00690200, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000042 }, + { 0x00000040, 0x22003d08, 0x00000200, 0xffdeffde }, + { 0x00000440, 0x22023d08, 0x00000202, 0xffeeffee }, + { 0x00000801, 0x220c0060, 0x00000000, 0x04d004c0 }, + { 0x01000010, 0x20003db0, 0x0000045e, 0x00040004 }, + { 0x00802040, 0x2400462c, 0x00a98000, 0x00a98005 }, + { 0x00802048, 0x24003e2c, 0x00a98001, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98002, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98003, 0x00140014 }, + { 0x00802048, 0xb8003e2d, 0x00a98004, 0xfffbfffb }, + { 0x00802040, 0x2400462c, 0x00a98040, 0x00a98045 }, + { 0x00802048, 0x24003e2c, 0x00a98041, 0xfffbfffb }, + { 0x00802048, 0x24003e2c, 0x00a98042, 0x00140014 }, + { 0x00802048, 0x24003e2c, 0x00a98043, 0x00140014 }, + { 0x00802048, 0xb8203e2d, 0x00a98044, 0xfffbfffb }, + { 0x00400040, 0x2400462c, 0x00698080, 0x00698085 }, + { 0x00400048, 0x24003e2c, 0x00698081, 0xfffbfffb }, + { 0x00400048, 0x24003e2c, 0x00698082, 0x00140014 }, + { 0x00400048, 0x24003e2c, 0x00698083, 0x00140014 }, + { 0x00400048, 0xb8403e2d, 0x00698084, 0xfffbfffb }, + { 0x00000401, 0x220c0060, 0x00000000, 0x04e004d0 }, + { 0x00000c01, 0x22000060, 0x00000000, 0x04d004c8 }, + { 0x00000c01, 0x22040060, 0x00000000, 0x04e004d8 }, + { 0x00000801, 0x22080060, 0x00000000, 0x04f004e8 }, + { 0x00800040, 0x24003dac, 0x00b104c0, 0x02000200 }, + { 0x00800048, 0x24003dac, 0x00b104e0, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01ed9800, 0x00140014 }, + { 0x00010001, 0x220c0168, 0x00000000, 0x05400540 }, + { 0x00110001, 0x220c0168, 0x00000000, 0x04c004c0 }, + { 0x00800048, 0x24003dac, 0x01e98000, 0xfffbfffb }, + { 0x00800048, 0x24003dac, 0x01e98020, 0x00010001 }, + { 0x00800048, 0x24003dac, 0x01e98800, 0x00140014 }, + { 0x8080000c, 0xd8003d91, 0x00b10400, 0x000a000a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20003db0, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000022 }, + { 0x00400040, 0x22003d28, 0x0069044c, 0xfffefffe }, + { 0x03400010, 0x20003dac, 0x00000446, 0x00020002 }, + { 0x01000010, 0x20003db0, 0x02000444, 0x00020002 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00100010 }, + { 0x01000010, 0x20003dac, 0x00000446, 0x00000000 }, + { 0x00010001, 0x220e0168, 0x02000000, 0x05400540 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x00800040, 0x24003e2c, 0x01e98000, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98001, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98002, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98003, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98004, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e98005, 0x00010001 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x01000010, 0x20003db0, 0x00000446, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x03600010, 0x20003dac, 0x02000444, 0x00020002 }, + { 0x00400401, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x00400840, 0x22083d2c, 0x0069044c, 0x00100010 }, + { 0x00610040, 0x22002d08, 0x02690200, 0x00010001 }, + { 0x01000010, 0x20003dac, 0x00000444, 0x00000000 }, + { 0x01000010, 0x20003db0, 0x02000446, 0x00020002 }, + { 0x00800040, 0x24003e2c, 0x01e983e0, 0x00100010 }, + { 0x00800048, 0x24003e2c, 0x01e98000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e98020, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e993e0, 0xfffbfffb }, + { 0x00800048, 0x24003e2c, 0x01e99000, 0x00140014 }, + { 0x00800048, 0x24003e2c, 0x01e99020, 0x00010001 }, + { 0x00000001, 0x220e0168, 0x00000000, 0x05400540 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00110001, 0x220e0168, 0x02000000, 0x04c004c0 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00050005 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x00400001, 0x22000128, 0x0069044c, 0x00000000 }, + { 0x01400010, 0x20003dac, 0x00000444, 0x00030003 }, + { 0x01400010, 0x20003dac, 0x02000446, 0x00030003 }, + { 0x00410040, 0x22002d08, 0x00690200, 0x00010001 }, + { 0x00410040, 0x22002d08, 0x02690200, 0x00100010 }, + { 0x00800001, 0x25400229, 0x01e98000, 0x00000000 }, + { 0x80800042, 0x45404631, 0x00d20540, 0x00d204c0 }, + { 0x00000001, 0x220c0128, 0x00000454, 0x00000000 }, + { 0x00400001, 0xd8000231, 0x008a0540, 0x00000000 }, + { 0x00400001, 0xd8100231, 0x008a0548, 0x00000000 }, + { 0x00400001, 0xd8200231, 0x008a0550, 0x00000000 }, + { 0x00400001, 0xd8300231, 0x008a0558, 0x00000000 }, + { 0x00600001, 0x220001ac, 0x008d0024, 0x00000000 }, + { 0x00200040, 0x244c3dad, 0x00450448, 0xfff8fff8 }, + { 0x00000401, 0x220001ec, 0x00000000, 0x07000700 }, + { 0x00000801, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00000441, 0x254635ad, 0x00000448, 0x0000044a }, + { 0x00000c41, 0x254025ad, 0x0000444c, 0x0000444e }, + { 0x00000c41, 0x254225ad, 0x00000448, 0x0000444e }, + { 0x00000841, 0x254435ad, 0x0000444c, 0x0000044a }, + { 0x00600041, 0x24002628, 0x00898000, 0x00000540 }, + { 0x00600048, 0x24002628, 0x00898002, 0x00000542 }, + { 0x00600048, 0x24002628, 0x00898008, 0x00000544 }, + { 0x00600048, 0x2540262d, 0x0089800a, 0x00000546 }, + { 0x00400401, 0xbc0001a9, 0x00690540, 0x00000000 }, + { 0x00400801, 0xbc1001a9, 0x00690548, 0x00000000 }, + { 0x01000010, 0x20003d2c, 0x00000022, 0x00030003 }, + { 0x01000040, 0x20223d29, 0x02000022, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00080008 }, + { 0x00110040, 0x24540c21, 0x00000454, 0x00080008 }, + { 0x00010040, 0x24540c21, 0x00000454, 0x00180038 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffee4 }, + { 0x01800010, 0x20003dac, 0x0200010e, 0x00010001 }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0xffe0ffe0 }, + { 0x00010001, 0x24540061, 0x02000000, 0x06c00640 }, + { 0x00110001, 0x24540061, 0x02000000, 0x04800780 }, + { 0x00000001, 0x220e0128, 0x00000456, 0x00000000 }, + { 0x00800040, 0x24003dac, 0x00b19c00, 0x00200020 }, + { 0x00800040, 0x24203dac, 0x00b19c20, 0x00200020 }, + { 0x8080000c, 0xdc003d91, 0x00b10400, 0x00060006 }, + { 0x8080000c, 0xdc203d91, 0x00b10420, 0x00060006 }, + { 0x02000040, 0x210e3d29, 0x0200010e, 0xffffffff }, + { 0x00000040, 0x220c3d8c, 0x0000020c, 0x00040004 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffcdc }, + { 0x01000005, 0x25643e2d, 0x00000060, 0x00c000c0 }, + { 0x01000010, 0x20003dac, 0x02000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00a02001, 0x46400231, 0x00d20780, 0x00000000 }, + { 0x00a02001, 0x46800231, 0x00d207c0, 0x00000000 }, + { 0x00a02001, 0x46c00231, 0x00d20480, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000007e }, + { 0x80a02042, 0x46404631, 0x00d20640, 0x00d20780 }, + { 0x80a02042, 0x46804631, 0x00d20680, 0x00d207c0 }, + { 0x80a02042, 0x46c04631, 0x00d206c0, 0x00d20480 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000010, 0x20003dac, 0x02000564, 0x00800080 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000000e }, + { 0x01000010, 0x20003dac, 0x00000458, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffe4 }, + { 0x00200401, 0x256801ed, 0x00000000, 0x00200020 }, + { 0x00200801, 0x256c01ed, 0x00000000, 0x00060006 }, + { 0x00400001, 0x258001ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x45a001ad, 0x00058c00, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x02600005, 0x20006e28, 0x02008c0c, 0x88848421 }, + { 0x0220000c, 0x25663dad, 0x00000458, 0x00010001 }, + { 0x0000000c, 0x25643dad, 0x00000564, 0x00060006 }, + { 0x00310001, 0x25c401ad, 0x00000458, 0x00000000 }, + { 0x00210001, 0x25c00061, 0x00000000, 0x00010001 }, + { 0x00310040, 0x25c03dad, 0x004545c4, 0x00010001 }, + { 0x00610001, 0x25a00061, 0x02000000, 0x00000080 }, + { 0x00710001, 0x45a002ad, 0x02ae8c00, 0x00000000 }, + { 0x00710001, 0x45a202ad, 0x02ae8c01, 0x00000000 }, + { 0x00800041, 0x25a035ad, 0x00b105a0, 0x000905c0 }, + { 0x01200010, 0x20003e2c, 0x0245006e, 0x00000000 }, + { 0x00310009, 0x244c45ad, 0x02000564, 0x0045006e }, + { 0x00210001, 0x244c01ed, 0x02000000, 0x00000000 }, + { 0x0031000c, 0x244c3dad, 0x0245044c, 0x00010001 }, + { 0x00200009, 0x256835ad, 0x0045044c, 0x00000566 }, + { 0x00210040, 0x256835ad, 0x02450568, 0x00000566 }, + { 0x00200040, 0x256c362d, 0x0045006e, 0x00000566 }, + { 0x00400040, 0x240035ac, 0x00ab05a2, 0x00ab05a6 }, + { 0x00400040, 0x2400358c, 0x00690400, 0x00000566 }, + { 0x0040000c, 0x2580358d, 0x00690400, 0x00000566 }, + { 0x00800041, 0x2400362c, 0x00d20640, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d20660, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d20780, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207a0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x464035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x466035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d20680, 0x000005a0 }, + { 0x00800041, 0x2420362c, 0x00d206a0, 0x000005a0 }, + { 0x00800048, 0x2400362c, 0x00d207c0, 0x000005a4 }, + { 0x00800048, 0x2420362c, 0x00d207e0, 0x000005a4 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00000568 }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x00000568 }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056c }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056c }, + { 0x80800040, 0x468035b1, 0x00b104c0, 0x00000580 }, + { 0x80800040, 0x46a035b1, 0x00b104e0, 0x00000580 }, + { 0x00800041, 0x2400362c, 0x00d206c0, 0x000705a8 }, + { 0x00800041, 0x2420362c, 0x00d206e0, 0x000705a8 }, + { 0x00800048, 0x2400362c, 0x00d20480, 0x000705ac }, + { 0x00800048, 0x2420362c, 0x00d204a0, 0x000705ac }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x0000056a }, + { 0x00800040, 0x2420358c, 0x00b10420, 0x0000056a }, + { 0x0080000c, 0x24c0358d, 0x00b10400, 0x0000056e }, + { 0x0080000c, 0x24e0358d, 0x00b10420, 0x0000056e }, + { 0x80800040, 0x46c035b1, 0x00b104c0, 0x00050582 }, + { 0x80800040, 0x46e035b1, 0x00b104e0, 0x00050582 }, + { 0x01800005, 0x20003d2c, 0x02000020, 0x00020002 }, + { 0x80800040, 0xd00045b1, 0x00b19000, 0x00d20640 }, + { 0x80800040, 0xd02045b1, 0x00b19020, 0x00d20660 }, + { 0x80800040, 0xd04045b1, 0x00b19040, 0x00d20680 }, + { 0x80800040, 0xd06045b1, 0x00b19060, 0x00d206a0 }, + { 0x00000040, 0x22083d8c, 0x00000208, 0x00800080 }, + { 0x80400040, 0xd40045b1, 0x00699400, 0x00ab06c0 }, + { 0x80400040, 0xd48045b1, 0x00699480, 0x00ab06c2 }, + { 0x80400040, 0xd42045b1, 0x00699420, 0x00ab06e0 }, + { 0x80400040, 0xd4a045b1, 0x006994a0, 0x00ab06e2 }, + { 0x80400040, 0xd41045b1, 0x00699410, 0x00ab06d0 }, + { 0x80400040, 0xd49045b1, 0x00699490, 0x00ab06d2 }, + { 0x80400040, 0xd43045b1, 0x00699430, 0x00ab06f0 }, + { 0x80400040, 0xd4b045b1, 0x006994b0, 0x00ab06f2 }, + { 0x00000040, 0x220a3d8c, 0x0000020a, 0x00080008 }, + { 0x00110040, 0x220a3d8c, 0x0200020a, 0x00300030 }, + { 0x01000010, 0x20003d2c, 0x02000020, 0x00060006 }, + { 0x00000040, 0x20203d29, 0x00000020, 0x00020002 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00100001 }, + { 0x00000040, 0x220c358c, 0x0000020c, 0x0000003a }, + { 0x00110220, 0x34001c00, 0x02001400, 0xfffffc1a }, + { 0x00000001, 0x220001ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x220201ec, 0x00000000, 0x01c001c0 }, + { 0x00800401, 0x20400236, 0x01ee8000, 0x00000000 }, + { 0x00800801, 0x20500236, 0x01ee8010, 0x00000000 }, + { 0x00800401, 0x20600236, 0x01ee8020, 0x00000000 }, + { 0x00800801, 0x20700236, 0x01ee8030, 0x00000000 }, + { 0x00800401, 0x20800236, 0x01ee8040, 0x00000000 }, + { 0x00800801, 0x20900236, 0x01ee8050, 0x00000000 }, + { 0x00800401, 0x20a00236, 0x01ee8060, 0x00000000 }, + { 0x00800801, 0x20b00236, 0x01ee8070, 0x00000000 }, + { 0x00800401, 0x20c00236, 0x01ee8100, 0x00000000 }, + { 0x00800801, 0x20d00236, 0x01ee8110, 0x00000000 }, + { 0x00800401, 0x20e00236, 0x01ee8120, 0x00000000 }, + { 0x00800801, 0x20f00236, 0x01ee8130, 0x00000000 }, + { 0x00800401, 0x21000236, 0x01ee8140, 0x00000000 }, + { 0x00800801, 0x21100236, 0x01ee8150, 0x00000000 }, + { 0x00800401, 0x21200236, 0x01ee8160, 0x00000000 }, + { 0x00800801, 0x21300236, 0x01ee8170, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x1218a000 }, + { 0x00200401, 0x204001a5, 0x00450064, 0x00000000 }, + { 0x00000801, 0x20480061, 0x00000000, 0x000f000f }, + { 0x01600031, 0x21400021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x220001ec, 0x00000000, 0x03400340 }, + { 0x00800401, 0x41600236, 0x00d28000, 0x00000000 }, + { 0x00800801, 0x41610236, 0x00d28080, 0x00000000 }, + { 0x00800401, 0x41800236, 0x00d28020, 0x00000000 }, + { 0x00800801, 0x41810236, 0x00d280a0, 0x00000000 }, + { 0x00800401, 0x41a00236, 0x00d28040, 0x00000000 }, + { 0x00800801, 0x41a10236, 0x00d280c0, 0x00000000 }, + { 0x00800401, 0x41c00236, 0x00d28060, 0x00000000 }, + { 0x00800801, 0x41c10236, 0x00d280e0, 0x00000000 }, + { 0x00000040, 0x22000d20, 0x00000062, 0x0a18a001 }, + { 0x0000040c, 0x20443ca5, 0x00000044, 0x00010001 }, + { 0x00000801, 0x20480061, 0x00000000, 0x0007000f }, + { 0x0a600031, 0x21600021, 0x508d0040, 0x00000200 }, + { 0x00000001, 0x21400021, 0x00000140, 0x00000000 }, + { 0x00000001, 0x21600021, 0x00000160, 0x00000000 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20602d29, 0x02000042, 0x00070007 }, + { 0x01000005, 0x20422d29, 0x00000042, 0xfff8fff8 }, + { 0x00000001, 0x202001e9, 0x00000000, 0x100c100c }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00000009, 0x27e82d21, 0x00000040, 0x00060006 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000100 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x02600005, 0x20000c20, 0x02000090, 0x00002000 }, + { 0x00000006, 0x20880c21, 0x00000088, 0x00200000 }, + { 0x00200009, 0x20845529, 0x0000009c, 0x00450020 }, + { 0x00200001, 0x40840231, 0x00450094, 0x00000000 }, + { 0x00310001, 0x20840229, 0x02450094, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000095, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000094 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x20800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x020000d0, 0x00002000 }, + { 0x00000006, 0x20c80c21, 0x000000c8, 0x00200000 }, + { 0x00200009, 0x20c45529, 0x000000dc, 0x00450020 }, + { 0x00200001, 0x40c40231, 0x004500d4, 0x00000000 }, + { 0x00310001, 0x20c40229, 0x024500d4, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x000000d5, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x000000d4 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000110, 0x00002000 }, + { 0x00000006, 0x21080c21, 0x00000108, 0x00200000 }, + { 0x00200009, 0x21045529, 0x0000011c, 0x00450020 }, + { 0x00200001, 0x41040231, 0x00450114, 0x00000000 }, + { 0x00310001, 0x21040229, 0x02450114, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000115, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000114 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000150, 0x00002000 }, + { 0x00000006, 0x21480c21, 0x00000148, 0x00200000 }, + { 0x00200009, 0x21445529, 0x0000015c, 0x00450020 }, + { 0x00200001, 0x41440231, 0x00450154, 0x00000000 }, + { 0x00310001, 0x21440229, 0x02450154, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000155, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000154 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000190, 0x00002000 }, + { 0x00000006, 0x21880c21, 0x00000188, 0x00200000 }, + { 0x00200009, 0x21845529, 0x0000019c, 0x00450020 }, + { 0x00200001, 0x41840231, 0x00450194, 0x00000000 }, + { 0x00310001, 0x21840229, 0x02450194, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000195, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000194 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x020001d0, 0x00002000 }, + { 0x00000006, 0x21c80c21, 0x000001c8, 0x00200000 }, + { 0x00200009, 0x21c45529, 0x000001dc, 0x00450020 }, + { 0x00200001, 0x41c40231, 0x004501d4, 0x00000000 }, + { 0x00310001, 0x21c40229, 0x024501d4, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x000001d5, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x000001d4 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d01c0, 0x00000000 }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000210, 0x00002000 }, + { 0x00000006, 0x22080c21, 0x00000208, 0x00200000 }, + { 0x00200009, 0x22045529, 0x0000021c, 0x00450020 }, + { 0x00200001, 0x42040231, 0x00450214, 0x00000000 }, + { 0x00310001, 0x22040229, 0x02450214, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000215, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000214 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x02600005, 0x20000c20, 0x02000250, 0x00002000 }, + { 0x00000006, 0x22480c21, 0x00000248, 0x00200000 }, + { 0x00200009, 0x22445529, 0x0000025c, 0x00450020 }, + { 0x00200001, 0x42440231, 0x00450254, 0x00000000 }, + { 0x00310001, 0x22440229, 0x02450254, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00000255, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00000254 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00802001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x01000040, 0x20423dad, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d00c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000080 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0140, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x21680c22, 0x000007e8, 0x00000100 }, + { 0x00802001, 0x21800022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d01c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000180 }, + { 0x00802001, 0x20400022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0240, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000200 }, + { 0x01000010, 0x20002da0, 0x02000060, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffff00 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000040 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00000001, 0x220400e0, 0x00000000, 0x00a00080 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02008810, 0x00002000 }, + { 0x01000040, 0x20603dad, 0x00000060, 0xffffffff }, + { 0x00000006, 0xa8080c21, 0x00008808, 0x00200000 }, + { 0x00200009, 0xa8045529, 0x0000881c, 0x00450020 }, + { 0x00200001, 0xc8040231, 0x00458814, 0x00000000 }, + { 0x00310001, 0xa8040229, 0x02458814, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000c }, + { 0x00800041, 0x24002628, 0x00008815, 0x00000044 }, + { 0x00800040, 0x24004508, 0x008d0400, 0x00008814 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d8800, 0x00000000 }, + { 0x00802001, 0xa8000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d8800, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000040 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xffffffda }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20602d29, 0x02000042, 0x00070007 }, + { 0x01000005, 0x20422d29, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00000009, 0x27e82d21, 0x00000040, 0x00060006 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000260 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00200001, 0x20640229, 0x00450094, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000090, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000095, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000095, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x20881c21, 0x00000088, 0x00200000 }, + { 0x00200001, 0x20840129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x20800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000090, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000009c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000009c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200009c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000090, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200009c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200009c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x20843d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x20862d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x40840231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x004500d4, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x020000d0, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x000000d5, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x000000d5, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x20c81c21, 0x000000c8, 0x00200000 }, + { 0x00200001, 0x20c40129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x000000d0, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x000000dc, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x000000dc, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x020000dc, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x020000d0, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x020000dc, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x020000dc, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x20c43d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x20c62d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x40c40231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450114, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000110, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000115, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000115, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21081c21, 0x00000108, 0x00200000 }, + { 0x00200001, 0x21040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000110, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000011c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000011c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200011c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000110, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200011c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200011c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21043d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21062d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41040231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450154, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000150, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000155, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000155, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21481c21, 0x00000148, 0x00200000 }, + { 0x00200001, 0x21440129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000150, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000015c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000015c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200015c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000150, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200015c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200015c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21443d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21462d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41440231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450194, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000190, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000195, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000195, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21881c21, 0x00000188, 0x00200000 }, + { 0x00200001, 0x21840129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000190, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000019c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000019c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200019c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000190, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200019c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200019c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21843d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21862d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41840231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x004501d4, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x020001d0, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x000001d5, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x000001d5, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x21c81c21, 0x000001c8, 0x00200000 }, + { 0x00200001, 0x21c40129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d01c0, 0x00000000 }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x000001d0, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x000001dc, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x000001dc, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x020001dc, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x020001d0, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x020001dc, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x020001dc, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x21c43d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x21c62d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x41c40231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450214, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000210, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000215, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000215, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x22081c21, 0x00000208, 0x00200000 }, + { 0x00200001, 0x22040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000210, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000021c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000021c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200021c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000210, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200021c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200021c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x22043d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x22062d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x42040231, 0x00660064, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00450254, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02000250, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00000255, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00000255, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00002000 }, + { 0x02600005, 0x20001d20, 0x02000066, 0x00000001 }, + { 0x00000006, 0x22481c21, 0x00000248, 0x00200000 }, + { 0x00200001, 0x22440129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00802001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x02600005, 0x20000c20, 0x00000250, 0x00004000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00000001, 0x20680129, 0x0000025c, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000025c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200025c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02000250, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200025c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200025c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x02000068, 0x000d0070 }, + { 0x00000009, 0x22443d09, 0x00000602, 0x000c000c }, + { 0x00000005, 0x22462d09, 0x00000602, 0xf000f000 }, + { 0x00200001, 0x42440231, 0x00660064, 0x00000000 }, + { 0x01000040, 0x20423dad, 0x00000042, 0xfff8fff8 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d0080, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d00c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000080 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0140, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x21680c22, 0x000007e8, 0x00000100 }, + { 0x00802001, 0x21800022, 0x008d0180, 0x00000000 }, + { 0x00802001, 0x21c00022, 0x008d01c0, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x20280c22, 0x000007e8, 0x00000180 }, + { 0x00802001, 0x20400022, 0x008d0200, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0240, 0x00000000 }, + { 0x01800031, 0x20001d0c, 0x508d0000, 0x0a080400 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000200 }, + { 0x01000010, 0x20002da0, 0x02000060, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffda0 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000006e }, + { 0x00600001, 0x20200022, 0x008d07e0, 0x00000000 }, + { 0x01800031, 0x20801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20400022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20480c22, 0x000007e8, 0x00000080 }, + { 0x02800031, 0x21001d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20600022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20680c22, 0x000007e8, 0x00000100 }, + { 0x03800031, 0x21801d09, 0x408d0000, 0x02488400 }, + { 0x00600001, 0x20800022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20880c22, 0x000007e8, 0x00000180 }, + { 0x04800031, 0x22001d09, 0x408d0000, 0x02488400 }, + { 0x00000001, 0x220400e0, 0x00000000, 0x00a00080 }, + { 0x00600001, 0x20a00022, 0x008d0000, 0x00000000 }, + { 0x00200001, 0x20640229, 0x00458814, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x02008810, 0x01000000 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00004000 }, + { 0x00600041, 0x24003e2c, 0x00008815, 0x00020002 }, + { 0x00110001, 0x2066018d, 0x02000400, 0x00000000 }, + { 0x00010040, 0x20663d8d, 0x02000400, 0x00010001 }, + { 0x00110001, 0x2066022d, 0x00008815, 0x00000000 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00002000 }, + { 0x01000040, 0x20603dad, 0x02000060, 0xffffffff }, + { 0x00000006, 0xa8080c21, 0x00008808, 0x00200000 }, + { 0x00200001, 0xa8040129, 0x00450064, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00800041, 0x24002528, 0x00000066, 0x00000044 }, + { 0x00800040, 0x24002508, 0x008d0400, 0x00000064 }, + { 0x00000009, 0x20a82d02, 0x00000404, 0x00060006 }, + { 0x00802001, 0x20c00022, 0x008d8800, 0x00000000 }, + { 0x00802001, 0xa8000061, 0x00000000, 0x00000000 }, + { 0x05800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x02600005, 0x20000d20, 0x02000066, 0x00000001 }, + { 0x02600005, 0x20000c20, 0x00008810, 0x00004000 }, + { 0x00000001, 0x20680129, 0x0000881c, 0x00000000 }, + { 0x00210002, 0x20700421, 0x02450038, 0x00450030 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x02600005, 0x20001d20, 0x0000881c, 0x00000010 }, + { 0x00210002, 0x20700421, 0x02450028, 0x00450020 }, + { 0x01600005, 0x20001d20, 0x0200881c, 0x00000001 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x02610005, 0x20001c20, 0x02008810, 0x00008000 }, + { 0x02610005, 0x20001d20, 0x0200881c, 0x00000010 }, + { 0x00010006, 0x20681d29, 0x0200881c, 0x00000010 }, + { 0x02800005, 0x2000452c, 0x00000068, 0x000d0070 }, + { 0x01000040, 0x20603dad, 0x02000060, 0x00000000 }, + { 0x00000009, 0xa8043d09, 0x00000600, 0x000c000c }, + { 0x00000005, 0xa8062d09, 0x00000600, 0xf000f000 }, + { 0x00200001, 0xc8040231, 0x00660064, 0x00000000 }, + { 0x00600001, 0x21600022, 0x008d07e0, 0x00000000 }, + { 0x00802001, 0x21800022, 0x008d8800, 0x00000000 }, + { 0x0b800031, 0x20001d0c, 0x508d0000, 0x06080300 }, + { 0x00000040, 0x27e80c21, 0x000007e8, 0x00000040 }, + { 0x00000040, 0x22040c00, 0x00000204, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0xffffffac }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x01600031, 0x20001c20, 0x708d0000, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x20263d29, 0x00000036, 0x00040004 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000178 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000176 }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x0288a001 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x03600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00000008, 0x25e83e2d, 0x00009080, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459080, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699060, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000134 }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000110 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000102 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06082003 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000008, 0x25e83e2d, 0x00009082, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459082, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699070, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x12082003 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00802001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0618a003 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c01, 0x27e401a1, 0x000005c2, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x02600031, 0x23401c25, 0x408d07e0, 0x02286003 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00800040, 0x2400462d, 0x00b19c00, 0x00b1d830 }, + { 0x00800040, 0x2340462d, 0x00b19820, 0x00b1d830 }, + { 0x00800040, 0x2360462d, 0x00b19c10, 0x00b1dc00 }, + { 0x05810010, 0x200035ac, 0x008d2400, 0x000005d0 }, + { 0x05810010, 0x200035ac, 0x008d2340, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2360, 0x000005d2 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x000000ca }, + { 0x00800040, 0x2440462d, 0x00b19810, 0x00b1d830 }, + { 0x00800040, 0x2460462d, 0x00b19c20, 0x00b1dc00 }, + { 0x00800201, 0x24a00129, 0x00b19820, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000066 }, + { 0x05800010, 0x200035ac, 0x028d2400, 0x000005e8 }, + { 0x00800040, 0x2520462d, 0x00b19830, 0x00b19820 }, + { 0x00800040, 0x2540462d, 0x00b19c00, 0x00b19c10 }, + { 0x00000201, 0x26000108, 0x00000602, 0x00000000 }, + { 0x05810010, 0x200035ac, 0x028d2440, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2460, 0x000005d2 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00800040, 0x2560462d, 0x00b19810, 0x00b19800 }, + { 0x00800040, 0x238045ad, 0x008d0520, 0x00b19c00 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19810 }, + { 0x00800048, 0x24003dac, 0x008d0560, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x00b19c10, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xb8100231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x00b19820, 0x008d0520 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800040, 0x2580462d, 0x00b19c20, 0x00b19c30 }, + { 0x00800040, 0x238045ad, 0x008d0540, 0x008d04b0 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19c20 }, + { 0x00800048, 0x24003dac, 0x008d0580, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xbc200231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x008d0540 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001005c }, + { 0x00800201, 0x23e0022d, 0x002805d4, 0x00000000 }, + { 0x00800201, 0x23c0022d, 0x002805d4, 0x00000000 }, + { 0x05800010, 0x200035ac, 0x008d2440, 0x000005d2 }, + { 0x05800010, 0x200035ac, 0x028d2460, 0x000005d2 }, + { 0x00800040, 0x24003e2c, 0x00b19820, 0x00040004 }, + { 0x00800048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b1dc10 }, + { 0x00800008, 0x23403d8d, 0x00b10400, 0x00030003 }, + { 0x00810040, 0x23e03dad, 0x008d03e0, 0x00010001 }, + { 0x00200201, 0x25ec018d, 0x00450600, 0x00000000 }, + { 0x00810040, 0x23e03dad, 0x028d03e0, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05800010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00800042, 0x24c0462d, 0x00b19830, 0x00b19c00 }, + { 0x00810001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00810001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x00200201, 0x260001ac, 0x004505ec, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19830, 0x008d0340 }, + { 0x80800040, 0x43403631, 0x00b19c00, 0x008d4340 }, + { 0x00800001, 0xb8300231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00800040, 0x2400362c, 0x00b19810, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19820, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0360, 0x008d03c0 }, + { 0x05800010, 0x200035ac, 0x028d0360, 0x008d43c0 }, + { 0x00810001, 0x236001ad, 0x008d03c0, 0x00000000 }, + { 0x00810001, 0x236001ad, 0x028d43c0, 0x00000000 }, + { 0x00000201, 0x260201ac, 0x000005ee, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19820, 0x008d0360 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00800040, 0x2400362c, 0x00b19c20, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19c10, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0360, 0x008d03c0 }, + { 0x05800010, 0x200035ac, 0x028d0360, 0x008d43c0 }, + { 0x00810001, 0x236001ad, 0x008d03c0, 0x00000000 }, + { 0x00810001, 0x236001ad, 0x028d43c0, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19c10, 0x008d0360 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x01400140 }, + { 0x00000048, 0x20263dad, 0x00000036, 0x00040004 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000126 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000124 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x0248a002 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x02600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c0, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a0, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000fc }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590c8, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b0, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000ee }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d8 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b4, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000ca }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x04082004 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c2, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00810081 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590ca, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000078 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000054 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0a082004 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0418a004 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00600401, 0x2340012d, 0x008500cc, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x0085010c, 0x00000000 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x02600031, 0x23401c25, 0x408d07e0, 0x02186004 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00600040, 0x2400462d, 0x00ae9c00, 0x00aed810 }, + { 0x00600040, 0x2340462d, 0x00ae9800, 0x00aed810 }, + { 0x00600040, 0x2360462d, 0x00ae9c10, 0x00aedc00 }, + { 0x05810010, 0x200035ac, 0x008d2400, 0x000005d0 }, + { 0x05810010, 0x200035ac, 0x008d2340, 0x000005d2 }, + { 0x05810010, 0x200035ac, 0x008d2360, 0x000005d2 }, + { 0x00618022, 0x34001c00, 0x00001400, 0x00000038 }, + { 0x00618022, 0x34001c00, 0x02001400, 0x00000016 }, + { 0x00600040, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9810 }, + { 0x80600008, 0x43403d91, 0x008d0400, 0x00020002 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9c00 }, + { 0x80600008, 0x43603d91, 0x008d0400, 0x00020002 }, + { 0x00600001, 0xd8100231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0360, 0x00000000 }, + { 0x00608024, 0x34001c00, 0x00001400, 0x00010020 }, + { 0x00600201, 0x2400022c, 0x002405d4, 0x00000000 }, + { 0x00600040, 0x23e03d8d, 0x008d0400, 0x00010001 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00040004 }, + { 0x00600048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00aedc10 }, + { 0x00600008, 0x23403d8d, 0x008d0400, 0x00030003 }, + { 0x03600010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05600010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00610001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00610001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x80600040, 0x43603631, 0x00ae9810, 0x008d0340 }, + { 0x80600040, 0x43403631, 0x00ae9c00, 0x008d4340 }, + { 0x00600001, 0xd8100231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x20263d29, 0x00000036, 0x00040004 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x0000018c }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000018a }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x0288e701 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0288e601 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x03600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00000008, 0x25e83e2d, 0x00009080, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459080, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699060, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb8c }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb76 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb68 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffb5a }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x06082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x06082603 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000008, 0x25e83e2d, 0x00009082, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x00459082, 0x00000000 }, + { 0x00200c01, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699070, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffaea }, + { 0x00000008, 0x25e83e2d, 0x00009084, 0x00020002 }, + { 0x00200401, 0x25d0022d, 0x00459084, 0x00000000 }, + { 0x00000801, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000040, 0x25e83dad, 0x000005e8, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000401, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffad4 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000401, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x00699078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffac6 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000401, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x0069907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0xfffffab8 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x12082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x12082603 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00802001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0618a703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0618a603 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00800401, 0x23400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c01, 0x27e401a1, 0x000005c2, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x00010008 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00cf0343, 0x00000000 }, + { 0x00802001, 0x202000a2, 0x008d0380, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x06080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00030003 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00600009, 0x25c03dad, 0x00050034, 0x00040004 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x27e82c21, 0x000005e4, 0x00400040 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x01400140 }, + { 0x00000048, 0x20263dad, 0x00000036, 0x00040004 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x0000013a }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000138 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x0248e702 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0248e602 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x02600031, 0x20800021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c0, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a0, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffc0c }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590c8, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b0, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbfe }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbe8 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b4, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbda }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x04082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x04082604 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00800080 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200401, 0x25d0022d, 0x004590c2, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb92 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00810081 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00200401, 0x25d0022d, 0x004590ca, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb84 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00200401, 0x25d0022d, 0x004590c4, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb6e }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200401, 0x25d0022d, 0x004590cc, 0x00000000 }, + { 0x00400801, 0x25d40231, 0x006990bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffb60 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0a082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0a082604 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20400022, 0x008d0080, 0x00000000 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0418a704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0418a604 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x00600401, 0x2340012d, 0x008500cc, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x0085010c, 0x00000000 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000440, 0x27e03da1, 0x000005c0, 0x000c000c }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x00010008 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x236001ad, 0x002e0340, 0x00000000 }, + { 0x00600001, 0x202000a2, 0x008d0360, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x00000026, 0x00010001 }, + { 0x00800031, 0x20001d28, 0x608d07e0, 0x04080020 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00010001 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x22600169, 0x00000000, 0x00010001 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x01400140 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00200020 }, + { 0x00000001, 0x203801e2, 0x00000000, 0x00010001 }, + { 0x00800001, 0x204001ae, 0x00b10020, 0x00000000 }, + { 0x00000008, 0x27e03d29, 0x000002a0, 0x00010001 }, + { 0x00800031, 0x20000128, 0x608d07e0, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x22a00169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00020002 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc6 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffca }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00000041, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff4 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffff6 }, + { 0x05000010, 0x200035ac, 0x00000240, 0x00000026 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffffc }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00400441, 0x45c03dad, 0x00000034, 0x00100010 }, + { 0x00400841, 0x45c23dad, 0x00000036, 0x00200020 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x25e42c21, 0x000005e4, 0x00800080 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00000005, 0x202a3dad, 0x0000002a, 0xfffdfffd }, + { 0x02000005, 0x20002d2c, 0x0200002a, 0x00020002 }, + { 0x00000001, 0x27e80021, 0x000005e4, 0x00000000 }, + { 0x00010040, 0x27e83c21, 0x020007e8, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000005, 0x25ec2e29, 0x00009002, 0x000a000a }, + { 0x00000005, 0x25ea2e29, 0x00009002, 0x00060006 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000252 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000250 }, + { 0x01000010, 0x20003d2c, 0x000005ec, 0x00080008 }, + { 0x00000005, 0x25e03d8d, 0x00000600, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a5, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0288a001 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0288e701 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0288e601 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x00800401, 0x20400231, 0x00cf0340, 0x00000000 }, + { 0x00800801, 0x20500231, 0x00cf0341, 0x00000000 }, + { 0x00800401, 0x20600231, 0x00cf0342, 0x00000000 }, + { 0x00800801, 0x20700231, 0x00cf0343, 0x00000000 }, + { 0x01600010, 0x20003d2c, 0x000005ea, 0x00040004 }, + { 0x01600010, 0x20003d2c, 0x020005ea, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009080, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009081, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289060, 0x00000000 }, + { 0x00610401, 0x41c00229, 0x00009080, 0x00000000 }, + { 0x00610801, 0x41c20229, 0x00009090, 0x00000000 }, + { 0x00610401, 0x41e00229, 0x00009081, 0x00000000 }, + { 0x00610801, 0x41e20229, 0x00009091, 0x00000000 }, + { 0x00610401, 0x42000229, 0x00249060, 0x00000000 }, + { 0x00610801, 0x42020229, 0x00249098, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x00610401, 0x21c00229, 0x02009080, 0x00000000 }, + { 0x00610801, 0x21d00229, 0x02009090, 0x00000000 }, + { 0x00610401, 0x21e00229, 0x02009081, 0x00000000 }, + { 0x00610801, 0x21f00229, 0x02009091, 0x00000000 }, + { 0x00610401, 0x22000229, 0x02249060, 0x00000000 }, + { 0x00610801, 0x22100229, 0x02249098, 0x00000000 }, + { 0x00800008, 0x25a03d29, 0x008d01c0, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200001, 0x25d80129, 0x00459050, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001b4 }, + { 0x00800008, 0x25a03e29, 0x00009084, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009084, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009085, 0x00000000 }, + { 0x00000001, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000001, 0x25d80129, 0x00009040, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289064, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000019c }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x25d80129, 0x00009042, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289068, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000018e }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000001, 0x25d80129, 0x00009044, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028906c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000180 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c4, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f0003 }, + { 0x00800401, 0x23400231, 0x00a90040, 0x00000000 }, + { 0x00800801, 0x23500231, 0x00a90044, 0x00000000 }, + { 0x00800401, 0x23600231, 0x00a90048, 0x00000000 }, + { 0x00800801, 0x23700231, 0x00a9004c, 0x00000000 }, + { 0x00800001, 0x20400232, 0x002b0340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x002b0350, 0x00000000 }, + { 0x00800001, 0x20600232, 0x002b0360, 0x00000000 }, + { 0x00800001, 0x20700232, 0x002b0370, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06082003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x06082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x06082603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02286003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x01000005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000440, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00200000 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00010001 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02286703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02286603 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20400021, 0x408d07e0, 0x00000200 }, + { 0x00800401, 0x23800231, 0x00a900c0, 0x00000000 }, + { 0x00800801, 0x23900231, 0x00a90100, 0x00000000 }, + { 0x00800401, 0x23a00231, 0x00a90140, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00a90180, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00a900c4, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00a90104, 0x00000000 }, + { 0x00800401, 0x23e00231, 0x00a90144, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00a90184, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00a900c8, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00a90108, 0x00000000 }, + { 0x00800401, 0x24200231, 0x00a90148, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00a90188, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00a900cc, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00a9010c, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00a9014c, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00a9018c, 0x00000000 }, + { 0x00800401, 0x20c00231, 0x00cf0380, 0x00000000 }, + { 0x00800801, 0x20d00231, 0x00cf0381, 0x00000000 }, + { 0x00800401, 0x20e00231, 0x00cf0382, 0x00000000 }, + { 0x00800801, 0x20f00231, 0x00cf0383, 0x00000000 }, + { 0x00800401, 0x21000231, 0x00cf03c0, 0x00000000 }, + { 0x00800801, 0x21100231, 0x00cf03c1, 0x00000000 }, + { 0x00800401, 0x21200231, 0x00cf03c2, 0x00000000 }, + { 0x00800801, 0x21300231, 0x00cf03c3, 0x00000000 }, + { 0x00800401, 0x21400231, 0x00cf0400, 0x00000000 }, + { 0x00800801, 0x21500231, 0x00cf0401, 0x00000000 }, + { 0x00800401, 0x21600231, 0x00cf0402, 0x00000000 }, + { 0x00800801, 0x21700231, 0x00cf0403, 0x00000000 }, + { 0x00800401, 0x21800231, 0x00cf0440, 0x00000000 }, + { 0x00800801, 0x21900231, 0x00cf0441, 0x00000000 }, + { 0x00800401, 0x21a00231, 0x00cf0442, 0x00000000 }, + { 0x00800801, 0x21b00231, 0x00cf0443, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000001, 0x260201ac, 0x000005e0, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009082, 0x00020002 }, + { 0x00200001, 0x25d80129, 0x00459054, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00009082, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009083, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289070, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000050 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000000a }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05400540 }, + { 0x00800001, 0x25000129, 0x00ad0040, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad0080, 0x00000000 }, + { 0x00800001, 0x25400129, 0x00ad00c0, 0x00000000 }, + { 0x00800001, 0x25600129, 0x00ad0100, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000c2 }, + { 0x00600001, 0x20600129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20800129, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x20a00129, 0x008d0530, 0x00000000 }, + { 0x00600001, 0x20c00129, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x20e00129, 0x008d0550, 0x00000000 }, + { 0x00600001, 0x21000129, 0x008d0560, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009092, 0x00020002 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05400540 }, + { 0x00800001, 0x25000129, 0x00ad0050, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad0090, 0x00000000 }, + { 0x00800001, 0x25400129, 0x00ad00d0, 0x00000000 }, + { 0x00800001, 0x25600129, 0x00ad0110, 0x00000000 }, + { 0x00200001, 0x25d80129, 0x0045905c, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00009092, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009093, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028909c, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000009a }, + { 0x00600001, 0x20700129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20900129, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x20b00129, 0x008d0530, 0x00000000 }, + { 0x00600001, 0x20d00129, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x20f00129, 0x008d0550, 0x00000000 }, + { 0x00600001, 0x21100129, 0x008d0560, 0x00000000 }, + { 0x00800008, 0x25a03e29, 0x00009084, 0x00020002 }, + { 0x00800001, 0x21c00229, 0x00009084, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00009085, 0x00000000 }, + { 0x00000001, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00800040, 0x25a03d29, 0x00b105a0, 0x00020002 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00c000c0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00000001, 0x25d80129, 0x00009046, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289074, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00100010 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01000100 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01400140 }, + { 0x00000001, 0x25d80129, 0x00009048, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00289078, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000068 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00200020 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x01400140 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01800180 }, + { 0x00000001, 0x25d80129, 0x0000904a, 0x00000000 }, + { 0x00800001, 0x22000229, 0x0028907c, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c0, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00802001, 0x20c00022, 0x008d0140, 0x00000000 }, + { 0x00802001, 0x21000022, 0x008d0180, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x12082003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x12082703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x12082603 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01800005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x00200401, 0x27e001a1, 0x004505c8, 0x00000000 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00812001, 0x20400022, 0x028d0040, 0x00000000 }, + { 0x00912001, 0x20400022, 0x028d0080, 0x00000000 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0618a003 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00100010 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00010001 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0618a703 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0618a603 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffcfffc }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x0000002a, 0x00020002 }, + { 0x00000006, 0x202a3dad, 0x0000002a, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffd94 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00800040, 0x2400462d, 0x00b19c00, 0x00b1d830 }, + { 0x00800040, 0x2340462d, 0x00b19820, 0x00b1d830 }, + { 0x00800040, 0x2360462d, 0x00b19c10, 0x00b1dc00 }, + { 0x05810010, 0x200025ac, 0x008d2400, 0x008d01c0 }, + { 0x05810010, 0x200025ac, 0x008d2340, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2360, 0x008d01e0 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x000000c8 }, + { 0x00800040, 0x2440462d, 0x00b19810, 0x00b1d830 }, + { 0x00800040, 0x2460462d, 0x00b19c20, 0x00b1dc00 }, + { 0x00800201, 0x24a00129, 0x00b19820, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000066 }, + { 0x05800010, 0x200025ac, 0x028d2400, 0x008d05a0 }, + { 0x00800040, 0x2520462d, 0x00b19830, 0x00b19820 }, + { 0x00800040, 0x2540462d, 0x00b19c00, 0x00b19c10 }, + { 0x00000201, 0x26000108, 0x00000602, 0x00000000 }, + { 0x05810010, 0x200025ac, 0x028d2440, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2460, 0x008d01e0 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00800040, 0x2560462d, 0x00b19810, 0x00b19800 }, + { 0x00800040, 0x238045ad, 0x008d0520, 0x00b19c00 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19810 }, + { 0x00800048, 0x24003dac, 0x008d0560, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x00b19c10, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xb8100231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x00b19820, 0x008d0520 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xb8300231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00800040, 0x2580462d, 0x00b19c20, 0x00b19c30 }, + { 0x00800040, 0x238045ad, 0x008d0540, 0x008d04b0 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00040004 }, + { 0x00800040, 0x23a0458d, 0x00b10400, 0x00b19c20 }, + { 0x00800048, 0x24003dac, 0x008d0580, 0x00020002 }, + { 0x80800008, 0x43c03d91, 0x00b10400, 0x00030003 }, + { 0x00800040, 0x24003dac, 0x00b103a0, 0xfffefffe }, + { 0x80800008, 0x43603d91, 0x00b10400, 0x00020002 }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x00b10380 }, + { 0x00800040, 0x2400358c, 0x00b10400, 0x00b103a0 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00030003 }, + { 0x00800001, 0xbc200231, 0x00ae03c0, 0x00000000 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001000e }, + { 0x00800040, 0x2400362c, 0x008d04a0, 0x008d0540 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b19c10 }, + { 0x00800040, 0x24003d8c, 0x00b10400, 0x00020002 }, + { 0x80800008, 0x43403d91, 0x00b10400, 0x00020002 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00808024, 0x34001c00, 0x00001400, 0x0001005a }, + { 0x00800001, 0x23e0012d, 0x008d0200, 0x00000000 }, + { 0x05800010, 0x200025ac, 0x008d2440, 0x008d01e0 }, + { 0x05800010, 0x200025ac, 0x028d2460, 0x008d01e0 }, + { 0x00800040, 0x24003e2c, 0x00b19820, 0x00040004 }, + { 0x00800048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00800040, 0x2400458c, 0x00b10400, 0x00b1dc10 }, + { 0x00800008, 0x23403d8d, 0x00b10400, 0x00030003 }, + { 0x00810040, 0x23e03dad, 0x008d03e0, 0x00010001 }, + { 0x00200201, 0x25ec018d, 0x00450600, 0x00000000 }, + { 0x00810040, 0x23e03dad, 0x028d03e0, 0x00010001 }, + { 0x03800010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05800010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00800042, 0x24c0462d, 0x00b19830, 0x00b19c00 }, + { 0x00810001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00810001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x00200201, 0x260001ac, 0x004505ec, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19830, 0x008d0340 }, + { 0x80800040, 0x43403631, 0x00b19c00, 0x008d4340 }, + { 0x00800001, 0xb8300231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0xbc000231, 0x00ae0340, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00800040, 0x2400362c, 0x00b19810, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19820, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200025ac, 0x008d0360, 0x008d0200 }, + { 0x05800010, 0x200025ac, 0x028d0360, 0x008d4200 }, + { 0x00810001, 0x2360012d, 0x008d0200, 0x00000000 }, + { 0x00810001, 0x2360012d, 0x028d4200, 0x00000000 }, + { 0x00000201, 0x260201ac, 0x000005ee, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19820, 0x008d0360 }, + { 0x00800001, 0xb8200231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00818022, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00800040, 0x2400362c, 0x00b19c20, 0x008d04c0 }, + { 0x00800048, 0x24003e2c, 0x00b19c10, 0xfffefffe }, + { 0x00800008, 0x23603d8d, 0x00b10400, 0x00010001 }, + { 0x03800010, 0x200025ac, 0x008d0360, 0x008d0200 }, + { 0x05800010, 0x200025ac, 0x028d0360, 0x008d4200 }, + { 0x00810001, 0x2360012d, 0x008d0200, 0x00000000 }, + { 0x00810001, 0x2360012d, 0x028d4200, 0x00000000 }, + { 0x80800040, 0x43603631, 0x00b19c10, 0x008d0360 }, + { 0x00800001, 0xbc100231, 0x00ae0360, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00a02001, 0x20400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x206601ed, 0x00000000, 0x00010001 }, + { 0x00000009, 0x20663dad, 0x00000066, 0x000a000a }, + { 0x00000001, 0x206801ed, 0x00000000, 0x01400140 }, + { 0x00000001, 0x22600169, 0x00000000, 0x00030003 }, + { 0x00000008, 0x22403dad, 0x00000026, 0x00010001 }, + { 0x00000041, 0x224235ad, 0x00000020, 0x00000022 }, + { 0x00600001, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x203c0022, 0x00000018, 0x00000000 }, + { 0x00000001, 0x203f01f2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c00e2, 0x00000000, 0x00000000 }, + { 0x00000001, 0x202c010a, 0x00000e00, 0x00000000 }, + { 0x00600001, 0x20400021, 0x008d0020, 0x00000000 }, + { 0x00400001, 0x205401ed, 0x00000000, 0x00000000 }, + { 0x00200040, 0x20583dad, 0x00450020, 0xffffffff }, + { 0x00000001, 0x22000060, 0x00000000, 0x06080000 }, + { 0x00600001, 0x26000021, 0x008d0000, 0x00000000 }, + { 0x00000001, 0x26140061, 0x00000000, 0x00c00400 }, + { 0x00000001, 0x26100169, 0x00000000, 0x12121212 }, + { 0x07600031, 0x26201c21, 0x308d0600, 0x02000000 }, + { 0x00200401, 0x208000e5, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x208800e5, 0x00000000, 0xffffffc4 }, + { 0x00000801, 0x208c00e5, 0x00000000, 0xffffffc8 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d07e0, 0x00000000 }, + { 0x00000040, 0x20283c22, 0x00000008, 0x00100010 }, + { 0x00000001, 0x206001ed, 0x00000000, 0x00020002 }, + { 0x00000001, 0x206201ad, 0x0000005a, 0x00000000 }, + { 0x00000001, 0x20a001ed, 0x00000000, 0x00000000 }, + { 0x00200001, 0x228001ed, 0x00000000, 0x00000000 }, + { 0x00802001, 0x20c00061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21000061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21400061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21800061, 0x00000000, 0x00ff00ff }, + { 0x00802001, 0x21c00061, 0x00000000, 0x00ff00ff }, + { 0x00000041, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x05000010, 0x200035ac, 0x02000280, 0x00000240 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000004 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x000090c2, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x02000054, 0x00000058 }, + { 0x00800001, 0x240001ac, 0x00000068, 0x00000000 }, + { 0x00000048, 0x22a03dad, 0x00000056, 0x00040004 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffff2 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00200001, 0xb0c00229, 0x00450054, 0x00000000 }, + { 0x00200040, 0x22803dad, 0x00450280, 0x00010001 }, + { 0x00000001, 0x20300022, 0x00000010, 0x00000000 }, + { 0x00000001, 0x20380122, 0x00000260, 0x00000000 }, + { 0x00800001, 0x204001ae, 0x00b10040, 0x00000000 }, + { 0x00000008, 0x20003d2a, 0x000002a0, 0x00010001 }, + { 0x00000040, 0x22602d29, 0x00000260, 0x00020002 }, + { 0x00800031, 0x20000008, 0x608d0000, 0x00000200 }, + { 0x00000006, 0x203025a2, 0x00000066, 0x000002a0 }, + { 0x01600031, 0x20001c00, 0x708d0000, 0x02000001 }, + { 0x04200010, 0x200035ac, 0x00450054, 0x00450060 }, + { 0x00010040, 0x20a03dad, 0x02000056, 0x00010001 }, + { 0x05200010, 0x200035ac, 0x02450280, 0x00450240 }, + { 0x00000001, 0x240001ec, 0x00000000, 0x00040004 }, + { 0x00000048, 0x22083dac, 0x00000056, 0x00040004 }, + { 0x00200040, 0x205455ad, 0x00450054, 0x00450034 }, + { 0x02000010, 0x20003d8c, 0x00000600, 0x00010001 }, + { 0x00000041, 0x220e3d8c, 0x00000602, 0x00040004 }, + { 0x00010041, 0x22083dac, 0x000000a0, 0x00040004 }, + { 0x00010401, 0x205601ad, 0x000000a0, 0x00000000 }, + { 0x00010840, 0x20543d2d, 0x000090c0, 0x00010001 }, + { 0x00000220, 0x34001400, 0x00001400, 0x00009c80 }, + { 0x01000010, 0x20003dac, 0x02000280, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000014 }, + { 0x00000030, 0x32000084, 0x00001200, 0x00000000 }, + { 0x00000040, 0x22803dad, 0x00000280, 0xffffffff }, + { 0x00600401, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000c01, 0x26140061, 0x00000000, 0x01800000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000801, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00000040, 0x2078252d, 0x00000026, 0x00004280 }, + { 0x00400001, 0x26000231, 0x00000078, 0x00000000 }, + { 0x00600031, 0x26201c21, 0x308d0600, 0x02000002 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffffe8 }, + { 0x07600031, 0x20001c20, 0x30000000, 0x02000001 }, + { 0x01600031, 0x20001c24, 0x708d0000, 0x82000012 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0000, 0x00000000 }, + { 0x00400441, 0x45c03dad, 0x00000034, 0x00100010 }, + { 0x00400841, 0x45c23dad, 0x00000036, 0x00200020 }, + { 0x00200001, 0x260001ec, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25e20129, 0x00000036, 0x00000000 }, + { 0x00000041, 0x25e435a1, 0x00000020, 0x00000036 }, + { 0x00000040, 0x25e43421, 0x000005e4, 0x00000034 }, + { 0x00000041, 0x25e42c21, 0x000005e4, 0x00800080 }, + { 0x00000040, 0x25c43dad, 0x000005c4, 0xfffcfffc }, + { 0x00000040, 0x25ca3dad, 0x000005ca, 0xfffcfffc }, + { 0x00000005, 0x202a3dad, 0x0000002a, 0xfffdfffd }, + { 0x00800001, 0x2220022d, 0x000d002c, 0x00000000 }, + { 0x00600040, 0x22303dad, 0x008d0230, 0x00080008 }, + { 0x02000005, 0x20002d2c, 0x0200002a, 0x00020002 }, + { 0x00000001, 0x27e80021, 0x000005e4, 0x00000000 }, + { 0x00010040, 0x27e83c21, 0x020007e8, 0x00400040 }, + { 0x01600031, 0x22401c21, 0x408d07e0, 0x02885800 }, + { 0x00000001, 0x220801ec, 0x00000000, 0x02400240 }, + { 0x01800005, 0x20002d28, 0x02b19040, 0xffffffff }, + { 0x02000005, 0x20003e2c, 0x00009030, 0x00010001 }, + { 0x00000005, 0x25ec2e29, 0x00009002, 0x000a000a }, + { 0x00000005, 0x25ea2e29, 0x00009002, 0x00060006 }, + { 0x000b0220, 0x34001c00, 0x02001400, 0x00000252 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000250 }, + { 0x01000010, 0x20003d2c, 0x000005ec, 0x00080008 }, + { 0x00000005, 0x25e03d8d, 0x00000600, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0248a002 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0248e702 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0248e602 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x20c00021, 0x408d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x23400025, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x00800001, 0x204001a9, 0x002e0340, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00400040 }, + { 0x01000010, 0x20003d2c, 0x020005ea, 0x00040004 }, + { 0x00800008, 0x2340352d, 0x00009050, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009052, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000010, 0x20003d2c, 0x000005ea, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x02600005, 0x20003dac, 0x00650340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02650360, 0x00010001 }, + { 0x00400401, 0x41c00229, 0x000090c0, 0x00000000 }, + { 0x00400801, 0x41c20229, 0x000090e0, 0x00000000 }, + { 0x00400401, 0x41e00229, 0x000090c1, 0x00000000 }, + { 0x00400801, 0x41e20229, 0x000090e1, 0x00000000 }, + { 0x00400401, 0x42000229, 0x006990a0, 0x00000000 }, + { 0x00400801, 0x42020229, 0x006990e8, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000001e }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00400401, 0x21c00229, 0x000090c0, 0x00000000 }, + { 0x00400801, 0x21c80229, 0x000090e0, 0x00000000 }, + { 0x00400401, 0x21e00229, 0x000090c1, 0x00000000 }, + { 0x00400801, 0x21e80229, 0x000090e1, 0x00000000 }, + { 0x00400401, 0x22000229, 0x006990a0, 0x00000000 }, + { 0x00400801, 0x22080229, 0x006990e8, 0x00000000 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00600001, 0x21c00229, 0x000090c0, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c1, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a0, 0x00000000 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001c8 }, + { 0x01400010, 0x20003d2c, 0x000005ea, 0x00040004 }, + { 0x01400010, 0x20003d2c, 0x020005ea, 0x00020002 }, + { 0x00600001, 0x21c00229, 0x000090c8, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c9, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b0, 0x00000000 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00410401, 0x41c00229, 0x000090c8, 0x00000000 }, + { 0x00410801, 0x41c20229, 0x000090f0, 0x00000000 }, + { 0x00410401, 0x41e00229, 0x000090c9, 0x00000000 }, + { 0x00410801, 0x41e20229, 0x000090f1, 0x00000000 }, + { 0x00410401, 0x42000229, 0x006990b0, 0x00000000 }, + { 0x00410801, 0x42020229, 0x006990f8, 0x00000000 }, + { 0x00410401, 0x21c00229, 0x020090c8, 0x00000000 }, + { 0x00410801, 0x21c80229, 0x020090f0, 0x00000000 }, + { 0x00410401, 0x21e00229, 0x020090c9, 0x00000000 }, + { 0x00410801, 0x21e80229, 0x020090f1, 0x00000000 }, + { 0x00410401, 0x22000229, 0x026990b0, 0x00000000 }, + { 0x00410801, 0x22080229, 0x026990f8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000019c }, + { 0x00800008, 0x2340352d, 0x00009042, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00600001, 0x21c00229, 0x000090c4, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c5, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a4, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000184 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090cc, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cd, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b4, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000174 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c4, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c6, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x00070003 }, + { 0x00600401, 0x2340012d, 0x00890040, 0x00000000 }, + { 0x00600801, 0x2350012d, 0x00890048, 0x00000000 }, + { 0x00600001, 0x204001aa, 0x00270340, 0x00000000 }, + { 0x00600001, 0x205001aa, 0x00270350, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x04082004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x04082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x04082604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da5, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x22000060, 0x00000000, 0x02186004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x01000005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000006 }, + { 0x00000440, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0003000f }, + { 0x00000040, 0x22000c00, 0x00000200, 0x00100000 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00020002 }, + { 0x00010001, 0x22000060, 0x02000000, 0x02186704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x02186604 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x02600031, 0x20400021, 0x408d07e0, 0x00000200 }, + { 0x00800001, 0x2380012d, 0x008900c0, 0x00000000 }, + { 0x00800001, 0x23a0012d, 0x00890100, 0x00000000 }, + { 0x00800001, 0x23c0012d, 0x008900c8, 0x00000000 }, + { 0x00800001, 0x23e0012d, 0x00890108, 0x00000000 }, + { 0x00600401, 0x20c001a9, 0x00ab0380, 0x00000000 }, + { 0x00600801, 0x20d001a9, 0x00ab0382, 0x00000000 }, + { 0x00600401, 0x20e001a9, 0x00ab0384, 0x00000000 }, + { 0x00600801, 0x20f001a9, 0x00ab0386, 0x00000000 }, + { 0x00600401, 0x210001a9, 0x00ab03c0, 0x00000000 }, + { 0x00600801, 0x211001a9, 0x00ab03c2, 0x00000000 }, + { 0x00600401, 0x212001a9, 0x00ab03c4, 0x00000000 }, + { 0x00600801, 0x213001a9, 0x00ab03c6, 0x00000000 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00800080 }, + { 0x00000001, 0x260201ac, 0x000005e0, 0x00000000 }, + { 0x00800008, 0x2340352d, 0x00009054, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x00009056, 0x008d0220 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000026 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00400040 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c000c0 }, + { 0x00600001, 0x21c00229, 0x000090c2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00410041 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x00c100c1 }, + { 0x00600001, 0x21c00229, 0x000090ca, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cb, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000e0 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05200520 }, + { 0x00800001, 0x25000129, 0x00ad0040, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad00c0, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090c2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490a8, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000c6 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05010501 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05210521 }, + { 0x00600001, 0x21c00229, 0x000090ca, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cb, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490b8, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000000b6 }, + { 0x00800008, 0x2340352d, 0x0000905c, 0x008d0220 }, + { 0x00800008, 0x2360352d, 0x0000905e, 0x008d0220 }, + { 0x00600001, 0x20600129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20c00129, 0x008d0520, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x02600005, 0x20003dac, 0x02ae0360, 0x00010001 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05000500 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05200520 }, + { 0x00800001, 0x25000129, 0x00ad0050, 0x00000000 }, + { 0x00800001, 0x25200129, 0x00ad00d0, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x000090e2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090e3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490ec, 0x00000000 }, + { 0x00200001, 0x25d80109, 0x00450600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x05010501 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x05210521 }, + { 0x00600001, 0x21c00229, 0x000090f2, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090f3, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490fc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00600001, 0x20700129, 0x008d0510, 0x00000000 }, + { 0x00600001, 0x20d00129, 0x008d0520, 0x00000000 }, + { 0x00800008, 0x2340352d, 0x00009048, 0x008d0220 }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e000e0 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01000100 }, + { 0x00600001, 0x21c00229, 0x000090c4, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090c5, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490ac, 0x00000000 }, + { 0x02600005, 0x20003dac, 0x00ae0340, 0x00010001 }, + { 0x00000001, 0x260201e8, 0x00000000, 0x00000000 }, + { 0x00000401, 0x25da01e9, 0x00000000, 0x00000000 }, + { 0x00000801, 0x25d80109, 0x00000600, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x00000401, 0x220c01ec, 0x00000000, 0x00e100e1 }, + { 0x00000801, 0x220e01ec, 0x00000000, 0x01010101 }, + { 0x00600001, 0x21c00229, 0x000090cc, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x000090cd, 0x00000000 }, + { 0x00600001, 0x22000229, 0x002490bc, 0x00000000 }, + { 0x00200001, 0x26000128, 0x004505d8, 0x00000000 }, + { 0x00000040, 0x27c01c01, 0x00001400, 0x00000020 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c0, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005c2, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20400022, 0x008d00c0, 0x00000000 }, + { 0x00802001, 0x20800022, 0x008d0100, 0x00000000 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0a082004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000a }, + { 0x00010001, 0x22000060, 0x02000000, 0x0a082704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0a082604 }, + { 0x0000000c, 0x27e43ca5, 0x000007e4, 0x00010001 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x20000020, 0x508d07e0, 0x00000200 }, + { 0x01600005, 0x20003dac, 0x020005e0, 0x00010001 }, + { 0x01000005, 0x20003e2c, 0x00009002, 0x00020002 }, + { 0x00000401, 0x27e001a1, 0x000005c8, 0x00000000 }, + { 0x00000c0c, 0x27e43da1, 0x000005ca, 0x00010001 }, + { 0x00000801, 0x27e80061, 0x00000000, 0x0001000f }, + { 0x00610001, 0x20400022, 0x028d0040, 0x00000000 }, + { 0x00710001, 0x20400022, 0x028d0060, 0x00000000 }, + { 0x02000005, 0x20003dac, 0x0200002a, 0x00020002 }, + { 0x00018022, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0418a004 }, + { 0x00010040, 0x27e43ca5, 0x020007e4, 0x00080008 }, + { 0x00008024, 0x34001c00, 0x00001400, 0x0001000c }, + { 0x0000000c, 0x27e43da5, 0x000005c2, 0x00020002 }, + { 0x00010001, 0x22000060, 0x02000000, 0x0418a704 }, + { 0x00110001, 0x22000060, 0x02000000, 0x0418a604 }, + { 0x00000040, 0x27e43ca5, 0x000007e4, 0xfffefffe }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x01600031, 0x26400021, 0x508d07e0, 0x00000200 }, + { 0x01000005, 0x20003dac, 0x0000002a, 0x00020002 }, + { 0x00000006, 0x202a3dad, 0x0000002a, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x00001400, 0xfffffd94 }, + { 0x00600001, 0x26400021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x260001e1, 0x00000000, 0x00000000 }, + { 0x00000009, 0x26143da1, 0x000005e2, 0x00120012 }, + { 0x00000440, 0x26141c21, 0x00000614, 0x00020000 }, + { 0x00000c01, 0x26120129, 0x0000000c, 0x00000000 }, + { 0x00000c01, 0x26100169, 0x00000000, 0x12121212 }, + { 0x00400801, 0x26000171, 0x00000000, 0xffffffff }, + { 0x00600031, 0x20001c20, 0x308d0600, 0x82008002 }, + { 0x00600040, 0x2400462d, 0x00ae9c00, 0x00aed810 }, + { 0x00600040, 0x2340462d, 0x00ae9800, 0x00aed810 }, + { 0x00600040, 0x2360462d, 0x00ae9c10, 0x00aedc00 }, + { 0x05810010, 0x200025ac, 0x008d2400, 0x008d01c0 }, + { 0x05810010, 0x200025ac, 0x008d2340, 0x008d01e0 }, + { 0x05810010, 0x200025ac, 0x008d2360, 0x008d01e0 }, + { 0x00618022, 0x34001c00, 0x00001400, 0x00000036 }, + { 0x00618022, 0x34001c00, 0x02001400, 0x00000016 }, + { 0x00600040, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9810 }, + { 0x80600008, 0x43403d91, 0x008d0400, 0x00020002 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00020002 }, + { 0x00600048, 0x24003e2c, 0x00ae9c10, 0x00020002 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00ae9c00 }, + { 0x80600008, 0x43603d91, 0x008d0400, 0x00020002 }, + { 0x00600001, 0xd8100231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0360, 0x00000000 }, + { 0x00608024, 0x34001c00, 0x00001400, 0x0001001e }, + { 0x00600040, 0x23e03d2d, 0x008d0200, 0x00010001 }, + { 0x00600040, 0x24003e2c, 0x00ae9800, 0x00040004 }, + { 0x00600048, 0x24003dac, 0x008d0400, 0x00040004 }, + { 0x00600040, 0x2400458c, 0x008d0400, 0x00aedc10 }, + { 0x00600008, 0x23403d8d, 0x008d0400, 0x00030003 }, + { 0x03600010, 0x200035ac, 0x008d0340, 0x008d03e0 }, + { 0x05600010, 0x200035ac, 0x028d0340, 0x008d43e0 }, + { 0x00610001, 0x234001ad, 0x008d03e0, 0x00000000 }, + { 0x00610001, 0x234001ad, 0x028d43e0, 0x00000000 }, + { 0x80600040, 0x43603631, 0x00ae9810, 0x008d0340 }, + { 0x80600040, 0x43403631, 0x00ae9c00, 0x008d4340 }, + { 0x00600001, 0xd8100231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xdc000231, 0x00ae0340, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00008025, 0x20000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x34000020, 0x000007c0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/chromaMVAdjust.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/chromaMVAdjust.asm new file mode 100644 index 000000000..c35b98251 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/chromaMVAdjust.asm @@ -0,0 +1,57 @@ +/* + * Adjust chrom MV + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: ChromaMVAdjust.asm +// +// + + +//#if !defined(__ChromaMVAdjust__) // Make sure this is only included once +//#define __ChromaMVAdjust__ + + + // Chroma MV adjustment + add (1) acc0:w gPARITY:w gREFPARITY:w + cmp.e.f0.0 (1) null:w acc0:w 0x1:w + cmp.e.f0.1 (1) null:w acc0:w 0x100:w + mov (1) gCHRMVADJ:w 0:w + (f0.0) mov (1) gCHRMVADJ:w 2:w + (f0.1) mov (1) gCHRMVADJ:w -2:w + +//#endif // !defined(__ChromaMVAdjust__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc new file mode 100644 index 000000000..5b81219a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc @@ -0,0 +1,345 @@ +#define INTRA_16x16_IP 0 +#define INTRA_16x16_VERTICAL_IP 14 +#define INTRA_16x16_HORIZONTAL_IP 32 +#define INTRA_16x16_DC_IP 52 +#define INTRA_16x16_PLANE_IP 98 +#define End_intra_Pred_16x16_Y_IP 166 +#define End_add_Error_16x16_Y_IP 204 +#define load_Intra_Ref_Y_IP 220 +#define decode_Chroma_Intra_IP 238 +#define INTRA_CHROMA_DC_IP 260 +#define INTRA_CHROMA_HORIZONTAL_IP 320 +#define INTRA_CHROMA_VERTICAL_IP 332 +#define INTRA_Chroma_PLANE_IP 342 +#define End_of_intra_Pred_Chroma_IP 392 +#define save_16x16_Y_IP 436 +#define INTRA_8x8_IP 464 +#define INTRA_8x8_BLK2_IP 568 +#define intra_Pred_8x8_Y_IP 640 +#define INTRA_8X8_VERTICAL_IP 672 +#define INTRA_8X8_HORIZONTAL_IP 682 +#define INTRA_8X8_DC_IP 692 +#define INTRA_8X8_DIAG_DOWN_LEFT_IP 724 +#define INTRA_8X8_DIAG_DOWN_RIGHT_IP 744 +#define INTRA_8X8_VERT_RIGHT_IP 772 +#define INTRA_8X8_HOR_DOWN_IP 808 +#define INTRA_8X8_VERT_LEFT_IP 842 +#define INTRA_8X8_HOR_UP_IP 862 +#define save_8x8_Y_IP 886 +#define INTRA_4x4_IP 928 +#define intra_Pred_4x4_Y_4_IP 1062 +#define ADD_ERROR_SB0_IP 1074 +#define ADD_ERROR_SB1_IP 1088 +#define ADD_ERROR_SB2_IP 1108 +#define ADD_ERROR_SB3_IP 1124 +#define intra_Pred_4x4_Y_IP 1130 +#define INTRA_4X4_VERTICAL_IP 1130 +#define INTRA_4X4_HORIZONTAL_IP 1134 +#define INTRA_4X4_DC_IP 1138 +#define INTRA_4X4_DIAG_DOWN_LEFT_IP 1160 +#define INTRA_4X4_DIAG_DOWN_RIGHT_IP 1174 +#define INTRA_4X4_VERT_RIGHT_IP 1192 +#define INTRA_4X4_HOR_DOWN_IP 1218 +#define INTRA_4X4_VERT_LEFT_IP 1246 +#define INTRA_4X4_HOR_UP_IP 1260 +#define save_4x4_Y_IP 1276 +#define INTRA_PCM_IP 1320 +#define FRAME_MB_IP 1384 +#define INIT_MBPARA_FRM_IP 1390 +#define NOT_8x8_MODE_FRM_IP 1426 +#define CONVERT_MVS_FRM_IP 1436 +#define INIT_ADDRESS_REGS_FRM_IP 1446 +#define LOOP_SUBMB_FRM_IP 1454 +#define LOOP_DIR_FRM_IP 1460 +#define LOADREF_MVXZERO_FRM_IP 1510 +#define EXIT_LOADREF_Y_16x13_FRM_IP 1524 +#define Interpolate_Y_8x8_Func_FRM_IP 1544 +#define Interpolate_Y_8x8_Func2_FRM_IP 1574 +#define Interpolate_Y_H_8x8_FRM_IP 1708 +#define Interpolate_Y_V_8x8_FRM_IP 1790 +#define VFILTER_8x8_FRM_IP 1812 +#define Interpolate_Y_I_8x8_FRM_IP 1860 +#define Average_8x8_FRM_IP 1880 +#define Return_Interpolate_Y_8x8_FRM_IP 1888 +#define Exit_Interpolate_Y_8x8_FRM_IP 1890 +#define Interpolate_C_4x4_Func_FRM_IP 1890 +#define PROCESS4x4_FRM_IP 1928 +#define LOOP_SUBMBPT_FRM_IP 1930 +#define Interpolate_Y_H_4x4_FRM_IP 2066 +#define Interpolate_Y_V_4x4_FRM_IP 2108 +#define VFILTER_4x4_FRM_IP 2142 +#define Interpolate_Y_I_4x4_FRM_IP 2148 +#define Average_4x4_FRM_IP 2160 +#define Return_Interpolate_Y_4x4_FRM_IP 2162 +#define Exit_Interpolate_Y_4x4_FRM_IP 2174 +#define ROUND_SHIFT_C_FRM_IP 2222 +#define LOOP_DIR_CONTINUE_FRM_IP 2230 +#define Weighted_Prediction_FRM_IP 2236 +#define DefaultWeightedPred_UniPred_FRM_IP 2244 +#define DefaultWeightedPred_BiPred_FRM_IP 2256 +#define WeightedPred_FRM_IP 2264 +#define WeightedPred_Explicit_FRM_IP 2282 +#define WeightedPred_LOOP_FRM_IP 2322 +#define Return_WeightedPred_FRM_IP 2382 +#define EXIT_LOOP_FRM_IP 2424 +#define FIELD_MB_IP 2496 +#define INIT_MBPARA_FLD_IP 2502 +#define NOT_8x8_MODE_FLD_IP 2538 +#define CONVERT_MVS_FLD_IP 2548 +#define INIT_ADDRESS_REGS_FLD_IP 2558 +#define LOOP_SUBMB_FLD_IP 2568 +#define LOOP_DIR_FLD_IP 2574 +#define LOADREF_MVXZERO_FLD_IP 2644 +#define EXIT_LOADREF_Y_16x13_FLD_IP 2658 +#define Interpolate_Y_8x8_Func_FLD_IP 2680 +#define Interpolate_Y_8x8_Func2_FLD_IP 2710 +#define Interpolate_Y_H_8x8_FLD_IP 2844 +#define Interpolate_Y_V_8x8_FLD_IP 2926 +#define VFILTER_8x8_FLD_IP 2948 +#define Interpolate_Y_I_8x8_FLD_IP 2996 +#define Average_8x8_FLD_IP 3016 +#define Return_Interpolate_Y_8x8_FLD_IP 3024 +#define Exit_Interpolate_Y_8x8_FLD_IP 3026 +#define Interpolate_C_4x4_Func_FLD_IP 3026 +#define PROCESS4x4_FLD_IP 3064 +#define LOOP_SUBMBPT_FLD_IP 3066 +#define Interpolate_Y_H_4x4_FLD_IP 3204 +#define Interpolate_Y_V_4x4_FLD_IP 3246 +#define VFILTER_4x4_FLD_IP 3280 +#define Interpolate_Y_I_4x4_FLD_IP 3286 +#define Average_4x4_FLD_IP 3298 +#define Return_Interpolate_Y_4x4_FLD_IP 3300 +#define Exit_Interpolate_Y_4x4_FLD_IP 3312 +#define ROUND_SHIFT_C_FLD_IP 3360 +#define LOOP_DIR_CONTINUE_FLD_IP 3368 +#define Weighted_Prediction_FLD_IP 3374 +#define DefaultWeightedPred_UniPred_FLD_IP 3382 +#define DefaultWeightedPred_BiPred_FLD_IP 3394 +#define WeightedPred_FLD_IP 3402 +#define WeightedPred_Explicit_FLD_IP 3420 +#define WeightedPred_LOOP_FLD_IP 3460 +#define Return_WeightedPred_FLD_IP 3520 +#define EXIT_LOOP_FLD_IP 3562 +#define MBAFF_MB_IP 3640 +#define INIT_MBPARA_MBF_IP 3646 +#define NOT_8x8_MODE_MBF_IP 3682 +#define CONVERT_MVS_MBF_IP 3692 +#define INIT_ADDRESS_REGS_MBF_IP 3702 +#define LOOP_SUBMB_MBF_IP 3716 +#define LOOP_DIR_MBF_IP 3722 +#define LOADREF_MVXZERO_MBF_IP 3796 +#define EXIT_LOADREF_Y_16x13_MBF_IP 3810 +#define Interpolate_Y_8x8_Func_MBF_IP 3832 +#define Interpolate_Y_8x8_Func2_MBF_IP 3862 +#define Interpolate_Y_H_8x8_MBF_IP 3996 +#define Interpolate_Y_V_8x8_MBF_IP 4078 +#define VFILTER_8x8_MBF_IP 4100 +#define Interpolate_Y_I_8x8_MBF_IP 4148 +#define Average_8x8_MBF_IP 4168 +#define Return_Interpolate_Y_8x8_MBF_IP 4176 +#define Exit_Interpolate_Y_8x8_MBF_IP 4178 +#define Interpolate_C_4x4_Func_MBF_IP 4178 +#define PROCESS4x4_MBF_IP 4216 +#define LOOP_SUBMBPT_MBF_IP 4218 +#define Interpolate_Y_H_4x4_MBF_IP 4356 +#define Interpolate_Y_V_4x4_MBF_IP 4398 +#define VFILTER_4x4_MBF_IP 4432 +#define Interpolate_Y_I_4x4_MBF_IP 4438 +#define Average_4x4_MBF_IP 4450 +#define Return_Interpolate_Y_4x4_MBF_IP 4452 +#define Exit_Interpolate_Y_4x4_MBF_IP 4464 +#define ROUND_SHIFT_C_MBF_IP 4512 +#define LOOP_DIR_CONTINUE_MBF_IP 4520 +#define Weighted_Prediction_MBF_IP 4526 +#define DefaultWeightedPred_UniPred_MBF_IP 4534 +#define DefaultWeightedPred_BiPred_MBF_IP 4546 +#define WeightedPred_MBF_IP 4554 +#define WeightedPred_Explicit_MBF_IP 4572 +#define WeightedPred_LOOP_MBF_IP 4612 +#define Return_WeightedPred_MBF_IP 4672 +#define EXIT_LOOP_MBF_IP 4714 +#define SETHWSCOREBOARD_IP 4792 +#define SetHWScoreboard_Loop_IP 4806 +#define Parse_8_Loop_0_IP 4852 +#define Parse_8_Loop_2_IP 4876 +#define Parse_8_Loop_4_IP 4900 +#define Parse_8_Loop_6_IP 4924 +#define Parse_8_Loop_8_IP 4948 +#define Parse_8_Loop_10_IP 4972 +#define Parse_8_Loop_12_IP 4996 +#define Parse_8_Loop_14_IP 5020 +#define SetHWScoreboard_Remainder_IP 5062 +#define SetHWScoreboard_Remainder_Loop_IP 5090 +#define Output_Remainder_Intra_IP 5116 +#define SetHWScoreboard_Done_IP 5128 +#define SETHWSCOREBOARD_MBAFF_IP 5136 +#define SetHWScoreboard_MBAFF_Loop_IP 5148 +#define SET_SB_MBAFF_INTRA_0_IP 5208 +#define SET_SB_MBAFF_0_IP 5230 +#define NEXT_MB_MBAFF_0_IP 5238 +#define SET_SB_MBAFF_INTRA_2_IP 5276 +#define SET_SB_MBAFF_2_IP 5298 +#define NEXT_MB_MBAFF_2_IP 5306 +#define SET_SB_MBAFF_INTRA_4_IP 5344 +#define SET_SB_MBAFF_4_IP 5366 +#define NEXT_MB_MBAFF_4_IP 5374 +#define SET_SB_MBAFF_INTRA_6_IP 5412 +#define SET_SB_MBAFF_6_IP 5434 +#define NEXT_MB_MBAFF_6_IP 5442 +#define SET_SB_MBAFF_INTRA_8_IP 5480 +#define SET_SB_MBAFF_8_IP 5502 +#define NEXT_MB_MBAFF_8_IP 5510 +#define SET_SB_MBAFF_INTRA_10_IP 5548 +#define SET_SB_MBAFF_10_IP 5570 +#define NEXT_MB_MBAFF_10_IP 5578 +#define SET_SB_MBAFF_INTRA_12_IP 5616 +#define SET_SB_MBAFF_12_IP 5638 +#define NEXT_MB_MBAFF_12_IP 5646 +#define SET_SB_MBAFF_INTRA_14_IP 5684 +#define SET_SB_MBAFF_14_IP 5706 +#define NEXT_MB_MBAFF_14_IP 5714 +#define SetHWScoreboard_MBAFF_Remainder_IP 5756 +#define SetHWScoreboard_MBAFF_Remainder_Loop_IP 5784 +#define SET_SB_MBAFF_REM_INTRA_IP 5822 +#define SET_SB_MBAFF_REM_IP 5846 +#define Output_MBAFF_Remainder_Intra_IP 5856 +#define SetHWScoreboard_MBAFF_Done_IP 5868 +#define BSDRESET_IP 5870 +#define DCRESETDUMMY_IP 5872 +#define AVC_ILDB_ROOT_Y_ILDB_FRAME_IP 5880 +#define SLEEP_ENTRY_Y_ILDB_FRAME_IP 5976 +#define POST_SLEEP_Y_ILDB_FRAME_IP 5980 +#define NEXT_MB_Y_ILDB_FRAME_IP 6010 +#define ALL_SPAWNED_Y_ILDB_FRAME_IP 6034 +#define ALL_DONE_Y_ILDB_FRAME_IP 6044 +#define WAIT_FOR_UV_ILDB_FRAME_IP 6044 +#define AVC_ILDB_CHILD_Y_ILDB_FRAME_IP 6056 +#define WRITE_URB_Y_ILDB_FRAME_IP 6436 +#define POST_ILDB_Y_ILDB_FRAME_IP 6444 +#define READ_FOR_URB_Y_ILDB_FRAME_IP 6458 +#define FILTER_Y_IP 6494 +#define Y_ELSE3_IP 6560 +#define Y_ENDIF3_IP 6574 +#define Y_ELSE4_IP 6604 +#define Y_ENDIF4_IP 6618 +#define Y_ELSE2_IP 6618 +#define Y_ENDIF6_IP 6684 +#define Y_ENDIF7_IP 6706 +#define Y_ENDIF2_IP 6710 +#define Y_ENDIF1_IP 6710 +#define AVC_ILDB_ROOT_UV_ILDB_FRAME_IP 6720 +#define SLEEP_ENTRY_UV_ILDB_FRAME_IP 6798 +#define POST_SLEEP_UV_ILDB_FRAME_IP 6802 +#define NEXT_MB_UV_ILDB_FRAME_IP 6834 +#define ALL_SPAWNED_UV_ILDB_FRAME_IP 6858 +#define ALL_DONE_UV_ILDB_FRAME_IP 6882 +#define AVC_ILDB_CHILD_UV_ILDB_FRAME_IP 6888 +#define BYPASS_EXT_LEFT_EDGE_UV_ILDB_FRAME_IP 7008 +#define BYPASS_EXT_TOP_EDGE_UV_ILDB_FRAME_IP 7126 +#define WRITE_URB_UV_ILDB_FRAME_IP 7194 +#define POST_ILDB_UV_ILDB_FRAME_IP 7202 +#define READ_FOR_URB_UV_ILDB_FRAME_IP 7216 +#define FILTER_UV_IP 7246 +#define UV_ELSE2_IP 7282 +#define UV_ENDIF2_IP 7314 +#define UV_ENDIF1_IP 7314 +#define AVC_ILDB_ROOT_Y_ILDB_FIELD_IP 7320 +#define SLEEP_ENTRY_Y_ILDB_FIELD_IP 7416 +#define POST_SLEEP_Y_ILDB_FIELD_IP 7420 +#define NEXT_MB_Y_ILDB_FIELD_IP 7450 +#define ALL_SPAWNED_Y_ILDB_FIELD_IP 7474 +#define ALL_DONE_Y_ILDB_FIELD_IP 7484 +#define WAIT_FOR_UV_ILDB_FIELD_IP 7484 +#define AVC_ILDB_CHILD_Y_ILDB_FIELD_IP 7496 +#define WRITE_URB_Y_ILDB_FIELD_IP 7896 +#define POST_ILDB_Y_ILDB_FIELD_IP 7904 +#define READ_FOR_URB_Y_ILDB_FIELD_IP 7918 +#define ELSE_Y_4x16T_ILDB_FIELD_IP 7934 +#define ENDIF_Y_4x16T_ILDB_FIELD_IP 7942 +#define AVC_ILDB_ROOT_UV_ILDB_FIELD_IP 7976 +#define SLEEP_ENTRY_UV_ILDB_FIELD_IP 8054 +#define POST_SLEEP_UV_ILDB_FIELD_IP 8058 +#define NEXT_MB_UV_ILDB_FIELD_IP 8090 +#define ALL_SPAWNED_UV_ILDB_FIELD_IP 8114 +#define ALL_DONE_UV_ILDB_FIELD_IP 8138 +#define AVC_ILDB_CHILD_UV_ILDB_FIELD_IP 8144 +#define BYPASS_EXT_LEFT_EDGE_UV_ILDB_FIELD_IP 8272 +#define BYPASS_EXT_TOP_EDGE_UV_ILDB_FIELD_IP 8394 +#define WRITE_URB_UV_ILDB_FIELD_IP 8470 +#define POST_ILDB_UV_ILDB_FIELD_IP 8478 +#define READ_FOR_URB_UV_ILDB_FIELD_IP 8492 +#define ELSE_Y_2x8T_ILDB_FIELD_IP 8508 +#define ENDIF_Y_2x8T_ILDB_FIELD_IP 8516 +#define AVC_ILDB_ROOT_Y_ILDB_MBAFF_IP 8544 +#define SLEEP_ENTRY_Y_ILDB_MBAFF_IP 8642 +#define POST_SLEEP_Y_ILDB_MBAFF_IP 8646 +#define NEXT_MB_Y_ILDB_MBAFF_IP 8676 +#define ALL_SPAWNED_Y_ILDB_MBAFF_IP 8700 +#define ALL_DONE_Y_ILDB_MBAFF_IP 8710 +#define WAIT_FOR_UV_ILDB_MBAFF_IP 8710 +#define AVC_ILDB_CHILD_Y_ILDB_MBAFF_IP 8720 +#define RE_ENTRY_IP 8742 +#define ELSE_Y_16x16T_ILDB_MBAFF_IP 8782 +#define ENDIF_Y_16x16T_ILDB_MBAFF_IP 8792 +#define ELSE_Y_4x16T_IP 8808 +#define ENDIF_Y_4x16T_IP 8818 +#define BYPASS_V1_Y_IP 8966 +#define BYPASS_V2_Y_IP 8980 +#define BYPASS_V3_Y_IP 8994 +#define ELSE_Y_16x4T_IP 9024 +#define ENDIF_Y_16x4T_IP 9034 +#define NOT_DUAL_FIELD_IP 9060 +#define ELSE_Y_16x4_IP 9060 +#define ENDIF_Y_16x4_IP 9072 +#define DUAL_FIELD_Y_IP 9168 +#define H0_Y_DONE_IP 9236 +#define ELSE_Y_16x16_IP 9310 +#define ENDIF_Y_16x16_IP 9320 +#define ELSE_Y_16x4_SAVE_IP 9342 +#define ENDIF_Y_16x4_SAVE_IP 9354 +#define SKIP_ILDB_IP 9356 +#define POST_ILDB_IP 9364 +#define FILTER_Y_MBAFF_IP 9378 +#define MBAFF_Y_ELSE3_IP 9444 +#define MBAFF_Y_ENDIF3_IP 9458 +#define MBAFF_Y_ELSE4_IP 9488 +#define MBAFF_Y_ENDIF4_IP 9502 +#define MBAFF_Y_ELSE2_IP 9502 +#define MBAFF_Y_ENDIF6_IP 9566 +#define MBAFF_Y_ENDIF7_IP 9588 +#define MBAFF_Y_ENDIF2_IP 9592 +#define MBAFF_Y_ENDIF1_IP 9592 +#define AVC_ILDB_ROOT_UV_ILDB_MBAFF_IP 9600 +#define SLEEP_ENTRY_UV_ILDB_MBAFF_IP 9678 +#define POST_SLEEP_UV_ILDB_MBAFF_IP 9682 +#define NEXT_MB_UV_ILDB_MBAFF_IP 9714 +#define ALL_SPAWNED_UV_ILDB_MBAFF_IP 9738 +#define ALL_DONE_UV_ILDB_MBAFF_IP 9762 +#define AVC_ILDB_CHILD_UV_ILDB_MBAFF_IP 9768 +#define RE_ENTRY_UV_ILDB_MBAFF_IP 9794 +#define ELSE_UV_8X8T_ILDB_MBAFF_IP 9836 +#define ENDIF_UV_8X8T_ILDB_MBAFF_IP 9846 +#define ELSE_Y_2x8T_ILDB_MBAFF_IP 9864 +#define ENDIF_Y_2x8T_ILDB_MBAFF_IP 9874 +#define V0_U_NEXT1_IP 9934 +#define V0_U_NEXT2_IP 9954 +#define V0_U_NEXT3_IP 9964 +#define BYPASS_V0_UV_IP 10018 +#define ELSE_UV_8X2T_IP 10082 +#define ENDIF_UV_8X2T_IP 10092 +#define NOT_DUAL_FIELD_UV_IP 10120 +#define ELSE_UV_8X2_IP 10120 +#define ENDIF_UV_8X2_IP 10132 +#define DUAL_FIELD_UV_IP 10208 +#define H0_UV_DONE_IP 10300 +#define ELSE_UV_8X8_IP 10360 +#define ENDIF_UV_8X8_IP 10370 +#define ELSE_UV_8X2_SAVE_IP 10394 +#define ENDIF_UV_8X2_SAVE_IP 10406 +#define SKIP_ILDB_UV_ILDB_MBAFF_IP 10408 +#define POST_ILDB_UV_ILDB_MBAFF_IP 10416 +#define FILTER_UV_MBAFF_IP 10430 +#define MBAFF_UV_ELSE2_IP 10466 +#define MBAFF_UV_ENDIF2_IP 10496 +#define MBAFF_UV_ENDIF1_IP 10496 +#define AllAVC_END_IP 10500 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc.gen5 new file mode 100644 index 000000000..0179192bd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/export.inc.gen5 @@ -0,0 +1,345 @@ +#define INTRA_16x16_IP_GEN5 0 +#define INTRA_16x16_VERTICAL_IP_GEN5 14 +#define INTRA_16x16_HORIZONTAL_IP_GEN5 32 +#define INTRA_16x16_DC_IP_GEN5 52 +#define INTRA_16x16_PLANE_IP_GEN5 98 +#define End_intra_Pred_16x16_Y_IP_GEN5 166 +#define End_add_Error_16x16_Y_IP_GEN5 204 +#define load_Intra_Ref_Y_IP_GEN5 220 +#define decode_Chroma_Intra_IP_GEN5 238 +#define INTRA_CHROMA_DC_IP_GEN5 260 +#define INTRA_CHROMA_HORIZONTAL_IP_GEN5 320 +#define INTRA_CHROMA_VERTICAL_IP_GEN5 332 +#define INTRA_Chroma_PLANE_IP_GEN5 342 +#define End_of_intra_Pred_Chroma_IP_GEN5 392 +#define save_16x16_Y_IP_GEN5 436 +#define INTRA_8x8_IP_GEN5 464 +#define INTRA_8x8_BLK2_IP_GEN5 568 +#define intra_Pred_8x8_Y_IP_GEN5 640 +#define INTRA_8X8_VERTICAL_IP_GEN5 672 +#define INTRA_8X8_HORIZONTAL_IP_GEN5 682 +#define INTRA_8X8_DC_IP_GEN5 692 +#define INTRA_8X8_DIAG_DOWN_LEFT_IP_GEN5 724 +#define INTRA_8X8_DIAG_DOWN_RIGHT_IP_GEN5 744 +#define INTRA_8X8_VERT_RIGHT_IP_GEN5 772 +#define INTRA_8X8_HOR_DOWN_IP_GEN5 808 +#define INTRA_8X8_VERT_LEFT_IP_GEN5 842 +#define INTRA_8X8_HOR_UP_IP_GEN5 862 +#define save_8x8_Y_IP_GEN5 886 +#define INTRA_4x4_IP_GEN5 928 +#define intra_Pred_4x4_Y_4_IP_GEN5 1062 +#define ADD_ERROR_SB0_IP_GEN5 1074 +#define ADD_ERROR_SB1_IP_GEN5 1088 +#define ADD_ERROR_SB2_IP_GEN5 1108 +#define ADD_ERROR_SB3_IP_GEN5 1124 +#define intra_Pred_4x4_Y_IP_GEN5 1130 +#define INTRA_4X4_VERTICAL_IP_GEN5 1130 +#define INTRA_4X4_HORIZONTAL_IP_GEN5 1134 +#define INTRA_4X4_DC_IP_GEN5 1138 +#define INTRA_4X4_DIAG_DOWN_LEFT_IP_GEN5 1160 +#define INTRA_4X4_DIAG_DOWN_RIGHT_IP_GEN5 1174 +#define INTRA_4X4_VERT_RIGHT_IP_GEN5 1192 +#define INTRA_4X4_HOR_DOWN_IP_GEN5 1218 +#define INTRA_4X4_VERT_LEFT_IP_GEN5 1246 +#define INTRA_4X4_HOR_UP_IP_GEN5 1260 +#define save_4x4_Y_IP_GEN5 1276 +#define INTRA_PCM_IP_GEN5 1320 +#define FRAME_MB_IP_GEN5 1384 +#define INIT_MBPARA_FRM_IP_GEN5 1390 +#define NOT_8x8_MODE_FRM_IP_GEN5 1426 +#define CONVERT_MVS_FRM_IP_GEN5 1436 +#define INIT_ADDRESS_REGS_FRM_IP_GEN5 1446 +#define LOOP_SUBMB_FRM_IP_GEN5 1454 +#define LOOP_DIR_FRM_IP_GEN5 1460 +#define LOADREF_MVXZERO_FRM_IP_GEN5 1510 +#define EXIT_LOADREF_Y_16x13_FRM_IP_GEN5 1524 +#define Interpolate_Y_8x8_Func_FRM_IP_GEN5 1544 +#define Interpolate_Y_8x8_Func2_FRM_IP_GEN5 1574 +#define Interpolate_Y_H_8x8_FRM_IP_GEN5 1708 +#define Interpolate_Y_V_8x8_FRM_IP_GEN5 1790 +#define VFILTER_8x8_FRM_IP_GEN5 1812 +#define Interpolate_Y_I_8x8_FRM_IP_GEN5 1860 +#define Average_8x8_FRM_IP_GEN5 1880 +#define Return_Interpolate_Y_8x8_FRM_IP_GEN5 1888 +#define Exit_Interpolate_Y_8x8_FRM_IP_GEN5 1890 +#define Interpolate_C_4x4_Func_FRM_IP_GEN5 1890 +#define PROCESS4x4_FRM_IP_GEN5 1928 +#define LOOP_SUBMBPT_FRM_IP_GEN5 1930 +#define Interpolate_Y_H_4x4_FRM_IP_GEN5 2066 +#define Interpolate_Y_V_4x4_FRM_IP_GEN5 2108 +#define VFILTER_4x4_FRM_IP_GEN5 2142 +#define Interpolate_Y_I_4x4_FRM_IP_GEN5 2148 +#define Average_4x4_FRM_IP_GEN5 2160 +#define Return_Interpolate_Y_4x4_FRM_IP_GEN5 2162 +#define Exit_Interpolate_Y_4x4_FRM_IP_GEN5 2174 +#define ROUND_SHIFT_C_FRM_IP_GEN5 2222 +#define LOOP_DIR_CONTINUE_FRM_IP_GEN5 2230 +#define Weighted_Prediction_FRM_IP_GEN5 2236 +#define DefaultWeightedPred_UniPred_FRM_IP_GEN5 2244 +#define DefaultWeightedPred_BiPred_FRM_IP_GEN5 2256 +#define WeightedPred_FRM_IP_GEN5 2264 +#define WeightedPred_Explicit_FRM_IP_GEN5 2282 +#define WeightedPred_LOOP_FRM_IP_GEN5 2322 +#define Return_WeightedPred_FRM_IP_GEN5 2382 +#define EXIT_LOOP_FRM_IP_GEN5 2424 +#define FIELD_MB_IP_GEN5 2496 +#define INIT_MBPARA_FLD_IP_GEN5 2502 +#define NOT_8x8_MODE_FLD_IP_GEN5 2538 +#define CONVERT_MVS_FLD_IP_GEN5 2548 +#define INIT_ADDRESS_REGS_FLD_IP_GEN5 2558 +#define LOOP_SUBMB_FLD_IP_GEN5 2568 +#define LOOP_DIR_FLD_IP_GEN5 2574 +#define LOADREF_MVXZERO_FLD_IP_GEN5 2644 +#define EXIT_LOADREF_Y_16x13_FLD_IP_GEN5 2658 +#define Interpolate_Y_8x8_Func_FLD_IP_GEN5 2680 +#define Interpolate_Y_8x8_Func2_FLD_IP_GEN5 2710 +#define Interpolate_Y_H_8x8_FLD_IP_GEN5 2844 +#define Interpolate_Y_V_8x8_FLD_IP_GEN5 2926 +#define VFILTER_8x8_FLD_IP_GEN5 2948 +#define Interpolate_Y_I_8x8_FLD_IP_GEN5 2996 +#define Average_8x8_FLD_IP_GEN5 3016 +#define Return_Interpolate_Y_8x8_FLD_IP_GEN5 3024 +#define Exit_Interpolate_Y_8x8_FLD_IP_GEN5 3026 +#define Interpolate_C_4x4_Func_FLD_IP_GEN5 3026 +#define PROCESS4x4_FLD_IP_GEN5 3064 +#define LOOP_SUBMBPT_FLD_IP_GEN5 3066 +#define Interpolate_Y_H_4x4_FLD_IP_GEN5 3204 +#define Interpolate_Y_V_4x4_FLD_IP_GEN5 3246 +#define VFILTER_4x4_FLD_IP_GEN5 3280 +#define Interpolate_Y_I_4x4_FLD_IP_GEN5 3286 +#define Average_4x4_FLD_IP_GEN5 3298 +#define Return_Interpolate_Y_4x4_FLD_IP_GEN5 3300 +#define Exit_Interpolate_Y_4x4_FLD_IP_GEN5 3312 +#define ROUND_SHIFT_C_FLD_IP_GEN5 3360 +#define LOOP_DIR_CONTINUE_FLD_IP_GEN5 3368 +#define Weighted_Prediction_FLD_IP_GEN5 3374 +#define DefaultWeightedPred_UniPred_FLD_IP_GEN5 3382 +#define DefaultWeightedPred_BiPred_FLD_IP_GEN5 3394 +#define WeightedPred_FLD_IP_GEN5 3402 +#define WeightedPred_Explicit_FLD_IP_GEN5 3420 +#define WeightedPred_LOOP_FLD_IP_GEN5 3460 +#define Return_WeightedPred_FLD_IP_GEN5 3520 +#define EXIT_LOOP_FLD_IP_GEN5 3562 +#define MBAFF_MB_IP_GEN5 3640 +#define INIT_MBPARA_MBF_IP_GEN5 3646 +#define NOT_8x8_MODE_MBF_IP_GEN5 3682 +#define CONVERT_MVS_MBF_IP_GEN5 3692 +#define INIT_ADDRESS_REGS_MBF_IP_GEN5 3702 +#define LOOP_SUBMB_MBF_IP_GEN5 3716 +#define LOOP_DIR_MBF_IP_GEN5 3722 +#define LOADREF_MVXZERO_MBF_IP_GEN5 3796 +#define EXIT_LOADREF_Y_16x13_MBF_IP_GEN5 3810 +#define Interpolate_Y_8x8_Func_MBF_IP_GEN5 3832 +#define Interpolate_Y_8x8_Func2_MBF_IP_GEN5 3862 +#define Interpolate_Y_H_8x8_MBF_IP_GEN5 3996 +#define Interpolate_Y_V_8x8_MBF_IP_GEN5 4078 +#define VFILTER_8x8_MBF_IP_GEN5 4100 +#define Interpolate_Y_I_8x8_MBF_IP_GEN5 4148 +#define Average_8x8_MBF_IP_GEN5 4168 +#define Return_Interpolate_Y_8x8_MBF_IP_GEN5 4176 +#define Exit_Interpolate_Y_8x8_MBF_IP_GEN5 4178 +#define Interpolate_C_4x4_Func_MBF_IP_GEN5 4178 +#define PROCESS4x4_MBF_IP_GEN5 4216 +#define LOOP_SUBMBPT_MBF_IP_GEN5 4218 +#define Interpolate_Y_H_4x4_MBF_IP_GEN5 4356 +#define Interpolate_Y_V_4x4_MBF_IP_GEN5 4398 +#define VFILTER_4x4_MBF_IP_GEN5 4432 +#define Interpolate_Y_I_4x4_MBF_IP_GEN5 4438 +#define Average_4x4_MBF_IP_GEN5 4450 +#define Return_Interpolate_Y_4x4_MBF_IP_GEN5 4452 +#define Exit_Interpolate_Y_4x4_MBF_IP_GEN5 4464 +#define ROUND_SHIFT_C_MBF_IP_GEN5 4512 +#define LOOP_DIR_CONTINUE_MBF_IP_GEN5 4520 +#define Weighted_Prediction_MBF_IP_GEN5 4526 +#define DefaultWeightedPred_UniPred_MBF_IP_GEN5 4534 +#define DefaultWeightedPred_BiPred_MBF_IP_GEN5 4546 +#define WeightedPred_MBF_IP_GEN5 4554 +#define WeightedPred_Explicit_MBF_IP_GEN5 4572 +#define WeightedPred_LOOP_MBF_IP_GEN5 4612 +#define Return_WeightedPred_MBF_IP_GEN5 4672 +#define EXIT_LOOP_MBF_IP_GEN5 4714 +#define SETHWSCOREBOARD_IP_GEN5 4792 +#define SetHWScoreboard_Loop_IP_GEN5 4806 +#define Parse_8_Loop_0_IP_GEN5 4852 +#define Parse_8_Loop_2_IP_GEN5 4876 +#define Parse_8_Loop_4_IP_GEN5 4900 +#define Parse_8_Loop_6_IP_GEN5 4924 +#define Parse_8_Loop_8_IP_GEN5 4948 +#define Parse_8_Loop_10_IP_GEN5 4972 +#define Parse_8_Loop_12_IP_GEN5 4996 +#define Parse_8_Loop_14_IP_GEN5 5020 +#define SetHWScoreboard_Remainder_IP_GEN5 5062 +#define SetHWScoreboard_Remainder_Loop_IP_GEN5 5090 +#define Output_Remainder_Intra_IP_GEN5 5116 +#define SetHWScoreboard_Done_IP_GEN5 5128 +#define SETHWSCOREBOARD_MBAFF_IP_GEN5 5136 +#define SetHWScoreboard_MBAFF_Loop_IP_GEN5 5148 +#define SET_SB_MBAFF_INTRA_0_IP_GEN5 5208 +#define SET_SB_MBAFF_0_IP_GEN5 5230 +#define NEXT_MB_MBAFF_0_IP_GEN5 5238 +#define SET_SB_MBAFF_INTRA_2_IP_GEN5 5276 +#define SET_SB_MBAFF_2_IP_GEN5 5298 +#define NEXT_MB_MBAFF_2_IP_GEN5 5306 +#define SET_SB_MBAFF_INTRA_4_IP_GEN5 5344 +#define SET_SB_MBAFF_4_IP_GEN5 5366 +#define NEXT_MB_MBAFF_4_IP_GEN5 5374 +#define SET_SB_MBAFF_INTRA_6_IP_GEN5 5412 +#define SET_SB_MBAFF_6_IP_GEN5 5434 +#define NEXT_MB_MBAFF_6_IP_GEN5 5442 +#define SET_SB_MBAFF_INTRA_8_IP_GEN5 5480 +#define SET_SB_MBAFF_8_IP_GEN5 5502 +#define NEXT_MB_MBAFF_8_IP_GEN5 5510 +#define SET_SB_MBAFF_INTRA_10_IP_GEN5 5548 +#define SET_SB_MBAFF_10_IP_GEN5 5570 +#define NEXT_MB_MBAFF_10_IP_GEN5 5578 +#define SET_SB_MBAFF_INTRA_12_IP_GEN5 5616 +#define SET_SB_MBAFF_12_IP_GEN5 5638 +#define NEXT_MB_MBAFF_12_IP_GEN5 5646 +#define SET_SB_MBAFF_INTRA_14_IP_GEN5 5684 +#define SET_SB_MBAFF_14_IP_GEN5 5706 +#define NEXT_MB_MBAFF_14_IP_GEN5 5714 +#define SetHWScoreboard_MBAFF_Remainder_IP_GEN5 5756 +#define SetHWScoreboard_MBAFF_Remainder_Loop_IP_GEN5 5784 +#define SET_SB_MBAFF_REM_INTRA_IP_GEN5 5822 +#define SET_SB_MBAFF_REM_IP_GEN5 5846 +#define Output_MBAFF_Remainder_Intra_IP_GEN5 5856 +#define SetHWScoreboard_MBAFF_Done_IP_GEN5 5868 +#define BSDRESET_IP_GEN5 5870 +#define DCRESETDUMMY_IP_GEN5 5872 +#define AVC_ILDB_ROOT_Y_ILDB_FRAME_IP_GEN5 5880 +#define SLEEP_ENTRY_Y_ILDB_FRAME_IP_GEN5 5976 +#define POST_SLEEP_Y_ILDB_FRAME_IP_GEN5 5980 +#define NEXT_MB_Y_ILDB_FRAME_IP_GEN5 6010 +#define ALL_SPAWNED_Y_ILDB_FRAME_IP_GEN5 6034 +#define ALL_DONE_Y_ILDB_FRAME_IP_GEN5 6044 +#define WAIT_FOR_UV_ILDB_FRAME_IP_GEN5 6044 +#define AVC_ILDB_CHILD_Y_ILDB_FRAME_IP_GEN5 6056 +#define WRITE_URB_Y_ILDB_FRAME_IP_GEN5 6436 +#define POST_ILDB_Y_ILDB_FRAME_IP_GEN5 6444 +#define READ_FOR_URB_Y_ILDB_FRAME_IP_GEN5 6458 +#define FILTER_Y_IP_GEN5 6494 +#define Y_ELSE3_IP_GEN5 6560 +#define Y_ENDIF3_IP_GEN5 6574 +#define Y_ELSE4_IP_GEN5 6604 +#define Y_ENDIF4_IP_GEN5 6618 +#define Y_ELSE2_IP_GEN5 6618 +#define Y_ENDIF6_IP_GEN5 6684 +#define Y_ENDIF7_IP_GEN5 6706 +#define Y_ENDIF2_IP_GEN5 6710 +#define Y_ENDIF1_IP_GEN5 6710 +#define AVC_ILDB_ROOT_UV_ILDB_FRAME_IP_GEN5 6720 +#define SLEEP_ENTRY_UV_ILDB_FRAME_IP_GEN5 6798 +#define POST_SLEEP_UV_ILDB_FRAME_IP_GEN5 6802 +#define NEXT_MB_UV_ILDB_FRAME_IP_GEN5 6834 +#define ALL_SPAWNED_UV_ILDB_FRAME_IP_GEN5 6858 +#define ALL_DONE_UV_ILDB_FRAME_IP_GEN5 6882 +#define AVC_ILDB_CHILD_UV_ILDB_FRAME_IP_GEN5 6888 +#define BYPASS_EXT_LEFT_EDGE_UV_ILDB_FRAME_IP_GEN5 7008 +#define BYPASS_EXT_TOP_EDGE_UV_ILDB_FRAME_IP_GEN5 7126 +#define WRITE_URB_UV_ILDB_FRAME_IP_GEN5 7194 +#define POST_ILDB_UV_ILDB_FRAME_IP_GEN5 7202 +#define READ_FOR_URB_UV_ILDB_FRAME_IP_GEN5 7216 +#define FILTER_UV_IP_GEN5 7246 +#define UV_ELSE2_IP_GEN5 7282 +#define UV_ENDIF2_IP_GEN5 7314 +#define UV_ENDIF1_IP_GEN5 7314 +#define AVC_ILDB_ROOT_Y_ILDB_FIELD_IP_GEN5 7320 +#define SLEEP_ENTRY_Y_ILDB_FIELD_IP_GEN5 7416 +#define POST_SLEEP_Y_ILDB_FIELD_IP_GEN5 7420 +#define NEXT_MB_Y_ILDB_FIELD_IP_GEN5 7450 +#define ALL_SPAWNED_Y_ILDB_FIELD_IP_GEN5 7474 +#define ALL_DONE_Y_ILDB_FIELD_IP_GEN5 7484 +#define WAIT_FOR_UV_ILDB_FIELD_IP_GEN5 7484 +#define AVC_ILDB_CHILD_Y_ILDB_FIELD_IP_GEN5 7496 +#define WRITE_URB_Y_ILDB_FIELD_IP_GEN5 7896 +#define POST_ILDB_Y_ILDB_FIELD_IP_GEN5 7904 +#define READ_FOR_URB_Y_ILDB_FIELD_IP_GEN5 7918 +#define ELSE_Y_4x16T_ILDB_FIELD_IP_GEN5 7934 +#define ENDIF_Y_4x16T_ILDB_FIELD_IP_GEN5 7942 +#define AVC_ILDB_ROOT_UV_ILDB_FIELD_IP_GEN5 7976 +#define SLEEP_ENTRY_UV_ILDB_FIELD_IP_GEN5 8054 +#define POST_SLEEP_UV_ILDB_FIELD_IP_GEN5 8058 +#define NEXT_MB_UV_ILDB_FIELD_IP_GEN5 8090 +#define ALL_SPAWNED_UV_ILDB_FIELD_IP_GEN5 8114 +#define ALL_DONE_UV_ILDB_FIELD_IP_GEN5 8138 +#define AVC_ILDB_CHILD_UV_ILDB_FIELD_IP_GEN5 8144 +#define BYPASS_EXT_LEFT_EDGE_UV_ILDB_FIELD_IP_GEN5 8272 +#define BYPASS_EXT_TOP_EDGE_UV_ILDB_FIELD_IP_GEN5 8394 +#define WRITE_URB_UV_ILDB_FIELD_IP_GEN5 8470 +#define POST_ILDB_UV_ILDB_FIELD_IP_GEN5 8478 +#define READ_FOR_URB_UV_ILDB_FIELD_IP_GEN5 8492 +#define ELSE_Y_2x8T_ILDB_FIELD_IP_GEN5 8508 +#define ENDIF_Y_2x8T_ILDB_FIELD_IP_GEN5 8516 +#define AVC_ILDB_ROOT_Y_ILDB_MBAFF_IP_GEN5 8544 +#define SLEEP_ENTRY_Y_ILDB_MBAFF_IP_GEN5 8642 +#define POST_SLEEP_Y_ILDB_MBAFF_IP_GEN5 8646 +#define NEXT_MB_Y_ILDB_MBAFF_IP_GEN5 8676 +#define ALL_SPAWNED_Y_ILDB_MBAFF_IP_GEN5 8700 +#define ALL_DONE_Y_ILDB_MBAFF_IP_GEN5 8710 +#define WAIT_FOR_UV_ILDB_MBAFF_IP_GEN5 8710 +#define AVC_ILDB_CHILD_Y_ILDB_MBAFF_IP_GEN5 8720 +#define RE_ENTRY_IP_GEN5 8742 +#define ELSE_Y_16x16T_ILDB_MBAFF_IP_GEN5 8782 +#define ENDIF_Y_16x16T_ILDB_MBAFF_IP_GEN5 8792 +#define ELSE_Y_4x16T_IP_GEN5 8808 +#define ENDIF_Y_4x16T_IP_GEN5 8818 +#define BYPASS_V1_Y_IP_GEN5 8966 +#define BYPASS_V2_Y_IP_GEN5 8980 +#define BYPASS_V3_Y_IP_GEN5 8994 +#define ELSE_Y_16x4T_IP_GEN5 9024 +#define ENDIF_Y_16x4T_IP_GEN5 9034 +#define NOT_DUAL_FIELD_IP_GEN5 9060 +#define ELSE_Y_16x4_IP_GEN5 9060 +#define ENDIF_Y_16x4_IP_GEN5 9072 +#define DUAL_FIELD_Y_IP_GEN5 9168 +#define H0_Y_DONE_IP_GEN5 9236 +#define ELSE_Y_16x16_IP_GEN5 9310 +#define ENDIF_Y_16x16_IP_GEN5 9320 +#define ELSE_Y_16x4_SAVE_IP_GEN5 9342 +#define ENDIF_Y_16x4_SAVE_IP_GEN5 9354 +#define SKIP_ILDB_IP_GEN5 9356 +#define POST_ILDB_IP_GEN5 9364 +#define FILTER_Y_MBAFF_IP_GEN5 9378 +#define MBAFF_Y_ELSE3_IP_GEN5 9444 +#define MBAFF_Y_ENDIF3_IP_GEN5 9458 +#define MBAFF_Y_ELSE4_IP_GEN5 9488 +#define MBAFF_Y_ENDIF4_IP_GEN5 9502 +#define MBAFF_Y_ELSE2_IP_GEN5 9502 +#define MBAFF_Y_ENDIF6_IP_GEN5 9566 +#define MBAFF_Y_ENDIF7_IP_GEN5 9588 +#define MBAFF_Y_ENDIF2_IP_GEN5 9592 +#define MBAFF_Y_ENDIF1_IP_GEN5 9592 +#define AVC_ILDB_ROOT_UV_ILDB_MBAFF_IP_GEN5 9600 +#define SLEEP_ENTRY_UV_ILDB_MBAFF_IP_GEN5 9678 +#define POST_SLEEP_UV_ILDB_MBAFF_IP_GEN5 9682 +#define NEXT_MB_UV_ILDB_MBAFF_IP_GEN5 9714 +#define ALL_SPAWNED_UV_ILDB_MBAFF_IP_GEN5 9738 +#define ALL_DONE_UV_ILDB_MBAFF_IP_GEN5 9762 +#define AVC_ILDB_CHILD_UV_ILDB_MBAFF_IP_GEN5 9768 +#define RE_ENTRY_UV_ILDB_MBAFF_IP_GEN5 9794 +#define ELSE_UV_8X8T_ILDB_MBAFF_IP_GEN5 9836 +#define ENDIF_UV_8X8T_ILDB_MBAFF_IP_GEN5 9846 +#define ELSE_Y_2x8T_ILDB_MBAFF_IP_GEN5 9864 +#define ENDIF_Y_2x8T_ILDB_MBAFF_IP_GEN5 9874 +#define V0_U_NEXT1_IP_GEN5 9934 +#define V0_U_NEXT2_IP_GEN5 9954 +#define V0_U_NEXT3_IP_GEN5 9964 +#define BYPASS_V0_UV_IP_GEN5 10018 +#define ELSE_UV_8X2T_IP_GEN5 10082 +#define ENDIF_UV_8X2T_IP_GEN5 10092 +#define NOT_DUAL_FIELD_UV_IP_GEN5 10120 +#define ELSE_UV_8X2_IP_GEN5 10120 +#define ENDIF_UV_8X2_IP_GEN5 10132 +#define DUAL_FIELD_UV_IP_GEN5 10208 +#define H0_UV_DONE_IP_GEN5 10300 +#define ELSE_UV_8X8_IP_GEN5 10360 +#define ENDIF_UV_8X8_IP_GEN5 10370 +#define ELSE_UV_8X2_SAVE_IP_GEN5 10394 +#define ENDIF_UV_8X2_SAVE_IP_GEN5 10406 +#define SKIP_ILDB_UV_ILDB_MBAFF_IP_GEN5 10408 +#define POST_ILDB_UV_ILDB_MBAFF_IP_GEN5 10416 +#define FILTER_UV_MBAFF_IP_GEN5 10430 +#define MBAFF_UV_ELSE2_IP_GEN5 10466 +#define MBAFF_UV_ENDIF2_IP_GEN5 10496 +#define MBAFF_UV_ENDIF1_IP_GEN5 10496 +#define AllAVC_END_IP_GEN5 10500 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/header.inc new file mode 100644 index 000000000..1291febe3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/header.inc @@ -0,0 +1,333 @@ +/* + * Common header file for all AVC MC kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__HEADER__) // Make sure this file is only included once +#define __HEADER__ + +// Module name: header.inc +// +// Common header file for all AVC MC kernels +// + +#ifndef COMBINED_KERNEL +#ifdef DEV_CTG + #define SW_SCOREBOARD // SW Scoreboard should be enabled for CTG and earlier + #undef HW_SCOREBOARD // HW Scoreboard should be disabled for CTG and earlier +#else + #define HW_SCOREBOARD // HW Scoreboard should be enabled for ILK and beyond + #undef SW_SCOREBOARD // SW Scoreboard should be disabled for ILK and beyond +#endif // DEV_CTG +#endif // COMBINED_KERNEL + +//#define MONO // Build Monochrome kernels + +// Surface state definition +// +#define DESTY 0 +#define DESTUV 1 +#define REFYFM0 2 +#define REFYFM1 3 +#define REFYFM2 4 +#define REFYFM3 5 +#define REFYFM4 6 +#define REFYFM5 7 +#define REFYFM6 8 +#define REFYFM7 9 +#define REFYFM8 10 +#define REFYFM9 11 +#define REFYFM10 12 +#define REFYFM11 13 +#define REFYFM12 14 +#define REFYFM13 15 +#define REFYFM14 16 +#define REFYFM15 17 +#define REFUVFM0 18 +#define REFUVFM1 19 +#define REFUVFM2 20 +#define REFUVFM3 21 +#define REFUVFM4 22 +#define REFUVFM5 23 +#define REFUVFM6 24 +#define REFUVFM7 25 +#define REFUVFM8 26 +#define REFUVFM9 27 +#define REFUVFM10 28 +#define REFUVFM11 29 +#define REFUVFM12 30 +#define REFUVFM13 31 +#define REFUVFM14 32 +#define REFUVFM15 33 + +.default_execution_size (16) +.default_register_type :ub + +// ----------- Common constant definitions ------------ +// +// Bit position constants +// +#define BIT0 0x01 +#define BIT1 0x02 +#define BIT2 0x04 +#define BIT3 0x08 +#define BIT4 0x10 +#define BIT5 0x20 +#define BIT6 0x40 +#define BIT7 0x80 +#define BIT8 0x0100 +#define BIT9 0x0200 +#define BIT10 0x0400 +#define BIT11 0x0800 +#define BIT12 0x1000 +#define BIT13 0x2000 +#define BIT14 0x4000 +#define BIT15 0x8000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +#define GRFWIB 32 // GRF register width in byte +#define GRFWIW 16 // GRF register width in word +#define GRFWID 8 // GRF register width in dword + +#define INST_SIZE 16 // Instruction size = 128b = 16 Bytes + +#define REGION(Width,HStride) + +#define NULLREG null<1>:ud +#define NULLREGW null<1>:w + +#define TOP_FIELD 0 +#define BOTTOM_FIELD 1 + +// M2 - M9 for date writing message payload +.declare MSGPAYLOAD Base=m2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare MSGPAYLOADB Base=m2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare MSGPAYLOADW Base=m2 ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare MSGPAYLOADD Base=m2 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + +// ----------- Common Message Descriptor ------------ +// +#ifdef DEV_ILK +#define MSG_GW 0x03 // Message Gateway Extended Message Descriptor, +#define DAPREAD 0x04 // Data Port Read Extended Message Descriptor, +#define DAPWRITE 0x05 // Data Port Write Extended Message Descriptor, +#define TS 0x07 // Thread Spawner Extended Message Descriptor +#define TS_EOT 0x27 // End of Thread Extended Message Descriptor + +#define EOTMSGDSC 0x02000010 // End of Thread Message Descriptor, don't deference URB handle + +// Data Port Message Descriptor +#define DWBRMSGDSC_RC 0x02086000 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_TF 0x02086600 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_BF 0x02086700 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_SC 0x0208A000 // DWORD Block Read Message Descriptor, reading from sampler cache = A. +#define DWBRMSGDSC_SC_TF 0x0208E600 // DWORD Block Read Message Descriptor, reading top field from field mode sampler cache. +#define DWBRMSGDSC_SC_BF 0x0208E700 // DWORD Block Read Message Descriptor, reading bottom field from field mode sampler cache. + +#define DWBWMSGDSC 0x02082000 // DWORD Block Write Message Descriptor +#define DWBWMSGDSC_WC 0x0218A000 // DWORD Block Write Message Descriptor + write commit + +// Enable Write Commit writeback mesage +#define ENWRCOM 0x00108000 // Enable "write commit" and set response length = 1 + +// Thread Spawner Message Descriptor +#define TSMSGDSC 0x02000011 + +// Message Gateway Message Descriptors +#define OGWMSGDSC 0x02000000 // OpenGateway Message Descriptor +#define CGWMSGDSC 0x02000001 // CloseGateway Message Descriptor +#define FWDMSGDSC 0x02000002 // ForwardMsg Message Descriptor + +#define NOTIFYMSG 0x00008000 // Send notification with ForwardMsg message + +#define RESP_LEN(len) 0x100000*len +#define MSG_LEN(len) 0x2000000*len + +#else // Pre DEV_ILK + +#define MSG_GW +#define DAPREAD +#define DAPWRITE +#define TS +#define TS_EOT + +#define EOTMSGDSC 0x87100010 // End of Thread Message Descriptor, don't deference URB handle + +// Data Port Message Descriptor +#define DWBRMSGDSC_RC 0x04106000 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_TF 0x04106600 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_RC_BF 0x04106700 // DWORD Block Read Message Descriptor, reading from render cache = 6. +#define DWBRMSGDSC_SC 0x0410A000 // DWORD Block Read Message Descriptor, reading from sampler cache = A. +#define DWBRMSGDSC_SC_TF 0x0410A600 // DWORD Block Read Message Descriptor, reading top field from field mode sampler cache. +#define DWBRMSGDSC_SC_BF 0x0410A700 // DWORD Block Read Message Descriptor, reading bottom field from field mode sampler cache. + +#define DWBWMSGDSC 0x05102000 // DWORD Block Write Message Descriptor +#define DWBWMSGDSC_WC 0x0511A000 // DWORD Block Write Message Descriptor + write commit + +// Enable Write Commit writeback mesage +#define ENWRCOM 0x00018000 // Enable "write commit" and set response length = 1 + +// Thread Spawner Message Descriptor +#define TSMSGDSC 0x07100011 + +// Message Gateway Message Descriptors +#define OGWMSGDSC 0x03100000 // OpenGateway Message Descriptor +#define CGWMSGDSC 0x03100001 // CloseGateway Message Descriptor +#define FWDMSGDSC 0x03100002 // ForwardMsg Message Descriptor + +#define NOTIFYMSG 0x00008000 // Send notification with ForwardMsg message +#define ACKREQMSG 0x00014000 // Acknowledgement required so response length should be 1 + +#define RESP_LEN(len) 0x10000*len +#define MSG_LEN(len) 0x100000*len + +#endif // DEV_ILK + +// Enable frame/field selection in message descriptor +#define ENMSGDSCFM 0x400 // Enable MSGDSC to select frame surface +#define ENMSGDSCTF 0x600 // Enable MSGDSC to select top field surface +#define ENMSGDSCBF 0x700 // Enable MSGDSC to select bottom field surface + +// ----------- Message related register ------------ +// +#define MSGHDR m1 // Message Payload Header +#define MSGHDRY m1 // Message Payload Header register for Y data +#define MSGHDRY0 m1 // Message Payload Header register for Y data +#define MSGHDRY1 m2 // Message Payload Header register for Y data +#define MSGHDRY2 m3 // Message Payload Header register for Y data +#define MSGHDRY3 m4 // Message Payload Header register for Y data +#define MSGHDRUV m5 // Message Payload Header register for U/V data +#define MSGSRC r62 // Message source register, should never be used for other purposes +#define MSGDSC a0.0:ud // Message Descriptor register (type DWORD) + +#define MH_ORI MSGSRC.0 // DWORD block R/W message header block offset +#define MH_ORIX MSGSRC.0 // DWORD block R/W message header X offset +#define MH_ORIY MSGSRC.1 // DWORD block R/W message header Y offset +#define MH_SIZE MSGSRC.2 // DWORD block R/W message header block width & height + +// Data necessary for kernel operations +// +// Address registers used as pointers +// +// Note: Please keep the register order as is since they are used in compressed instructions +// +#define PPREDBUF_Y a0.4 // Pointer to predicted Y picture +#define PPREDBUF_Y1 a0.5 // Pointer to predicted Y picture for extended instruction + +#define PPREDBUF_UV a0.4 // Pointer to predicted U/V picture +#define PPREDBUF_UV1 a0.5 // Pointer to predicted U/V picture for extended instruction + +#define PDECBUF a0.4 // Pointer to decoded picture data +#define PDECBUF_UD a0.2 // Pointer to decoded picture data in DWORD unit + +// ----------- R63 is reserved for global variables ------------ +// +// Note: Don't program it with values other than what are defined here. + +#define G_REG r63 + +#define RETURN_REG G_REG.0 // Return pointer for all sub-routine calls (type DWORD) +#define RETURN_REG1 G_REG.1 // Return pointer for second-level calls + +#define I_ORIX G_REG.13 // :uw, H. origin of the macroblock in pixel unit, don't overwrite in-line data +#define I_ORIY G_REG.14 // :uw, V. origin of the macroblock in pixel unit, don't overwrite in-line data + +// Macros +// +// Note: For macros that require multiple line expansion, insert "\n" at the end of each line. +// +#define GRF(reg) r##reg +#ifdef DEV_ILK +#define END_THREAD send (8) NULLREG MSGHDR r0:ud TS_EOT EOTMSGDSC +#else +#define END_THREAD send (8) NULLREG MSGHDR r0:ud EOTMSGDSC +#endif // DEV_ILK + +#define CALL(subFunc, skipInst) add (1) RETURN_REG<1>:ud ip:ud (1+skipInst)*INST_SIZE \n\ + jmpi (1) subFunc + +#define CALL_1(subFunc, skipInst) add (1) RETURN_REG1<1>:ud ip:ud (1+skipInst)*INST_SIZE \n\ + jmpi (1) subFunc + +#define RETURN mov (1) ip:ud RETURN_REG<0;1,0>:ud // Return to calling module +#define RETURN_1 mov (1) ip:ud RETURN_REG1<0;1,0>:ud // Return to second-level calling module + // To support iterative calling +#ifdef SW_SCOREBOARD + +#ifdef DEV_CTG_A + #define LEADING_THREAD 1 // For CTG A, no SRT is needed. Only PRT is necessary +#else + #define LEADING_THREAD 0 // For CTG B0 and beyond, PRT doesn't take into debug count + #define DOUBLE_SB // Scoreboard size needs to be doubled +#endif + +#ifdef DOUBLE_SB // Scoreboard size needs to be doubled + #define SB_MASK 0x1ff // Scoreboard wrap-around mask (for 512 entries) +#else + #define SB_MASK 0xff // Scoreboard wrap-around mask (for 256 entries) +#endif // defined(DOUBLE_SB) + +// Scoreboard related definitions + +#define TEMPX r50 +#define TEMPY r51 +#define DELTA r52 + +#define M05_STORE r0.13 // :uw, reuse r0.6:ud upper-word to store M0.5 header information for scoreboard + + +#endif // SW_SCOREBOARD + +// End of header.inc + +#endif // !defined(__HEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/initialize_MBPara.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/initialize_MBPara.asm new file mode 100644 index 000000000..52948e23c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/initialize_MBPara.asm @@ -0,0 +1,155 @@ +/* + * Initialize parameters + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Initialize_MBPara.asm +// + + +//#if !defined(__INITIALIZE_MBPARA__) // Make sure this is only included once +//#define __INITIALIZE_MBPARA__ + + +// WA for weighted prediction - 2007/09/06 // shlee +// mov (1) guwW128(0)<1> guwR1(0)<0;1,0> // Copy the unique number indicating weight/offset=(128,0) + + + +// MB Type Category +// 1 B_L0_16x16 +// 2 B_L1_16x16 +// 3 B_Bi_16x16 +// 4 B_L0_L0_16x8 +// 5 B_L0_L0_8x16 +// 6 B_L1_L1_16x8 +// 7 B_L1_L1_8x16 +// 8 B_L0_L1_16x8 +// 9 B_L0_L1_8x16 +// 10 B_L1_L0_16x8 +// 11 B_L1_L0_8x16 +// 12 B_L0_Bi_16x8 +// 13 B_L0_Bi_8x16 +// 14 B_L1_Bi_16x8 +// 15 B_L1_Bi_8x16 +// 16 B_Bi_L0_16x8 +// 17 B_Bi_L0_8x16 +// 18 B_Bi_L1_16x8 +// 19 B_Bi_L1_8x16 +// 20 B_Bi_Bi_16x8 +// 21 B_Bi_Bi_8x16 +// 22 B_8x8 + + // TODO: + // Initialize interpolation area to eliminate uninitialized registers making the results of mac instructions XX. + // This issue was reported by Sharath on 5/25/2006, and why multiplication by zero still yields XX has not been understood yet. +#if 0 + mov (16) gudINTPY0(0)<1> 0:ud {Compr} + mov (16) gudINTPY0(2)<1> 0:ud {Compr} + mov (16) gudINTPY1(0)<1> 0:ud {Compr} + mov (16) gudINTPY1(2)<1> 0:ud {Compr} + mov (16) gudINTPC0(0)<1> 0:ud {Compr} + mov (16) gudINTPC1(0)<1> 0:ud {Compr} +#endif + + mov (1) gMVSTEP:w 0:w // Address increament for MV read + + cmp.e.f0.0 (1) null:w gwMBTYPE<0;1,0> 22:w + (-f0.0) jmpi INTERLABEL(NOT_8x8_MODE) + + //--- 8x8 mode + + // Starting address of error data blocks + cmp.e.f0.1 (2) null<1>:w gSUBMB_SHAPE<0;1,0>:ub 0:w + (f0.1) jmpi INTERLABEL(CONVERT_MVS) + + // Note: MVs and Weights/Offsets are already expanded by HW or driver + + // MV conversion - Convert each MV to absolute coord. (= MV + MB org. + block offset) + shl (16) gwTEMP(0)<1> gX<0;2,1>:w 2:w // Convert MB origin to 1/4-pel unit + mov (1) gMVSTEP:w 24:w // Address increament for MV read + add (2) gwTEMP(0,4)<2> gwTEMP(0,4)<4;2,2> 16:w + add (2) gwTEMP(0,9)<2> gwTEMP(0,9)<4;2,2> 16:w + add (4) gwTEMP(0,12)<1> gwTEMP(0,12)<4;4,1> 16:w + + add (16) gMV<1>:w gMV<16;16,1>:w gwTEMP(0)<16;16,1> + add (8) gwTEMP(0)<2> gwTEMP(0)<16;8,2> 32:w + add (16) gwMV(1,0)<1> gwMV(1,0)<16;16,1> gwTEMP(0)<16;16,1> + add (8) gwTEMP(0,1)<2> gwTEMP(0,1)<16;8,2> 32:w + add (16) gwMV(3,0)<1> gwMV(3,0)<16;16,1> gwTEMP(0)<16;16,1> + add (8) gwTEMP(0)<2> gwTEMP(0)<16;8,2> -32:w + add (16) gwMV(2,0)<1> gwMV(2,0)<16;16,1> gwTEMP(0)<16;16,1> + + jmpi INTERLABEL(INIT_ADDRESS_REGS) + +INTERLABEL(NOT_8x8_MODE): + + //--- !8x8 mode (16x16, 16x8, 8x16) + + // MVs and Weights/Offsets are expanded + cmp.le.f0.1 (8) null<1>:w gwMBTYPE<0;1,0> 3:w // Check 16x16 + mov (1) gSUBMB_SHAPE:ub 0:uw // subMB shape + (f0.1) mov (8) gMV<1>:d gMV<0;2,1>:d + (f0.1) mov (8) gdWGT(1,0)<1> gWGT<0;4,1>:d + (f0.1) mov (4) gdWGT(0,4)<1> gWGT<4;4,1>:d + +INTERLABEL(CONVERT_MVS): + // MV conversion - Convert each MV to absolute coord. (= MV + MB org. + block offset) + shl (2) gwTEMP(0)<1> gX<2;2,1>:w 2:w // Convert MB origin to 1/4-pel unit + add (16) gMV<1>:w gMV<16;16,1>:w gwTEMP(0)<0;2,1> + add (2) gwMV(0,4)<2> gwMV(0,4)<4;2,2> 32:w //{NoDDClr} + add (2) gwMV(0,9)<2> gwMV(0,9)<4;2,2> 32:w //{NoDDChk,NoDDClr} + add (4) gwMV(0,12)<1> gwMV(0,12)<4;4,1> 32:w //{NoDDChk} + +INTERLABEL(INIT_ADDRESS_REGS): + // Initialize the address registers + mov (2) pERRORYC:ud nOFFSET_ERROR:ud {NoDDClr} // Address of Y and C error blocks + mov (1) pRECON_MV:ud nOFFSET_RECON_MV:ud {NoDDChk,NoDDClr} // Address of recon area and motion vectors + mov (1) pWGT_BIDX:ud nOFFSET_WGT_BIDX:ud {NoDDChk} // Address of weights/offsets and binding tbl idx + + // Read the parity of the current field (gPARITY - 0:top, 1:bottom, 3:frame) + // and set message descriptor for frame/field write +#if defined(MBAFF) + and.nz.f0.0 (1) null:uw gFIELDMBFLAG:ub nFIELDMB_MASK:uw + (f0.0) and (1) gPARITY:uw gMBPARITY:ub nMBPARITY_MASK:uw + (-f0.0) mov (1) gPARITY:uw 3:uw +#elif defined(FIELD) + and (1) gPARITY:uw gMBPARITY:ub nMBPARITY_MASK:uw +#endif + + +//#endif // !defined(__INITIALIZE_MBPARA__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/inter_Header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/inter_Header.inc new file mode 100644 index 000000000..97829c065 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/inter_Header.inc @@ -0,0 +1,401 @@ +/* + * Header file for all AVC INTER prediction kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__INTER_HEADER__) // Make sure this file is only included once +#define __INTER_HEADER__ + +// Module name: inter_header.inc +// +// Header file for all AVC INTER prediction kernels +// + +#define INTER_KERNEL + +//------------------------------------------------------------------------------------------- +// TODO: The followings will be merged with the above definitions later +//------------------------------------------------------------------------------------------- + + +//------------ Input parameters & bit masks + +// SW WA for weighted prediction - 2007/09/06 +//.declare guwR1 Base=r1 ElementSize=2 Type=uw +//.declare guwW128 Base=r63.13 ElementSize=2 Type=uw + +#ifdef DEV_ILK +// #define SW_W_128 // Enable SW WA for special Weight=128 case. Can be commented to disable it +#else // Pre DEV_ILK +#define SW_W_128 // Enable SW WA for special Weight=128 case. +#endif // DEV_ILK + +#ifdef SW_W_128 +.declare gudW128 Base=r1.0 ElementSize=4 Type=ud +#else +#endif // SW_W_128 + +#define gORIX r3.4 // :ub, X origin +#define gORIY r3.5 // :ub, Y origin + +#define gCBP r3.9 // :ub, CBP (0, 0, Y0, Y1, Y2, Y3, Cb, Cr) +#define nCBPY_MASK 0x3c +#define nCBPU_MASK 0x2 +#define nCBPV_MASK 0x1 + +#define gFIELDFLAGS r3.1 // :uw - To compute message descriptor for write + +#define gMBTYPE r3.1 // :ub, MB type +#define nMBTYPE_MASK 0x1f +#define gFIELDMBFLAG r3.1 // :ub, Field MB flag +#define nFIELDMB_MASK 0x40 +#define gMBPARITY r3.3 // :ub, Bottom field flag +#define nMBPARITY_MASK 0x01 + +#define gWPREDFLAG r3.0 // :ub, Weighted pred flag +#define nWBIDIR_MASK 0xc0 + +#define gSUBMB_SHAPE r3.12 // :ub, Sub-MB shape +#define gSUBMB_MODE r3.13 // :ub, Sub-MB prediction mode +.declare guwSUBMB_SHAPE_MODE Base=r3.6 ElementSize=2 Type=uw + +#define gYWDENOM r3.14 // :ub, Luma log2 weight denom +#define gCWDENOM r3.15 // :ub, Chroma log2 weight denom + +#define gADDR r3.24 // :ub, Register addresses of error data / MV + +.declare gubBIDX Base=r3.16 ElementSize=1 Type=ub + +#define gWGT r8 // Weights/offsets +.declare gdWGT Base=r8 ElementSize=4 Type=d +.declare gwWGT Base=r8 ElementSize=2 Type=w +#define gMV r4 // MVs +.declare gwMV Base=r4 ElementSize=2 Type=w +.declare gdMV Base=r4 ElementSize=4 Type=d + +.declare gwERRORY Base=r10 ElementSize=2 Type=w // 16 GRFs +.declare gubERRORY Base=r10 ElementSize=1 Type=ub +.declare gwERRORC Base=r26 ElementSize=2 Type=w // 8 GRFs +.declare gubERRORC Base=r26 ElementSize=2 Type=ub + +//------------ Address registers +#define pMSGDSC a0.0 // ud: Must be the leading dword of the address register +#define pREF a0.0 + +#define pBIDX a0.2 +#define pWGT a0.3 +#define pERRORYC a0.2 // :ud +#define pERRORY a0.4 +#define pERRORC a0.5 +#define pMV a0.6 + +#define pWGT_BIDX a0.1 // :ud, WGT & BIDX +#define pRECON_MV a0.3 // :ud, RECON & MV + +#define pREF0 a0.0 // :uw +#define pREF0D a0.0 // :ud +#define pREF1 a0.1 +#define pREF2 a0.2 +#define pREF2D a0.1 // :ud +#define pREF3 a0.3 +#define pREF4 a0.4 +#define pREF4D a0.2 // :ud +#define pREF5 a0.5 +#define pREF6 a0.6 +#define pREF6D a0.3 // :ud +#define pREF7 a0.7 + +#define pRES a0.6 +#define pRESD a0.3 // :ud +#define pRESULT a0.7 + +#define p0 a0.0 +#define p1 a0.1 + +//------------ Constants for static/inline/indirect +#define nOFFSET_BIDX 112 // = 32*3+4*4 + +#define nOFFSET_WGT 256 // = 32*8 +#define nOFFSET_WGT_BIDX 0x01000070 // = (256<<16)+112 +#define nOFFSET_ERROR 0x03400140 // = (320+128*4)<<16+320=0x03400140 +#define nOFFSET_ERRORY 0x0140 +#define nOFFSET_ERRORC 0x0340 +#define nOFFSET_MV 128 // = 32*4 +#define nOFFSET_RECON_MV 0x04400080 // = (1088<<16)+128 // TODO: OFFSET_RECON is obsolete + +//------------ Constants for kernel internal variables +#define nOFFSET_INTPY0 0x0640 // = 32*50 +#define nOFFSET_INTPY1 0x0780 // = 32*60 +#define nOFFSET_INTPC0 0x06c0 // = 32*54 +#define nOFFSET_INTPC1 0x0480 // = 32*36 +#define nOFFSET_INTP0 0x06c00640 +#define nOFFSET_INTP1 0x04800780 + +#define nOFFSET_INTERIM 0x0480 // = 32*36 +#define nOFFSET_INTERIM2 0x04A00480 // = ((32*37)<<16)|(32*36) +#define nOFFSET_INTERIM3 0x04A00480 // = ((32*36+32)<<16)|(32*36) +#define nOFFSET_INTERIM4 0x04A00490 // = ((32*37)<<16)|(32*36+16) + +#define nOFFSET_INTERIM4x4 0x04C0 // = 32*38 +#define nOFFSET_INTERIM4x4_4 0x04E004D0 // = ((32*38+32)<<16)|(32*38+16) +#define nOFFSET_INTERIM4x4_5 0x04D004C0 // = ((32*38+16)<<16)|(32*38) +#define nOFFSET_INTERIM4x4_6 0x04E004C0 // = ((32*38+32)<<16)|(32*38) +#define nOFFSET_INTERIM4x4_7 0x04D004C8 // = ((32*38+16)<<16)|(32*38+8) +#define nOFFSET_INTERIM4x4_8 0x04E004D8 // = ((32*38+32)<<16)|(32*38+24) +#define nOFFSET_INTERIM4x4_9 0x04F004E8 // = ((32*38+48)<<16)|(32*38+40) + +#define nOFFSET_RES 0x540 // = 32*42 +#define nOFFSET_REF 0x560 // = 32*43 +#define nOFFSET_REFC 0x700 // = 32*56 + + // Binding table index +#define nBDIX_DESTY 0 +#define nBDIX_DESTC 1 +#define nBI_LC_DIFF 0x10 // Binding table index diff between luma and chroma + +#define nGRFWIB 32 +#define nGRFHWIB 16 + +//------------ Regions + +.declare gudREF Base=r43 ElementSize=4 SrcRegion=<16;16,1> Type=ud +.declare gubREF Base=r43 ElementSize=1 Type=ub +.declare gudREFC Base=r56 ElementSize=4 SrcRegion=<16;16,1> Type=ud + +// 16x16 handling +.declare gudREF21x21 Base=r58 ElementSize=4 SrcRegion=<16;16,1> Type=ud +.declare gudREF18x10 Base=r66 ElementSize=4 SrcRegion=<16;16,1> Type=ud +.declare gubREF18x10 Base=r66 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + +.declare gudREF16x16 Base=r38 ElementSize=4 Type=ud // 8 GRFs +.declare gubREF16x16 Base=r38 ElementSize=1 Type=ub +.declare gudREFC16x8 Base=r46 ElementSize=4 Type=ud // 4 GRFs +.declare gubREFC16x8 Base=r46 ElementSize=1 Type=ub + +// TODO +.declare gubAVG Base=r56 ElementSize=1 Type=ub +.declare gubREFY_BWD Base=r64 ElementSize=1 Type=ub +.declare gubREFC_BWD Base=r72 ElementSize=1 Type=ub + + +.declare guwINTPY0 Base=r50 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare gudINTPY0 Base=r50 ElementSize=4 Type=ud +.declare gubINTPY0 Base=r50 ElementSize=1 SrcRegion=<32;16,2> Type=ub +.declare guwINTPY1 Base=r60 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare gudINTPY1 Base=r60 ElementSize=4 Type=ud +.declare gubINTPY1 Base=r60 ElementSize=1 SrcRegion=<32;16,2> Type=ub +.declare guwYPRED Base=r50 ElementSize=2 SrcRegion=<8;8,1> Type=uw +.declare gubYPRED Base=r50 ElementSize=1 SrcRegion=<32;16,2> Type=ub + +.declare guwINTPC0 Base=r54 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare gwINTPC0 Base=r54 ElementSize=2 SrcRegion=<16;16,1> Type=w +.declare gudINTPC0 Base=r54 ElementSize=4 Type=ud +.declare gubINTPC0 Base=r54 ElementSize=1 SrcRegion=<32;16,2> Type=ub +.declare guwINTPC1 Base=r36 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare gudINTPC1 Base=r36 ElementSize=4 Type=ud +.declare gubINTPC1 Base=r36 ElementSize=1 SrcRegion=<32;16,2> Type=ub +.declare guwCPRED Base=r54 ElementSize=2 SrcRegion=<16;8,2> Type=uw +.declare gubCPRED Base=r54 ElementSize=1 SrcRegion=<32;8,4> Type=ub + +#define gINTERIM r36 +.declare gubINTERIM_BUF Base=r36 ElementSize=1 SrcRegion=<32;16,2> Type=ub +#define gINTERIM4x4 r38 +.declare gubINTERIM4x4_BUF Base=r38 ElementSize=1 SrcRegion=<32;16,2> Type=ub +.declare gwINTERIM4x4_BUF Base=r38 ElementSize=2 Type=w + +.declare gubINTERIM_BUF2 Base=r42 ElementSize=1 SrcRegion=<8;4,2> Type=ub +.declare gwINTERIM_BUF2 Base=r42 ElementSize=2 SrcRegion=<16;16,1> Type=w +.declare guwINTERIM_BUF2 Base=r42 ElementSize=2 Type=uw + +.declare gwINTERIM_BUF3 Base=r38 ElementSize=2 SrcRegion=<16;16,1> Type=w // 2 GRFs +.declare gubINTERIM_BUF3 Base=r38 ElementSize=1 Type=ub + +.declare gwTEMP Base=r42 ElementSize=2 SrcRegion=<16;16,1> Type=w + +//------------ General registers + +#define gX r3.2 // w +#define gY r3.3 // w + +#define gMSGDSC_R r3.6 // ud +#define gMSGDSC_W r3.7 // ud + +#ifdef SW_W_128 +.declare gwMBTYPE Base=r8.6 ElementSize=2 Type=w // Shared with gLOOP_SUBMB + +// TODO +#define gLOOP_SUBMB r8.6 +#define gLOOP_SUBMBPT r8.7 +#define gLOOP_DIR r9.6 +#define gLOOPCNT r9.7 // Loop counter for submodules +#else +.declare gwMBTYPE Base=r1.0 ElementSize=2 Type=w // Shared with gLOOP_SUBMB + +// TODO +#define gLOOP_SUBMB r1.0 +#define gLOOP_SUBMBPT r1.1 +#define gLOOP_DIR r8.7 +#define gLOOPCNT r9.7 // Loop counter for submodules +#endif // SW_W_128 + +#define gW0 r34.6 // Temporary WORD +#define gW1 r34.7 // Temporary WORD +#define gW2 r34.8 // Temporary WORD +#define gW3 r34.9 // Temporary WORD +#define gD0 r34.3 // Temporary DWORD + +#define gW4 r34.15 + +// + +#define gMVX_INT r34.0 // :w +#define gMVY_INT r34.1 // :w +#define gMVX_FRAC r34.2 // :w +#define gMVY_FRAC r34.3 // :w +#define gMVX_FRACC r34.4 // :w +#define gMVY_FRACC r34.5 // :w + +#define gpINTPY r34.10 +#define gpINTPC r34.11 +#define gpINTP r34.5 // DW + +#define gPREDFLAG r34.12 +#define gBIDX r34.13 +#define gREFPARITY r34.14 +#define gCHRMVADJ r1.14 +#define gPARITY r1.15 +#define gCBP_MASK r1.1 + +#define gMVSTEP r1.13 + +#define gpADDR r1.2 // :uw (8 words) + +#define gSHAPETEMP r8.15 // :uw + +#define gCOEFA r42.0 +#define gCOEFB r42.1 +#define gCOEFC r42.2 +#define gCOEFD r42.3 + +// Weighted prediction +#define gPREDFLAG0 r46.0 +#define gPREDFLAG1 r46.2 + +#define gWEIGHTFLAG r43.2 +#define gBIPRED r43.3 +#define gYADD r43.4 +#define gCADD r43.5 +#define gYSHIFT r43.6 +#define gCSHIFT r43.7 + +#define gOFFSET r44.0 +#define gUOFFSET r44.1 +#define gVOFFSET r44.2 + +#define gWT0 r45.0 +#define gO0 r45.1 +#define gWT1 r45.2 +#define gO1 r45.3 +#define gUW0 r45.4 +#define gUO0 r45.5 +#define gUW1 r45.6 +#define gUO1 r45.7 +#define gVW0 r45.8 +#define gVO0 r45.9 +#define gVW1 r45.10 +#define gVO1 r45.11 + +#define gWT0_D r45.0 +#define gUW0_D r45.2 + +//------------ Message-related Registers & constants +#define gMSGSRC r2 // Message Source + +#define mMSGHDR m1 +#define mMSGHDRY m1 +#define mMSGHDRC m2 +#define mMSGHDR1 m1 +#define mMSGHDR2 m2 +#define mMSGHDR3 m3 +#define mMSGHDR4 m4 +#define mMSGHDRYW m1 +#define mMSGHDRCW m10 + +#ifdef DEV_ILK + // 0000 0100(read) 0001(msg len) xxxx(resp len) 1010 (sampler cache) xxxx (field/frame) xxxx xxxx (bidx) +#define nDWBRMSGDSC_SC 0x0208A002 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache +#define nDWBRMSGDSC_SC_TF 0x0208E602 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache +#define nDWBRMSGDSC_SC_BF 0x0208E702 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache + // 0000 0101(write) 0001(msg len) xxxx(resp len) 0010 (render cache) xxxx (field/frame) xxxx xxxx (bidx) +#define nDWBWMSGDSC 0x02082000 // DWORD Block Write Message Descriptor through Data Port, Render Cache +#define nDWBWMSGDSC_TF 0x02082600 // DWORD Block Write Message Descriptor through Data Port, Render Cache +#define nDWBWMSGDSC_BF 0x02082700 // DWORD Block Write Message Descriptor through Data Port, Render Cache + +#else // Pre DEV_ILK + // 0000 0100(read) 0001(msg len) xxxx(resp len) 1010 (sampler cache) xxxx (field/frame) xxxx xxxx (bidx) +#define nDWBRMSGDSC_SC 0x0410A002 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache +#define nDWBRMSGDSC_SC_TF 0x0410A602 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache +#define nDWBRMSGDSC_SC_BF 0x0410A702 // DWORD Block Read Message Descriptor through Data Port, Sampler Cache + // 0000 0101(write) 0001(msg len) xxxx(resp len) 0010 (render cache) xxxx (field/frame) xxxx xxxx (bidx) +#define nDWBWMSGDSC 0x05102000 // DWORD Block Write Message Descriptor through Data Port, Render Cache +#define nDWBWMSGDSC_TF 0x05102600 // DWORD Block Write Message Descriptor through Data Port, Render Cache +#define nDWBWMSGDSC_BF 0x05102700 // DWORD Block Write Message Descriptor through Data Port, Render Cache +#endif // DEV_ILK + +#define nDWB_FIELD_MASK 0x0600 + +// message data payload +.declare mbMSGPAYLOADY Base=m2 ElementSize=1 SrcRegion=REGION(16,1) Type=b +.declare mbMSGPAYLOADC Base=m11 ElementSize=1 SrcRegion=REGION(16,1) Type=b + +// Destination registers for write commit +#define gREG_WRITE_COMMIT_Y r10.0 +#define gREG_WRITE_COMMIT_UV r11.0 + +#define RETURN_REG_INTER r1.5 // Return pointer for all sub-routine calls (type DWORD) + +#define CALL_INTER(subFunc, skipInst) add (1) RETURN_REG_INTER<1>:ud ip:ud 1+skipInst*INST_SIZE \n\ + jmpi (1) subFunc +#define RETURN_INTER mov (1) ip:ud RETURN_REG_INTER<0;1,0>:ud // Return to calling module + + +// End of inter_header.inc + +#endif // !defined(__INTER_HEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_2x2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_2x2.asm new file mode 100644 index 000000000..03ee00da2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_2x2.asm @@ -0,0 +1,87 @@ +/* + * Interpolation kernel for chrominance 2x2 motion compensation + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Interpolate_C_2x2.asm +// +// Interpolation kernel for chrominance 2x2 motion compensation +// +// $Revision: 8 $ +// $Date: 10/09/06 4:00p $ +// + + +//#if !defined(__Interpolate_C_2x2__) // Make sure this is only included once +//#define __Interpolate_C_2x2__ + + + // (8-xFrac) and (8-yFrac) + add (2) gW0<1>:w gMVX_FRACC<2;2,1>:w -0x08:w + + // Compute the GRF address of the starting position of the reference area + mov (1) pREF0:w nOFFSET_REFC:w {NoDDClr} + mov (1) pRESULT:uw gpINTPC:uw {NoDDChk} + + // gCOEFA = (8-xFrac)*(8-yFrac) + // gCOEFB = xFrac*(8-yFrac) + // gCOEFC = (8-xFrac)*yFrac + // gCOEFD = xFrac*yFrac + mul (1) gCOEFD:w gMVX_FRACC:w gMVY_FRACC:w {NoDDClr} + mul (1) gCOEFA:w -gW0:w -gW1:uw {NoDDClr,NoDDChk} + mul (1) gCOEFB:w gMVX_FRACC:w -gW1:uw {NoDDClr,NoDDChk} + mul (1) gCOEFC:w -gW0:w gMVY_FRACC:w {NoDDChk} + + // (8-xFrac)*(8-yFrac)*A + // --------------------- + mul (8) acc0<1>:uw r[pREF0,0]<8;4,1>:ub gCOEFA:uw + + // xFrac*(8-yFrac)*B + // ------------------- + mac (8) acc0<1>:uw r[pREF0,2]<8;4,1>:ub gCOEFB:uw + + // (8-xFrac)*yFrac*C + // ------------------- + mac (8) acc0<1>:uw r[pREF0,8]<8;4,1>:ub gCOEFC:uw + + // xFrac*yFrac*D + // ----------------- + mac (8) gwINTERIM_BUF2(0)<1> r[pREF0,10]<8;4,1>:ub gCOEFD:uw + mov (4) r[pRESULT]<1>:uw gwINTERIM_BUF2(0)<4;4,1> {NoDDClr} + mov (4) r[pRESULT,16]<1>:uw gwINTERIM_BUF2(0,4)<4;4,1> {NoDDChk} + +//#endif // !defined(__Interpolate_C_2x2__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_4x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_4x4.asm new file mode 100644 index 000000000..8f6db8dda --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_C_4x4.asm @@ -0,0 +1,97 @@ +/* + * Interpolation kernel for chrominance 4x4 motion compensation + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Interpolate_C_4x4_Func.asm +// +// Interpolation kernel for chrominance 4x4 motion compensation +// +// $Revision: 8 $ +// $Date: 10/09/06 4:00p $ +// + + +//#if !defined(__Interpolate_C_4x4_Func__) // Make sure this is only included once +//#define __Interpolate_C_4x4_Func__ + + +INTERLABEL(Interpolate_C_4x4_Func): + + + // (8-xFrac) and (8-yFrac) + add (2) gW0<1>:w gMVX_FRACC<2;2,1>:w -0x08:w + + // Compute the GRF address of the starting position of the reference area + mov (1) pREF0:w nOFFSET_REFC:w {NoDDClr} + mov (1) pREF1:uw nOFFSET_REFC+16:w {NoDDChk,NoDDClr} + mov (1) pRESULT:uw gpINTPC:uw {NoDDChk} + + // gCOEFA = (8-xFrac)*(8-yFrac) + // gCOEFB = xFrac*(8-yFrac) + // gCOEFC = (8-xFrac)*yFrac + // gCOEFD = xFrac*yFrac + mul (1) gCOEFD:w gMVX_FRACC:w gMVY_FRACC:w {NoDDClr} + mul (1) gCOEFA:w -gW0:w -gW1:uw {NoDDClr,NoDDChk} + mul (1) gCOEFB:w gMVX_FRACC:w -gW1:uw {NoDDClr,NoDDChk} + mul (1) gCOEFC:w -gW0:w gMVY_FRACC:w {NoDDChk} + + add (2) gW0<1>:uw pREF0<2;2,1>:uw 16:w + + // (8-xFrac)*(8-yFrac)*A + // --------------------- + mul (16) acc0<1>:uw r[pREF0,0]<16;8,1>:ub gCOEFA:uw + mul (16) acc1<1>:uw r[pREF0,nGRFWIB]<16;8,1>:ub gCOEFA:uw + + // xFrac*(8-yFrac)*B + // ------------------- + mac (16) acc0<1>:uw r[pREF0,2]<16;8,1>:ub gCOEFB:uw + mac (16) acc1<1>:uw r[pREF0,nGRFWIB+2]<16;8,1>:ub gCOEFB:uw + + // (8-xFrac)*yFrac*C + // ------------------- + mov (2) pREF0<1>:uw gW0<2;2,1>:uw + mac (16) acc0<1>:uw r[pREF0,0]<8,1>:ub gCOEFC:uw + mac (16) acc1<1>:uw r[pREF0,nGRFWIB]<8,1>:ub gCOEFC:uw + + // xFrac*yFrac*D + // ----------------- + mac (16) r[pRESULT]<1>:uw r[pREF0,2]<8,1>:ub gCOEFD:uw + mac (16) r[pRESULT,GRFWIB]<1>:uw r[pREF0,nGRFWIB+2]<8,1>:ub gCOEFD:uw {SecHalf} + + +//#endif // !defined(__Interpolate_C_4x4_Func__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_4x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_4x4.asm new file mode 100644 index 000000000..279c5c5fe --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_4x4.asm @@ -0,0 +1,247 @@ +/* + * Interpolation kernel for luminance motion compensation + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Interpolate_Y_4x4.asm +// +// Interpolation kernel for luminance motion compensation +// +// $Revision: 10 $ +// $Date: 10/09/06 4:00p $ +// + + + // Compute the GRF address of the starting position of the reference area +#if 1 + (-f0.1) mov (1) pREF:w nOFFSET_REF+2+nGRFWIB:w + (f0.1) mov (1) pREF:w nOFFSET_REF+2:w + mov (1) pRESULT:uw gpINTPY:uw +#else + mov (1) pREF:w nOFFSET_REF+2+nGRFWIB:w {NoDDClr} + mov (1) pRESULT:uw gpINTPY:uw {NoDDChk} +#endif + + /* + * | | + * - - 0 1 2 3 + - + * 4 5 6 7 + * 8 9 A B + * C D E F + * - - + - - - + - + * | | + */ + + // Case 0 + or.z.f0.1 (16) null:w gMVY_FRAC<0;1,0>:w gMVX_FRAC<0;1,0>:w + (f0.1) mov (4) r[pRESULT]<1>:uw r[pREF0]<4;4,1>:ub + (f0.1) mov (4) r[pRESULT,16]<1>:uw r[pREF0,16]<4;4,1>:ub + (f0.1) mov (4) r[pRESULT,32]<1>:uw r[pREF0,32]<4;4,1>:ub + (f0.1) mov (4) r[pRESULT,48]<1>:uw r[pREF0,48]<4;4,1>:ub + (f0.1) jmpi INTERLABEL(Exit_Interpolate_Y_4x4) + + // Store all address registers + mov (8) gpADDR<1>:w a0<8;8,1>:w + + mul.z.f0.0 (1) gW4:w gMVY_FRAC:w gMVX_FRAC:w + and.nz.f0.1 (1) null gW4:w 1:w + + add (1) pREF1:uw pREF0:uw nGRFWIB/2:uw + add (2) pREF2<1>:uw pREF0<2;2,1>:uw nGRFWIB:uw + mov (4) gW0<1>:uw pREF0<4;4,1>:uw + + (f0.0) jmpi INTERLABEL(Interpolate_Y_H_4x4) + (f0.1) jmpi INTERLABEL(Interpolate_Y_H_4x4) + + //----------------------------------------------------------------------- + // CASE: A69BE (H/V interpolation) + //----------------------------------------------------------------------- + + // Compute interim horizontal intepolation + add (1) pREF0<1>:uw pREF0<0;1,0>:uw -34:w + add (1) pREF1<1>:uw pREF1<0;1,0>:uw -18:w {NoDDClr} + mov (1) pRESD:ud nOFFSET_INTERIM4x4_5:ud {NoDDChk} // Case 69be + + // Check whether this position is 'A' + cmp.e.f0.0 (1) null gW4:w 4:w + + $for(0;<2;1) { + add (16) acc0<1>:w r[pREF0,nGRFWIB*2*%1]<16;4,1>:ub r[pREF0,nGRFWIB*2*%1+5]<16;4,1>:ub {Compr} + mac (16) acc0<1>:w r[pREF0,nGRFWIB*2*%1+1]<16;4,1>:ub -5:w {Compr} + mac (16) acc0<1>:w r[pREF0,nGRFWIB*2*%1+2]<16;4,1>:ub 20:w {Compr} + mac (16) acc0<1>:w r[pREF0,nGRFWIB*2*%1+3]<16;4,1>:ub 20:w {Compr} + mac (16) r[pRES,nGRFWIB*%1]<1>:w r[pREF0,nGRFWIB*2*%1+4]<16;4,1>:ub -5:w {Compr} + } + // last line + add (4) acc0<1>:w r[pREF0,nGRFWIB*2*2]<4;4,1>:ub r[pREF0,nGRFWIB*2*2+5]<4;4,1>:ub + mac (4) acc0<1>:w r[pREF0,nGRFWIB*2*2+1]<4;4,1>:ub -5:w + mac (4) acc0<1>:w r[pREF0,nGRFWIB*2*2+2]<4;4,1>:ub 20:w + mac (4) acc0<1>:w r[pREF0,nGRFWIB*2*2+3]<4;4,1>:ub 20:w + mac (4) r[pRES,nGRFWIB*2]<1>:w r[pREF0,nGRFWIB*2*2+4]<4;4,1>:ub -5:w + + // Compute interim/output vertical interpolation + mov (1) pREF6D:ud nOFFSET_INTERIM4x4_4:ud {NoDDClr} + mov (1) pREF0D:ud nOFFSET_INTERIM4x4_7:ud {NoDDChk,NoDDClr} + mov (1) pREF2D:ud nOFFSET_INTERIM4x4_8:ud {NoDDChk,NoDDClr} + mov (1) pREF4D:ud nOFFSET_INTERIM4x4_9:ud {NoDDChk} + + add (16) acc0<1>:w gwINTERIM4x4_BUF(0)<16;16,1> 512:w + mac (16) acc0<1>:w gwINTERIM4x4_BUF(1)<16;16,1> -5:w + mac (16) acc0<1>:w r[pREF6,0]<8,1>:w 20:w + + (f0.0) mov (1) pRES:uw nOFFSET_RES:uw // Case a + (-f0.0) mov (1) pRES:uw nOFFSET_INTERIM4x4:uw // Case 69be + + mac (16) acc0<1>:w r[pREF0,0]<4,1>:w -5:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB]<4,1>:w 1:w + mac (16) acc0<1>:w r[pREF2,0]<4,1>:w 20:w + asr.sat (16) r[pRES]<2>:ub acc0<16;16,1>:w 10:w + + (f0.0) jmpi INTERLABEL(Return_Interpolate_Y_4x4) + +INTERLABEL(Interpolate_Y_H_4x4): + + cmp.e.f0.0 (1) null gMVX_FRAC:w 0:w + cmp.e.f0.1 (1) null gMVY_FRAC:w 2:w + (f0.0) jmpi INTERLABEL(Interpolate_Y_V_4x4) + (f0.1) jmpi INTERLABEL(Interpolate_Y_V_4x4) + + //----------------------------------------------------------------------- + // CASE: 123567DEF (H interpolation) + //----------------------------------------------------------------------- + + add (4) pREF0<1>:uw gW0<4;4,1>:uw -2:w + cmp.g.f0.0 (4) null:w gMVY_FRAC<0;1,0>:w 2:w + cmp.e.f0.1 (1) null gMVX_FRAC:w 2:w + (f0.0) add (4) pREF0<1>:uw pREF0<4;4,1>:uw nGRFWIB/2:uw + + cmp.e.f0.0 (1) null:w gMVY_FRAC<0;1,0>:w 0:w + + (f0.1) mov (1) pRESULT:uw nOFFSET_RES:uw // Case 26E + (-f0.1) mov (1) pRESULT:uw nOFFSET_INTERIM4x4:uw // Case 1357DF + + // Compute interim/output horizontal interpolation + add (16) acc0<1>:w r[pREF0]<4,1>:ub 16:w + mac (16) acc0<1>:w r[pREF0,1]<4,1>:ub -5:w + mac (16) acc0<1>:w r[pREF0,2]<4,1>:ub 20:w + mac (16) acc0<1>:w r[pREF0,3]<4,1>:ub 20:w + mac (16) acc0<1>:w r[pREF0,4]<4,1>:ub -5:w + mac (16) acc0<1>:w r[pREF0,5]<4,1>:ub 1:w + asr.sat (16) r[pRESULT]<2>:ub acc0<16;16,1>:w 5:w + + (-f0.1) jmpi INTERLABEL(Interpolate_Y_V_4x4) + (-f0.0) jmpi INTERLABEL(Average_4x4) + + jmpi INTERLABEL(Return_Interpolate_Y_4x4) + +INTERLABEL(Interpolate_Y_V_4x4): + + cmp.e.f0.0 (1) null gMVY_FRAC:w 0:w + (f0.0) jmpi INTERLABEL(Interpolate_Y_I_4x4) + + //----------------------------------------------------------------------- + // CASE: 48C59D7BF (V interpolation) + //----------------------------------------------------------------------- + + cmp.g.f0.1 (8) null:w gMVX_FRAC<0;1,0>:w 2:w + + mov (4) pREF0<1>:uw gW0<4;4,1>:uw {NoDDClr} + add (4) pREF4<1>:w gW0<4;4,1>:uw 16:w {NoDDChk} + + (f0.1) add (8) pREF0<1>:uw pREF0<4;4,1>:uw 1:uw + + cmp.e.f0.0 (1) null:w gMVX_FRAC<0;1,0>:w 0:w + cmp.e.f0.1 (1) null gMVY_FRAC:w 2:w + + // Compute interim/output vertical interpolation + add (16) acc0<1>:w r[pREF0,-nGRFWIB]<4,1>:ub 16:w + mac (16) acc0<1>:w r[pREF0]<4,1>:ub 20:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB]<4,1>:ub -5:w + mac (16) acc0<1>:w r[pREF4,-nGRFWIB]<4,1>:ub -5:w + mac (16) acc0<1>:w r[pREF4]<4,1>:ub 20:w + mac (16) acc0<1>:w r[pREF4,nGRFWIB]<4,1>:ub 1:w + + mov (1) pRESULT:uw nOFFSET_RES:uw + (-f0.0) jmpi INTERLABEL(VFILTER_4x4) + (-f0.1) mov (1) pRESULT:uw nOFFSET_INTERIM4x4:uw + + INTERLABEL(VFILTER_4x4): + + asr.sat (16) r[pRESULT]<2>:ub acc0<16;16,1>:w 5:w + + (-f0.0) jmpi INTERLABEL(Average_4x4) + (f0.1) jmpi INTERLABEL(Return_Interpolate_Y_4x4 ) + +INTERLABEL(Interpolate_Y_I_4x4): + + //----------------------------------------------------------------------- + // CASE: 134C (Integer position) + //----------------------------------------------------------------------- + + mov (4) pREF0<1>:uw gW0<4;4,1>:uw + + cmp.e.f0.0 (4) null:w gMVX_FRAC<0;1,0>:w 3:w + cmp.e.f0.1 (4) null:w gMVY_FRAC<0;1,0>:w 3:w + (f0.0) add (4) pREF0<1>:uw pREF0<4;4,1>:uw 1:uw + (f0.1) add (4) pREF0<1>:uw pREF0<4;4,1>:uw nGRFWIB/2:uw + + mov (16) guwINTERIM_BUF2(0)<1> r[pREF0]<4,1>:ub + +INTERLABEL(Average_4x4): + + //----------------------------------------------------------------------- + // CASE: 13456789BCDEF (Average) + //----------------------------------------------------------------------- + + // Average two interim results + avg.sat (16) gubINTERIM_BUF2(0)<2> gubINTERIM_BUF2(0)<32;16,2> gINTERIM4x4<32;16,2>:ub + +INTERLABEL(Return_Interpolate_Y_4x4): + // Move result + mov (1) pRES:uw gpINTPY:uw + mov (4) r[pRES,0]<2>:ub gubINTERIM_BUF2(0,0) + mov (4) r[pRES,16]<2>:ub gubINTERIM_BUF2(0,8) + mov (4) r[pRES,32]<2>:ub gubINTERIM_BUF2(0,16) + mov (4) r[pRES,48]<2>:ub gubINTERIM_BUF2(0,24) + + // Restore all address registers + mov (8) a0<1>:w gpADDR<8;8,1>:w + +INTERLABEL(Exit_Interpolate_Y_4x4): + + +// end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_8x8.asm new file mode 100644 index 000000000..4506de794 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/interpolate_Y_8x8.asm @@ -0,0 +1,292 @@ +/* + * Interpolation kernel for luminance motion compensation + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Interpolate_Y_8x8.asm +// +// Interpolation kernel for luminance motion compensation +// +// $Revision: 13 $ +// $Date: 10/09/06 4:00p $ +// + + +//--------------------------------------------------------------- +// In: pMV => Source address of MV +// In: gMVX_FRAC<2;2,1>:w => MV fractional components +// In: f0.1 (1) => If 1, vertical MV is integer +// In: gpINTPY:uw => Destination address for interpolated result +// In: Reference area staring from R43 +// If horizontal/vertical MVs are all integer, 8x8 pixels are on R43~R44 (2 GRFs) +// If only horz MV is integer, 8x13 pixels are on R43~R46 (4 GRFs) +// If only vert MV is integer, 13x8 pixels are on R43~R46 (4 GRFs) +// If no MVs are integer, 13x13 pixels are on R43~R49 (7 GRFs) +//--------------------------------------------------------------- + + +INTERLABEL(Interpolate_Y_8x8_Func): + + + + // Check whether MVX is integer MV + and.z.f0.0 (1) null:w r[pMV,0]<0;1,0>:w 0x3:w + (-f0.0) jmpi (1) INTERLABEL(Interpolate_Y_8x8_Func2) + + // TODO: remove this back-to-back read - huge latency.. + mov (8) gubREF(6,2)<1> gubREF(3,0)<8;8,1> + mov (8) gubREF(5,18)<1> gubREF(2,24)<8;8,1> {NoDDClr} + mov (8) gubREF(5,2)<1> gubREF(2,16)<8;8,1> {NoDDChk} + mov (8) gubREF(4,18)<1> gubREF(2,8)<8;8,1> {NoDDClr} + mov (8) gubREF(4,2)<1> gubREF(2,0)<8;8,1> {NoDDChk} + mov (8) gubREF(3,18)<1> gubREF(1,24)<8;8,1> {NoDDClr} + mov (8) gubREF(3,2)<1> gubREF(1,16)<8;8,1> {NoDDChk} + mov (8) gubREF(2,18)<1> gubREF(1,8)<8;8,1> {NoDDClr} + mov (8) gubREF(2,2)<1> gubREF(1,0)<8;8,1> {NoDDChk} + mov (8) gubREF(1,18)<1> gubREF(0,24)<8;8,1> {NoDDClr} + mov (8) gubREF(1,2)<1> gubREF(0,16)<8;8,1> {NoDDChk} + mov (8) gubREF(0,18)<1> gubREF(0,8)<8;8,1> + mov (8) gubREF(0,2)<1> gubREF(0,0)<8;8,1> + +INTERLABEL(Interpolate_Y_8x8_Func2): + + // Compute the GRF address of the starting position of the reference area + (-f0.1) mov (1) pREF:w nOFFSET_REF+2+nGRFWIB:w + (f0.1) mov (1) pREF:w nOFFSET_REF+2:w + mov (1) pRESULT:uw gpINTPY:uw + + /* + * | | + * - - 0 1 2 3 + - + * 4 5 6 7 + * 8 9 A B + * C D E F + * - - + - - - + - + * | | + */ + + // Case 0 + or.z.f0.1 (16) null:w gMVY_FRAC<0;1,0>:w gMVX_FRAC<0;1,0>:w + (f0.1) mov (16) r[pRESULT]<1>:uw r[pREF]<16;8,1>:ub + (f0.1) mov (16) r[pRESULT,nGRFWIB]<1>:uw r[pREF,nGRFWIB]<16;8,1>:ub + (f0.1) mov (16) r[pRESULT,nGRFWIB*2]<1>:uw r[pREF,nGRFWIB*2]<16;8,1>:ub + (f0.1) mov (16) r[pRESULT,nGRFWIB*3]<1>:uw r[pREF,nGRFWIB*3]<16;8,1>:ub + (f0.1) jmpi INTERLABEL(Exit_Interpolate_Y_8x8) + + // Store all address registers + mov (8) gpADDR<1>:w a0<8;8,1>:w + + mul.z.f0.0 (1) gW4:w gMVY_FRAC:w gMVX_FRAC:w + add (1) pREF1:uw pREF0:uw nGRFWIB/2:uw + and.nz.f0.1 (1) null gW4:w 1:w + add (2) pREF2<1>:uw pREF0<2;2,1>:uw nGRFWIB:uw + mov (4) gW0<1>:uw pREF0<4;4,1>:uw + + (f0.0) jmpi INTERLABEL(Interpolate_Y_H_8x8) + (f0.1) jmpi INTERLABEL(Interpolate_Y_H_8x8) + + //----------------------------------------------------------------------- + // CASE: A69BE (H/V interpolation) + //----------------------------------------------------------------------- + + // Compute interim horizontal intepolation of 12 lines (not 9 lines) +// add (1) pREF0<1>:ud pREF0<0;1,0>:ud 0xffeeffde:ud // (-18<<16)|(-34) + add (1) pREF0<1>:uw pREF0<0;1,0>:uw -34:w + add (1) pREF1<1>:uw pREF1<0;1,0>:uw -18:w {NoDDClr} + mov (1) pRESD:ud nOFFSET_INTERIM3:ud {NoDDChk} + + // Check whether this position is 'A' + cmp.e.f0.0 (1) null gW4:w 4:w + + $for(0;<6;2) { + add (32) acc0<1>:w r[pREF,nGRFWIB*%1]<16;8,1>:ub r[pREF0,nGRFWIB*%1+5]<16;8,1>:ub {Compr} + mac (32) acc0<1>:w r[pREF,nGRFWIB*%1+1]<16;8,1>:ub -5:w {Compr} + mac (32) acc0<1>:w r[pREF,nGRFWIB*%1+2]<16;8,1>:ub 20:w {Compr} + mac (32) acc0<1>:w r[pREF,nGRFWIB*%1+3]<16;8,1>:ub 20:w {Compr} + mac (32) r[pRES,nGRFWIB*%1]<1>:w r[pREF,nGRFWIB*%1+4]<16;8,1>:ub -5:w {Compr} + } + // last line + add (8) acc0<1>:w r[pREF,nGRFWIB*6]<8;8,1>:ub r[pREF,nGRFWIB*6+5]<8;8,1>:ub + mac (8) acc0<1>:w r[pREF,nGRFWIB*6+1]<8;8,1>:ub -5:w + mac (8) acc0<1>:w r[pREF,nGRFWIB*6+2]<8;8,1>:ub 20:w + mac (8) acc0<1>:w r[pREF,nGRFWIB*6+3]<8;8,1>:ub 20:w + mac (8) r[pRES,nGRFWIB*6]<1>:w r[pREF,nGRFWIB*6+4]<8;8,1>:ub -5:w + + // Compute interim/output vertical interpolation + mov (1) pREF0:ud nOFFSET_INTERIM2:ud {NoDDClr} // set pREF0 and pREF1 at the same time + mov (1) pREF2D:ud nOFFSET_INTERIM4:ud {NoDDChk,NoDDClr} // set pREF2 and pREF3 at the same time + (f0.0) sel (1) pRES:uw gpINTPY:uw nOFFSET_INTERIM:uw {NoDDChk} // Case A vs. 69BE + + $for(0;<4;2) { + add (32) acc0<1>:w r[pREF0,nGRFWIB*%1]<16;16,1>:w 512:w {Compr} + mac (16) acc0<1>:w r[pREF2,nGRFWIB*%1]<8,1>:w -5:w + mac (16) acc1<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB]<8,1>:w -5:w + mac (32) acc0<1>:w r[pREF0,nGRFWIB*%1+nGRFWIB]<16;16,1>:w 20:w {Compr} + mac (16) acc0<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB]<8,1>:w 20:w + mac (16) acc1<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB+nGRFWIB]<8,1>:w 20:w + mac (32) acc0<1>:w r[pREF0,(2+%1)*nGRFWIB]<16;16,1>:w -5:w {Compr} + mac (16) acc0<1>:w r[pREF2,(2+%1)*nGRFWIB]<8,1>:w 1:w + mac (16) acc1<1>:w r[pREF2,(2+%1)*nGRFWIB+nGRFWIB]<8,1>:w 1:w + asr.sat (16) r[pRES,nGRFWIB*%1]<2>:ub acc0<16;16,1>:w 10:w + asr.sat (16) r[pRES,nGRFWIB*%1+nGRFWIB]<2>:ub acc1<16;16,1>:w 10:w {SecHalf} + } + + (f0.0) jmpi INTERLABEL(Return_Interpolate_Y_8x8) + +INTERLABEL(Interpolate_Y_H_8x8): + + cmp.e.f0.0 (1) null gMVX_FRAC:w 0:w + cmp.e.f0.1 (1) null gMVY_FRAC:w 2:w + (f0.0) jmpi INTERLABEL(Interpolate_Y_V_8x8) + (f0.1) jmpi INTERLABEL(Interpolate_Y_V_8x8) + + //----------------------------------------------------------------------- + // CASE: 123567DEF (H interpolation) + //----------------------------------------------------------------------- + + add (4) pREF0<1>:uw gW0<4;4,1>:uw -2:w + cmp.g.f0.0 (4) null:w gMVY_FRAC<0;1,0>:w 2:w + cmp.e.f0.1 (1) null gMVX_FRAC:w 2:w + (f0.0) add (4) pREF0<1>:uw pREF0<4;4,1>:uw nGRFWIB/2:uw + + cmp.e.f0.0 (1) null:w gMVY_FRAC<0;1,0>:w 0:w + + (f0.1) sel (1) pRES:uw gpINTPY:uw nOFFSET_INTERIM:uw // Case 26E vs. 1357DF + + // Compute interim/output horizontal interpolation + $for(0;<4;2) { + add (16) acc0<1>:w r[pREF0,nGRFWIB*%1]<8,1>:ub 16:w + add (16) acc1<1>:w r[pREF0,nGRFWIB*%1+nGRFWIB]<8,1>:ub 16:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB*%1+1]<8,1>:ub -5:w + mac (16) acc1<1>:w r[pREF0,nGRFWIB*%1+1+nGRFWIB]<8,1>:ub -5:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB*%1+2]<8,1>:ub 20:w + mac (16) acc1<1>:w r[pREF0,nGRFWIB*%1+2+nGRFWIB]<8,1>:ub 20:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB*%1+3]<8,1>:ub 20:w + mac (16) acc1<1>:w r[pREF0,nGRFWIB*%1+3+nGRFWIB]<8,1>:ub 20:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB*%1+4]<8,1>:ub -5:w + mac (16) acc1<1>:w r[pREF0,nGRFWIB*%1+4+nGRFWIB]<8,1>:ub -5:w + mac (16) acc0<1>:w r[pREF0,nGRFWIB*%1+5]<8,1>:ub 1:w + mac (16) acc1<1>:w r[pREF0,nGRFWIB*%1+5+nGRFWIB]<8,1>:ub 1:w + asr.sat (16) r[pRES,nGRFWIB*%1]<2>:ub acc0<16;16,1>:w 5:w + asr.sat (16) r[pRES,nGRFWIB*%1+nGRFWIB]<2>:ub acc1<16;16,1>:w 5:w {SecHalf} + } + + (-f0.1) jmpi INTERLABEL(Interpolate_Y_V_8x8) + (-f0.0) jmpi INTERLABEL(Average_8x8) + + jmpi INTERLABEL(Return_Interpolate_Y_8x8) + +INTERLABEL(Interpolate_Y_V_8x8): + + cmp.e.f0.0 (1) null gMVY_FRAC:w 0:w + (f0.0) jmpi INTERLABEL(Interpolate_Y_I_8x8) + + //----------------------------------------------------------------------- + // CASE: 48C59D7BF (V interpolation) + //----------------------------------------------------------------------- + + mov (2) pREF0<1>:uw gW0<4;2,2>:uw {NoDDClr} + mov (2) pREF2<1>:uw gW1<2;2,1>:uw {NoDDChk,NoDDClr} + mov (1) pRES:uw gpINTPY:uw {NoDDChk} + + cmp.g.f0.1 (4) null:w gMVX_FRAC<0;1,0>:w 2:w + cmp.e.f0.0 (1) null:w gMVX_FRAC<0;1,0>:w 0:w + (f0.1) add (4) pREF0<1>:uw pREF0<4;4,1>:uw 1:uw + + cmp.e.f0.1 (1) null gMVY_FRAC:w 2:w + (-f0.0) jmpi INTERLABEL(VFILTER_8x8) + (-f0.1) mov (1) pRES:uw nOFFSET_INTERIM:uw + + INTERLABEL(VFILTER_8x8): + + // Compute interim/output vertical interpolation + $for(0;<4;2) { + add (32) acc0<1>:w r[pREF0,nGRFWIB*%1-nGRFWIB]<16;8,1>:ub 16:w {Compr} + mac (16) acc0<1>:w r[pREF2,nGRFWIB*%1-nGRFWIB]<8,1>:ub -5:w + mac (16) acc1<1>:w r[pREF2,nGRFWIB*%1]<8,1>:ub -5:w + mac (32) acc0<1>:w r[pREF0,nGRFWIB*%1]<16;8,1>:ub 20:w {Compr} + mac (16) acc0<1>:w r[pREF2,nGRFWIB*%1]<8,1>:ub 20:w + mac (16) acc1<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB]<8,1>:ub 20:w + mac (32) acc0<1>:w r[pREF0,nGRFWIB*%1+nGRFWIB]<16;8,1>:ub -5:w {Compr} + mac (16) acc0<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB]<8,1>:ub 1:w + mac (16) acc1<1>:w r[pREF2,nGRFWIB*%1+nGRFWIB+nGRFWIB]<8,1>:ub 1:w + asr.sat (16) r[pRES,nGRFWIB*%1]<2>:ub acc0<16;16,1>:w 5:w + asr.sat (16) r[pRES,nGRFWIB*%1+nGRFWIB]<2>:ub acc1<16;16,1>:w 5:w {SecHalf} + } + + (-f0.0) jmpi INTERLABEL(Average_8x8) + (f0.1) jmpi INTERLABEL(Return_Interpolate_Y_8x8) + +INTERLABEL(Interpolate_Y_I_8x8): + + //----------------------------------------------------------------------- + // CASE: 134C (Integer position) + //----------------------------------------------------------------------- + + mov (2) pREF0<1>:uw gW0<2;2,1>:uw {NoDDClr} + + mov (1) pRES:uw gpINTPY:uw {NoDDChk} + + cmp.e.f0.0 (2) null:w gMVX_FRAC<0;1,0>:w 3:w + cmp.e.f0.1 (2) null:w gMVY_FRAC<0;1,0>:w 3:w + (f0.0) add (2) pREF0<1>:uw pREF0<2;2,1>:uw 1:uw + (f0.1) add (2) pREF0<1>:uw pREF0<2;2,1>:uw nGRFWIB/2:uw + + mov (16) r[pRES]<1>:uw r[pREF0]<8,1>:ub + mov (16) r[pRES,nGRFWIB]<1>:uw r[pREF0,nGRFWIB]<8,1>:ub + mov (16) r[pRES,nGRFWIB*2]<1>:uw r[pREF0,nGRFWIB*2]<8,1>:ub + mov (16) r[pRES,nGRFWIB*3]<1>:uw r[pREF0,nGRFWIB*3]<8,1>:ub + +INTERLABEL(Average_8x8): + + //----------------------------------------------------------------------- + // CASE: 13456789BCDEF (Average) + //----------------------------------------------------------------------- + + // Average two interim results + avg.sat (16) r[pRES,0]<2>:ub r[pRES,0]<32;16,2>:ub gubINTERIM_BUF(0) + avg.sat (16) r[pRES,nGRFWIB]<2>:ub r[pRES,nGRFWIB]<32;16,2>:ub gubINTERIM_BUF(1) + avg.sat (16) r[pRES,nGRFWIB*2]<2>:ub r[pRES,nGRFWIB*2]<32;16,2>:ub gubINTERIM_BUF(2) + avg.sat (16) r[pRES,nGRFWIB*3]<2>:ub r[pRES,nGRFWIB*3]<32;16,2>:ub gubINTERIM_BUF(3) + +INTERLABEL(Return_Interpolate_Y_8x8): + // Restore all address registers + mov (8) a0<1>:w gpADDR<8;8,1>:w + +INTERLABEL(Exit_Interpolate_Y_8x8): + +// end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Header.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Header.inc new file mode 100644 index 000000000..5302cb295 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Header.inc @@ -0,0 +1,306 @@ +/* + * Header file for all AVC intra prediction kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__INTRA_HEADER__) // Make sure this file is only included once +#define __INTRA_HEADER__ + +// Module name: intra_header.inc +// +// Header file for all AVC intra prediction kernels +// +// This header file defines everything that's specific to intra macroblock kernels + + +// ----------- Various data buffers and pointers ------------ +// +// I_PCM data buffer +// +#define I_PCM_BUF_Y 4 +#define I_PCM_BUF_UV 12 + +#define REG_I_PCM_BUF_Y r4 +#define REG_I_PCM_BUF_UV r12 + +.declare I_PCM_Y Base=REG_I_PCM_BUF_Y ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8-bit I_PCM Y data +.declare I_PCM_UV Base=REG_I_PCM_BUF_UV ElementSize=1 SrcRegion=REGION(16,1) Type=ub // 8-bit I_PCM U/V data + +// Intra macroblock error data blocks +// +#define ERRBUF 4 // Starting GRF index for error data +#define REG_ERRBUF r4 +.declare MBBLOCKW Base=REG_ERRBUF ElementSize=2 SrcRegion=REGION(16,1) Type=w // For 16-bit inter MB +.declare MBBLOCKD Base=REG_ERRBUF ElementSize=2 SrcRegion=REGION(16,1) Type=uw // For use in "send" command + +#define PERROR a0.2 // Pointer to macroblock error data +#define PERROR1 a0.3 // Pointer to macroblock error data used by instruction compression +#define PERROR_UD a0.1 // Pointer to macroblock error data in DWORD unit + +// Intra macroblock reference data +// +#define REG_INTRA_REF_TOP r49 // Must be an odd numbered GRF register +.declare INTRA_REF_TOP0 Base=REG_INTRA_REF_TOP ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare INTRA_REF_TOP Base=REG_INTRA_REF_TOP.4 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + // Actual top row reference data start at offset 4 in BYTE +.declare INTRA_REF_TOP_W Base=REG_INTRA_REF_TOP.2 ElementSize=2 SrcRegion=REGION(16,1) Type=uw + // Actual top row reference data start at offset 2 in WORD +.declare INTRA_REF_TOP_D Base=REG_INTRA_REF_TOP ElementSize=4 DstRegion=<1> Type=ud // Only used in "send" instruction + +#define INTRA_REF_LEFT_ID 50 +#define REG_INTRA_REF_LEFT r50 +.declare INTRA_REF_LEFT0 Base=REG_INTRA_REF_LEFT ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare INTRA_REF_LEFT Base=REG_INTRA_REF_LEFT.3 ElementSize=1 SrcRegion=REGION(8,4) Type=ub + // Actual left column reference data are located at offset 3 in BYTE +.declare INTRA_REF_LEFT_UV Base=REG_INTRA_REF_LEFT.2 ElementSize=1 SrcRegion=REGION(8,4) Type=ub + // Actual left column U/V reference data are located at offset 2 in BYTE +.declare INTRA_REF_LEFT_W Base=REG_INTRA_REF_LEFT.1 ElementSize=2 SrcRegion=REGION(8,2) Type=uw + // Actual left column reference data are located at offset 1 in WORD +.declare INTRA_REF_LEFT_D Base=REG_INTRA_REF_LEFT ElementSize=4 DstRegion=<1> Type=ud // Only used in "send" instruction + +#define PREF_LEFT a0.4 // Pointer to left reference data +#define PREF_LEFT_UD a0.2 // Pointer in DWORD to left reference data + +#define INTRA_TEMP_0 52 +#define INTRA_TEMP_1 53 +#define INTRA_TEMP_2 54 +#define INTRA_TEMP_3 55 +#define INTRA_TEMP_4 56 +#define INTRA_TEMP_5 57 +#define INTRA_TEMP_6 58 + +#define REG_INTRA_TEMP_0 r52 +#define REG_INTRA_TEMP_1 r53 +#define REG_INTRA_TEMP_2 r54 +#define REG_INTRA_TEMP_3 r55 +#define REG_INTRA_TEMP_4 r56 +#define REG_INTRA_TEMP_5 r57 +#define REG_INTRA_TEMP_6 r58 +#define REG_INTRA_TEMP_7 r59 +#define REG_INTRA_TEMP_8 r60 + +// Destination registers for write commit +#define REG_WRITE_COMMIT_Y r60.0 +#define REG_WRITE_COMMIT_UV r61.0 + +// ----------- Various data buffers and pointers ------------ +// R32 - R47 for predicted picture buffer (for both Y and U/V blocks) +// +#define PREDBUF 32 // Starting GRF index for predicted buffer +#define REG_PREDBUF r32 + +.declare PRED_Y Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted Y picture +.declare PRED_YW Base=REG_PREDBUF ElementSize=2 SrcRegion=REGION(16,1) Type=uw // Predicted Y picture stored in WORD +.declare PRED_Y_FM Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted Y picture frame +.declare PRED_Y_TF Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted Y picture Top field + +.declare PRED_UV Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted U/V picture +.declare PRED_UVW Base=REG_PREDBUF ElementSize=2 SrcRegion=REGION(16,1) Type=uw // Predicted U/V picture stored in WORD +.declare PRED_UV_FM Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted U/V picture frame +.declare PRED_UV_TF Base=REG_PREDBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted U/V picture top field +.declare PRED_UV_BF Base=REG_PREDBUF.16 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Predicted U/V picture bottom field + +// The same region will also be used as finally decoded Y blocks shared with U/V blocks +// +#define DECBUF 32 +#define REG_DECBUF r32 +.declare DEC_Y Base=REG_DECBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Decoded Y picture +.declare DEC_UV Base=REG_DECBUF ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Decoded U/V P-/B-picture +.declare DEC_UD Base=REG_DECBUF ElementSize=4 SrcRegion=REGION(8,1) Type=ud // Decoded buffer in UD type + +// Reference buffer for intra_NxN prediction +// +#define PRED_MODE REG_INTRA_TEMP_0 +.declare REF_TOP0 Base=REG_INTRA_TEMP_5 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare REF_TOP Base=REG_INTRA_TEMP_5.4 ElementSize=1 SrcRegion=REGION(16,1) Type=ub + // Actual top reference data start from offset 3,i.e. p[-1,-1] +.declare REF_TOP_W Base=REG_INTRA_TEMP_5 ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare REF_TOP_D Base=REG_INTRA_TEMP_5 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare REF_LEFT Base=REG_INTRA_TEMP_6 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare REF_LEFT_D Base=REG_INTRA_TEMP_6 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + +// For intra prediction plane mode +// +.declare H1 Base=REG_INTRA_TEMP_0 ElementSize=2 SrcRegion=REGION(8,1) Type=w // Make sure it's an even GRF +.declare H2 Base=REG_INTRA_TEMP_0.8 ElementSize=2 SrcRegion=REGION(8,1) Type=w +.declare V1 Base=REG_INTRA_TEMP_1 ElementSize=2 SrcRegion=REGION(8,1) Type=w // Make sure it's the following odd GRF +.declare V2 Base=REG_INTRA_TEMP_1.8 ElementSize=2 SrcRegion=REGION(8,1) Type=w + +.declare CP Base=REG_INTRA_TEMP_2 ElementSize=2 SrcRegion=REGION(16,1) Type=w + +#define PINTRAPRED_Y a0.7 // Used as luma intra prediction mode pointer +#define PINTRAPRED_UV a0.7 // Used as chroma intra prediction mode pointer +#define PINTRA4X4_Y a0.4 // Used as luma intra_4x4 prediction mode pointer + +#define PBWDCOPY_4 a0.4 // a0.4 - a0.7 used in intra_4x4 prediction for moving data backward +#define PBWDCOPY_8 a0.6 // a0.6 - a0.7 used in intra_8x8 prediction for moving data backward + +// For Intra_4x4 prediction mode +// +.declare INTRA_4X4_MODE Base=REG_INTRA_TEMP_1 ElementSize=4 SrcRegion=REGION(1,0) DstRegion=<1> Type=d // Actually only need 1 DWORD + +// ----------- Intra CURBE constants ------------ +// +#define REG_CURBE1 r1 +#define REG_CURBE2 r2 +#define INTRA_4X4_OFFSET 1*GRFWIB // 9 Bytes +#define INTRA_8X8_OFFSET 1*GRFWIB+12 // 9 Bytes starting sub-register r1.3:ud +#define INTRA_16X16_OFFSET 1*GRFWIB+24 // 4 Bytes starting sub-register r1.6:ud +#define INTRA_CHROMA_OFFSET 1*GRFWIB+28 // 4 Bytes starting sub-register r1.7:ud + +#define TOP_REF_OFFSET REG_CURBE1.10 // r1.5:w + +// Constants used in plane intra prediction mode +#define XY_3 REG_CURBE2.4 // Stored BYTE constants x-3 for x=0...7, i.e. -3,-2,...3,4 for U/V, need duplicate to every other byte +#define XY_3_1 REG_CURBE2.5 // Stored BYTE constants x-3 for x=0...7, i.e. -3,-2,...3,4 for 2nd instruction in {Comp} +#define XY_7 REG_CURBE2.0 // Stored BYTE constants x-7 for x=0...15, i.e. -7,-6,...7,8 for Y +#define XY_7_1 REG_CURBE2.1 // Stored BYTE constants x-7 for x=0...15, i.e. -7,-6,...7,8 for 2nd instruction in {Comp} + +#define INV_SHIFT REG_CURBE2.16 + +#define INV_TRANS4 REG_CURBE2.20 // For reverse data transfer for intra_4x4 (0x00020406) +#define INV_TRANS48 REG_CURBE2.22 // For reverse data transfer for intra_4x4 (0x0002) +#define INV_TRANS8 REG_CURBE1.22 // For reverse data transfer for intra_8x8 (0x0001) + +#define INTRA_MODE REG_CURBE2.24 // Offset to intra_Pred_4x4_Y from each sub-block + +// ----------- In-line parameters ------------ +// +#define REG_INLINE r3 + +#define INLINE_DW0 REG_INLINE.0<0;1,0>:ud +#define INLINE_DW1 REG_INLINE.1<0;1,0>:ud +#define INLINE_DW2 REG_INLINE.2<0;1,0>:ud +#define INLINE_DW3 REG_INLINE.3<0;1,0>:ud +#define INLINE_DW4 REG_INLINE.4<0;1,0>:ud +#define INLINE_DW5 REG_INLINE.5<0;1,0>:ud +#define INLINE_DW6 REG_INLINE.6<0;1,0>:ud +#define INLINE_DW7 REG_INLINE.7<0;1,0>:ud + +// Intra macroblock in-line data +// +// In-line DWORD 0 +#define REG_MBAFF_FIELD REG_INLINE.1 // :uw, can be added directly to lower-word of MSGDSC +#define MBAFF_FIELD BIT26+BIT25 // Bits 26:25 - MBAFF field macroblock flag + // 00 = Current macroblock is not an MBAFF field macroblock + // 11 = Current macroblock is an MBAFF field macroblock + +#define REG_FIELD_PARITY INLINE_DW0 +#define FIELD_PARITY BIT24 // Bit 24 - Macroblock field parity flag + // 0 = Current field is a top field + // 1 = Current field is a bottom field + +#define REG_FIELD_MACROBLOCK_FLAG INLINE_DW0 +#define FIELD_MACROBLOCK_FLAG BIT14 // Bit 14 - Field macroblock flag + // 0 = Current macroblock is not a field macroblock + // 1 = Current macroblock is a field macroblock +#define REG_MACROBLOCK_TYPE INLINE_DW0 +#define MACROBLOCK_TYPE BIT12+BIT11+BIT10+BIT9+BIT8 // Bit 12:8 - Intra macroblock flag + +#define REG_CHROMA_FORMAT_IDC INLINE_DW0 +#define CHROMA_FORMAT_IDC BIT3+BIT2 // Bit 3:2 - Chroma format + // 00 = Luma only (Monochrome) + // 01 = YUV420 + // 10 = YUV422 + // 11 = YUV444 +#define REG_MBAFF_PIC INLINE_DW0 +#define MBAFF_PIC BIT1 // Bit 1 - MBAFF Frame picture + // 0 = Not an MBAFF frame picture + // 1 = An MBAFF frame picture +#define REG_INTRA_PRED_8X8_BLK2_AVAIL_FLAG INLINE_DW0 +#define INTRA_PRED_8X8_BLK2_AVAIL_FLAG BIT4 // Bit 4: Pixel available for block 2 in an intra_8x8 MB. + +// In-line DWORD 1 +#define ORIX REG_INLINE.4 // :ub, H. origin of the macroblock in macroblock unit +#define ORIY REG_INLINE.5 // :ub, V. origin of the macroblock in macroblock unit + +// In-line DWORD 2 +#define REG_CBPCYB REG_INLINE.9 // :ub, Coded block pattern +#define REG_CBPCY INLINE_DW2 // Bits 13:8 - Coded block pattern + // reflect Y0, Y1, Y2, Y3, Cb4, Cr5 + // Bit 13 - Y0 + // Bit 12 - Y1 + // Bit 11 - Y2 + // Bit 10 - Y3 + // Bit 9 - U4 + // Bit 8 - V5 +#define CBP_MASK 0x3F00:ud // Bit mask for all CBP bits +#define CBP_Y_MASK 0x3C00:ud // Bit mask for CBP Y bits +#define CBP_UV_MASK 0x0300:ud // Bit mask for CBP U/V bits + +#define CBP_Y0_MASK BIT13:ud // Bit mask for CBP Y0 bit +#define CBP_Y1_MASK BIT12:ud // Bit mask for CBP Y1 bit +#define CBP_Y2_MASK BIT11:ud // Bit mask for CBP Y2 bit +#define CBP_Y3_MASK BIT10:ud // Bit mask for CBP Y3 bit +#define CBP_U_MASK BIT9:ud // Bit mask for CBP U bit +#define CBP_V_MASK BIT8:ud // Bit mask for CBP V bit + +// In-line DWORD 3 +#define REG_INTRA_CHROMA_PRED_MODE REG_INLINE.12 // :ub - Intra chroma prediction mode +#define INTRA_CHROMA_PRED_MODE BIT7+BIT6 // Bit 7:6 - Intra chroma prediction mode + // 00 = Intra DC prediction + // 01 = Intra horizontal prediction + // 10 = Intra vertical prediction + // 11 = Intra plane prediction +#define INTRA_CHROMA_PRED_MODE_SHIFT 6 // Intra chroma prediction mode shift + +#define REG_INTRA_PRED_AVAIL_FLAG INLINE_DW3 +#define INTRA_PRED_AVAIL_FLAG BIT4+BIT3+BIT2+BIT1+BIT0 // Bits 4:0 - Intra prediction available flag + // Bit 0: Macroblock A (the left neighbor) entire or top half + // Bit 1: Macroblock B (the upper neighbor) + // Bit 2: Macroblock C (the above-right neighbor) + // Bit 3: Macroblock D (the above-left neighbor) + // Bit 4: Macroblock A (the left neighbor) bottom half + // Each bit is defined below + // 0 = The macroblock is not available for intra prediction + // 1 = The macroblock is available for intra prediction +#define INTRA_PRED_LEFT_TH_AVAIL_FLAG BIT0 // Bit 0: Macroblock A (the left neighbor) entire or top half +#define INTRA_PRED_UP_AVAIL_FLAG BIT1 // Bit 1: Macroblock B (the upper neighbor) +#define INTRA_PRED_UP_RIGHT_AVAIL_FLAG BIT2 // Bit 2: Macroblock C (the above-right neighbor) +#define INTRA_PRED_UP_LEFT_AVAIL_FLAG BIT3 // Bit 3: Macroblock D (the above-left neighbor) +#define INTRA_PRED_LEFT_BH_AVAIL_FLAG BIT4 // Bit 4: Macroblock A (the left neighbor) bottom half +//#define INTRA_PRED_8X8_BLK2_AVAIL_FLAG BIT5 // Bit 5: Pixel available for block 2 in an intra_8x8 MB. +#define REG_INTRA_PRED_AVAIL_FLAG_BYTE REG_INLINE.12 // Byte location of Intra_Pred_Avail_Flag +#define REG_INTRA_PRED_AVAIL_FLAG_WORD REG_INLINE.6 // Word location of Intra_Pred_Avail_Flag + + +.declare INTRA_PRED_MODE Base=REG_INLINE.16 ElementSize=1 SrcRegion=REGION(16,1) Type=ub // Intra prediction mode + +// End of intra_header.inc + +#endif // !defined(__INTRA_HEADER__) + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_4x4_Y_4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_4x4_Y_4.asm new file mode 100644 index 000000000..e5d6845d6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_4x4_Y_4.asm @@ -0,0 +1,270 @@ +/* + * Intra predict 4 Intra_4x4 luma blocks + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__INTRA_PRED_4X4_Y_4__) // Make sure this is only included once +#define __INTRA_PRED_4X4_Y_4__ + +// Module name: intra_Pred_4x4_Y_4.asm +// +// Intra predict 4 Intra_4x4 luma blocks +// +//-------------------------------------------------------------------------- +// Input data: +// +// REF_TOP: Top reference data stored in BYTE with p[-1,-1] at REF_TOP(0,-1) +// REF_LEFT: Left reference data stored in BYTE with p[-1,0] at REF_LEFT(0,0) +// PRED_MODE: Intra prediction mode stored in 4 words (4 LSB) +// REG_INTRA_PRED_AVAIL: Top/Left available flag, (Bit0: Left, Bit1: Top) +// +//-------------------------------------------------------------------------- + +#undef INTRA_PRED_AVAIL +#undef INTRA_REF +#undef REF_LEFT_BACK +#undef REF_TMP +#undef REF_TMP1 + +#define INTRA_PRED_AVAIL REG_INTRA_TEMP_2.8 +#define INTRA_REF REG_INTRA_TEMP_2 +#define REF_LEFT_BACK REG_INTRA_TEMP_8 +#define REF_TMP REG_INTRA_TEMP_3 +#define REF_TMP1 REG_INTRA_TEMP_4 + +intra_Pred_4x4_Y_4: + + mov (8) REF_LEFT_BACK<1>:ub REF_LEFT(0)REGION(8,1) // Store left referece data +// Set up pointers to each intra_4x4 prediction mode +// + and (4) PINTRA4X4_Y<1>:w PRED_MODE<4;4,1>:w 0x0F:w + add (4) INTRA_4X4_MODE(0) r[PINTRA4X4_Y, INTRA_4X4_OFFSET]<1,0>:ub INTRA_MODE<4;4,1>:ub + +// Sub-block 0 ***************** + mov (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w // Top/Left neighbor available flags + CALL_1(INTRA_4X4_MODE(0),1) + +// Add error data to predicted intra data +ADD_ERROR_SB0: + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK0]<2>:ub r[PERROR,ERRBLK0]<8;4,1>:w REG_INTRA_4X4_PRED<8;8,1>:w // Too bad indexed src can't + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK0+16]<2>:ub r[PERROR,ERRBLK0+32]<8;4,1>:w REG_INTRA_4X4_PRED.8<8;8,1>:w // cross 2 GRFs + +// Sub-block 1 ***************** + mov (16) REF_TOP0(0)<1> REF_TOP0(0,4)REGION(8,1) // Top reference data + mov (4) REF_LEFT(0)<1> r[PPREDBUF_Y,PREDSUBBLK0+6]<8;1,0>:ub // New left referece data from sub-block 0 + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 1:w // Left neighbor is available + CALL_1(INTRA_4X4_MODE(0,1),1) + +// Add error data to predicted intra data +ADD_ERROR_SB1: + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK1]<2>:ub r[PERROR,ERRBLK1]<8;4,1>:w REG_INTRA_4X4_PRED<8;8,1>:w // Too bad indexed src can't + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK1+16]<2>:ub r[PERROR,ERRBLK1+32]<8;4,1>:w REG_INTRA_4X4_PRED.8<8;8,1>:w // cross 2 GRFs + +// Sub-block 2 ***************** + mov (1) REF_TOP0(0,3)<1> REF_LEFT_BACK.3<0;1,0>:ub // Top-left reference data from stored left referece data + mov (4) REF_TOP0(0,4)<1> r[PPREDBUF_Y,PREDSUBBLK0+24]REGION(4,2):ub // Top reference data + mov (4) REF_TOP0(0,8)<1> r[PPREDBUF_Y,PREDSUBBLK0+24+32]REGION(4,2):ub // Too bad indexed src can't cross 2 GRFs + mov (4) REF_TOP0(0,12)<1> r[PPREDBUF_Y,PREDSUBBLK0+30+32]REGION(1,0):ub // Extended top-right reference data + mov (4) REF_LEFT(0)<1> REF_LEFT_BACK.4<4;4,1>:ub // From stored left referece data + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 2:w // Top neighbor is available + CALL_1(INTRA_4X4_MODE(0,2),1) + +// Add error data to predicted intra data +ADD_ERROR_SB2: + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK2]<2>:ub r[PERROR,ERRBLK2]<8;4,1>:w REG_INTRA_4X4_PRED<8;8,1>:w // Too bad indexed src can't + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK2+16]<2>:ub r[PERROR,ERRBLK2+32]<8;4,1>:w REG_INTRA_4X4_PRED.8<8;8,1>:w // cross 2 GRFs + +// Sub-block 3 ***************** + mov (16) REF_TOP0(0)<1> REF_TOP0(0,4)REGION(8,1) // Top reference data + mov (8) REF_TOP0(0,8)<1> REF_TOP0(0,7)<0;1,0> // Extended top-right reference data + mov (4) REF_LEFT(0)<1> r[PPREDBUF_Y,PREDSUBBLK2+6]<8;1,0>:ub // Left referece data from sub-block 0 + or (1) INTRA_PRED_AVAIL<1>:w REG_INTRA_PRED_AVAIL<0;1,0>:w 3:w // Top/Left neighbor are available + CALL_1(INTRA_4X4_MODE(0,3),1) + +// Add error data to predicted intra data +ADD_ERROR_SB3: + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK3]<2>:ub r[PERROR,ERRBLK3]<8;4,1>:w REG_INTRA_4X4_PRED<8;8,1>:w // Too bad indexed src can't + add.sat (8) r[PPREDBUF_Y,PREDSUBBLK3+16]<2>:ub r[PERROR,ERRBLK3+32]<8;4,1>:w REG_INTRA_4X4_PRED.8<8;8,1>:w // cross 2 GRFs + + RETURN + +//-------------------------------------------------------------------------- +// Actual module that performs Intra_4x4 prediction and construction +// +// REF_TOP: Top reference data stored in BYTE with p[-1,-1] at REF_TOP(0,-1) +// REF_LEFT: Left reference data stored in BYTE with p[-1,0] at REF_LEFT(0,0) +// PINTRA4X4_Y: Intra prediction mode +// INTRA_PRED_AVAIL: Top/Left available flag, (Bit0: Left, Bit1: Top) +// +// Output data: +// +// REG_INTRA_4X4_PRED: Predicted 4x4 block data stored in 1 GRF register +//-------------------------------------------------------------------------- +intra_Pred_4x4_Y: +// Mode 0 +INTRA_4X4_VERTICAL: + mov (16) REG_INTRA_4X4_PRED<1>:w REF_TOP(0)<0;4,1> + RETURN_1 + +// Mode 1 +INTRA_4X4_HORIZONTAL: + mov (16) REG_INTRA_4X4_PRED<1>:w REF_LEFT(0)<1;4,0> + RETURN_1 + +// Mode 2 +INTRA_4X4_DC: +// Rearrange reference samples for unified DC prediction code +// + and.nz.f0.0 (16) NULLREG INTRA_PRED_AVAIL<0;1,0>:w 2:w {Compr} + and.nz.f0.1 (16) NULLREG INTRA_PRED_AVAIL<0;1,0>:w 1:w {Compr} + (-f0.0.any16h) mov (16) REF_TOP_W(0)<1> 0x8080:uw // Top macroblock not available for intra prediction + (-f0.1.any8h) mov (8) REF_LEFT(0)<1> REF_TOP(0)REGION(8,1) // Left macroblock not available for intra prediction + (-f0.0.any8h) mov (8) REF_TOP(0)<1> REF_LEFT(0)REGION(8,1) // Top macroblock not available for intra prediction +// Perform DC prediction +// + add (4) PRED_YW(15)<1> REF_TOP(0)REGION(4,1) REF_LEFT(0)REGION(4,1) + add (2) PRED_YW(15)<1> PRED_YW(15)REGION(2,1) PRED_YW(15,2)REGION(2,1) + add (16) acc0<1>:w PRED_YW(15)REGION(1,0) PRED_YW(15,1)REGION(1,0) + add (16) acc0<1>:w acc0:w 4:w + shr (16) REG_INTRA_4X4_PRED<1>:w acc0:w 3:w + RETURN_1 + +// Mode 3 +INTRA_4X4_DIAG_DOWN_LEFT: + mov (8) INTRA_REF<1>:ub REF_TOP(0)REGION(8,1) // Keep REF_TOP untouched for future use + mov (4) INTRA_REF.8<1>:ub REF_TOP(0,7)REGION(4,1) // p[8,-1] = p[7,-1] + add (8) acc0<1>:w INTRA_REF.2<8;8,1> 2:w // p[x+2]+2 + mac (8) acc0<1>:w INTRA_REF.1<8;8,1> 2:w // 2*p[x+1]+p[x+2]+2 + mac (8) PRED_YW(15)<1> INTRA_REF.0<8;8,1> 1:w // p[x]+2*p[x+1]+p[x+2]+2 + + shr (16) REG_INTRA_4X4_PRED<1>:w PRED_YW(15)<1;4,1> 2:w // (p[x]+2*p[x+1]+p[x+2]+2)>>2 + RETURN_1 + +// Mode 4 +INTRA_4X4_DIAG_DOWN_RIGHT: + +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b + mov (8) INTRA_REF.4<1>:ub REF_TOP(0,-1)REGION(8,1) // INTRA_REF holds all reference data + mov (4) INTRA_REF<1>:ub REF_TMP.3<16;4,4>:ub + + add (8) acc0<1>:w INTRA_REF.2<8;8,1>:ub 2:w // p[x+2]+2 + mac (8) acc0<1>:w INTRA_REF.1<8;8,1>:ub 2:w // 2*p[x+1]+p[x+2]+2 + mac (8) INTRA_REF<1>:w INTRA_REF<8;8,1>:ub 1:w // p[x]+2*p[x+1]+p[x+2]+2 + +// Store data in reversed order + add (4) PBWDCOPY_4<1>:w INV_TRANS4<4;4,1>:b INTRA_TEMP_2*GRFWIB:w // Must match with INTRA_REF + shr (16) REG_INTRA_4X4_PRED<1>:w r[PBWDCOPY_4]<4,1>:w 2:w + RETURN_1 + +// Mode 5 +INTRA_4X4_VERT_RIGHT: + +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b + mov (8) INTRA_REF.4<1>:ub REF_TOP(0,-1)REGION(8,1) // INTRA_REF holds all reference data + mov (4) INTRA_REF<1>:ub REF_TMP.3<16;4,4>:ub + + // Even rows + avg (8) PRED_YW(14)<1> INTRA_REF.4<8;8,1> INTRA_REF.5<8;8,1> // avg(p[x-1],p[x]) + // Odd rows + add (8) acc0<1>:w INTRA_REF.3<8;8,1>:ub 2:w // p[x]+2 + mac (8) acc0<1>:w INTRA_REF.2<8;8,1>:ub 2:w // 2*p[x-1]+p[x]+2 + mac (8) acc0<1>:w INTRA_REF.1<8;8,1>:ub 1:w // p[x-2]+2*p[x-1]+p[x]+2 + shr (8) INTRA_REF<1>:w acc0:w 2:w // (p[x-2]+2*p[x-1]+p[x]+2)>>2 + + mov (4) INTRA_REF.2<2>:w INTRA_REF.2<4;4,1>:w // Keep zVR = -2,-3 unchanged + mov (4) INTRA_REF.3<2>:w PRED_YW(14)REGION(4,1) // Combining even rows + + add (4) PBWDCOPY_4<1>:w INV_TRANS4<4;4,1>:b INTRA_TEMP_2*GRFWIB:w // Must match with INTRA_REF + mov (16) REG_INTRA_4X4_PRED<1>:w r[PBWDCOPY_4]<4,2>:w + RETURN_1 + +// Mode 6 +INTRA_4X4_HOR_DOWN: +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b + mov (8) INTRA_REF.4<1>:ub REF_TOP(0,-1)REGION(8,1) // INTRA_REF holds all reference data + mov (4) INTRA_REF<1>:ub REF_TMP.3<16;4,4>:ub + + // Even pixels + avg (8) PRED_YW(14)<1> INTRA_REF<8;8,1> INTRA_REF.1<8;8,1> // avg(p[y-1],p[y]) + // Odd pixels + add (8) acc0<1>:w INTRA_REF.2<8;8,1>:ub 2:w // p[y]+2 + mac (8) acc0<1>:w INTRA_REF.1<8;8,1>:ub 2:w // 2*p[y-1]+p[y]+2 + mac (8) REF_TMP<1>:w INTRA_REF.0<8;8,1>:ub 1:w // p[y-2]+2*p[y-1]+p[y]+2 + shr (4) INTRA_REF.1<2>:w REF_TMP<4;4,1>:w 2:w // (p[y-2]+2*p[y-1]+p[y]+2)>>2 + + shr (2) INTRA_REF.8<1>:w REF_TMP.4<2;2,1>:w 2:w // Keep zVR = -2,-3 unchanged + mov (4) INTRA_REF.0<2>:w PRED_YW(14)REGION(4,1) // Combining even pixels + + shl (4) PBWDCOPY_4<1>:w INV_TRANS4<4;4,1>:b 1:w // Convert to WORD offset + add (4) PBWDCOPY_4<1>:w PBWDCOPY_4<4;4,1>:w INTRA_TEMP_2*GRFWIB:w // Must match with INTRA_REF + mov (16) REG_INTRA_4X4_PRED<1>:w r[PBWDCOPY_4]<4,1>:w + RETURN_1 + +// Mode 7 +INTRA_4X4_VERT_LEFT: + // Even rows + avg (8) PRED_YW(14)<2> REF_TOP(0)REGION(8,1) REF_TOP(0,1)REGION(8,1) // avg(p[x],p[x+1]) + // Odd rows + add (8) acc0<1>:w REF_TOP(0,2)REGION(8,1) 2:w // p[x+2]+2 + mac (8) acc0<1>:w REF_TOP(0,1)REGION(8,1) 2:w // 2*p[x+1]+p[x+2]+2 + mac (8) PRED_YW(15)<1> REF_TOP(0)REGION(8,1) 1:w // p[x]+2*p[x+1]+p[x+2]+2 + shr (8) PRED_YW(14,1)<2> PRED_YW(15)REGION(8,1) 2:w + + mov (16) REG_INTRA_4X4_PRED<1>:w PRED_YW(14)<1;4,2> + RETURN_1 + +// Mode 8 +INTRA_4X4_HOR_UP: +// Set extra left reference pixels for unified prediction + mov (8) REF_LEFT(0,4)<1> REF_LEFT(0,3)REGION(1,0) // Copy p[-1,3] to p[-1,y],y=4...7 + // Even pixels + avg (8) PRED_YW(14)<2> REF_LEFT(0)REGION(8,1) REF_LEFT(0,1)REGION(8,1) // avg(p[y],p[y+1]) + // Odd pixels + add (8) acc0<1>:w REF_LEFT(0,2)REGION(8,1) 2:w // p[y+2]+2 + mac (8) acc0<1>:w REF_LEFT(0,1)REGION(8,1) 2:w // 2*p[y+1]+p[y+2]+2 + mac (8) PRED_YW(15)<1> REF_LEFT(0)REGION(8,1) 1:w // p[y]+2*p[y+1]+p[y+2]+2 + shr (8) PRED_YW(14,1)<2> PRED_YW(15)REGION(8,1) 2:w // (p[y]+2*p[y+1]+p[y+2]+2)>>2 + + mov (16) REG_INTRA_4X4_PRED<1>:w PRED_YW(14)<2;4,1> + RETURN_1 + +// End of intra_Pred_4x4_Y_4 + +#endif // !defined(__INTRA_PRED_4X4_Y_4__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_8x8_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_8x8_Y.asm new file mode 100644 index 000000000..6cdf77d1a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_8x8_Y.asm @@ -0,0 +1,276 @@ +/* + * Intra predict 8X8 luma block + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__INTRA_PRED_8X8_Y__) // Make sure this is only included once +#define __INTRA_PRED_8X8_Y__ + +// Module name: intra_Pred_8X8_Y.asm +// +// Intra predict 8X8 luma block +// +//-------------------------------------------------------------------------- +// Input data: +// +// REF_TOP: Top reference data stored in BYTE with p[-1,-1] at REF_TOP(0,-1), p[-1,-1] and [15,-1] adjusted +// REF_LEFT: Left reference data stored in BYTE with p[-1,0] at REF_LEFT(0,2), REF_LEFT(0,1) (p[-1,-1]) adjusted +// PRED_MODE: Intra prediction mode stored in 4 LSBs +// INTRA_PRED_AVAIL: Top/Left available flag, (Bit0: Left, Bit1: Top) +// +// Output data: +// +// REG_INTRA_8X8_PRED: Predicted 8X8 block data +//-------------------------------------------------------------------------- + +#define INTRA_REF REG_INTRA_TEMP_1 +#define REF_TMP REG_INTRA_TEMP_2 + +intra_Pred_8x8_Y: + +// Reference sample filtering +// + // Set up boundary pixels for unified filtering + mov (1) REF_TOP(0,16)<1> REF_TOP(0,15)REGION(1,0) // p[16,-1] = p[15,-1] + mov (8) REF_LEFT(0,2+8)<1> REF_LEFT(0,2+7)REGION(1,0) // p[-1,8] = p[-1,7] + + // Top reference sample filtering (!!Consider instruction compression later) + add (16) acc0<1>:w REF_TOP(0,-1)REGION(16,1) 2:w // p[x-1,-1]+2 + mac (16) acc0<1>:w REF_TOP(0)REGION(16,1) 2:w // p[x-1,-1]+2*p[x,-1]+2 + mac (16) acc0<1>:w REF_TOP(0,1)REGION(16,1) 1:w // p[x-1,-1]+2*p[x,-1]+p[x+1,-1]+2 + shr (16) REF_TMP<1>:w acc0:w 2:w // (p[x-1,-1]+2*p[x,-1]+p[x+1,-1]+2)>>2 + + // Left reference sample filtering + add (16) acc0<1>:w REF_LEFT(0)REGION(16,1) 2:w // p[-1,y-1]+2 + mac (16) acc0<1>:w REF_LEFT(0,1)REGION(16,1) 2:w // p[-1,y-1]+2*p[-1,y]+2 + mac (16) acc0<1>:w REF_LEFT(0,2)REGION(16,1) 1:w // p[-1,y-1]+2*p[-1,y]+p[-1,y+1]+2 + shr (16) INTRA_REF<1>:w acc0:w 2:w // (p[-1,y-1]+2*p[-1,y]+p[-1,y+1]+2)>>2 + + // Re-assign filtered reference samples + mov (16) REF_TOP(0)<1> REF_TMP<32;16,2>:ub // p'[x,-1], x=0...15 + mov (8) REF_LEFT(0)<1> INTRA_REF.2<16;8,2>:ub // p'[-1,y], y=0...7 + mov (1) REF_TOP(0,-1)<1> INTRA_REF<0;1,0>:ub // p'[-1,-1] + +// Select intra_8x8 prediction mode +// + and (1) PINTRAPRED_Y<1>:w PRED_MODE<0;1,0>:w 0x0F:w + // WA for "jmpi" restriction + mov (1) REG_INTRA_TEMP_1<1>:ud r[PINTRAPRED_Y, INTRA_8X8_OFFSET]:ub + jmpi (1) REG_INTRA_TEMP_1<0;1,0>:d + +// Mode 0 +#define PTMP a0.6 +#define PTMP_D a0.3 +INTRA_8X8_VERTICAL: + $for(0,0; <4; 1,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PERROR,%2]<16;16,1>:w REF_TOP(0)<0;8,1> + } + RETURN + +// Mode 1 +INTRA_8X8_HORIZONTAL: + $for(0,0; <8; 2,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PERROR,%2]<16;16,1>:w REF_LEFT(0,%1)<1;8,0> + } + RETURN + +// Mode 2 +INTRA_8X8_DC: +// Rearrange reference samples for unified DC prediction code +// + and.nz.f0.0 (16) NULLREG INTRA_PRED_AVAIL<0;1,0>:w 2:w // Top macroblock available for intra prediction? + and.nz.f0.1 (8) NULLREG INTRA_PRED_AVAIL<0;1,0>:w 1:w // Left macroblock available for intra prediction? + (-f0.0.any16h) mov (16) REF_TOP_W(0)<1> 0x8080:uw + (-f0.1.any8h) mov (8) REF_LEFT(0)<1> REF_TOP(0)REGION(8,1) + (-f0.0.any8h) mov (8) REF_TOP(0)<1> REF_LEFT(0)REGION(8,1) + +// Perform DC prediction +// + add (8) PRED_YW(15)<1> REF_TOP(0)REGION(8,1) REF_LEFT(0)REGION(8,1) + add (4) PRED_YW(15)<1> PRED_YW(15)REGION(4,1) PRED_YW(15,4)REGION(4,1) + add (2) PRED_YW(15)<1> PRED_YW(15)REGION(2,1) PRED_YW(15,2)REGION(2,1) + add (16) acc0<1>:w PRED_YW(15)REGION(1,0) PRED_YW(15,1)REGION(1,0) + add (16) acc0<1>:w acc0:w 8:w + shr (16) REG_INTRA_TEMP_0<1>:w acc0:w 4:w + + // Add error block + $for(0,0; <4; 1,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PERROR,%2]<16;16,1>:w REG_INTRA_TEMP_0<16;16,1>:w + } + RETURN + +// Mode 3 +INTRA_8X8_DIAG_DOWN_LEFT: + mov (8) REF_TOP(0,16)<1> REF_TOP(0,15)REGION(8,1) // p[16,-1] = p[15,-1] + add (16) acc0<1>:w REF_TOP(0,2)REGION(16,1) 2:w // p[x+2]+2 + mac (16) acc0<1>:w REF_TOP(0,1)REGION(16,1) 2:w // 2*p[x+1]+p[x+2]+2 + mac (16) acc0<1>:w REF_TOP(0)REGION(16,1) 1:w // p[x]+2*p[x+1]+p[x+2]+2 + shr (16) REG_INTRA_TEMP_0<1>:w acc0<16;16,1>:w 2:w // (p[x]+2*p[x+1]+p[x+2]+2)>>2 + + // Add error block + $for(0,0; <8; 2,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PERROR,%2]<16;16,1>:w REG_INTRA_TEMP_0.%1<1;8,1>:w + } + RETURN + +// Mode 4 +INTRA_8X8_DIAG_DOWN_RIGHT: +#define INTRA_REF REG_INTRA_TEMP_1 +#define REF_TMP REG_INTRA_TEMP_2 + +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0,1)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order bottom 4 pixels of left ref. + shl (4) REF_TMP.4<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order top 4 pixels of left ref. + mov (8) INTRA_REF<1>:ub REF_TMP.3<32;8,4>:ub + mov (16) INTRA_REF.8<1>:ub REF_TOP(0,-1)REGION(16,1) // INTRA_REF holds all reference data + + add (16) acc0<1>:w INTRA_REF.2<16;16,1>:ub 2:w // p[x+2]+2 + mac (16) acc0<1>:w INTRA_REF.1<16;16,1>:ub 2:w // 2*p[x+1]+p[x+2]+2 + mac (16) acc0<1>:w INTRA_REF<16;16,1>:ub 1:w // p[x]+2*p[x+1]+p[x+2]+2 + shr (16) INTRA_REF<1>:w acc0<16;16,1>:w 2:w // (p[x]+2*p[x+1]+p[x+2]+2)>>2 + +// Store data in reversed order + add (2) PBWDCOPY_8<1>:w INV_TRANS48<2;2,1>:b INTRA_TEMP_1*GRFWIB:w // Must match with INTRA_REF + + // Add error block + $for(0,96; <8; 2,-32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PBWDCOPY_8,%1*2]<8,1>:w r[PERROR,%2]<16;16,1>:w + } + RETURN + +// Mode 5 +INTRA_8X8_VERT_RIGHT: +#define INTRA_REF REG_INTRA_TEMP_1 +#define REF_TMP REG_INTRA_TEMP_2 +#define REF_TMP1 REG_INTRA_TEMP_3 + +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0,1)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order bottom 4 pixels of left ref. + shl (4) REF_TMP.4<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order top 4 pixels of left ref. + mov (8) INTRA_REF<1>:ub REF_TMP.3<32;8,4>:ub + mov (16) INTRA_REF.8<1>:ub REF_TOP(0,-1)REGION(16,1) // INTRA_REF holds all reference data + + // Even rows + avg (16) PRED_YW(14)<1> INTRA_REF.8<16;16,1> INTRA_REF.9<16;16,1> // avg(p[x-1],p[x]) + // Odd rows + add (16) acc0<1>:w INTRA_REF.3<16;16,1>:ub 2:w // p[x]+2 + mac (16) acc0<1>:w INTRA_REF.2<16;16,1>:ub 2:w // 2*p[x-1]+p[x]+2 + mac (16) acc0<1>:w INTRA_REF.1<16;16,1>:ub 1:w // p[x-2]+2*p[x-1]+p[x]+2 + shr (16) REF_TMP<1>:w acc0:w 2:w // (p[x-2]+2*p[x-1]+p[x]+2)>>2 + + mov (8) INTRA_REF<1>:ub REF_TMP<16;8,2>:ub // Keep zVR = -1,-2,-3,-4,-5,-6,-7 sequencially + mov (8) INTRA_REF.6<2>:ub REF_TMP.12<16;8,2>:ub // Keep zVR = -1,1,3,5,7,9,11,13 at even byte + mov (8) INTRA_REF.7<2>:ub PRED_Y(14)REGION(8,2) // Combining zVR = 0,2,4,6,8,10,12,14 at odd byte + + add (2) PBWDCOPY_8<1>:w INV_TRANS8<2;2,1>:b INTRA_TEMP_1*GRFWIB:w // Must match with INTRA_REF + + // Add error block + $for(0,96; <8; 2,-32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PBWDCOPY_8,%1]<8,2>:ub r[PERROR,%2]<16;16,1>:w + } + RETURN + +// Mode 6 +INTRA_8X8_HOR_DOWN: +// Set inverse shift count + shl (4) REF_TMP<1>:ud REF_LEFT_D(0,1)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order bottom 4 pixels of left ref. + shl (4) REF_TMP.4<1>:ud REF_LEFT_D(0)REGION(1,0) INV_SHIFT<4;4,1>:b // Reverse order top 4 pixels of left ref. + mov (8) INTRA_REF<1>:ub REF_TMP.3<16;4,4>:ub + mov (16) INTRA_REF.8<1>:ub REF_TOP(0,-1)REGION(16,1) // INTRA_REF holds all reference data + + // Odd pixels + add (16) acc0<1>:w INTRA_REF.2<16;16,1>:ub 2:w // p[y]+2 + mac (16) acc0<1>:w INTRA_REF.1<16;16,1>:ub 2:w // 2*p[y-1]+p[y]+2 + mac (16) acc0<1>:w INTRA_REF.0<16;16,1>:ub 1:w // p[y-2]+2*p[y-1]+p[y]+2 + shr (16) PRED_YW(14)<1> acc0:w 2:w // (p[y-2]+2*p[y-1]+p[y]+2)>>2 + // Even pixels + avg (16) INTRA_REF<1>:w INTRA_REF<16;16,1>:ub INTRA_REF.1<16;16,1>:ub // avg(p[y-1],p[y]) + + mov (8) INTRA_REF.1<2>:ub PRED_Y(14)REGION(8,2) // Combining odd pixels to form byte type + mov (8) INTRA_REF.16<1>:ub PRED_Y(14,16)REGION(8,2) // Keep zVR = -2,-3,-4,-5,-6,-7 unchanged + // Now INTRA_REF.0 - INTRA_REF.21 contain predicted data + + add (2) PBWDCOPY_8<1>:w INV_TRANS48<2;2,1>:b INTRA_TEMP_1*GRFWIB:w // Must match with INTRA_REF + + // Add error block + $for(0,96; <13; 4,-32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub r[PBWDCOPY_8,%1]<8,1>:ub r[PERROR,%2]<16;16,1>:w + } + RETURN + +// Mode 7 +INTRA_8X8_VERT_LEFT: + // Even rows + avg (16) PRED_YW(14)<1> REF_TOP(0)REGION(16,1) REF_TOP(0,1)REGION(16,1) // avg(p[x],p[x+1]) + // Odd rows + add (16) acc0<1>:w REF_TOP(0,2)REGION(16,1) 2:w // p[x+2]+2 + mac (16) acc0<1>:w REF_TOP(0,1)REGION(16,1) 2:w // 2*p[x+1]+p[x+2]+2 + mac (16) acc0<1>:w REF_TOP(0)REGION(16,1) 1:w // p[x]+2*p[x+1]+p[x+2]+2 + shr (16) PRED_YW(15)<1> acc0<1;8,1>:w 2:w // (p[x]+2*p[x+1]+p[x+2]+2)>>2 + + // Add error block + $for(0,0; <4; 1,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub PRED_YW(14,%1)<16;8,1> r[PERROR,%2]<16;16,1>:w + } + RETURN + +// Mode 8 +INTRA_8X8_HOR_UP: +// Set extra left reference pixels for unified prediction + mov (8) REF_LEFT(0,8)<1> REF_LEFT(0,7)REGION(1,0) // Copy p[-1,7] to p[-1,y],y=8...15 + + // Even pixels + avg (16) PRED_YW(14)<1> REF_LEFT(0)REGION(16,1) REF_LEFT(0,1)REGION(16,1) // avg(p[y],p[y+1]) + // Odd pixels + add (16) acc0<1>:w REF_LEFT(0,2)REGION(16,1) 2:w // p[y+2]+2 + mac (16) acc0<1>:w REF_LEFT(0,1)REGION(16,1) 2:w // 2*p[y+1]+p[y+2]+2 + mac (16) acc0<1>:w REF_LEFT(0)REGION(16,1) 1:w // p[y]+2*p[y+1]+p[y+2]+2 + shr (16) PRED_YW(15)<1> acc0<1;8,1>:w 2:w // (p[y]+2*p[y+1]+p[y+2]+2)>>2 + + // Merge even/odd pixels + // The predicted data need to be stored in byte type (22 bytes are required) + mov (16) PRED_Y(14,1)<2> PRED_Y(15)REGION(16,2) + + // Add error block + $for(0,0; <4; 1,32) { + add.sat (16) r[PPREDBUF_Y,%2]<2>:ub PRED_Y(14,%1*4)<2;8,1> r[PERROR,%2]<16;16,1>:w + } + RETURN + +// End of intra_Pred_8X8_Y + +#endif // !defined(__INTRA_PRED_8X8_Y__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_Chroma.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_Chroma.asm new file mode 100644 index 000000000..cd55147e7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_Pred_Chroma.asm @@ -0,0 +1,185 @@ +/* + * Intra predict 8x8 chroma block + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__INTRA_PRED_CHROMA__) // Make sure this is only included once +#define __INTRA_PRED_CHROMA__ + +// Module name: intra_Pred_Chroma.asm +// +// Intra predict 8x8 chroma block +// + + shr (1) PINTRAPRED_UV<1>:w REG_INTRA_CHROMA_PRED_MODE<0;1,0>:ub INTRA_CHROMA_PRED_MODE_SHIFT:w // Bits 1:0 = intra chroma pred mode + // WA for "jmpi" restriction + mov (1) REG_INTRA_TEMP_1<1>:d r[PINTRAPRED_UV, INTRA_CHROMA_OFFSET]:b + jmpi (1) REG_INTRA_TEMP_1<0;1,0>:d + +// Mode 0 +INTRA_CHROMA_DC: + and.nz.f0.0 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_AVAIL_FLAG:ud // Top macroblock available for intra prediction? + +// Calculate DC values for sub-block 0 and 3 +// +// Rearrange reference samples for unified DC prediction code +// Need to check INTRA_PRED_LEFT_TH_AVAIL_FLAG for blk0 and INTRA_PRED_LEFT_BH_AVAIL_FLAG for blk3 +// + (-f0.0.any8h) mov (8) INTRA_REF_TOP_W(0)<1> 0x8080:uw // Up not available + + and.nz.f0.1 (4) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG:ud + (-f0.1.any4h) mov (4) INTRA_REF_LEFT_W(0)<2> INTRA_REF_TOP_W(0)REGION(4,1) // Left top half macroblock not available for intra prediction + and.nz.f0.1 (4) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_BH_AVAIL_FLAG:ud + (-f0.1.any4h) mov (4) INTRA_REF_LEFT_W(0,8)<2> INTRA_REF_TOP_W(0,4)REGION(4,1) // Left bottom half macroblock not available for intra prediction + + (-f0.0.any8h) mov (8) INTRA_REF_TOP_W(0)<1> INTRA_REF_LEFT_W(0)REGION(8,2) // Up not available +// Calculate DC prediction +// + add (16) PRED_UVW(0)<1> INTRA_REF_TOP(0)REGION(16,1) INTRA_REF_LEFT_UV(0)<4;2,1> // Sum of top and left reference + add (8) PRED_UVW(0)<1> PRED_UVW(0)<4;2,1> PRED_UVW(0,2)<4;2,1> // Sum of first half (blk #0) and second half (blk #3) + + add (8) PRED_UVW(9)<1> PRED_UVW(0)<0;2,1> PRED_UVW(0,2)<0;2,1> // Sum of blk #0 + add (8) PRED_UVW(11,8)<1> PRED_UVW(0,4)<0;2,1> PRED_UVW(0,6)<0;2,1> // Sum of blk #3 + +// Calculate DC values for sub-block 1 and 2 +// +// Rearrange reference samples for unified DC prediction code +// + // Blk #2 + (-f0.0.any4h) mov (4) INTRA_REF_TOP_W(0)<1> 0x8080:uw + (f0.1.any4h) mov (4) INTRA_REF_TOP_W(0)<1> INTRA_REF_LEFT_W(0,8)REGION(4,2) // Always use available left reference + (-f0.1.any4h) mov (4) INTRA_REF_LEFT_W(0,8)<2> INTRA_REF_TOP_W(0)REGION(4,1) + + // Blk #1 + and.nz.f0.1 (4) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG:ud + (-f0.1.any4h) mov (4) INTRA_REF_LEFT_W(0)<2> 0x8080:uw + (f0.0.any4h) mov (4) INTRA_REF_LEFT_W(0)<2> INTRA_REF_TOP_W(0,4)REGION(4,1) // Always use available top reference + (-f0.0.any4h) mov (4) INTRA_REF_TOP_W(0,4)<1> INTRA_REF_LEFT_W(0)REGION(4,2) + +// Calculate DC prediction +// + add (8) PRED_UVW(0)<1> INTRA_REF_TOP(0)REGION(8,1) INTRA_REF_LEFT_UV(0,16)<4;2,1> // Sum of top and left reference for blk #2 + add (8) PRED_UVW(0,8)<1> INTRA_REF_LEFT_UV(0)<4;2,1> INTRA_REF_TOP(0,8)REGION(8,1) // Sum of top and left reference for blk #1 + add (8) PRED_UVW(0)<1> PRED_UVW(0)<4;2,1> PRED_UVW(0,2)<4;2,1> // Sum of first half (blk #2) and second half (blk #1) + + add (8) PRED_UVW(9,8)<1> PRED_UVW(0,4)<0;2,1> PRED_UVW(0,6)<0;2,1> // Sum of blk #1 + add (8) PRED_UVW(11)<1> PRED_UVW(0)<0;2,1> PRED_UVW(0,2)<0;2,1> // Sum of blk #2 + +// Now, PRED_UVW(9) holds sums for blks #0 and #1 and PRED_UVW(11) holds sums for blks #2 and #3 +// + add (32) acc0<1>:w PRED_UVW(9)REGION(16,1) 4:w {Compr} // Add rounder + $for(0; <4; 2) { + shr (32) PRED_UVW(%1)<1> acc0:w 3:w {Compr} + } + + add (32) acc0<1>:w PRED_UVW(11)REGION(16,1) 4:w {Compr} // Add rounder + $for(4; <8; 2) { + shr (32) PRED_UVW(%1)<1> acc0:w 3:w {Compr} + } + jmpi (1) End_of_intra_Pred_Chroma + +// Mode 1 +INTRA_CHROMA_HORIZONTAL: + mov (1) PREF_LEFT_UD<1>:ud INTRA_REF_LEFT_ID*GRFWIB*0x00010001+0x00040000:ud // Set address registers for instruction compression + $for(0,0; <8; 2,8) { + mov (32) PRED_UVW(%1)<1> r[PREF_LEFT,%2+2]<0;2,1>:ub {Compr} // Actual left column reference data start at offset 2 + } + jmpi (1) End_of_intra_Pred_Chroma + +// Mode 2 +INTRA_CHROMA_VERTICAL: + $for(0; <8; 2) { + mov (32) PRED_UVW(%1)<1> INTRA_REF_TOP(0) {Compr} + } + jmpi (1) End_of_intra_Pred_Chroma + +// Mode 3 +INTRA_Chroma_PLANE: +// Refer to H.264/AVC spec Section 8.3.4.4 + +#undef C + +#define A REG_INTRA_TEMP_2.0 // All are WORD type +#define B REG_INTRA_TEMP_3.0 // B[U] & B[V] +#define C REG_INTRA_TEMP_3.2 // C[U] & C[V] +#define YP REG_INTRA_TEMP_0 // Store intermediate results of c*(y-3). Make sure it's an even GRF +#define YP1 REG_INTRA_TEMP_1 // Store intermediate results of c*(y-3). Make sure it's an odd GRF +#define XP REG_INTRA_TEMP_5 // Store intermediate results of a+b*(x-3)+16. Make sure it's an odd GRF + +// First Calculate constants H and V +// H1 = sum((x'+1)*p[4+x',-1]), x'=0,1,2,3 +// H2 = sum((-x'-1)*p[2-x',-1]), x'=3,2,1,0 +// H = H1 + H2 +// The same calculation holds for V +// + mul (8) H1(0)<1> INTRA_REF_TOP(0,8)REGION(8,1) 0x44332211:v + mul (8) H2(0)<1> INTRA_REF_TOP(0,-2)REGION(8,1) 0xFFEEDDCC:v + + mul (8) V1(0)<1> INTRA_REF_LEFT_UV(0,4*4)<4;2,1> 0x44332211:v + mul (8) V2(0)<1> INTRA_REF_LEFT_UV(0)<4;2,1> 0x00FFEEDD:v + mul (2) V2(0,6)<1> INTRA_REF_TOP(0,-2)REGION(2,1) -4:w // Replace 0*p[-1,3] with -4*p[-1,-1] + // Now, REG_INTRA_TEMP_0 holds [H2, H1] and REG_INTRA_TEMP_1 holds [V2, V1] + + // Sum up [H2, H1] and [V2, V1] using instruction compression + // ExecSize = 16 is restricted by B-spec for instruction compression + // Actual intermediate results are in lower sub-registers after each summing step + add (16) H1(0)<1> H1(0) H2(0) {Compr} // Results in lower 8 WORDs + add (16) H1(0)<1> H1(0) H1(0,4) {Compr} // Results in lower 4 WORDs + add (16) H1(0)<1> H1(0) H1(0,2) {Compr} // Results in lower 2 WORDs + +// Calculate a, b, c and further derivations + mov (16) acc0<1>:w 32:w + mac (4) acc0<1>:w H1(0)<16;2,1> 34:w + shr (4) B<1>:w acc0:w 6:w // Done b,c + mov (16) acc0<1>:w 16:w + mac (16) acc0<1>:w INTRA_REF_TOP(0,7*2)<0;2,1> 16:w + mac (16) A<1>:w INTRA_REF_LEFT_UV(0,7*4)<0;2,1> 16:w // A = a+16 + mac (16) XP<1>:w B<0;2,1>:w XY_3<1;2,0>:b // XP = A+b*(x-3) + mul (8) YP<1>:w C<0;2,1>:w XY_3<2;2,0>:b // YP = c*(y-3), Even portion + mul (8) YP1<1>:w C<0;2,1>:w XY_3_1<2;2,0>:b // YP = c*(y-3), Odd portion + +// Finally the intra_Chroma plane prediction + $for(0; <8; 2) { + add (32) acc0<1>:w XP<16;16,1>:w YP.%1<0;2,1>:w {Compr} + shr.sat (32) PRED_UV(%1)<2> acc0<16;16,1>:w 5:w {Compr} + } + +End_of_intra_Pred_Chroma: + +// End of intra_Pred_Chroma + +#endif // !defined(__INTRA_PRED_CHROMA__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_pred_16x16_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_pred_16x16_Y.asm new file mode 100644 index 000000000..8207db35b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/intra_pred_16x16_Y.asm @@ -0,0 +1,141 @@ +/* + * Intra predict 16x16 luma block + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: intra_Pred_16x16_Y.asm +// +// Intra predict 16x16 luma block +// + and (1) PINTRAPRED_Y<1>:w INTRA_PRED_MODE(0)REGION(1,0) 0x0F:w + // WA for "jmpi" restriction + mov (1) REG_INTRA_TEMP_1<1>:ud r[PINTRAPRED_Y, INTRA_16X16_OFFSET]:ub + jmpi (1) REG_INTRA_TEMP_1<0;1,0>:d + +// Mode 0 +INTRA_16x16_VERTICAL: + $for(0; <16; 2) { + mov (32) PRED_YW(%1)<1> INTRA_REF_TOP(0) {Compr} + } + jmpi (1) End_intra_Pred_16x16_Y + +// Mode 1 +INTRA_16x16_HORIZONTAL: + mov (1) PREF_LEFT_UD<1>:ud INTRA_REF_LEFT_ID*GRFWIB*0x00010001+0x00040000:ud // Set address registers for instruction compression + $for(0,0; <16; 2,8) { + mov (32) PRED_YW(%1)<1> r[PREF_LEFT,%2+3]<0;1,0>:ub {Compr} // Actual left column reference data start at offset 3 + } + jmpi (1) End_intra_Pred_16x16_Y + +// Mode 2 +INTRA_16x16_DC: + and.nz.f0.0 (8) NULLREG REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_UP_AVAIL_FLAG:ud // Top macroblock available for intra prediction? + and (8) acc0<1>:ud REG_INTRA_PRED_AVAIL_FLAG INTRA_PRED_LEFT_TH_AVAIL_FLAG+INTRA_PRED_LEFT_BH_AVAIL_FLAG:ud // Left macroblock available for intra prediction? + xor.z.f0.1 (8) NULLREG acc0:ud INTRA_PRED_LEFT_TH_AVAIL_FLAG+INTRA_PRED_LEFT_BH_AVAIL_FLAG:ud // Left macroblock available for intra prediction? +// Rearrange reference samples for unified DC prediction code +// + (-f0.0.any8h) mov (8) INTRA_REF_TOP_W(0)<1> 0x8080:uw + (-f0.1.any8h) mov (8) INTRA_REF_LEFT(0)<4> INTRA_REF_TOP(0)REGION(8,1) + (-f0.1.any8h) mov (8) INTRA_REF_LEFT(1)<4> INTRA_REF_TOP(0,8)REGION(8,1) + (-f0.0.any8h) mov (8) INTRA_REF_TOP(0)<1> INTRA_REF_LEFT(0)REGION(8,4) + (-f0.0.any8h) mov (8) INTRA_REF_TOP(0,8)<1> INTRA_REF_LEFT(1)REGION(8,4) // Split due to HW limitation +// Perform DC prediction +// + add (16) PRED_YW(15)<1> INTRA_REF_LEFT(0)REGION(8,4) INTRA_REF_TOP(0)REGION(16,1) + add (8) PRED_YW(15)<1> PRED_YW(15)REGION(8,1) PRED_YW(15,8)REGION(8,1) + add (4) PRED_YW(15)<1> PRED_YW(15)REGION(4,1) PRED_YW(15,4)REGION(4,1) + add (2) PRED_YW(15)<1> PRED_YW(15)REGION(2,1) PRED_YW(15,2)REGION(2,1) + add (32) acc0<1>:w PRED_YW(15)REGION(1,0) PRED_YW(15,1)REGION(1,0) {Compr} // Set up both acc0 and acc1 + add (32) acc0<1>:w acc0:w 16:w {Compr} + + $for(0; <16; 2) { + shr (32) PRED_YW(%1)<1> acc0:w 5:w {Compr} + } + jmpi (1) End_intra_Pred_16x16_Y + +// Mode 3 +INTRA_16x16_PLANE: +// Refer to H.264/AVC spec Section 8.3.3.4 + +#define A REG_INTRA_TEMP_2.0 // All are WORD type +#define B REG_INTRA_TEMP_3.0 +#define C REG_INTRA_TEMP_3.1 +#define YP REG_INTRA_TEMP_0 // Store intermediate results of c*(y-7). Make sure it's an even GRF +#define YP1 REG_INTRA_TEMP_1 // Store intermediate results of c*(y-7). Make sure it's an odd GRF, used in {Comp} +#define XP REG_INTRA_TEMP_5 // Store intermediate results of a+b*(x-7)+16. Make sure it's an odd GRF + +// First Calculate constants H and V +// H1 = sum((-x'-1)*p[8+x',-1]), x'=0,1,...7 +// H2 = sum((-x'-1)*p[6-x',-1]), x'=7,6,...0 +// H = -H1 + H2 +// The same calculation holds for V +// + mul (8) H1(0)<1> INTRA_REF_TOP(0,8)REGION(8,1) 0x89ABCDEF:v + mul (8) H2(0)<1> INTRA_REF_TOP(0,-1)REGION(8,1) 0xFEDCBA98:v + + mul (8) V1(0)<1> INTRA_REF_LEFT(0,8*4)REGION(8,4) 0x89ABCDEF:v + mul (8) V2(0)<1> INTRA_REF_LEFT(0)REGION(8,4) 0x0FEDCBA9:v + mul (1) V2(0,7)<1> INTRA_REF_TOP(0,-1)<0;1,0> -8:w // Replace 0*p[-1,7] with -8*p[-1,-1] + // Now, REG_INTRA_TEMP_0 holds [H2, -H1] and REG_INTRA_TEMP_1 holds [V2, -V1] + + // Sum up [H2, -H1] and [V2, -V1] using instruction compression + // ExecSize = 16 is restricted by B-spec for instruction compression + // Actual intermediate results are in lower sub-registers after each summing step + add (16) H1(0)<1> -H1(0) H2(0) {Compr} // Results in lower 8 WORDs + add (16) H1(0)<1> H1(0) H1(0,4) {Compr} // Results in lower 4 WORDs + add (16) H1(0)<1> H1(0) H1(0,2) {Compr} // Results in lower 2 WORDs + add (16) H1(0)<1> H1(0) H1(0,1) {Compr} // Results in lower 1 WORD + +// Calculate a, b, c and further derivations + mov (16) acc0<1>:w 32:w + mac (2) acc0<1>:w H1(0)<16;1,0> 5:w + shr (2) B<1>:w acc0:w 6:w // Done b,c + mov (16) acc0<1>:w 16:w + mac (16) acc0<1>:w INTRA_REF_TOP(0,15)<0;1,0> 16:w + mac (16) A<1>:w INTRA_REF_LEFT(0,15*4)<0;1,0> 16:w // A = a+16 + mac (16) XP<1>:w B<0;1,0>:w XY_7<16;16,1>:b // XP = A+b*(x-7) + mul (8) YP<1>:w C<0;1,0>:w XY_7<16;8,2>:b // YP = c*(y-7), even portion + mul (8) YP1<1>:w C<0;1,0>:w XY_7_1<16;8,2>:b // YP = c*(y-7), odd portion + +// Finally the intra_16x16 plane prediction + $for(0,0; <16; 2,1) { + add (32) acc0<1>:w XP<16;16,1>:w YP.%2<16;16,0>:w {Compr} // Set Width!= 1 to trick EU to use YP_1.%2 for 2nd instruction + shr.sat (32) PRED_Y(%1)<2> acc0<16;16,1>:w 5:w {Compr} + } + +End_intra_Pred_16x16_Y: +// End of intra_Pred_16x16_Y diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/list b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/list new file mode 100644 index 000000000..000e0fbad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/list @@ -0,0 +1,21 @@ +INTRA_16x16 +INTRA_8x8 +INTRA_4x4 +INTRA_PCM +FRAME_MB +FIELD_MB +MBAFF_MB +SETHWSCOREBOARD +SETHWSCOREBOARD_MBAFF +AVC_ILDB_ROOT_Y_ILDB_FRAME +AVC_ILDB_CHILD_Y_ILDB_FRAME +AVC_ILDB_ROOT_UV_ILDB_FRAME +AVC_ILDB_CHILD_UV_ILDB_FRAME +AVC_ILDB_ROOT_Y_ILDB_FIELD +AVC_ILDB_CHILD_Y_ILDB_FIELD +AVC_ILDB_ROOT_UV_ILDB_FIELD +AVC_ILDB_CHILD_UV_ILDB_FIELD +AVC_ILDB_ROOT_Y_ILDB_MBAFF +AVC_ILDB_CHILD_Y_ILDB_MBAFF +AVC_ILDB_ROOT_UV_ILDB_MBAFF +AVC_ILDB_CHILD_UV_ILDB_MBAFF diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_10x5.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_10x5.asm new file mode 100644 index 000000000..4aed9f757 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_10x5.asm @@ -0,0 +1,87 @@ +/* + * Load reference 10x5 area for chroma NV12 4x4 MC + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: LoadRef_C_10x5.asm +// +// Load reference 10x5 area for chroma NV12 4x4 MC + + +//#if !defined(__LOADREF_C_10x5__) // Make sure this is only included once +//#define __LOADREF_C_10x5__ + + +#if 1 + + // Compute integer and fractional components of MV + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x03:w {NoDDClr} + and (2) gMVX_FRACC<1>:w r[pMV,0]<2;2,1>:w 0x07:w {NoDDChk} + + // Check whether MVY is integer + or.z.f0.0 (8) null:w gMVY_FRACC<0;1,0>:w 0:w + + // Compute top-left corner position to be loaded + mov (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w + shl (1) gMSGSRC.0:d gMSGSRC.0:d 1:w + + (f0.0) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(2)+nBI_LC_DIFF:ud + (-f0.0) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(3)+nBI_LC_DIFF:ud + + // Read 16x5 pixels - TODO: Reading 12x5 instead of 16x5 took more time on CL. Why? + (f0.0) mov (1) gMSGSRC.2:ud 0x00030009:ud //{NoDDChk} + (-f0.0) mov (1) gMSGSRC.2:ud 0x00040009:ud //{NoDDChk} + send (8) gudREFC(0)<1> mMSGHDRC gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + +#else + + add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(3)+nBI_LC_DIFF:ud + + // Compute integer and fractional components of MV + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x03:w {NoDDClr} + and (2) gMVX_FRACC<1>:w r[pMV,0]<2;2,1>:w 0x07:w {NoDDChk} + + // Compute top-left corner position to be loaded + mov (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w + shl (1) gMSGSRC.0:d gMSGSRC.0:d 1:w + + // Read 16x5 pixels + mov (1) gMSGSRC.2:ud 0x00040009:ud {NoDDChk} + send (8) gudREFC(0)<1> mMSGHDRC gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud +#endif + +//#endif // !defined(__LOADREF_C_10x5__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_6x3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_6x3.asm new file mode 100644 index 000000000..71939fe89 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_C_6x3.asm @@ -0,0 +1,68 @@ +/* + * Load reference 6x3 area for chroma NV12 4x4 MC + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: LoadRef_C_6x3.asm +// +// Load reference 6x3 area for chroma NV12 4x4 MC + + +//#if !defined(__LOADREF_C_6x3__) // Make sure this is only included once +//#define __LOADREF_C_6x3__ + + +#ifdef DEV_ILK + add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00100010:ud +#else + add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00010010:ud +#endif // DEV_ILK + + // Compute integer and fractional components of MV + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x03:w {NoDDClr} + and (2) gMVX_FRACC<1>:w r[pMV,0]<2;2,1>:w 0x07:w {NoDDChk} + + // Compute top-left corner position to be loaded + mov (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w + shl (1) gMSGSRC.0:d gMSGSRC.0:d 1:w + + // Read 8x3 pixels + mov (1) gMSGSRC.2:ud 0x00020005:ud + send (8) gudREFC(0)<1> mMSGHDRC gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + + +//#endif // !defined(__LOADREF_C_6x3__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x13.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x13.asm new file mode 100644 index 000000000..a384a6dd0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x13.asm @@ -0,0 +1,157 @@ +/* + * Load reference 16x13 area for luma 8x8 MC + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: LoadRef_Y_16x13.asm +// +// Load reference 16x13 area for luma 8x8 MC + + +//#if !defined(__LOADREF_Y_16x13__) // Make sure this is only included once +//#define __LOADREF_Y_16x13__ + +#if 1 + +#if 1 + + // Check whether MVX is integer MV + and.z.f0.0 (1) null:w r[pMV,0]<0;1,0>:w 0x3:w + + // Compute integer and fractional components of MV + and (2) gMVX_FRAC<1>:w r[pMV,0]<2;2,1>:w 0x03:w //{NoDDClr} + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x02:w //{NoDDChk} + + // Check whether MVY is integer + or.z.f0.1 (8) null:w gMVY_FRAC<0;1,0>:w 0:w + + // If MVX is a multiple of 4 (..., -4, 0, 4, ...) integer MV, do special handling + (f0.0) jmpi (1) INTERLABEL(LOADREF_MVXZERO) + + // Set message descriptor + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(4):ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(7):ud + + // Compute top-left corner position to be loaded + // TODO: sel + (-f0.1) add (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w -0x02:d //{NoDDClr} + (-f0.1) mov (1) gMSGSRC.2:ud 0x000c000c:ud //{NoDDChk} + (f0.1) add (1) gMSGSRC.0<1>:d gMVX_INT<0;1,0>:w -0x02:d //{NoDDClr} + (f0.1) mov (1) gMSGSRC.1<1>:d gMVY_INT<0;1,0>:w //{NoDDChk,NoDDClr} + (f0.1) mov (1) gMSGSRC.2:ud 0x0007000c:ud //{NoDDChk} + + // Read 16x13 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + + jmpi INTERLABEL(EXIT_LOADREF_Y_16x13) + +INTERLABEL(LOADREF_MVXZERO): + + // Set message descriptor +#ifdef DEV_ILK + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00200000:ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00400000:ud +#else + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00020000:ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00040000:ud +#endif + + // Compute top-left corner position to be loaded + // TODO: sel + mov (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w + (-f0.1) add (1) gMSGSRC.1<1>:d gMVY_INT<0;1,0>:w -0x02:d + (-f0.1) mov (1) gMSGSRC.2:ud 0x000c0007:ud //{NoDDChk} + (f0.1) mov (1) gMSGSRC.2:ud 0x00070007:ud //{NoDDChk} + + // Read 16x13 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + + +#else + // Compute integer and fractional components of MV + and (2) gMVX_FRAC<1>:w r[pMV,0]<2;2,1>:w 0x03:w //{NoDDClr} + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x02:w //{NoDDChk} + + // Check whether MVY is integer + or.z.f0.1 (8) null:w gMVY_FRAC<0;1,0>:w 0:w + + // Set message descriptor +#ifdef DEV_ILK + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00400000:ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00700000:ud +#else + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00040000:ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00070000:ud +#endif + + // Compute top-left corner position to be loaded + // TODO: sel + (-f0.1) add (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w -0x02:d //{NoDDClr} + (-f0.1) mov (1) gMSGSRC.2:ud 0x000c000c:ud //{NoDDChk} + (f0.1) add (1) gMSGSRC.0<1>:d gMVX_INT<0;1,0>:w -0x02:d //{NoDDClr} + (f0.1) mov (1) gMSGSRC.1<1>:d gMVY_INT<0;1,0>:w //{NoDDChk,NoDDClr} + (f0.1) mov (1) gMSGSRC.2:ud 0x0007000c:ud //{NoDDChk} + + // Read 16x13 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud +#endif + +#else + + // Compute integer and fractional components of MV + and (2) gMVX_FRAC<1>:w r[pMV,0]<2;2,1>:w 0x03:w {NoDDClr} // + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x02:w {NoDDChk} // + + // Set message descriptor +#ifdef DEV_ILK + add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00700000:ud +#else + add (1) pMSGDSC:ud gMSGDSC_R:ud 0x00070000:ud +#endif // DEV_ILK + + // Compute top-left corner position to be loaded + add (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w -0x02:d {NoDDClr} // + mov (1) gMSGSRC.2:ud 0x000c000c:ud {NoDDChk} // + + // Read 16x13 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + +#endif + +INTERLABEL(EXIT_LOADREF_Y_16x13): + +//#endif // !defined(__LOADREF_Y_16x13__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x9.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x9.asm new file mode 100644 index 000000000..efc901e2c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/loadRef_Y_16x9.asm @@ -0,0 +1,91 @@ +/* + * Load reference 16x9 area for luma 4x4 MC + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: LoadRef_Y_16x9.asm +// +// Load reference 16x9 area for luma 4x4 MC + + +//#if !defined(__LOADREF_Y_16x9__) // Make sure this is only included once +//#define __LOADREF_Y_16x9__ + +#if 1 + + // Compute integer and fractional components of MV + and (2) gMVX_FRAC<1>:w r[pMV,0]<2;2,1>:w 0x03:w //{NoDDClr} + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x02:w //{NoDDChk} + + // Check whether MVY is integer + or.z.f0.1 (8) null:w gMVY_FRAC<0;1,0>:w 0:w + + // Set message descriptor + (f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(2):ud + (-f0.1) add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(5):ud + + // Compute top-left corner position to be loaded + // TODO: sel + (-f0.1) add (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w -0x02:d //{NoDDClr} + (-f0.1) mov (1) gMSGSRC.2:ud 0x00080008:ud //{NoDDChk} + (f0.1) add (1) gMSGSRC.0<1>:d gMVX_INT<0;1,0>:w -0x02:d //{NoDDClr} + (f0.1) mov (1) gMSGSRC.1<1>:d gMVY_INT<0;1,0>:w //{NoDDChk,NoDDClr} + (f0.1) mov (1) gMSGSRC.2:ud 0x00030008:ud //{NoDDChk} + + // Read 16x9 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + +#else + + // Compute integer and fractional components of MV + and (2) gMVX_FRAC<1>:w r[pMV,0]<2;2,1>:w 0x03:w {NoDDClr} // + asr (2) gMVX_INT<1>:w r[pMV,0]<2;2,1>:w 0x02:w {NoDDChk} // + + // Set message descriptor + add (1) pMSGDSC:ud gMSGDSC_R:ud RESP_LEN(5):ud + + // Compute top-left corner position to be loaded + add (2) gMSGSRC.0<1>:d gMVX_INT<2;2,1>:w -0x02:d {NoDDClr} // + mov (1) gMSGSRC.2:ud 0x00080008:ud {NoDDChk} // + + // Read 16x9 pixels + send (8) gudREF(0)<1> mMSGHDRY gMSGSRC<8;8,1>:ud DAPREAD pMSGDSC:ud + +#endif + + +//#endif // !defined(__LOADREF_Y_16x9__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_UV.asm new file mode 100644 index 000000000..28c765b15 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_UV.asm @@ -0,0 +1,74 @@ +/* + * Load all reference U/V samples from neighboring macroblocks + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__LOAD_INTRA_REF_UV__) // Make sure this is only included once +#define __LOAD_INTRA_REF_UV__ + +// Module name: load_Intra_Ref_UV.asm +// +// Load all reference U/V samples from neighboring macroblocks +// +// Note: Since loading of U/V data always follows writing of Y, the message descriptor is manipulated +// to avoid recalculating due to frame/field variztions. + +// First load top 20x1 row U/V reference samples +// 4 from macroblock D (actually use 2), 16 from macroblock B +// + shr (1) I_ORIY<1>:w I_ORIY<0;1,0>:w 1:w // Adjust I_ORIY for NV12 format + add (2) MSGSRC.0<1>:d I_ORIX<2;2,1>:w TOP_REF_OFFSET<2;2,1>:b {NoDDClr} // Reference samples positioned at (-4, -1) + mov (1) MSGSRC.2:ud 0x00000013:ud {NoDDChk} // Block width and height (20x1) + +// Update message descriptor based on previous Y block write +// +#ifdef DEV_ILK + add (1) MSGDSC MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+DESTUV-DWBWMSGDSC_WC-0x10000000-DESTY:ud // Set message descriptor +#else + add (1) MSGDSC MSGDSC RESP_LEN(1)+DWBRMSGDSC_RC+DESTUV-DWBWMSGDSC_WC-0x00800000-DESTY:ud // Set message descriptor +#endif // DEV_ILK + + send (8) INTRA_REF_TOP_D(0) MSGHDR MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// Then load left 4x8 reference samples (actually use 1x8 column) +// + add (1) MSGSRC.1<1>:d MSGSRC.1<0;1,0>:d 1:w {NoDDClr} // Reference samples positioned next row + mov (1) MSGSRC.2:ud 0x00070003:ud {NoDDChk} // Block width and height (4x8) + send (8) INTRA_REF_LEFT_D(0) MSGHDRUV MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// End of load_Intra_Ref_UV +#endif // !defined(__LOAD_INTRA_REF_UV__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_Y.asm new file mode 100644 index 000000000..0671dfa44 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/load_Intra_Ref_Y.asm @@ -0,0 +1,67 @@ +/* + * Load all reference Y samples from neighboring macroblocks + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__LOAD_INTRA_REF_Y__) // Make sure this is only included once +#define __LOAD_INTRA_REF_Y__ + +// Module name: load_Intra_Ref_Y.asm +// +// Load all reference Y samples from neighboring macroblocks +// +load_Intra_Ref_Y: +// shl (2) I_ORIX<1>:uw ORIX<2;2,1>:ub 4:w // Convert MB origin to pixel unit + +// First load top 28x1 row reference samples +// 4 from macroblock D (actually use 1), 16 from macroblock B, and 8 from macroblock C +// + add (2) MSGSRC.0<1>:d I_ORIX<2;2,1>:w TOP_REF_OFFSET<2;2,1>:b {NoDDClr} // Reference samples positioned at (-4, -1) + mov (1) MSGSRC.2:ud 0x0000001B:ud {NoDDChk} // Block width and height (28x1) + add (1) MSGDSC REG_MBAFF_FIELD<0;1,0>:uw RESP_LEN(1)+DWBRMSGDSC_RC+DESTY:ud // Set message descriptor + send (8) INTRA_REF_TOP_D(0) MSGHDRY0 MSGSRC<8;8,1>:ud DAPREAD MSGDSC + +// Then load left 4x16 reference samples (actually use 1x16 column) +// + add (1) MSGSRC.1<1>:d MSGSRC.1<0;1,0>:d 1:w {NoDDClr} // Reference samples positioned next row + mov (1) MSGSRC.2:ud 0x00F0003:ud {NoDDChk} // Block width and height (4x16) + add (1) MSGDSC MSGDSC RESP_LEN(1):ud // Need to read 1 more GRF register + send (8) INTRA_REF_LEFT_D(0) MSGHDRY1 MSGSRC<8;8,1>:ud DAPREAD MSGDSC + + RETURN +// End of load_Intra_Ref_Y +#endif // !defined(__LOAD_INTRA_REF_Y__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4a new file mode 100644 index 000000000..f13802974 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4a @@ -0,0 +1,43 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Xiang Haihao + * + */ +define(`YUV_color',`0xFFFFFFFFUD') +shl(2) g62.0<1>UD g3.4<2,2,1>UB 4UW {align1}; +mov(1) g62.8<1>UD 0x000f000fUD {align1}; +mov(16) m1<1>UD YUV_color {align1 compr}; +mov(16) m3<1>UD YUV_color {align1 compr}; +mov(16) m5<1>UD YUV_color {align1 compr}; +mov(16) m7<1>UD YUV_color {align1 compr}; +send(16) 0 acc0<1>UW g62<8,8,1>UW write(0, 0, 2, 0) mlen 9 rlen 0 {align1}; + +shr(1) g62.4<1>UD g62.4<1,1,1>UD 1UW {align1}; +mov(1) g62.8<1>UD 0x0007000fUD {align1}; +mov(16) m1<1>UD YUV_color {align1 compr}; +mov(16) m3<1>UD YUV_color {align1 compr}; +send(16) 0 acc0<1>UW g62<8,8,1>UW write(1, 0, 2, 0) mlen 5 rlen 0 {align1}; + +send(16) 0 acc0<1>UW g0<8,8,1>UW thread_spawner(0, 0, 0) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b new file mode 100644 index 000000000..fdd18e6c6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b @@ -0,0 +1,13 @@ + { 0x00200009, 0x27c02e21, 0x00450064, 0x00040004 }, + { 0x00000001, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x008d07c0, 0x05902000 }, + { 0x00000008, 0x27c42c21, 0x002107c4, 0x00010001 }, + { 0x00000001, 0x27c80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x008d07c0, 0x05502001 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b.gen5 new file mode 100644 index 000000000..7ecb90d5d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/null.g4b.gen5 @@ -0,0 +1,13 @@ + { 0x00200009, 0x27c02e21, 0x00450064, 0x00040004 }, + { 0x00000001, 0x27c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x508d07c0, 0x12082000 }, + { 0x00000008, 0x27c42c21, 0x002107c4, 0x00010001 }, + { 0x00000001, 0x27c80061, 0x00000000, 0x0007000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x508d07c0, 0x0a082001 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_C_4x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_C_4x4.asm new file mode 100644 index 000000000..1b03a1ac0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_C_4x4.asm @@ -0,0 +1,67 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Recon_C_4x4.asm +// +// $Revision: 11 $ +// $Date: 10/03/06 5:28p $ +// + + +//#if !defined(__RECON_C_4x4__) // Make sure this is only included once +//#define __RECON_C_4x4__ + + + // TODO: Use instruction compression + add.sat (4) r[pERRORC,0]<2>:ub r[pERRORC,0]<4;4,1>:w gubCPRED(0)<16;4,4> + add.sat (4) r[pERRORC,128]<2>:ub r[pERRORC,128]<4;4,1>:w gubCPRED(0,2)<16;4,4> + add.sat (4) r[pERRORC,32]<2>:ub r[pERRORC,32]<4;4,1>:w gubCPRED(1)<16;4,4> + add.sat (4) r[pERRORC,128+32]<2>:ub r[pERRORC,128+32]<4;4,1>:w gubCPRED(1,2)<16;4,4> + + add.sat (4) r[pERRORC,16]<2>:ub r[pERRORC,16]<4;4,1>:w gubCPRED(0,16)<16;4,4> + add.sat (4) r[pERRORC,128+16]<2>:ub r[pERRORC,128+16]<4;4,1>:w gubCPRED(0,18)<16;4,4> + add.sat (4) r[pERRORC,48]<2>:ub r[pERRORC,48]<4;4,1>:w gubCPRED(1,16)<16;4,4> + add.sat (4) r[pERRORC,128+48]<2>:ub r[pERRORC,128+48]<4;4,1>:w gubCPRED(1,18)<16;4,4> + + // Increase chroma error block offset +#ifndef MONO + add (1) pERRORC:w pERRORC:w 8:w +#endif + + +//#endif // !defined(__RECON_C_4x4__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_Y_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_Y_8x8.asm new file mode 100644 index 000000000..04cf13f9c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/recon_Y_8x8.asm @@ -0,0 +1,57 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: Recon_Y_8x8.asm +// +// $Revision: 10 $ +// $Date: 9/22/06 2:50p $ +// + + +//#if !defined(__RECON_Y_8x8__) // Make sure this is only included once +//#define __RECON_Y_8x8__ + + + add.sat (16) r[pERRORY,0]<2>:ub r[pERRORY,0]<16;16,1>:w gubYPRED(0) + add.sat (16) r[pERRORY,nGRFWIB]<2>:ub r[pERRORY,nGRFWIB]<16;16,1>:w gubYPRED(1) + add.sat (16) r[pERRORY,nGRFWIB*2]<2>:ub r[pERRORY,nGRFWIB*2]<16;16,1>:w gubYPRED(2) + add.sat (16) r[pERRORY,nGRFWIB*3]<2>:ub r[pERRORY,nGRFWIB*3]<16;16,1>:w gubYPRED(3) + + add (1) pERRORY:w pERRORY:w 128:w + +//#endif // !defined(__RECON_Y_8x8__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/roundShift_C_4x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/roundShift_C_4x4.asm new file mode 100644 index 000000000..29a7a9463 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/roundShift_C_4x4.asm @@ -0,0 +1,56 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: RoundShift_C_4x4.asm +// +// Do (...+32)>>6 to 4x4 (NV12 8x4) interpolated chrominance data +// + + +//#if !defined(__RoundShift_C_4x4__) // Make sure this is only included once +//#define __RoundShift_C_4x4__ + + + // TODO: Optimize using instruction compression + add (16) acc0<1>:w r[pRESULT,0]<16;16,1>:w 32:w + add (16) acc1<1>:w r[pRESULT,nGRFWIB]<16;16,1>:w 32:w + asr.sat (16) r[pRESULT,0]<2>:ub acc0<16;16,1>:w 6:w + asr.sat (16) r[pRESULT,nGRFWIB]<2>:ub acc1<16;16,1>:w 6:w + + +//#endif // !defined(__RoundShift_C_4x4__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_16x16_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_16x16_Y.asm new file mode 100644 index 000000000..d539c87af --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_16x16_Y.asm @@ -0,0 +1,72 @@ +/* + * Save decoded Y picture data to frame buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SAVE_16X16_Y__) // Make sure this is only included once +#define __SAVE_16X16_Y__ + +// Module name: save_16x16_Y.asm +// +// Save decoded Y picture data to frame buffer +// + +save_16x16_Y: + + mov (1) MSGSRC.2:ud 0x000F000F:ud {NoDDClr} // Block width and height (16x16) + mov (2) MSGSRC.0:ud I_ORIX<2;2,1>:w {NoDDChk} // X, Y offset +#ifdef DEV_ILK + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00200000:ud // Set message descriptor +#else + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00020000:ud // Set message descriptor +#endif // DEV_ILK + + mov (1) PDECBUF_UD<1>:ud 0x10001*DECBUF*GRFWIB+0x00400000:ud // Pointers to row 0 and 2 of decoded data + + $for(0,0; <8; 2,4) { + mov (32) MSGPAYLOAD(%1)<1> r[PDECBUF, %2*GRFWIB]REGION(16,2) {Compr} // Block Y0/Y2 + mov (32) MSGPAYLOAD(%1,16)<1> r[PDECBUF, (1+%2)*GRFWIB]REGION(16,2) {Compr} // Block Y1/Y3 + } + +// Update message descriptor based on previous read setup +// + send (8) REG_WRITE_COMMIT_Y<1>:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + + RETURN +// End of save_16x16_Y + +#endif // !defined(__SAVE_16X16_Y__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_4x4_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_4x4_Y.asm new file mode 100644 index 000000000..86eb319a6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_4x4_Y.asm @@ -0,0 +1,73 @@ +/* + * Save Intra_4x4 decoded Y picture data to frame buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SAVE_4X4_Y__) // Make sure this is only included once +#define __SAVE_4X4_Y__ + +// Module name: save_4x4_Y.asm +// +// Save Intra_4x4 decoded Y picture data to frame buffer +// Note: Each 4x4 block is stored in 1 GRF register in the order of block raster scan order, +// i.e. 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15 + +save_4x4_Y: + + mov (1) MSGSRC.2:ud 0x000F000F:ud {NoDDClr} // Block width and height (16x16) + mov (2) MSGSRC.0:ud I_ORIX<2;2,1>:w {NoDDChk} // X, Y offset +#ifdef DEV_ILK + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00200000:ud // Set message descriptor +#else + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00020000:ud // Set message descriptor +#endif // DEV_ILK + + $for(0; <8; 2) { + mov (16) MSGPAYLOAD(%1)<1> DEC_Y(%1)<16;4,1> + mov (16) MSGPAYLOAD(%1,16)<1> DEC_Y(%1,4)<16;4,1> + mov (16) MSGPAYLOAD(%1+1)<1> DEC_Y(%1,8)<16;4,1> + mov (16) MSGPAYLOAD(%1+1,16)<1> DEC_Y(%1,12)<16;4,1> + } + +// Update message descriptor based on previous read setup +// + send (8) REG_WRITE_COMMIT_Y<1>:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + + RETURN +// End of save_4x4_Y + +#endif // !defined(__SAVE_4X4_Y__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_UV.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_UV.asm new file mode 100644 index 000000000..78c721db8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_UV.asm @@ -0,0 +1,81 @@ +/* + * Save decoded U/V picture data to frame buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SAVE_8x8_UV__) // Make sure this is only included once +#define __SAVE_8x8_UV__ + +// Module name: save_8x8_UV.asm +// +// Save decoded U/V picture data to frame buffer +// + + mov (1) MSGSRC.2:ud 0x0007000F:ud {NoDDClr} // Block width and height (16x8) + mov (2) MSGSRC.0<1>:ud I_ORIX<2;2,1>:w {NoDDChk} // I_ORIX has already been adjusted for NV12 + +// Update message descriptor based on previous read setup +// +#ifdef DEV_ILK + add (1) MSGDSC MSGDSC MSG_LEN(4)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00100000:ud // Set message descriptor +#else + add (1) MSGDSC MSGDSC MSG_LEN(4)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00010000:ud // Set message descriptor +#endif // DEV_ILK + +// Write U/V picture data +// +#ifndef MONO + mov MSGPAYLOAD(0,0)<1> DEC_UV(0)REGION(16,2) // U/V row 0 + mov MSGPAYLOAD(0,16)<1> DEC_UV(1)REGION(16,2) // U/V row 1 + mov MSGPAYLOAD(1,0)<1> DEC_UV(2)REGION(16,2) // U/V row 2 + mov MSGPAYLOAD(1,16)<1> DEC_UV(3)REGION(16,2) // U/V row 3 + mov MSGPAYLOAD(2,0)<1> DEC_UV(4)REGION(16,2) // U/V row 4 + mov MSGPAYLOAD(2,16)<1> DEC_UV(5)REGION(16,2) // U/V row 5 + mov MSGPAYLOAD(3,0)<1> DEC_UV(6)REGION(16,2) // U/V row 6 + mov MSGPAYLOAD(3,16)<1> DEC_UV(7)REGION(16,2) // U/V row 7 +#else // defined(MONO) + $for(0; <4; 2) { + mov (16) MSGPAYLOADD(%1)<1> 0x80808080:ud {Compr} + } + +#endif // !defined(MONO) + + send (8) REG_WRITE_COMMIT_UV<1>:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// End of save_8x8_UV + +#endif // !defined(__SAVE_8x8_UV__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_Y.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_Y.asm new file mode 100644 index 000000000..71dc70f7e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_8x8_Y.asm @@ -0,0 +1,86 @@ +/* + * Save Intra_8x8 decoded Y picture data to frame buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SAVE_8X8_Y__) // Make sure this is only included once +#define __SAVE_8X8_Y__ + +// Module name: save_8x8_Y.asm +// +// Save Intra_8x8 decoded Y picture data to frame buffer +// NotE: Every 4 rows of Y data are interleaved with the horizontal neighboring blcok +// +save_8x8_Y: + + mov (1) MSGSRC.2:ud 0x000F000F:ud {NoDDClr} // Block width and height (16x16) + mov (2) MSGSRC.0:ud I_ORIX<2;2,1>:w {NoDDChk} // X, Y offset + +// Update message descriptor based on previous read setup +// +#ifdef DEV_ILK + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00200000:ud // Set message descriptor +#else + add (1) MSGDSC MSGDSC MSG_LEN(8)+DWBWMSGDSC_WC-DWBRMSGDSC_RC-0x00020000:ud // Set message descriptor +#endif // DEV_ILK + + mov (16) MSGPAYLOAD(0)<1> DEC_Y(0)<32;8,1> + mov (16) MSGPAYLOAD(0,16)<1> DEC_Y(0,8)<32;8,1> + mov (16) MSGPAYLOAD(1,0)<1> DEC_Y(0,16)<32;8,1> + mov (16) MSGPAYLOAD(1,16)<1> DEC_Y(0,24)<32;8,1> + + mov (16) MSGPAYLOAD(2)<1> DEC_Y(2)<32;8,1> + mov (16) MSGPAYLOAD(2,16)<1> DEC_Y(2,8)<32;8,1> + mov (16) MSGPAYLOAD(3,0)<1> DEC_Y(2,16)<32;8,1> + mov (16) MSGPAYLOAD(3,16)<1> DEC_Y(2,24)<32;8,1> + + mov (16) MSGPAYLOAD(4)<1> DEC_Y(4)<32;8,1> + mov (16) MSGPAYLOAD(4,16)<1> DEC_Y(4,8)<32;8,1> + mov (16) MSGPAYLOAD(5,0)<1> DEC_Y(4,16)<32;8,1> + mov (16) MSGPAYLOAD(5,16)<1> DEC_Y(4,24)<32;8,1> + + mov (16) MSGPAYLOAD(6)<1> DEC_Y(6)<32;8,1> + mov (16) MSGPAYLOAD(6,16)<1> DEC_Y(6,8)<32;8,1> + mov (16) MSGPAYLOAD(7,0)<1> DEC_Y(6,16)<32;8,1> + mov (16) MSGPAYLOAD(7,16)<1> DEC_Y(6,24)<32;8,1> + + send (8) REG_WRITE_COMMIT_Y<1>:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + + RETURN +// End of save_8x8_Y + +#endif // !defined(__SAVE_8X8_Y__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_I_PCM.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_I_PCM.asm new file mode 100644 index 000000000..e1e6a9da6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/save_I_PCM.asm @@ -0,0 +1,86 @@ +/* + * Save I_PCM Y samples to Y picture buffer + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: save_I_PCM.asm +// +// First save I_PCM Y samples to Y picture buffer +// + mov (1) MSGSRC.2:ud 0x000F000F:ud {NoDDClr} // Block width and height (16x16) + shl (2) MSGSRC.0:ud ORIX<2;2,1>:ub 4:w {NoDDChk} // Convert MB origin in pixel unit + + add (1) MSGDSC REG_MBAFF_FIELD<0;1,0>:uw MSG_LEN(8)+DWBWMSGDSC_WC+DESTY:ud // Set message descriptor + + $for(0; <8; 2) { + mov (32) MSGPAYLOAD(%1)<1> I_PCM_Y(%1)REGION(16,1) {Compr,NoDDClr} + mov (32) MSGPAYLOAD(%1,16)<1> I_PCM_Y(%1,16)REGION(16,1) {Compr,NoDDChk} + } + + send (8) REG_WRITE_COMMIT_Y<1>:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC + +// Then save I_PCM U/V samples to U/V picture buffer +// + mov (1) MSGHDR.2:ud 0x0007000F:ud {NoDDClr} // Block width and height (16x8) + asr (1) MSGHDR.1:ud MSGSRC.1<0;1,0>:ud 1:w {NoDDChk} // Y offset should be halved + add (1) MSGDSC MSGDSC 0x0-MSG_LEN(4)+0x1:d // Set message descriptor for U/V + +#if 0 + and.z.f0.0 (1) NULLREG REG_CHROMA_FORMAT_IDC CHROMA_FORMAT_IDC:ud + (f0.0) jmpi (1) MONOCHROME_I_PCM +#endif + +#ifndef MONO +// Non-monochrome picture +// + $for(0,0; <4; 2,1) { + mov (16) MSGPAYLOAD(%1)<2> I_PCM_UV(%2)REGION(16,1) // U data + mov (16) MSGPAYLOAD(%1,1)<2> I_PCM_UV(%2+2)REGION(16,1) // V data + mov (16) MSGPAYLOAD(%1+1)<2> I_PCM_UV(%2,16)REGION(16,1) // U data + mov (16) MSGPAYLOAD(%1+1,1)<2> I_PCM_UV(%2+2,16)REGION(16,1) // V data + } +#else // defined(MONO) +MONOCHROME_I_PCM: + $for(0; <4; 2) { + mov (16) MSGPAYLOADD(%1)<1> 0x80808080:ud {Compr} + } + +#endif // !defined(MONO) + + send (8) REG_WRITE_COMMIT_UV<1>:ud MSGHDR null:ud DAPWRITE MSGDSC + +// End of save_I_PCM diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard.asm new file mode 100644 index 000000000..54a619e6d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard.asm @@ -0,0 +1,312 @@ +/* + * Dependency control scoreboard kernel + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: scoreboard.asm +// +// Dependency control scoreboard kernel +// +// $Revision: 16 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: scoreboard +// ---------------------------------------------------- +// ---------------------------------------------------- +// Scoreboard structure +// ---------------------------------------------------- +// +// 1 DWORD per thread +// +// Bit 31: "Checking" thread, i.e. an intra MB that sends "check dependency" message +// Bit 30: "Completed" thread. This bit set by an "update" message from intra/inter MB. +// Bits 29:28: Must set to 0 +// Bits 27:24: EUID +// Bits 23:18: Reserved +// Bits 17:16: TID +// Bits 15:8: X offset of current MB +// Bits 15:5: Reserved +// Bits 4:0: 5 bits of available neighbor MB flags + +.kernel scoreboard +SCOREBOARD: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0xf0aa55a5:ud +#endif + +#include "header.inc" +#include "scoreboard_header.inc" + +// +// Now, begin source code.... +// + +.code + +#ifdef AS_ENABLED + and.z.f0.1 (1) NULLREG r0.2<0;1,0>:ud TH_RES // Is this a restarted thread previously interrupted? + (f0.1) jmpi (1) Scoreboard_Init + + #include "scoreboard_restore_AS.asm" + + jmpi (1) Scoreboard_OpenGW +Scoreboard_Init: +#endif // End AS_ENABLED + +// Scoreboard must be initialized to 0xc000ffff, meaning all "completed" +// And it also avoids message mis-handling for the first MB + $for(0; <32; 2) { + mov (16) CMD_SB(%1)<1> 0xc000ffff:ud {Compr} + } +#ifdef DOUBLE_SB // Scoreboard size needs to be doubled + $for(32; <64; 2) { + mov (16) CMD_SB(%1)<1> 0xc000ffff:ud {Compr} + } +#endif // DOUBLE_SB + +//---------------------------------------------------------- +// Open message gateway for the scoreboard thread +// +// RegBase = r4 (0x04) +// Gateway Size = 64 GRF registers (0x6) +// Dispatch ID = r0.20:ub +// Scoreboard Thread Key = 0 +//---------------------------------------------------------- +Scoreboard_OpenGW: + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Send a message with register base RegBase=0x04(r4) and Gateway size = 0x6 = 64 GRF reg and Key = 0 + // 000 00000100 00000 00000 110 00000000 ==> 0000 0000 1000 0000 0000 0110 0000 0000 +#ifdef AS_ENABLED + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800700:ud // Allocate 128 GRFs for message gateway - for SIP to send notification MSG +#else + #ifdef DOUBLE_SB + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800600:ud // 64 GRF's for CTG-B + #else + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800500:ud // 32 GRF's for CTG-A + #endif // DOUBLE_SB +#endif + send (8) NULLREG MSGHDRY0 null:ud MSG_GW OGWMSGDSC + +//------------------------------------------------------------------------ +// Send Thread Spawning Message to start dispatching macroblock threads +// +//------------------------------------------------------------------------ +#ifdef AS_ENABLED + mov (8) acc0<1>:ud CMD_SB(31)<8;8,1> // Ensure scoreboard data have been completely restored +#endif // End AS_ENABLED + mov (8) MSGHDRY1<1>:ud r0<8;8,1>:ud // Initialize message header payload with R0 + mov (1) MSGHDRY1.4<1>:ud 0x00000400:ud // Dispatch URB length = 1 + + send (8) NULLREG MSGHDRY1 null:ud TS TSMSGDSC + + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + +//------------------------------------------------------------------------ +// Scoreboard control data initialization +//------------------------------------------------------------------------ +#ifdef AS_ENABLED + or (1) cr0.1:ud cr0.1:ud AS_INT_EN // Enable interrupt + (f0.1) jmpi (1) Scoreboard_State_Init // Jump if not restarted thread + + // Restore scoreboard kernel control data to r1 - r3 + mov (1) m4.1:ud 64:ud // Starting r1 + mov (1) m4.2:ud 0x0002001f:ud // for 3 registers + send (8) r1.0<1>:ud m4 null:ud DWBRMSGDSC_SC+0x00030000+AS_SAVE // Restore r1 - r3 + mov (8) a0.0<1>:uw AR_SAVE<8;8,1>:uw // Restore all address registers + +// Check whether all MBs have been decoded + cmp.e.f0.0 (1) NULLREG TotalMB<0;1,0>:w 0:w // Set "Last MB" flag + (-f0.0) jmpi (1) Before_First_MB + END_THREAD + +// Check whether it is before the first MB +Before_First_MB: + cmp.e.f0.0 (1) NULLREG AVAILFLAGD<1>:ud 0x08020401:ud // in ACBD order + (f0.0) jmpi (1) Wavefront_Walk + +Scoreboard_State_Init: +#endif // End AS_ENABLED + mov (2) WFLen_B<2>:w HEIGHTINMB_1<0;1,0>:w + mov (1) AVAILFLAGD<1>:ud 0x08020401:ud // in ACBD order + mov (1) CASE00PTR<1>:ud Notify_MSG_IP-No_Message_IP:ud // Inter kernel starts + mov (1) CASE10PTR<1>:ud Dependency_Check_IP-No_Message_IP:ud // Intra kernel starts +#ifdef AS_ENABLED + mov (1) CASE11PTR<1>:ud 0:ud // No message +#else + mov (1) CASE11PTR<1>:ud MB_Loop_IP-No_Message_IP:ud // No message +#endif // End AS_ENABLED + mov (1) StartXD<1>:ud 0:ud + mov (1) NewWFOffsetD<1>:ud 0x01ffff00:ud + + mov (4) WFStart(0)<1> 0xffff:w + mov (1) WFStart(0)<1> 0:w + + mov (8) a0.0<1>:uw 0x0:uw // Initialize all pointers to 0 + +//------------------------------------------------------------------------ +// Scoreboard message handling loop +//------------------------------------------------------------------------ +// +Scoreboard_Loop: + // Calculate current wavefront length + add.ge.f0.1 (16) acc0<1>:w StartX<0;1,0>:w 0:w // Used for x>2*y check + mac.g.f0.0 (16) NULLREGW WFLenY<0;1,0>:w -2:w // X - 2*Y > 0 ?? + (f0.0) mov (1) WFLen<1>:w WFLenY<0;1,0>:w // Use smaller vertical wavefront length + (-f0.0) asr.sat (1) WFLen<1>:uw StartX<0;1,0>:w 1:w // Horizontal wavefront length is smaller + + // Initialize 5-MB group +#ifdef ONE_MB_WA + mov (2) MBINDEX(0)<1> WFStart(0)<2;2,1> + (f0.1) add (4) MBINDEX(0,2)<1> WFStart(0,1)<4;4,1> -1:w + (-f0.1) add (4) MBINDEX(0,2)<1> WFStart(0,0)<4;4,1> -1:w + (-f0.1) mov (1) StartX<1>:w 0:w // WA for 1-MB wide pictures +#else + mov (2) MBINDEX(0)<1> WFStart(0)<2;2,1> {NoDDClr} + add (4) MBINDEX(0,2)<1> WFStart(0,1)<4;4,1> -1:w {NoDDChk} +#endif + + // Update WFStart + mov (8) acc0<1>:w WFStart(0)<0;1,0> // Move WFStart(0) to acc0 to remove dependency later + mov (4) WFStart(0,1)<1> WFStart(0)<4;4,1> {NoDDClr} // Shift WFStart(0:2) to WFStart(1:3) + add (1) WFStart(0)<1> acc0.0<0;1,0>:w WFLen<0;1,0>:w {NoDDChk} // WFStart(0) = WFStart(0) + WFLen + + mul (8) MBINDEX(0)<1> MBINDEX(0)<8;8,1> 4:w // Adjust MB order # to be DWORD aligned + and (1) DEPPTR<1>:uw acc0<0;1,0>:w SB_MASK*4:uw {NoDDClr} // Wrap around scoreboard entries for current MB + and (4) DEPPTRL<1>:uw acc0.1<4;4,1>:w SB_MASK*4:uw {NoDDChk} // Wrap around scoreboard entries for neighbor MBs + +Wavefront_Walk: + wait n0:ud +// Check for combined "checking" or "completed" threads in forwarded message +// 2 MSB of scoreboard message indicate: +// 0b00 = "inter start" message +// 0b10 = "intra start" message +// 0b11 = "No Message" or "inter complete" message +// 0b01 = Reserved (should never occur) +// +MB_Loop: + shr (1) PMSGSEL<1>:uw r[CMDPTR,CMD_SB_REG_OFF*GRFWIB+2]<0;1,0>:uw 12:w // DWORD aligned pointer to message handler + and.nz.f0.1 (4) NULLREG r[CMDPTR,CMD_SB_REG_OFF*GRFWIB]<0;1,0>:ub AVAILFLAG<4;4,1>:ub // f0.1 4 LSB will have the available flags in ACBD order + mov (1) MSGHDRY0.4<1>:ud r[CMDPTR,CMD_SB_REG_OFF*GRFWIB]<0;1,0>:ud // Copy MB thread info from scoreboard + jmpi (1) r[PMSGSEL, INLINE_REG_OFF*GRFWIB+16]<0;1,0>:d + +// Now determine whether this is "inter done" or "no message" +// through checking debug_counter +// +No_Message: +#ifdef AS_ENABLED + cmp.z.f0.1 (1) NULLREG n0:ud 0 // Are all messages handled? + and.z.f0.0 (1) NULLREG cr0.1:ud AS_INT // Poll interrupt bit + (-f0.1) jmpi (1) MB_Loop // Continue polling the remaining message from current thread + +// All messages have been handled + (f0.0) jmpi (1) Wavefront_Walk // No interrupt occurs. Wait for next one + +// Interrupt has been detected +// Save all contents and terminate the scoreboard +// + #include "scoreboard_save_AS.asm" + + // Save scoreboard control data as well + // + mov (8) AR_SAVE<1>:uw a0.0<8;8,1>:uw // All address registers needs to be saved + mov (1) MSGHDR.1:ud 64:ud + mov (1) MSGHDR.2:ud 0x0002001f:ud // for 3 registers + $for(0; <3; 1) { + mov (8) MSGPAYLOADD(%1)<1> CMD_SB(%1-3)REGION(8,1) + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00300000+AS_SAVE // Save r1 - r3 + + send (8) NULLREG MSGHDR r0:ud EOTMSGDSC+TH_INT // Terminate with "Thread Interrupted" bit set +#endif // End AS_ENABLED + +Dependency_Check: +// Current thread is "checking" but not "completed" (0b10 case). +// Check for dependency clear using all availability bits +// + (f0.1) and.z.f0.1 (4) NULLREG r[DEPPTRL,CMD_SB_REG_OFF*GRFWIB+3]<1,0>:ub DONEFLAG:uw // f0.1 4 LSB contains dependency clear + (f0.1.any4h) jmpi (1) Dependency_Check // Dependency not clear, keep polling.. + +// "Checking" thread and dependency cleared, send a message to let the thread go +// +Notify_MSG: + send (8) NULLREG MSGHDRY0 null:ud MSG_GW FWDMSGDSC+NOTIFYMSG + +// Current macroblock has been serviced. Update to next macroblock in special zig-zag order +// +Update_CurMB: +#if 0 + add.ge.f0.0 (1) WFLen<1>:w WFLen<0;1,0>:w -1:w // Set "End of wavefront" flag + add (1) TotalMB<1>:w TotalMB<0;1,0>:w -1:w // Decrement "TotalMB" +#else + add.ge.f0.0 (2) TotalMB<2>:w TotalMB<4;2,2>:w -1:w // Set "End of wavefront" flag and decrement "TotalMB" +#endif + add (8) MBINDEX(0)<1> MBINDEX(0)<8;8,1> 4:w // Increment MB indices + and (1) DEPPTR<1>:uw acc0<0;1,0>:w SB_MASK*4:uw {NoDDClr} // Wrap around 256 scoreboard entries for current MB + and (4) DEPPTRL<1>:uw acc0.1<4;4,1>:w SB_MASK*4:uw {NoDDChk} // Wrap around 256 scoreboard entries for neighbor MBs + cmp.e.f0.1 (16) NULLREGW StartX<0;1,0>:uw WIDTHINMB_1<0;1,0>:uw // Set "on picture right boundary" flag +#if 0 + (f0.0) jmpi (1) Wavefront_Walk // Continue wavefront walking +#else + (f0.0.all2h) jmpi (1) Wavefront_Walk // Continue wavefront walking +#endif + +// Start new wavefront +// + cmp.e.f0.0 (1) NULLREG TotalMB<0;1,0>:w 0:w // Set "Last MB" flag + (f0.1) add (4) WFLen<1>:w WFLen<4;4,1>:w NewWFOffset<4;4,1>:b + (f0.1) add (4) WFStart(0)<1> WFStart(0)<4;4,1> 1:w + (-f0.1) add (1) StartX<1>:w StartX<0;1,0>:w 1:w // Move to right MB + (-f0.1) add (1) WFStart(0)<1> WFStart(0)<0;1,0> 1:w + + (-f0.0) jmpi (1) Scoreboard_Loop // Not last MB, start new wavefront walking + +// All MBs have decoded. Terminate the thread now +// + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif + +// End of scoreboard diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_MBAFF.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_MBAFF.asm new file mode 100644 index 000000000..1a6472a96 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_MBAFF.asm @@ -0,0 +1,329 @@ +/* + * Dependency control scoreboard kernel for MBAFF frame + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: scoreboard_MBAFF.asm +// +// Dependency control scoreboard kernel for MBAFF frame +// +// $Revision: 16 $ +// $Date: 10/18/06 4:10p $ +// + +// ---------------------------------------------------- +// Main: scoreboard_MBAFF +// ---------------------------------------------------- +// ---------------------------------------------------- +// Scoreboard structure +// ---------------------------------------------------- +// +// 1 DWORD per thread +// +// Bit 31: "Checking" thread, i.e. an intra MB that sends "check dependency" message +// Bit 30: "Completed" thread. This bit set by an "update" message from intra/inter MB. +// Bits 29:28: Must set to 0 +// Bits 27:24: EUID +// Bits 23:18: Reserved +// Bits 17:16: TID +// Bits 15:8: X offset of current MB +// Bits 15:5: Reserved +// Bits 4:0: 5 bits of available neighbor MB flags + +.kernel scoreboard_MBAFF +SCOREBOARD_MBAFF: + +#ifdef _DEBUG +// WA for FULSIM so we'll know which kernel is being debugged +mov (1) acc0:ud 0xffaa55a5:ud +#endif + +#include "header.inc" +#include "scoreboard_header.inc" + +// +// Now, begin source code.... +// + +.code + +#ifdef AS_ENABLED + and.z.f0.1 (1) NULLREG r0.2<0;1,0>:ud TH_RES // Is this a restarted thread previously interrupted? + (f0.1) jmpi (1) MBAFF_Scoreboard_Init + + #include "scoreboard_restore_AS.asm" + + jmpi (1) MBAFF_Scoreboard_OpenGW +MBAFF_Scoreboard_Init: +#endif // End AS_ENABLED + +// Scoreboard must be initialized to 0xc000ffff, meaning all "completed" +// And it also avoids message mis-handling for the first MB + $for(0; <32; 2) { + mov (16) CMD_SB(%1)<1> 0xc000ffff:ud {Compr} + } +#ifdef DOUBLE_SB // Scoreboard size needs to be doubled + $for(32; <64; 2) { + mov (16) CMD_SB(%1)<1> 0xc000ffff:ud {Compr} + } +#endif // DOUBLE_SB + +//---------------------------------------------------------- +// Open message gateway for the scoreboard thread +// +// RegBase = r4 (0x04) +// Gateway Size = 64 GRF registers (0x6) +// Dispatch ID = r0.20:ub +// Scoreboard Thread Key = 0 +//---------------------------------------------------------- +MBAFF_Scoreboard_OpenGW: + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Send a message with register base RegBase=0x04(r4) and Gateway size = 0x6 = 64 GRF reg and Key = 0 + // 000 00000100 00000 00000 110 00000000 ==> 0000 0000 1000 0000 0000 0110 0000 0000 +#ifdef AS_ENABLED + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800700:ud // Allocate 128 GRFs for message gateway - for SIP to send notification MSG +#else + #ifdef DOUBLE_SB + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800600:ud // 64 GRF's for CTG-B + #else + add (1) MSGHDRY0.5<1>:ud r0.20:ub 0x00800500:ud // 32 GRF's for CTG-A + #endif // DOUBLE_SB +#endif + + send (8) NULLREG MSGHDRY0 null:ud MSG_GW OGWMSGDSC + +//------------------------------------------------------------------------ +// Send Thread Spawning Message to start dispatching macroblock threads +// +//------------------------------------------------------------------------ +#ifdef AS_ENABLED + mov (8) acc0<1>:ud CMD_SB(31)<8;8,1> // Ensure scoreboard data have been completely restored +#endif // End AS_ENABLED + mov (8) MSGHDRY1<1>:ud r0<8;8,1>:ud // Initialize message header payload with R0 + mov (1) MSGHDRY1.4<1>:ud 0x00000400:ud // Dispatch URB length = 1 + + send (8) NULLREG MSGHDRY1 null:ud TS TSMSGDSC + + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + +//------------------------------------------------------------------------ +// Scoreboard control data initialization +//------------------------------------------------------------------------ +#ifdef AS_ENABLED + or (1) cr0.1:ud cr0.1:ud AS_INT_EN // Enable interrupt + (f0.1) jmpi (1) MBAFF_Scoreboard_State_Init // Jump if not restarted thread + + // Restore scoreboard kernel control data to r1 - r3 + mov (1) m4.1:ud 64:ud // Starting r1 + mov (1) m4.2:ud 0x0002001f:ud // for 3 registers + send (8) r1.0<1>:ud m4 null:ud DWBRMSGDSC_SC+0x00030000+AS_SAVE // Restore r1 - r3 + and (1) CMDPTR<1>:uw MBINDEX(0)<0;1,0> SB_MASK*4:uw // Restore scoreboard entries for current MB + +// EOT if all MBs have been decoded + cmp.e.f0.0 (1) NULLREG TotalMB<0;1,0>:w 0:w // Set "Last MB" flag + (-f0.0) jmpi (1) MBAFF_Before_First_MB + END_THREAD + +// Check whether it is before the first MB +MBAFF_Before_First_MB: + cmp.e.f0.0 (1) NULLREG AVAILFLAGD<1>:ud 0x08020401:ud // in ACBD order + (f0.0) jmpi (1) MBAFF_Wavefront_Walk + +MBAFF_Scoreboard_State_Init: +#endif // End AS_ENABLED + mov (2) WFLen_B<2>:w HEIGHTINMB_1<0;1,0>:w + mov (1) AVAILFLAGD<1>:ud 0x08020401:ud // in ACBD order + mov (1) AVAILFLAG1D<1>:ud 0x08020410:ud // in A_C_B_D_ order + mov (1) CASE00PTR<1>:ud MBAFF_Notify_MSG_IP-MBAFF_No_Message_IP:ud // Inter kernel starts + mov (1) CASE10PTR<1>:ud MBAFF_Dependency_Check_IP-MBAFF_No_Message_IP:ud // Intra kernel starts +#ifdef AS_ENABLED + mov (1) CASE11PTR<1>:ud 0:ud // No message +#else + mov (1) CASE11PTR<1>:ud MBAFF_MB_Loop_IP-MBAFF_No_Message_IP:ud // No message +#endif // End AS_ENABLED + mov (1) StartXD<1>:ud 0:ud + mov (1) NewWFOffsetD<1>:ud 0x01ffff00:ud + + mov (8) WFStart_T(0)<1> 0xffff:w + mov (1) WFStart_T(0)<1> 0:w + + mov (8) a0.0<1>:uw 0x0:uw // Initialize all pointers to 0 + +//------------------------------------------------------------------------ +// Scoreboard message handling loop +//------------------------------------------------------------------------ +// +MBAFF_Scoreboard_Loop: +// Calculate current wavefront length (same for top and bottom MB wavefronts) + add.ge.f0.1 (16) acc0<1>:w StartX<0;1,0>:w 0:w // Used for x>2*y check + mac.g.f0.0 (16) NULLREGW WFLenY<0;1,0>:w -2:w // X - 2*Y > 0 ?? + (f0.0) mov (2) WFLen_B<1>:w WFLenY<0;1,0>:w // Use smaller vertical wavefront length + (f0.0) mov (1) WFLen_Save<1>:w WFLenY<0;1,0>:w // Save current wave front length + (-f0.0) asr.sat (2) WFLen_B<1>:uw StartX<0;1,0>:w 1:w // Horizontal wavefront length is smaller + (-f0.0) asr.sat (1) WFLen_Save<1>:uw StartX<0;1,0>:w 1:w // Save current wave front length + +// Initialize 9-MB group for top macroblock wavefront +#ifdef ONE_MB_WA_MBAFF + mov (2) MBINDEX(0)<1> WFStart_T(0)<2;2,1> + (f0.1) add (4) MBINDEX(0,2)<1> WFStart_B(0,1)<4;4,1> -1:w + (-f0.1) add (4) MBINDEX(0,2)<1> WFStart_B(0,0)<4;4,1> -1:w + mov (1) MBINDEX(0,5)<1> WFStart_B(0,1)<0;1,0> + (-f0.1) mov (1) StartX<1>:w 0:w // WA for 1-MB wide pictures +#else + mov (2) MBINDEX(0)<1> WFStart_T(0)<2;2,1> {NoDDClr} + add (4) MBINDEX(0,2)<1> WFStart_B(0,1)<4;4,1> -1:w {NoDDChk,NoDDClr} + mov (1) MBINDEX(0,5)<1> WFStart_B(0,1)<0;1,0> {NoDDChk,NoDDClr} + add (4) MBINDEX(0,6)<1> WFStart_T(0,1)<4;4,1> -1:w {NoDDChk} // Upper MB group (C_B_D_x) +#endif + +// Update WFStart_B[0] + add (8) acc0<1>:w WFLen<0;1,0>:w 1:w // WFLen + 1 + add (1) WFStart_B(0,0)<1> acc0<0;1,0>:w WFStart_T(0,0)<0;1,0> // WFStart_T[0] + WFLen + 1 + +MBAFF_Start_Wavefront: + mul (16) MBINDEX(0)<1> MBINDEX(0)REGION(16,1) 4:w // Adjust MB order # to be DWORD aligned + and (1) CMDPTR<1>:uw acc0<0;1,0>:w SB_MASK*4:uw // Wrap around scoreboard entries for current MB + +MBAFF_Wavefront_Walk: + wait n0:ud + +// Check for combined "checking" or "completed" threads in forwarded message +// 2 MSB of scoreboard message indicate: +// 0b00 = "inter start" message +// 0b10 = "intra start" message +// 0b11 = "No Message" or "inter complete" message +// 0b01 = Reserved (should never occur) +// +MBAFF_MB_Loop: + shr (1) PMSGSEL<1>:uw r[CMDPTR,CMD_SB_REG_OFF*GRFWIB+2]<0;1,0>:uw 12:w // DWORD aligned pointer to message handler + and.nz.f0.1 (8) NULLREG r[CMDPTR,CMD_SB_REG_OFF*GRFWIB]<0;1,0>:ub AVAILFLAG<8;8,1>:ub // f0.1 8 LSB will have the available flags in ACBDA_C_B_D_ order + mov (1) MSGHDRY0.4<1>:ud r[CMDPTR,CMD_SB_REG_OFF*GRFWIB]<0;1,0>:ud // Copy MB thread info from scoreboard + jmpi (1) r[PMSGSEL, INLINE_REG_OFF*GRFWIB+16]<0;1,0>:d + +// Now determine whether this is "inter done" or "no message" +// through checking debug_counter +// +MBAFF_No_Message: +#ifdef AS_ENABLED + cmp.z.f0.1 (1) NULLREG n0:ud 0 // Are all messages handled? + and.z.f0.0 (1) NULLREG cr0.1:ud AS_INT // Poll interrupt bit + (-f0.1) jmpi (1) MBAFF_MB_Loop // Continue polling the remaining message from current thread + +// All messages have been handled + (f0.0) jmpi (1) MBAFF_Wavefront_Walk // No interrupt occurs. Wait for next one + +// Interrupt has been detected +// Save all contents and terminate the scoreboard +// + #include "scoreboard_save_AS.asm" + + // Save scoreboard control data as well + // + mov (1) MSGHDR.1:ud 64:ud + mov (1) MSGHDR.2:ud 0x0002001f:ud // for 3 registers + $for(0; <3; 1) { + mov (8) MSGPAYLOADD(%1)<1> CMD_SB(%1-3)REGION(8,1) + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00300000+AS_SAVE // Save r1 - r3 + + send (8) NULLREG MSGHDR r0:ud EOTMSGDSC+TH_INT // Terminate with "Thread Interrupted" bit set +#endif // End AS_ENABLED + +MBAFF_Dependency_Check: +// Current thread is "checking" but not "completed" (0b10 case). +// Check for dependency clear using all availability bits +// + and (8) DEPPTR<1>:uw MBINDEX(0,1)REGION(8,1) SB_MASK*4:uw // Wrap around scoreboard entries for current MB +MBAFF_Dependency_Polling: + (f0.1) and.z.f0.1 (8) NULLREG r[DEPPTR,CMD_SB_REG_OFF*GRFWIB+3]<1,0>:ub DONEFLAG:uw // f0.1 8 LSB contains dependency clear + (f0.1.any8h) jmpi (1) MBAFF_Dependency_Polling // Dependency not clear, keep polling.. + +// "Checking" thread and dependency cleared, send a message to let the thread go +// +MBAFF_Notify_MSG: + send (8) NULLREG MSGHDRY0 null:ud MSG_GW FWDMSGDSC+NOTIFYMSG + +// Current macroblock has been serviced. Update to next macroblock in special zig-zag order +// +MBAFF_Update_CurMB: + add.ge.f0.0 (2) TotalMB<2>:w TotalMB<4;2,2>:w -1:w // Set "End of wavefront" flag and decrement "TotalMB" + add (16) MBINDEX(0)<1> MBINDEX(0)REGION(16,1) 4:w // Increment MB indices + and (1) CMDPTR<1>:uw acc0<0;1,0>:w SB_MASK*4:uw // Wrap around scoreboard entries for current MB + (f0.0.all2h) jmpi (1) MBAFF_Wavefront_Walk // Continue wavefront walking + +// Top macroblock wavefront walk done, start bottom MB wavefront + add.ge.f0.0 (1) WFLen<1>:w WFLen_B<0;1,0>:w 0:w {NoDDClr} // Set bottom MB wavefront length + mov (1) WFLen_B<1>:w -1:w {NoDDChk} // Reset bottom MB wavefront length + +// Initialize 9-MB group for bottom macroblock wavefront + mov (8) MBINDEX(0)<1> WFStart_B(0)<1;4,0> {NoDDClr} // Initialize with WFStart_B[0] and WFStart_B[1] + mov (4) MBINDEX(0,1)<1> WFStart_T(0,1)<0;1,0> {NoDDChk,NoDDClr} // Initialize with WFStart_T[1] + mov (2) MBINDEX(0,2)<1> WFStart_T(0)<0;1,0> {NoDDChk,NoDDClr} // Initialize with WFStart_T[0] + add (4) MBINDEX(0,6)<1> WFStart_B(0,1)<4;4,1> -1:w {NoDDChk} // Upper MB group (C_B_D_x) + + (f0.0) jmpi (1) MBAFF_Start_Wavefront // Start bottom MB wavefront walk + +// Start new wavefront +// + cmp.e.f0.1 (16) NULLREGW StartX<0;1,0>:uw WIDTHINMB_1<0;1,0>:uw // Set "on picture right boundary" flag + + // Update WFStart_T and WFStart_B + add (8) acc0<1>:w WFStart_T(0)REGION(1,0) 1:w // Move WFStart_T[0]+1 to acc0 to remove dependency later + mov (8) WFStart_T(0,1)<1> WFStart_T(0)<8;8,1> {NoDDClr} // Shift WFStart_T(B)[0:2] to WFStart_T(B)[1:3] + mac (1) WFStart_T(0,0)<1> WFLen_Save<0;1,0>:w 2:w {NoDDChk} // WFStart_T[0] = WFStart_T[0] + 2*WFLen + + cmp.e.f0.0 (1) NULLREG TotalMB<0;1,0>:w 0:w // Set "Last MB" flag + + (f0.1) add (4) WFLen<1>:w WFLen<4;4,1>:w NewWFOffset<4;4,1>:b // + (0, -1, -1, 1) + (f0.1) add (8) WFStart_T(0)<1> WFStart_T(0)REGION(4,1) 1:w + (-f0.1) add (1) StartX<1>:w StartX<0;1,0>:w 1:w // Move to right MB + (-f0.1) add (1) WFStart_T(0)<1> WFStart_T(0)REGION(1,0) 1:w + + (-f0.0) jmpi (1) MBAFF_Scoreboard_Loop // Not last MB, start new wavefront walking + +// All MBs have decoded. Terminate the thread now +// + END_THREAD + +#if !defined(COMBINED_KERNEL) // For standalone kernel only +.end_code + +.end_kernel +#endif + +// End of scoreboard_MBAFF diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_restore_AS.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_restore_AS.asm new file mode 100644 index 000000000..68fb06149 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_restore_AS.asm @@ -0,0 +1,84 @@ +/* + * Restore previously stored scoreboard data after content switching back + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: scoreboard_restore_AS.asm +// +// Restore previously stored scoreboard data after content switching back +// +// + // Restore scoreboard data to r4 - r67 + // They are saved in a 2D surface with width of 32 and height of 80. + // Each row corresponds to one GRF register in the following order + // r4 - r67 : Scoreboard message + // + mov (8) MSGSRC<1>:ud r0.0<8;8,1>:ud {NoDDClr} // Initialize message header payload with r0 + + mov (2) MSGSRC.0:ud 0:ud {NoDDClr, NoDDChk} // Starting r4 + mov (1) MSGSRC.2:ud 0x0007001f:ud {NoDDChk} // for 8 registers + send (8) CMD_SB(0)<1> m1 MSGSRC<8;8,1>:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r4 - r11 + + mov (8) m2:ud MSGSRC<8;8,1>:ud + mov (1) m2.1:ud 8:ud + send (8) CMD_SB(8)<1> m2 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r12 - r19 + + mov (8) m3:ud MSGSRC<8;8,1>:ud + mov (1) m3.1:ud 16:ud + send (8) CMD_SB(16)<1> m3 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r20 - r27 + + mov (8) m4:ud MSGSRC<8;8,1>:ud + mov (1) m4.1:ud 24:ud + send (8) CMD_SB(24)<1> m4 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r28 - r35 + + mov (8) m5:ud MSGSRC<8;8,1>:ud + mov (1) m5.1:ud 32:ud + send (8) CMD_SB(32)<1> m5 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r36 - r43 + + mov (8) m6:ud MSGSRC<8;8,1>:ud + mov (1) m6.1:ud 40:ud + send (8) CMD_SB(40)<1> m6 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r44 - r51 + + mov (8) m7:ud MSGSRC<8;8,1>:ud + mov (1) m7.1:ud 48:ud + send (8) CMD_SB(48)<1> m7 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r52 - r59 + + mov (8) m8:ud MSGSRC<8;8,1>:ud + mov (1) m8.1:ud 56:ud + send (8) CMD_SB(56)<1> m8 null:ud DWBRMSGDSC_SC+0x00080000+AS_SAVE // Restore r60 - r67 + +// End of scoreboard_restore_AS diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_save_AS.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_save_AS.asm new file mode 100644 index 000000000..8fe96c61c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_save_AS.asm @@ -0,0 +1,102 @@ +/* + * Save scoreboard data before content switching + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Module name: scoreboard_save_AS.asm +// +// Save scoreboard data before content switching +// +// + // r1 - r35 need to be saved + // They are saved in a 2D surface with width of 32 and height of 64. + // Each row corresponds to one GRF register in the following order + // r4 - r35 : Scoreboard message + // r1 - r3 : Scoreboard kernel control data + + mov (8) MSGHDR<1>:ud r0.0<8;8,1>:ud // Initialize message header payload with r0 + mov (1) MSGHDR.2:ud 0x0007001f:ud // for 8 registers + + mov (2) MSGHDR.0:ud 0:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r4 - r11 + + mov (1) MSGHDR.1:ud 8:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+8)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r12 - r19 + + mov (1) MSGHDR.1:ud 16:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+16)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r20 - r27 + + mov (1) MSGHDR.1:ud 24:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+24)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r28 - r35 + + mov (1) MSGHDR.1:ud 32:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+32)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r36 - r43 + + mov (1) MSGHDR.1:ud 40:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+40)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r44 - r51 + + mov (1) MSGHDR.1:ud 48:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+48)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r52 - r59 + + mov (1) MSGHDR.1:ud 56:ud + $for(0; <8; 2) { + mov (16) MSGPAYLOADD(%1)<1> CMD_SB(%1+56)REGION(8,1) {Compr} + } + send (8) NULLREG MSGHDR null:ud DWBWMSGDSC+0x00800000+AS_SAVE // Save r60 - r67 + +// End of scoreboard_save_AS diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_sip.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_sip.asm new file mode 100644 index 000000000..7b5044977 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_sip.asm @@ -0,0 +1,64 @@ +/* + * Scoreboard interrupt handler + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: scoreboard_sip.asm +// +// scoreboard interrupt handler +// +// Simply send a notification message to scoreboard thread + + mov (8) m0<1>:ud 0x00000000:ud // Initialize message header payload with 0 +#ifdef DOUBLE_SB + mov (1) m0.5<1>:ud 0x08000200:ud // Message length = 1 DWORD, sent to GRF offset 64 registers +#else + mov (1) m0.5<1>:ud 0x04000200:ud // Message length = 1 DWORD, sent to GRF offset 32 registers +#endif + send (8) null<1>:ud m0 null:ud 0x03108002 // Send notification message to scoreboard kernel + + and (1) cr0.1:ud cr0.1:ud 0x00800000 // Clear preempt exception bit + and (1) cr0.0:ud cr0.0:ud 0x7fffffff:ud // Exit SIP routine + nop // Required by B-spec + +.end_code + + + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_inter.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_inter.asm new file mode 100644 index 000000000..b2167b43a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_inter.asm @@ -0,0 +1,77 @@ +/* + * Scoreboard function for starting inter prediction kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SCOREBOARD_START_INTER__) +#define __SCOREBOARD_START_INTER__ +// +// Module name: scoreboard_start_inter.asm +// +// Scoreboard function for starting inter prediction kernels +// This function is only used by inter prediction kernels to send message to +// scoreboard in order to announce the inter kernel has started +// +// $Revision: 5 $ +// $Date: 10/18/06 4:11p $ +// +scoreboard_start_inter: + +// First open message gateway since intra kernels need wake-up message to resume +// + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Send a message with register base RegBase = r0 (0x0) and Size = 0x0 + // 000 00000000 00000 00000 000 00000000 ==> 0000 0000 0000 0000 0000 0000 0000 0000 + // --------------------------------------------------------------------------------- + send (8) NULLREG MSGHDRY0 null:ud MSG_GW OGWMSGDSC + +// Derive the scoreboard location where the inter thread writes to +// + mov (8) MSGHDRY1<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Compose M0.5:ud + #include "set_SB_offset.asm" + + // Compose M0.0:ud, i.e. message payload + or (1) MSGHDRY1.1<1>:uw sr0.0<0;1,0>:uw 0x0000:uw // Set EUID/TID bits + inter start bit + + send (8) NULLREG MSGHDRY1 null:ud MSG_GW FWDMSGDSC+NOTIFYMSG // Send "Inter start" message to scoreboard kernel + + RETURN + +#endif // !defined(__SCOREBOARD_START_INTER__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_intra.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_intra.asm new file mode 100644 index 000000000..3abde10f9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_start_intra.asm @@ -0,0 +1,82 @@ +/* + * Scoreboard function for starting intra prediction kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if !defined(__SCOREBOARD_START_INTRA__) +#define __SCOREBOARD_START_INTRA__ +// +// Module name: scoreboard_start_intra.asm +// +// Scoreboard function for starting intra prediction kernels +// This function is only used by intra prediction kernels to send message to +// scoreboard in order to check dependency clearance +// +// $Revision: 5 $ +// $Date: 10/18/06 4:11p $ +// +scoreboard_start_intra: + +// First open message gateway since intra kernels need wake-up message to resume +// + mov (8) MSGHDRY0<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Send a message with register base RegBase = r0 (0x0) and Size = 0x0 + // 000 00000000 00000 00000 000 00000000 ==> 0000 0000 0000 0000 0000 0000 0000 0000 + // --------------------------------------------------------------------------------- + and (1) MSGHDRY0.8<1>:uw REG_INTRA_PRED_AVAIL_FLAG_BYTE<0;1,0>:ub 0x1f:uw // Set lower word of key + send (8) NULLREG MSGHDRY0 null:ud MSG_GW OGWMSGDSC + +// Send "check dependency" message to scoreboard thread +// -------------------------- + +// Derive the scoreboard location where the intra thread writes to +// + mov (8) MSGHDRY1<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Compose M0.5:ud + #include "set_SB_offset.asm" + + // Compose M0.0:ud, i.e. message payload + and (1) MSGHDRY1.0<1>:uw REG_INTRA_PRED_AVAIL_FLAG_BYTE<0;1,0>:ub 0x1f:uw // Set lower word of message + or (1) MSGHDRY1.1<1>:uw sr0.0<0;1,0>:uw 0x8000:uw // Set EUID/TID bits + intra start bit + + send (8) NULLREG MSGHDRY1 null:ud MSG_GW FWDMSGDSC+NOTIFYMSG // Send "Intra start" message to scoreboard kernel + + RETURN + +#endif // !defined(__SCOREBOARD_START_INTRA__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_update.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_update.asm new file mode 100644 index 000000000..52d8d0023 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/scoreboard_update.asm @@ -0,0 +1,71 @@ +/* + * Scoreboard update function for decoding kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// +// Module name: scoreboard_update.asm +// +// Scoreboard update function for decoding kernels +// +// This module is used by decoding kernels to send message to scoreboard to update the +// "complete" status, thus the dependency of the MB can be cleared. +// +// $Revision: 6 $ +// $Date: 10/16/06 5:19p $ +// + mov (8) MSGHDRY1<1>:ud 0x00000000:ud // Initialize message header payload with 0 + + // Compose M0.5:ud information + add (1) MSGHDRY1.10<1>:uw r0.20:ub 0x0200:uw // Message length = 1 DWORD + and (1) MSGHDRY1.11<1>:uw M05_STORE<0;1,0>:uw SB_MASK*4:uw // Retrieve stored value and wrap around scoreboard + + or (1) MSGHDRY1.0<1>:ud M05_STORE<0;1,0>:uw 0xc0000000:ud // Set "Completed" bits + +#ifndef BSDRESET_ENABLE +#ifdef INTER_KERNEL + mov (1) gREG_WRITE_COMMIT_Y<1>:ud gREG_WRITE_COMMIT_Y<0;1,0>:ud // Make sure Y write is committed + mov (1) gREG_WRITE_COMMIT_UV<1>:ud gREG_WRITE_COMMIT_UV<0;1,0>:ud // Make sure U/V write is committed +#else + mov (1) REG_WRITE_COMMIT_Y<1>:ud REG_WRITE_COMMIT_Y<0;1,0>:ud // Make sure Y write is committed + mov (1) REG_WRITE_COMMIT_UV<1>:ud REG_WRITE_COMMIT_UV<0;1,0>:ud // Make sure U/V write is committed +#endif // INTER_KERNEL +#endif // BSDRESET_ENABLE + + send (8) NULLREG MSGHDRY1 null:ud MSG_GW FWDMSGDSC + +// End of scoreboard_update diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/set_SB_offset.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/set_SB_offset.asm new file mode 100644 index 000000000..8b57712f3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/set_SB_offset.asm @@ -0,0 +1,56 @@ +/* + * Common module to set offset into the scoreboard + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// +// Module name: set_SB_offset.asm +// +// Common module to set offset into the scoreboard +// Note: This is to encapsulate the way M0.5:ud in ForwardMsg is filled. +// +// $Revision: 2 $ +// $Date: 10/16/06 5:19p $ +// + add (1) MSGHDRY1.10<1>:uw r0.20:ub 0x0200:uw // Message length = 1 DWORD + + add (16) acc0<1>:w r0.12<0;1,0>:uw -LEADING_THREAD:w // 0-based thread count derived from r0.6:ud + shl (1) M05_STORE<1>:uw acc0<0;1,0>:uw 0x2:uw // Store for future "update" use, in DWORD unit + and (16) acc0<1>:w acc0<16;16,1>:uw SB_MASK:uw // Wrap around scoreboard + shl (1) MSGHDRY1.11<1>:uw acc0<0;1,0>:uw 0x2:uw // Convert to DWORD offset + +// End of set_SB_offset \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/weightedPred.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/weightedPred.asm new file mode 100644 index 000000000..4273d99ec --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/weightedPred.asm @@ -0,0 +1,170 @@ +/* + * Weighted prediction of luminance and chrominance + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: WeightedPred.asm +// +// Weighted prediction of luminance and chrominance +// + + +//#if !defined(__WeightedPred__) // Make sure this is only included once +//#define __WeightedPred__ + + + and.z.f0.0 (1) gWEIGHTFLAG:w gWPREDFLAG:ub nWBIDIR_MASK:w + cmp.e.f0.1 (1) null:w gPREDFLAG:w 2:w + (-f0.0) jmpi INTERLABEL(WeightedPred) + (f0.1) jmpi INTERLABEL(DefaultWeightedPred_BiPred) + +INTERLABEL(DefaultWeightedPred_UniPred): + + cmp.e.f0.0 (1) null:w gPREDFLAG:w 0:w + (f0.0) jmpi INTERLABEL(Return_WeightedPred) + + // luma + mov (32) gubYPRED(0)<2> gubINTPY1(0) {Compr} + mov (32) gubYPRED(2)<2> gubINTPY1(2) {Compr} + +#ifndef MONO + // chroma + mov (32) gubCPRED(0)<2> gubINTPC1(0) {Compr} +#endif + + jmpi INTERLABEL(Return_WeightedPred) + +INTERLABEL(DefaultWeightedPred_BiPred): + + // luma + avg.sat (32) gubYPRED(0)<2> gubINTPY0(0) gubINTPY1(0) {Compr} + avg.sat (32) gubYPRED(2)<2> gubINTPY0(2) gubINTPY1(2) {Compr} + +#ifndef MONO + // chroma + avg.sat (32) gubCPRED(0)<2> gubINTPC0(0) gubINTPC1(0) {Compr} +#endif + + jmpi INTERLABEL(Return_WeightedPred) + +INTERLABEL(WeightedPred): + cmp.e.f0.1 (1) null:w gWEIGHTFLAG:w 0x80:w + (-f0.1) jmpi INTERLABEL(WeightedPred_Explicit) + + cmp.e.f0.0 (1) null:w gPREDFLAG:w 2:w + (-f0.0) jmpi INTERLABEL(DefaultWeightedPred_UniPred) + + mov (2) gYADD<1>:w 32:w {NoDDClr} + mov (2) gYSHIFT<1>:w 6:w {NoDDChk} + mov (4) gOFFSET<1>:w 0:w + mov (8) gWT0<2>:w r[pWGT,0]<0;2,1>:w + + jmpi INTERLABEL(WeightedPred_LOOP) + + // Explicit Prediction +INTERLABEL(WeightedPred_Explicit): + + // WA for weighted prediction - 2007/09/06 +#ifdef SW_W_128 // CTG SW WA + cmp.e.f0.1 (8) null:ud r[pWGT,0]<8;8,1>:uw gudW128(0)<0;1,0> +#else // ILK HW solution + and.ne.f0.1 (8) null:uw r[pWGT,12]<0;1,0>:ub 0x88848421:v // Expand W=128 flag to all components. 2 MSB are don't care +#endif + asr.nz.f0.0 (2) gBIPRED<1>:w gPREDFLAG<0;1,0>:w 1:w + asr (1) gWEIGHTFLAG:w gWEIGHTFLAG:w 6:w + (-f0.0) mov (2) gPREDFLAG1<1>:w gPREDFLAG<0;1,0>:w + (f0.0) mov (2) gPREDFLAG0<1>:ud 0x00010001:ud + (-f0.0) add (2) gPREDFLAG0<1>:w -gPREDFLAG1<2;2,1>:w 1:w + + // WA for weighted prediction - 2007/09/06 + (f0.1) mov (8) gWT0<1>:ud 0x00000080:ud + (-f0.1) mov (8) gWT0<2>:w r[pWGT,0]<16;8,2>:b + (-f0.1) mov (8) gO0<2>:w r[pWGT,1]<16;8,2>:b + mul (16) gWT0<1>:w gWT0<16;16,1>:w gPREDFLAG0<0;4,1>:w + + // Compute addition + cmp.e.f0.1 (2) null<1>:w gYWDENOM<2;2,1>:ub 0:w + (-f0.1) shl (2) gW0<1>:w gWEIGHTFLAG<0;1,0>:w gYWDENOM<2;2,1>:ub + (f0.1) mov (2) gW0<1>:w 0:w + (-f0.1) asr (2) gW0<1>:w gW0<2;2,1>:w 1:w + shl (2) gYADD<1>:w gW0<2;2,1>:w gBIPRED<0;1,0>:w + (f0.1) add (2) gYADD<1>:w gYADD<2;2,1>:w gBIPRED<0;1,0>:w + + // Compute shift + add (2) gYSHIFT<1>:w gYWDENOM<2;2,1>:ub gBIPRED<0;1,0>:w + + // Compute offset + add (4) acc0<1>:w gO0<16;4,4>:w gO1<16;4,4>:w + add (4) acc0<1>:w acc0<4;4,1>:w gBIPRED<0;1,0>:w + asr (4) gOFFSET<1>:w acc0<4;4,1>:w gBIPRED<0;1,0>:w + +INTERLABEL(WeightedPred_LOOP): + // luma + $for(0;<4;2) { + mul (16) acc0<1>:w gubINTPY0(%1) gWT0<0;1,0>:w + mul (16) acc1<1>:w gubINTPY0(%1+1) gWT0<0;1,0>:w + mac (16) acc0<1>:w gubINTPY1(%1) gWT1<0;1,0>:w + mac (16) acc1<1>:w gubINTPY1(%1+1) gWT1<0;1,0>:w + add (16) acc0<1>:w acc0<16;16,1>:w gYADD:w + add (16) acc1<1>:w acc1<16;16,1>:w gYADD:w + // Accumulator cannot be used as destination for ASR + asr (16) gwINTERIM_BUF3(0)<1> acc0<16;16,1>:w gYSHIFT:w + asr (16) gwINTERIM_BUF3(1)<1> acc1<16;16,1>:w gYSHIFT:w + add.sat (16) gubYPRED(%1)<2> gwINTERIM_BUF3(0) gOFFSET:w + add.sat (16) gubYPRED(%1+1)<2> gwINTERIM_BUF3(1) gOFFSET:w + } + +#ifndef MONO + // chroma + mul (16) acc0<1>:w gubINTPC0(0) gUW0<0;2,4>:w + mul (16) acc1<1>:w gubINTPC0(1) gUW0<0;2,4>:w + mac (16) acc0<1>:w gubINTPC1(0) gUW1<0;2,4>:w + mac (16) acc1<1>:w gubINTPC1(1) gUW1<0;2,4>:w + add (16) acc0<1>:w acc0<16;16,1>:w gCADD:w + add (16) acc1<1>:w acc1<16;16,1>:w gCADD:w + // Accumulator cannot be used as destination for ASR + asr (16) gwINTERIM_BUF3(0)<1> acc0<16;16,1>:w gCSHIFT:w + asr (16) gwINTERIM_BUF3(1)<1> acc1<16;16,1>:w gCSHIFT:w + add.sat (16) gubCPRED(0)<2> gwINTERIM_BUF3(0) gUOFFSET<0;2,1>:w + add.sat (16) gubCPRED(1)<2> gwINTERIM_BUF3(1) gUOFFSET<0;2,1>:w +#endif + + +INTERLABEL(Return_WeightedPred): + + +//#endif // !defined(__WeightedPred__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_C_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_C_8x4.asm new file mode 100644 index 000000000..23e4a5b1e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_C_8x4.asm @@ -0,0 +1,76 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: WriteRecon_C_8x4.asm +// +// $Revision: 10 $ +// $Date: 10/03/06 5:28p $ +// + + +//#if !defined(__WRITERECON_C_8x4__) // Make sure this is only included once +//#define __WRITERECON_C_8x4__ + + + // TODO: Why did I use p0? +#ifndef MONO + add (1) p0:w pERRORC:w -16:w + mov (16) mbMSGPAYLOADC(0,0)<2> r[p0,0]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(0,1)<2> r[p0,128]<32;16,2>:ub {NoDDChk} + mov (16) mbMSGPAYLOADC(1,0)<2> r[p0,32]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(1,1)<2> r[p0,128+32]<32;16,2>:ub {NoDDChk} +#else // defined(MONO) + mov (16) mbMSGPAYLOADC(0)<1> 0x80808080:ud {Compr} +#endif // !defined(MONO) + + #if defined(MBAFF) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(2)+nDWBWMSGDSC+nBDIX_DESTC+ENWRCOM:ud + #elif defined(FIELD) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(2)+nDWBWMSGDSC_TF+nBDIX_DESTC+ENWRCOM:ud + #endif + + asr (1) gMSGSRC.1:d gMSGSRC.1:d 1:w {NoDDClr} + mov (1) gMSGSRC.2:ud 0x0003000f:ud {NoDDChk} // NV12 (16x4) + +#if defined(FRAME) + send (8) gREG_WRITE_COMMIT_UV<1>:ud mMSGHDRCW gMSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(2)+nDWBWMSGDSC+nBDIX_DESTC+ENWRCOM +#else + send (8) gREG_WRITE_COMMIT_UV<1>:ud mMSGHDRCW gMSGSRC<8;8,1>:ud DAPWRITE pMSGDSC:ud +#endif // defined(FRAME) + +//#endif // !defined(__WRITERECON_C_8x4__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_YC.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_YC.asm new file mode 100644 index 000000000..b88b29975 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_YC.asm @@ -0,0 +1,109 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: WriteRecon_YC.asm +// +// $Revision: 10 $ +// $Date: 10/03/06 5:28p $ +// + + +//#if !defined(__WRITERECON_YC__) // Make sure this is only included once +//#define __WRITERECON_YC__ + + // TODO: Merge two inst to one. + mov (1) p0:w nOFFSET_ERRORY:w + mov (1) p1:w nOFFSET_ERRORY+128:w + + $for(0; <4; 1) { + mov (16) mbMSGPAYLOADY(%1,0)<1> r[p0,%1*32+0]<8,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADY(%1,16)<1> r[p0,%1*32+16]<8,2>:ub {NoDDChk} + } + $for(0; <4; 1) { + mov (16) mbMSGPAYLOADY(%1+4,0)<1> r[p0,%1*32+256]<8,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADY(%1+4,16)<1> r[p0,%1*32+16+256]<8,2>:ub {NoDDChk} + } + + + #if defined(MBAFF) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(8)+nDWBWMSGDSC+nBDIX_DESTY+ENWRCOM:ud + #elif defined(FIELD) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(8)+nDWBWMSGDSC_TF+nBDIX_DESTY+ENWRCOM:ud + #endif + + mov (2) gMSGSRC.0<1>:d gX<2;2,1>:w {NoDDClr} + mov (1) gMSGSRC.2:ud 0x000f000f:ud {NoDDChk} + +#if defined(FRAME) + send (8) gREG_WRITE_COMMIT_Y<1>:ud mMSGHDRYW gMSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(8)+nDWBWMSGDSC+nBDIX_DESTY+ENWRCOM +#else + send (8) gREG_WRITE_COMMIT_Y<1>:ud mMSGHDRYW gMSGSRC<8;8,1>:ud DAPWRITE pMSGDSC:ud +#endif + +#ifndef MONO + // TODO: Why did I use p0? + mov (1) p0:w nOFFSET_ERRORC:w + mov (16) mbMSGPAYLOADC(0,0)<2> r[p0,0]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(0,1)<2> r[p0,128]<32;16,2>:ub {NoDDChk} + mov (16) mbMSGPAYLOADC(1,0)<2> r[p0,32]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(1,1)<2> r[p0,128+32]<32;16,2>:ub {NoDDChk} + mov (16) mbMSGPAYLOADC(2,0)<2> r[p0,64]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(2,1)<2> r[p0,128+64]<32;16,2>:ub {NoDDChk} + mov (16) mbMSGPAYLOADC(3,0)<2> r[p0,96]<32;16,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADC(3,1)<2> r[p0,128+96]<32;16,2>:ub {NoDDChk} + + + #if defined(MBAFF) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(4)+nDWBWMSGDSC+nBDIX_DESTC+ENWRCOM:ud + #elif defined(FIELD) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(4)+nDWBWMSGDSC_TF+nBDIX_DESTC+ENWRCOM:ud + #endif + + asr (1) gMSGSRC.1:d gMSGSRC.1:d 1:w {NoDDClr} + mov (1) gMSGSRC.2:ud 0x0007000f:ud {NoDDChk} // NV12 (16x4) + +#if defined(FRAME) + send (8) gREG_WRITE_COMMIT_UV<1>:ud mMSGHDRCW gMSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(4)+nDWBWMSGDSC+nBDIX_DESTC+ENWRCOM +#else + send (8) gREG_WRITE_COMMIT_UV<1>:ud mMSGHDRCW gMSGSRC<8;8,1>:ud DAPWRITE pMSGDSC:ud +#endif // defined(FRAME) + +#endif // !defined(MONO) + + +//#endif // !defined(__WRITERECON_YC__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_Y_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_Y_16x8.asm new file mode 100644 index 000000000..04fc37080 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/h264/mc/writeRecon_Y_16x8.asm @@ -0,0 +1,73 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +// Kernel name: WriteRecon_Y_16x8.asm +// +// $Revision: 10 $ +// $Date: 10/03/06 5:28p $ +// + + +//#if !defined(__WRITERECON_Y_16x8__) // Make sure this is only included once +//#define __WRITERECON_Y_16x8__ + + + add (1) p0:w pERRORY:w -256:w + add (1) p1:w pERRORY:w -128:w + + $for(0; <4; 1) { + mov (16) mbMSGPAYLOADY(%1,0)<1> r[p0,%1*32+0]<8,2>:ub {NoDDClr} + mov (16) mbMSGPAYLOADY(%1,16)<1> r[p0,%1*32+16]<8,2>:ub {NoDDChk} + } + + #if defined(MBAFF) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(4)+nDWBWMSGDSC+nBDIX_DESTY+ENWRCOM:ud + #elif defined(FIELD) + add (1) pMSGDSC:ud gFIELDFLAGS:uw MSG_LEN(4)+nDWBWMSGDSC_TF+nBDIX_DESTY+ENWRCOM:ud + #endif + + mov (2) gMSGSRC.0<1>:d gX<2;2,1>:w {NoDDClr} + mov (1) gMSGSRC.2:ud 0x0007000f:ud {NoDDChk} + +#if defined(FRAME) + send (8) gREG_WRITE_COMMIT_Y<1>:ud mMSGHDRYW gMSGSRC<8;8,1>:ud DAPWRITE MSG_LEN(4)+nDWBWMSGDSC+nBDIX_DESTY+ENWRCOM +#else + send (8) gREG_WRITE_COMMIT_Y<1>:ud mMSGHDRYW gMSGSRC<8;8,1>:ud DAPWRITE pMSGDSC:ud +#endif + +//#endif // !defined(__WRITERECON_Y_16x8__) diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.am new file mode 100644 index 000000000..979559479 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = vld + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.in new file mode 100644 index 000000000..71133b214 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/Makefile.in @@ -0,0 +1,633 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders/mpeg2 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SUBDIRS = vld + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/mpeg2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/mpeg2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.am new file mode 100644 index 000000000..37955dcd6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.am @@ -0,0 +1,122 @@ +INTEL_G4I = \ + addidct.g4i \ + do_iq_intra.g4i \ + do_iq_non_intra.g4i \ + field_addidct.g4i \ + field_motion_uv.g4i \ + field_motion_y.g4i \ + field_read_x0y0_uv.g4i \ + field_read_x0y0_y.g4i \ + field_read_x0y1_uv.g4i \ + field_read_x0y1_y.g4i \ + field_read_x1y0_uv.g4i \ + field_read_x1y0_y.g4i \ + field_read_x1y1_uv.g4i \ + field_read_x1y1_y.g4i \ + idct.g4i \ + iq_intra.g4i \ + iq_non_intra.g4i \ + motion_field_uv.g4i \ + motion_field_y.g4i \ + motion_frame_uv.g4i \ + motion_frame_y.g4i \ + read_field_x0y0_uv.g4i \ + read_field_x0y0_y.g4i \ + read_field_x0y1_uv.g4i \ + read_field_x0y1_y.g4i \ + read_field_x1y0_uv.g4i \ + read_field_x1y0_y.g4i \ + read_field_x1y1_uv.g4i \ + read_field_x1y1_y.g4i \ + read_frame_x0y0_uv.g4i \ + read_frame_x0y0_y.g4i \ + read_frame_x0y1_uv.g4i \ + read_frame_x0y1_y.g4i \ + read_frame_x1y0_uv.g4i \ + read_frame_x1y0_y.g4i \ + read_frame_x1y1_uv.g4i \ + read_frame_x1y1_y.g4i \ + $(NULL) + +INTEL_G4A = frame_intra.g4a \ + frame_frame_pred_forward.g4a \ + frame_frame_pred_backward.g4a \ + frame_frame_pred_bidirect.g4a \ + frame_field_pred_forward.g4a \ + frame_field_pred_backward.g4a \ + frame_field_pred_bidirect.g4a \ + lib.g4a \ + field_intra.g4a \ + field_forward.g4a \ + field_forward_16x8.g4a \ + field_backward.g4a \ + field_backward_16x8.g4a \ + field_bidirect.g4a \ + field_bidirect_16x8.g4a \ + null.g4a + +INTEL_G4S = $(INTEL_G4A:%.g4a=%.g4s) + +INTEL_G4B = frame_intra.g4b \ + frame_frame_pred_forward.g4b \ + frame_frame_pred_backward.g4b \ + frame_frame_pred_bidirect.g4b \ + frame_field_pred_forward.g4b \ + frame_field_pred_backward.g4b \ + frame_field_pred_bidirect.g4b \ + lib.g4b \ + field_intra.g4b \ + field_forward.g4b \ + field_forward_16x8.g4b \ + field_backward.g4b \ + field_backward_16x8.g4b \ + field_bidirect.g4b \ + field_bidirect_16x8.g4b + +INTEL_G4B_GEN5 = frame_intra.g4b.gen5 \ + frame_frame_pred_forward.g4b.gen5 \ + frame_frame_pred_backward.g4b.gen5 \ + frame_frame_pred_bidirect.g4b.gen5 \ + frame_field_pred_forward.g4b.gen5 \ + frame_field_pred_backward.g4b.gen5 \ + frame_field_pred_bidirect.g4b.gen5 \ + lib.g4b.gen5 \ + field_intra.g4b.gen5 \ + field_forward.g4b.gen5 \ + field_forward_16x8.g4b.gen5 \ + field_backward.g4b.gen5 \ + field_backward_16x8.g4b.gen5 \ + field_bidirect.g4b.gen5 \ + field_bidirect_16x8.g4b.gen5 + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_G4B) +TARGETS += $(INTEL_G4B_GEN5) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g4a .g4s .g4b .g4b.gen5 + +if HAVE_GEN4ASM +$(INTEL_G4S): $(INTEL_G4A) $(INTEL_G4I) +.g4a.g4s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g4s.g4b: + $(AM_V_GEN)$(GEN4ASM) -o $@ $< +.g4s.g4b.gen5: + $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@ $< +endif + +CLEANFILES = $(INTEL_G4S) + +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.in new file mode 100644 index 000000000..a8848ddad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/Makefile.in @@ -0,0 +1,566 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_G4B) $(INTEL_G4B_GEN5) +subdir = src/shaders/mpeg2/vld +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_G4I = \ + addidct.g4i \ + do_iq_intra.g4i \ + do_iq_non_intra.g4i \ + field_addidct.g4i \ + field_motion_uv.g4i \ + field_motion_y.g4i \ + field_read_x0y0_uv.g4i \ + field_read_x0y0_y.g4i \ + field_read_x0y1_uv.g4i \ + field_read_x0y1_y.g4i \ + field_read_x1y0_uv.g4i \ + field_read_x1y0_y.g4i \ + field_read_x1y1_uv.g4i \ + field_read_x1y1_y.g4i \ + idct.g4i \ + iq_intra.g4i \ + iq_non_intra.g4i \ + motion_field_uv.g4i \ + motion_field_y.g4i \ + motion_frame_uv.g4i \ + motion_frame_y.g4i \ + read_field_x0y0_uv.g4i \ + read_field_x0y0_y.g4i \ + read_field_x0y1_uv.g4i \ + read_field_x0y1_y.g4i \ + read_field_x1y0_uv.g4i \ + read_field_x1y0_y.g4i \ + read_field_x1y1_uv.g4i \ + read_field_x1y1_y.g4i \ + read_frame_x0y0_uv.g4i \ + read_frame_x0y0_y.g4i \ + read_frame_x0y1_uv.g4i \ + read_frame_x0y1_y.g4i \ + read_frame_x1y0_uv.g4i \ + read_frame_x1y0_y.g4i \ + read_frame_x1y1_uv.g4i \ + read_frame_x1y1_y.g4i \ + $(NULL) + +INTEL_G4A = frame_intra.g4a \ + frame_frame_pred_forward.g4a \ + frame_frame_pred_backward.g4a \ + frame_frame_pred_bidirect.g4a \ + frame_field_pred_forward.g4a \ + frame_field_pred_backward.g4a \ + frame_field_pred_bidirect.g4a \ + lib.g4a \ + field_intra.g4a \ + field_forward.g4a \ + field_forward_16x8.g4a \ + field_backward.g4a \ + field_backward_16x8.g4a \ + field_bidirect.g4a \ + field_bidirect_16x8.g4a \ + null.g4a + +INTEL_G4S = $(INTEL_G4A:%.g4a=%.g4s) +INTEL_G4B = frame_intra.g4b \ + frame_frame_pred_forward.g4b \ + frame_frame_pred_backward.g4b \ + frame_frame_pred_bidirect.g4b \ + frame_field_pred_forward.g4b \ + frame_field_pred_backward.g4b \ + frame_field_pred_bidirect.g4b \ + lib.g4b \ + field_intra.g4b \ + field_forward.g4b \ + field_forward_16x8.g4b \ + field_backward.g4b \ + field_backward_16x8.g4b \ + field_bidirect.g4b \ + field_bidirect_16x8.g4b + +INTEL_G4B_GEN5 = frame_intra.g4b.gen5 \ + frame_frame_pred_forward.g4b.gen5 \ + frame_frame_pred_backward.g4b.gen5 \ + frame_frame_pred_bidirect.g4b.gen5 \ + frame_field_pred_forward.g4b.gen5 \ + frame_field_pred_backward.g4b.gen5 \ + frame_field_pred_bidirect.g4b.gen5 \ + lib.g4b.gen5 \ + field_intra.g4b.gen5 \ + field_forward.g4b.gen5 \ + field_forward_16x8.g4b.gen5 \ + field_backward.g4b.gen5 \ + field_backward_16x8.g4b.gen5 \ + field_bidirect.g4b.gen5 \ + field_bidirect_16x8.g4b.gen5 + +TARGETS = $(am__append_1) +SUFFIXES = .g4a .g4s .g4b .g4b.gen5 +CLEANFILES = $(INTEL_G4S) +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g4a .g4s .g4b .g4b.gen5 +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/mpeg2/vld/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/mpeg2/vld/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_G4S): $(INTEL_G4A) $(INTEL_G4I) +@HAVE_GEN4ASM_TRUE@.g4a.g4s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g4s.g4b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -o $@ $< +@HAVE_GEN4ASM_TRUE@.g4s.g4b.gen5: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/addidct.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/addidct.g4i new file mode 100644 index 000000000..b57548d15 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/addidct.g4i @@ -0,0 +1,152 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; //restore x and y + +and.nz (1) null g82.2<1,1,1>UW 0x20UW {align1}; //dct_type +(f0) jmpi field_dct; + +add (16) g58.0<1>W g83.0<16,16,1>W g58.0<16,16,2>UB {align1}; +add (16) g59.0<1>W g84.0<16,16,1>W g59.0<16,16,2>UB {align1}; +add (16) g60.0<1>W g85.0<16,16,1>W g60.0<16,16,2>UB {align1}; +add (16) g61.0<1>W g86.0<16,16,1>W g61.0<16,16,2>UB {align1}; +add (16) g62.0<1>W g87.0<16,16,1>W g62.0<16,16,2>UB {align1}; +add (16) g63.0<1>W g88.0<16,16,1>W g63.0<16,16,2>UB {align1}; +add (16) g64.0<1>W g89.0<16,16,1>W g64.0<16,16,2>UB {align1}; +add (16) g65.0<1>W g90.0<16,16,1>W g65.0<16,16,2>UB {align1}; +add (16) g66.0<1>W g91.0<16,16,1>W g66.0<16,16,2>UB {align1}; +add (16) g67.0<1>W g92.0<16,16,1>W g67.0<16,16,2>UB {align1}; +add (16) g68.0<1>W g93.0<16,16,1>W g68.0<16,16,2>UB {align1}; +add (16) g69.0<1>W g94.0<16,16,1>W g69.0<16,16,2>UB {align1}; +add (16) g70.0<1>W g95.0<16,16,1>W g70.0<16,16,2>UB {align1}; +add (16) g71.0<1>W g96.0<16,16,1>W g71.0<16,16,2>UB {align1}; +add (16) g72.0<1>W g97.0<16,16,1>W g72.0<16,16,2>UB {align1}; +add (16) g73.0<1>W g98.0<16,16,1>W g73.0<16,16,2>UB {align1}; +jmpi write_back; + +field_dct: +add (16) g58.0<1>W g83.0<16,16,1>W g58.0<16,16,2>UB {align1}; +add (16) g59.0<1>W g91.0<16,16,1>W g59.0<16,16,2>UB {align1}; +add (16) g60.0<1>W g84.0<16,16,1>W g60.0<16,16,2>UB {align1}; +add (16) g61.0<1>W g92.0<16,16,1>W g61.0<16,16,2>UB {align1}; +add (16) g62.0<1>W g85.0<16,16,1>W g62.0<16,16,2>UB {align1}; +add (16) g63.0<1>W g93.0<16,16,1>W g63.0<16,16,2>UB {align1}; +add (16) g64.0<1>W g86.0<16,16,1>W g64.0<16,16,2>UB {align1}; +add (16) g65.0<1>W g94.0<16,16,1>W g65.0<16,16,2>UB {align1}; +add (16) g66.0<1>W g87.0<16,16,1>W g66.0<16,16,2>UB {align1}; +add (16) g67.0<1>W g95.0<16,16,1>W g67.0<16,16,2>UB {align1}; +add (16) g68.0<1>W g88.0<16,16,1>W g68.0<16,16,2>UB {align1}; +add (16) g69.0<1>W g96.0<16,16,1>W g69.0<16,16,2>UB {align1}; +add (16) g70.0<1>W g89.0<16,16,1>W g70.0<16,16,2>UB {align1}; +add (16) g71.0<1>W g97.0<16,16,1>W g71.0<16,16,2>UB {align1}; +add (16) g72.0<1>W g90.0<16,16,1>W g72.0<16,16,2>UB {align1}; +add (16) g73.0<1>W g98.0<16,16,1>W g73.0<16,16,2>UB {align1}; + +write_back: +mov (1) g31.8<1>UD 0x00F000FUD {align1}; +mov.sat (16) g58.0<2>UB g58.0<16,16,1>W {align1}; +mov.sat (16) g59.0<2>UB g59.0<16,16,1>W {align1}; +mov.sat (16) g60.0<2>UB g60.0<16,16,1>W {align1}; +mov.sat (16) g61.0<2>UB g61.0<16,16,1>W {align1}; +mov.sat (16) g62.0<2>UB g62.0<16,16,1>W {align1}; +mov.sat (16) g63.0<2>UB g63.0<16,16,1>W {align1}; +mov.sat (16) g64.0<2>UB g64.0<16,16,1>W {align1}; +mov.sat (16) g65.0<2>UB g65.0<16,16,1>W {align1}; +mov.sat (16) g66.0<2>UB g66.0<16,16,1>W {align1}; +mov.sat (16) g67.0<2>UB g67.0<16,16,1>W {align1}; +mov.sat (16) g68.0<2>UB g68.0<16,16,1>W {align1}; +mov.sat (16) g69.0<2>UB g69.0<16,16,1>W {align1}; +mov.sat (16) g70.0<2>UB g70.0<16,16,1>W {align1}; +mov.sat (16) g71.0<2>UB g71.0<16,16,1>W {align1}; +mov.sat (16) g72.0<2>UB g72.0<16,16,1>W {align1}; +mov.sat (16) g73.0<2>UB g73.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g58.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g59.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g60.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g61.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g62.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g63.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g64.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g65.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g66.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g67.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g68.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g69.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g70.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g71.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g72.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g73.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(0,0,2,0) mlen 9 rlen 0 {align1}; + +//U +mov (1) g31.8<1>UD 0x0070007UD { align1 }; +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1D {align1}; +add (16) g74.0<1>W g99.0<16,16,1>W g74.0<16,16,1>UW {align1}; +add (16) g75.0<1>W g100.0<16,16,1>W g75.0<16,16,1>UW {align1}; +add (16) g76.0<1>W g101.0<16,16,1>W g76.0<16,16,1>UW {align1}; +add (16) g77.0<1>W g102.0<16,16,1>W g77.0<16,16,1>UW {align1}; +mov.sat (16) g74.0<2>UB g74.0<16,16,1>W {align1}; +mov.sat (16) g75.0<2>UB g75.0<16,16,1>W {align1}; +mov.sat (16) g76.0<2>UB g76.0<16,16,1>W {align1}; +mov.sat (16) g77.0<2>UB g77.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g74.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g75.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g76.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g77.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +//V +add (16) g78.0<1>UW g103.0<16,16,1>W g78.0<16,16,1>UW {align1}; +add (16) g79.0<1>UW g104.0<16,16,1>W g79.0<16,16,1>UW {align1}; +add (16) g80.0<1>UW g105.0<16,16,1>W g80.0<16,16,1>UW {align1}; +add (16) g81.0<1>UW g106.0<16,16,1>W g81.0<16,16,1>UW {align1}; +mov.sat (16) g78.0<2>UB g78.0<16,16,1>W {align1}; +mov.sat (16) g79.0<2>UB g79.0<16,16,1>W {align1}; +mov.sat (16) g80.0<2>UB g80.0<16,16,1>W {align1}; +mov.sat (16) g81.0<2>UB g81.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g78.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g79.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g80.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g81.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_intra.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_intra.g4i new file mode 100644 index 000000000..29bd02087 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_intra.g4i @@ -0,0 +1,64 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g112~g115: intra IQ matrix in UW format (in order to use instruction compress), copys from g1~g2 + g[a0.0]:DCT data of a block + g125: ip before jump + if(v==0 && u==0 && intra_mb) + F''[v][u] = QF[v][u] * intra_dc_mult + else + F''[v][u] = (QF[v][u]*W[w][v][u]*quantiser_scale*2)/32 +*/ +DO_IQ_INTRA: +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mov (1) g111.0<1>W g[a0.0]<1,1,1>W {align1}; +mul (16) g116.0<1>D g[a0.0]<8,8,1>W g112.0<8,8,1>UW {align1 compr}; +mul (16) g116.0<1>D g116.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g116.0<1>D g116.0<8,8,1>D 4UW {align1 compr}; +mul (1) g116.0<1>D g111<1,1,1>W g109.4<1,1,1>UW {align1}; //intra_dc_mult + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g118.0<1>D g[a0.0]<8,8,1>W g113.0<8,8,1>UW {align1 compr}; +mul (16) g118.0<1>D g118.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g118.0<1>D g118.0<8,8,1>D 4UW {align1 compr}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g120.0<1>D g[a0.0]<8,8,1>W g114.0<8,8,1>UW {align1 compr}; +mul (16) g120.0<1>D g120.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g120.0<1>D g120.0<8,8,1>D 4UW {align1 compr}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g122.0<1>D g[a0.0]<8,8,1>W g115.0<8,8,1>UW {align1 compr}; +mul (16) g122.0<1>D g122.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g122.0<1>D g122.0<8,8,1>D 4UW {align1 compr}; + +add (1) ip g125.0<1,1,1>UD 0x20UD {align1}; //jump back diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_non_intra.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_non_intra.g4i new file mode 100644 index 000000000..da85e8454 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/do_iq_non_intra.g4i @@ -0,0 +1,59 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g112~g115: intra IQ matrix in UW format (in order to use instruction compress), copys from g1~g2 + g[a0.0]:DCT data of a block + g125: ip before jump + F''[v][u]=(((QF[v][u]*2)+Sign(QF[v][u])) * W[w][v][u] * quantiser_scale)/32; +*/ +DO_IQ_NON_INTRA: +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g116.0<1>D g[a0.0]<8,8,1>W g112.0<8,8,1>UW {align1 compr}; +mul (16) g116.0<1>D g116.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g116.0<1>D g116.0<8,8,1>D 4UW {align1 compr}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g118.0<1>D g[a0.0]<8,8,1>W g113.0<8,8,1>UW {align1 compr}; +mul (16) g118.0<1>D g118.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g118.0<1>D g118.0<8,8,1>D 4UW {align1 compr}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g120.0<1>D g[a0.0]<8,8,1>W g114.0<8,8,1>UW {align1 compr}; +mul (16) g120.0<1>D g120.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g120.0<1>D g120.0<8,8,1>D 4UW {align1 compr}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +mul (16) g122.0<1>D g[a0.0]<8,8,1>W g115.0<8,8,1>UW {align1 compr}; +mul (16) g122.0<1>D g122.0<8,8,1>D g109.0<8,8,0>UW {align1 compr}; +asr (16) g122.0<1>D g122.0<8,8,1>D 4UW {align1 compr}; + +add (1) ip g125.0<1,1,1>UD 0x20UD {align1}; //jump back diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_addidct.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_addidct.g4i new file mode 100644 index 000000000..05d0f9576 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_addidct.g4i @@ -0,0 +1,153 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; //restore x and y + +and.nz (1) null g82.2<1,1,1>UW 0x20UW {align1}; //dct_type +(f0) jmpi field_dct; + +add (16) g58.0<1>W g83.0<16,16,1>W g58.0<16,16,2>UB {align1}; +add (16) g59.0<1>W g84.0<16,16,1>W g59.0<16,16,2>UB {align1}; +add (16) g60.0<1>W g85.0<16,16,1>W g60.0<16,16,2>UB {align1}; +add (16) g61.0<1>W g86.0<16,16,1>W g61.0<16,16,2>UB {align1}; +add (16) g62.0<1>W g87.0<16,16,1>W g62.0<16,16,2>UB {align1}; +add (16) g63.0<1>W g88.0<16,16,1>W g63.0<16,16,2>UB {align1}; +add (16) g64.0<1>W g89.0<16,16,1>W g64.0<16,16,2>UB {align1}; +add (16) g65.0<1>W g90.0<16,16,1>W g65.0<16,16,2>UB {align1}; +add (16) g66.0<1>W g91.0<16,16,1>W g66.0<16,16,2>UB {align1}; +add (16) g67.0<1>W g92.0<16,16,1>W g67.0<16,16,2>UB {align1}; +add (16) g68.0<1>W g93.0<16,16,1>W g68.0<16,16,2>UB {align1}; +add (16) g69.0<1>W g94.0<16,16,1>W g69.0<16,16,2>UB {align1}; +add (16) g70.0<1>W g95.0<16,16,1>W g70.0<16,16,2>UB {align1}; +add (16) g71.0<1>W g96.0<16,16,1>W g71.0<16,16,2>UB {align1}; +add (16) g72.0<1>W g97.0<16,16,1>W g72.0<16,16,2>UB {align1}; +add (16) g73.0<1>W g98.0<16,16,1>W g73.0<16,16,2>UB {align1}; + +jmpi write_back; + +field_dct: +add (16) g58.0<1>W g83.0<16,16,1>W g58.0<16,16,2>UB {align1}; +add (16) g59.0<1>W g91.0<16,16,1>W g59.0<16,16,2>UB {align1}; +add (16) g60.0<1>W g84.0<16,16,1>W g60.0<16,16,2>UB {align1}; +add (16) g61.0<1>W g92.0<16,16,1>W g61.0<16,16,2>UB {align1}; +add (16) g62.0<1>W g85.0<16,16,1>W g62.0<16,16,2>UB {align1}; +add (16) g63.0<1>W g93.0<16,16,1>W g63.0<16,16,2>UB {align1}; +add (16) g64.0<1>W g86.0<16,16,1>W g64.0<16,16,2>UB {align1}; +add (16) g65.0<1>W g94.0<16,16,1>W g65.0<16,16,2>UB {align1}; +add (16) g66.0<1>W g87.0<16,16,1>W g66.0<16,16,2>UB {align1}; +add (16) g67.0<1>W g95.0<16,16,1>W g67.0<16,16,2>UB {align1}; +add (16) g68.0<1>W g88.0<16,16,1>W g68.0<16,16,2>UB {align1}; +add (16) g69.0<1>W g96.0<16,16,1>W g69.0<16,16,2>UB {align1}; +add (16) g70.0<1>W g89.0<16,16,1>W g70.0<16,16,2>UB {align1}; +add (16) g71.0<1>W g97.0<16,16,1>W g71.0<16,16,2>UB {align1}; +add (16) g72.0<1>W g90.0<16,16,1>W g72.0<16,16,2>UB {align1}; +add (16) g73.0<1>W g98.0<16,16,1>W g73.0<16,16,2>UB {align1}; + +write_back: +mov (1) g31.8<1>UD 0x00F000FUD {align1}; +mov.sat (16) g58.0<2>UB g58.0<16,16,1>W {align1}; +mov.sat (16) g59.0<2>UB g59.0<16,16,1>W {align1}; +mov.sat (16) g60.0<2>UB g60.0<16,16,1>W {align1}; +mov.sat (16) g61.0<2>UB g61.0<16,16,1>W {align1}; +mov.sat (16) g62.0<2>UB g62.0<16,16,1>W {align1}; +mov.sat (16) g63.0<2>UB g63.0<16,16,1>W {align1}; +mov.sat (16) g64.0<2>UB g64.0<16,16,1>W {align1}; +mov.sat (16) g65.0<2>UB g65.0<16,16,1>W {align1}; +mov.sat (16) g66.0<2>UB g66.0<16,16,1>W {align1}; +mov.sat (16) g67.0<2>UB g67.0<16,16,1>W {align1}; +mov.sat (16) g68.0<2>UB g68.0<16,16,1>W {align1}; +mov.sat (16) g69.0<2>UB g69.0<16,16,1>W {align1}; +mov.sat (16) g70.0<2>UB g70.0<16,16,1>W {align1}; +mov.sat (16) g71.0<2>UB g71.0<16,16,1>W {align1}; +mov.sat (16) g72.0<2>UB g72.0<16,16,1>W {align1}; +mov.sat (16) g73.0<2>UB g73.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g58.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g59.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g60.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g61.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g62.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g63.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g64.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g65.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g66.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g67.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g68.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g69.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g70.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g71.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g72.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g73.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(0,0,2,0) mlen 9 rlen 0 {align1}; + +//U +mov (1) g31.8<1>UD 0x0070007UD { align1 }; +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1D {align1}; +add (16) g74.0<1>W g99.0<16,16,1>W g74.0<16,16,1>UW {align1}; +add (16) g75.0<1>W g100.0<16,16,1>W g75.0<16,16,1>UW {align1}; +add (16) g76.0<1>W g101.0<16,16,1>W g76.0<16,16,1>UW {align1}; +add (16) g77.0<1>W g102.0<16,16,1>W g77.0<16,16,1>UW {align1}; +mov.sat (16) g74.0<2>UB g74.0<16,16,1>W {align1}; +mov.sat (16) g75.0<2>UB g75.0<16,16,1>W {align1}; +mov.sat (16) g76.0<2>UB g76.0<16,16,1>W {align1}; +mov.sat (16) g77.0<2>UB g77.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g74.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g75.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g76.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g77.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +//V +add (16) g78.0<1>UW g103.0<16,16,1>W g78.0<16,16,1>UW {align1}; +add (16) g79.0<1>UW g104.0<16,16,1>W g79.0<16,16,1>UW {align1}; +add (16) g80.0<1>UW g105.0<16,16,1>W g80.0<16,16,1>UW {align1}; +add (16) g81.0<1>UW g106.0<16,16,1>W g81.0<16,16,1>UW {align1}; +mov.sat (16) g78.0<2>UB g78.0<16,16,1>W {align1}; +mov.sat (16) g79.0<2>UB g79.0<16,16,1>W {align1}; +mov.sat (16) g80.0<2>UB g80.0<16,16,1>W {align1}; +mov.sat (16) g81.0<2>UB g81.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g78.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g79.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g80.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g81.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4a new file mode 100644 index 000000000..1696ff370 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4a @@ -0,0 +1,99 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ + +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +//Y of top field +first_field_picture: +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; //motion vertical field select forward +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface',`7') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_y.g4i') +//UV of top field +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; //motion vertical field select forward +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface_u', `8') +define(`surface_v', `9') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_uv.g4i') +jmpi field_addidct; + +second_field_picture: +//Y of bottom field +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface',`3') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_y.g4i') +//UV of bottom field +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface_u', `10') +define(`surface_v', `11') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_uv.g4i') + +field_addidct: +include(`field_addidct.g4i') +out: +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b new file mode 100644 index 000000000..f00d8e567 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b @@ -0,0 +1,757 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000143 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b.gen5 new file mode 100644 index 000000000..7aac9e4c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward.g4b.gen5 @@ -0,0 +1,757 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000286 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4a new file mode 100644 index 000000000..89b836857 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4a @@ -0,0 +1,30 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +define(`UV_red',`0xffffffffUD') +define(`UV_white',`0x7f7f7f7fUD') +define(`UV_green',`0x00000000UD') +mov(2) g6.0<1>UD g82.12<2,2,1>UW {align1}; +mov(1) g6.8<1>UD 0x000f000fUD { align1 }; +mov(16) m1<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m3<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m5<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m7<1>UD 0xFFFFFFFFUD {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(0, 0, 2, 0) mlen 9 rlen 0 { align1 }; +/*Fill U buffer & V buffer with 0x7F*/ +shr (2) g6.0<1>UD g82.12<2,2,1>UW 1UW {align1}; +mov(1) g6.8<1>UD 0x00070007UD { align1 }; +mov (16) m1<1>UD UV_white {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b new file mode 100644 index 000000000..9d95f70b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05902000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302001 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b.gen5 new file mode 100644 index 000000000..b12bddc0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_backward_16x8.g4b.gen5 @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x12082000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082001 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4a new file mode 100644 index 000000000..ad6d30289 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4a @@ -0,0 +1,141 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ + +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +//Y of forward +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface',`4') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_y.g4i') +mov (16) g108.0<1>UD g58.0<16,16,1>UD {align1 compr}; +mov (16) g110.0<1>UD g60.0<16,16,1>UD {align1 compr}; +mov (16) g112.0<1>UD g62.0<16,16,1>UD {align1 compr}; +mov (16) g114.0<1>UD g64.0<16,16,1>UD {align1 compr}; +mov (16) g116.0<1>UD g66.0<16,16,1>UD {align1 compr}; +mov (16) g118.0<1>UD g68.0<16,16,1>UD {align1 compr}; +mov (16) g120.0<1>UD g70.0<16,16,1>UD {align1 compr}; +mov (16) g122.0<1>UD g72.0<16,16,1>UD {align1 compr}; + +//Y of backward +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; //motion vertical field select +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface',`7') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_y.g4i') +avg (16) g58.0<1>UW g58.0<16,16,1>UW g108.0<16,16,1>UW {align1}; +avg (16) g59.0<1>UW g59.0<16,16,1>UW g109.0<16,16,1>UW {align1}; +avg (16) g60.0<1>UW g60.0<16,16,1>UW g110.0<16,16,1>UW {align1}; +avg (16) g61.0<1>UW g61.0<16,16,1>UW g111.0<16,16,1>UW {align1}; +avg (16) g62.0<1>UW g62.0<16,16,1>UW g112.0<16,16,1>UW {align1}; +avg (16) g63.0<1>UW g63.0<16,16,1>UW g113.0<16,16,1>UW {align1}; +avg (16) g64.0<1>UW g64.0<16,16,1>UW g114.0<16,16,1>UW {align1}; +avg (16) g65.0<1>UW g65.0<16,16,1>UW g115.0<16,16,1>UW {align1}; +avg (16) g66.0<1>UW g66.0<16,16,1>UW g116.0<16,16,1>UW {align1}; +avg (16) g67.0<1>UW g67.0<16,16,1>UW g117.0<16,16,1>UW {align1}; +avg (16) g68.0<1>UW g68.0<16,16,1>UW g118.0<16,16,1>UW {align1}; +avg (16) g69.0<1>UW g69.0<16,16,1>UW g119.0<16,16,1>UW {align1}; +avg (16) g70.0<1>UW g70.0<16,16,1>UW g120.0<16,16,1>UW {align1}; +avg (16) g71.0<1>UW g71.0<16,16,1>UW g121.0<16,16,1>UW {align1}; +avg (16) g72.0<1>UW g72.0<16,16,1>UW g122.0<16,16,1>UW {align1}; +avg (16) g73.0<1>UW g73.0<16,16,1>UW g123.0<16,16,1>UW {align1}; + +//UV, Forward +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface_u', `5') +define(`surface_v', `6') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_uv.g4i') +//Save UV Forward +mov (16) g108.0<1>UD g74.0<16,16,1>UD {align1 compr}; +mov (16) g110.0<1>UD g76.0<16,16,1>UD {align1 compr}; +mov (16) g112.0<1>UD g78.0<16,16,1>UD {align1 compr}; +mov (16) g114.0<1>UD g80.0<16,16,1>UD {align1 compr}; + +//UV, Backward +asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; //motion vertical field select +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface_u', `8') +define(`surface_v', `9') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`field_motion_uv.g4i') +//Average Forward and Backward +avg (16) g74.0<1>UW g74.0<16,16,1>UW g108.0<16,16,1>UW {align1}; +avg (16) g75.0<1>UW g75.0<16,16,1>UW g109.0<16,16,1>UW {align1}; +avg (16) g76.0<1>UW g76.0<16,16,1>UW g110.0<16,16,1>UW {align1}; +avg (16) g77.0<1>UW g77.0<16,16,1>UW g111.0<16,16,1>UW {align1}; +avg (16) g78.0<1>UW g78.0<16,16,1>UW g112.0<16,16,1>UW {align1}; +avg (16) g79.0<1>UW g79.0<16,16,1>UW g113.0<16,16,1>UW {align1}; +avg (16) g80.0<1>UW g80.0<16,16,1>UW g114.0<16,16,1>UW {align1}; +avg (16) g81.0<1>UW g81.0<16,16,1>UW g115.0<16,16,1>UW {align1}; + +field_addidct: +include(`field_addidct.g4i') +out: +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b new file mode 100644 index 000000000..181e77620 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b @@ -0,0 +1,797 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10740, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10780, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b107c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10800, 0x00000000 }, + { 0x00802001, 0x2e800021, 0x00b10840, 0x00000000 }, + { 0x00802001, 0x2ec00021, 0x00b10880, 0x00000000 }, + { 0x00802001, 0x2f000021, 0x00b108c0, 0x00000000 }, + { 0x00802001, 0x2f400021, 0x00b10900, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00800042, 0x27402529, 0x00b10740, 0x00b10d80 }, + { 0x00800042, 0x27602529, 0x00b10760, 0x00b10da0 }, + { 0x00800042, 0x27802529, 0x00b10780, 0x00b10dc0 }, + { 0x00800042, 0x27a02529, 0x00b107a0, 0x00b10de0 }, + { 0x00800042, 0x27c02529, 0x00b107c0, 0x00b10e00 }, + { 0x00800042, 0x27e02529, 0x00b107e0, 0x00b10e20 }, + { 0x00800042, 0x28002529, 0x00b10800, 0x00b10e40 }, + { 0x00800042, 0x28202529, 0x00b10820, 0x00b10e60 }, + { 0x00800042, 0x28402529, 0x00b10840, 0x00b10e80 }, + { 0x00800042, 0x28602529, 0x00b10860, 0x00b10ea0 }, + { 0x00800042, 0x28802529, 0x00b10880, 0x00b10ec0 }, + { 0x00800042, 0x28a02529, 0x00b108a0, 0x00b10ee0 }, + { 0x00800042, 0x28c02529, 0x00b108c0, 0x00b10f00 }, + { 0x00800042, 0x28e02529, 0x00b108e0, 0x00b10f20 }, + { 0x00800042, 0x29002529, 0x00b10900, 0x00b10f40 }, + { 0x00800042, 0x29202529, 0x00b10920, 0x00b10f60 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10940, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10980, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b109c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10a00, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00800042, 0x29402529, 0x00b10940, 0x00b10d80 }, + { 0x00800042, 0x29602529, 0x00b10960, 0x00b10da0 }, + { 0x00800042, 0x29802529, 0x00b10980, 0x00b10dc0 }, + { 0x00800042, 0x29a02529, 0x00b109a0, 0x00b10de0 }, + { 0x00800042, 0x29c02529, 0x00b109c0, 0x00b10e00 }, + { 0x00800042, 0x29e02529, 0x00b109e0, 0x00b10e20 }, + { 0x00800042, 0x2a002529, 0x00b10a00, 0x00b10e40 }, + { 0x00800042, 0x2a202529, 0x00b10a20, 0x00b10e60 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b.gen5 new file mode 100644 index 000000000..70dd7b36a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect.g4b.gen5 @@ -0,0 +1,797 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10740, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10780, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b107c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10800, 0x00000000 }, + { 0x00802001, 0x2e800021, 0x00b10840, 0x00000000 }, + { 0x00802001, 0x2ec00021, 0x00b10880, 0x00000000 }, + { 0x00802001, 0x2f000021, 0x00b108c0, 0x00000000 }, + { 0x00802001, 0x2f400021, 0x00b10900, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00800042, 0x27402529, 0x00b10740, 0x00b10d80 }, + { 0x00800042, 0x27602529, 0x00b10760, 0x00b10da0 }, + { 0x00800042, 0x27802529, 0x00b10780, 0x00b10dc0 }, + { 0x00800042, 0x27a02529, 0x00b107a0, 0x00b10de0 }, + { 0x00800042, 0x27c02529, 0x00b107c0, 0x00b10e00 }, + { 0x00800042, 0x27e02529, 0x00b107e0, 0x00b10e20 }, + { 0x00800042, 0x28002529, 0x00b10800, 0x00b10e40 }, + { 0x00800042, 0x28202529, 0x00b10820, 0x00b10e60 }, + { 0x00800042, 0x28402529, 0x00b10840, 0x00b10e80 }, + { 0x00800042, 0x28602529, 0x00b10860, 0x00b10ea0 }, + { 0x00800042, 0x28802529, 0x00b10880, 0x00b10ec0 }, + { 0x00800042, 0x28a02529, 0x00b108a0, 0x00b10ee0 }, + { 0x00800042, 0x28c02529, 0x00b108c0, 0x00b10f00 }, + { 0x00800042, 0x28e02529, 0x00b108e0, 0x00b10f20 }, + { 0x00800042, 0x29002529, 0x00b10900, 0x00b10f40 }, + { 0x00800042, 0x29202529, 0x00b10920, 0x00b10f60 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10940, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10980, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b109c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10a00, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00800042, 0x29402529, 0x00b10940, 0x00b10d80 }, + { 0x00800042, 0x29602529, 0x00b10960, 0x00b10da0 }, + { 0x00800042, 0x29802529, 0x00b10980, 0x00b10dc0 }, + { 0x00800042, 0x29a02529, 0x00b109a0, 0x00b10de0 }, + { 0x00800042, 0x29c02529, 0x00b109c0, 0x00b10e00 }, + { 0x00800042, 0x29e02529, 0x00b109e0, 0x00b10e20 }, + { 0x00800042, 0x2a002529, 0x00b10a00, 0x00b10e40 }, + { 0x00800042, 0x2a202529, 0x00b10a20, 0x00b10e60 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4a new file mode 100644 index 000000000..e4fc17884 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4a @@ -0,0 +1,31 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ + +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +define(`UV_red',`0xffffffffUD') +define(`UV_white',`0x7f7f7f7fUD') +define(`UV_green',`0x00000000UD') +mov(2) g6.0<1>UD g82.12<2,2,1>UW {align1}; +mov(1) g6.8<1>UD 0x000f000fUD { align1 }; +mov(16) m1<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m3<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m5<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m7<1>UD 0xFFFFFFFFUD {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(0, 0, 2, 0) mlen 9 rlen 0 { align1 }; +/*Fill U buffer & V buffer with 0x7F*/ +shr (2) g6.0<1>UD g82.12<2,2,1>UW 1UW {align1}; +mov(1) g6.8<1>UD 0x00070007UD { align1 }; +mov (16) m1<1>UD UV_white {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b new file mode 100644 index 000000000..9d95f70b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05902000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302001 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b.gen5 new file mode 100644 index 000000000..b12bddc0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_bidirect_16x8.g4b.gen5 @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x12082000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082001 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4a new file mode 100644 index 000000000..611cf0c36 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4a @@ -0,0 +1,116 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ + +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +and.nz (1) null g82.2<1,1,1>UW 0x0800UW {align1}; //second field-picture? +(f0) jmpi first_field_picture; + +and (1) g32.0<1>UW g82.10<1,1,1>UW 0x0003UW {align1}; +cmp.e (1) null g32.0<1,1,1>UW 0x0002UW {align1}; //bottom field? +(f0) jmpi bottom_field; + +top_field: +and.z (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select forward +(f0) jmpi first_field_picture; //second field-picture top field from top +mov (1) g32.28<1>UD 1UD {align1}; +jmpi first_field_picture; //second field-picture top field from bottom + +bottom_field: +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select forward +(f0) jmpi first_field_picture; //second field-picture bottom field from bottom +mov (1) g32.28<1>UD 0UD {align1}; +jmpi second_field_picture; //second field-picture bottom field from top + +//Y of top field +first_field_picture: +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select forward +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface',`4') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_y.g4i') +//UV of top field +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +mov (1) g32.28<1>UD 0UD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select forward +(f0) mov (1) g32.28<1>UD 1UD {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1}; +define(`surface_u', `5') +define(`surface_v', `6') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_uv.g4i') +jmpi field_addidct; + +second_field_picture: +//Y of bottom field +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +define(`surface',`3') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_y.g4i') +//UV of bottom field +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `10') +define(`surface_v', `11') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`field_motion_uv.g4i') + +field_addidct: +include(`field_addidct.g4i') +out: +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b new file mode 100644 index 000000000..aa059f1c8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b @@ -0,0 +1,768 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000005, 0x24002d29, 0x00210a4a, 0x00030003 }, + { 0x01000010, 0x20002d3c, 0x00210400, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x01000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000014a }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000141 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000039 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a003 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000037 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001f }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0414a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0411a00a }, + { 0x00800031, 0x26401d29, 0x008d0400, 0x0411a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a00a }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a00b }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b.gen5 new file mode 100644 index 000000000..4867a5e5f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward.g4b.gen5 @@ -0,0 +1,768 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000005, 0x24002d29, 0x00210a4a, 0x00030003 }, + { 0x01000010, 0x20002d3c, 0x00210400, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x01000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000294 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x241c0061, 0x00000000, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010001, 0x241c0061, 0x00000000, 0x00000001 }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x00000040, 0x24040421, 0x00210404, 0x0021041c }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000282 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d4 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10500 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10540 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10580 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c0 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10600 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10640 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10680 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b10501 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10541 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10581 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b105c1 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10601 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10641 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b10681 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b106c1 }, + { 0x00800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x00800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x00800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x00800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x00800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x00800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x00800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x00800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800040, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10500 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10540 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10580 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c0 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10600 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10640 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10680 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b10501 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10541 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10581 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b105c1 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10601 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10641 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b10681 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x00800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x00800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x00800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x00800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x00800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x00800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x00800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x00800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a4 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b10681 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10501 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10541 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b10581 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b105c1 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10601 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10641 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b10681 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000072 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800042, 0x27404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x27604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x27804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x27a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x27c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x27e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x28004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x28204629, 0x00b10680, 0x00b106c0 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a003 }, + { 0x00800042, 0x28404629, 0x00b104c0, 0x00b10500 }, + { 0x00800042, 0x28604629, 0x00b10500, 0x00b10540 }, + { 0x00800042, 0x28804629, 0x00b10540, 0x00b10580 }, + { 0x00800042, 0x28a04629, 0x00b10580, 0x00b105c0 }, + { 0x00800042, 0x28c04629, 0x00b105c0, 0x00b10600 }, + { 0x00800042, 0x28e04629, 0x00b10600, 0x00b10640 }, + { 0x00800042, 0x29004629, 0x00b10640, 0x00b10680 }, + { 0x00800042, 0x29204629, 0x00b10680, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b10680, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a003 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a003 }, + { 0x00800001, 0x28400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b10680, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000009, 0x24040c21, 0x00210404, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b8 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600040, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0520 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0540 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0560 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0580 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0521 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0541 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d0561 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d0581 }, + { 0x00600040, 0x29c04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29d04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x29e04629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x29f04629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0600 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0620 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0640 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05e1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d0601 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d0621 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0641 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600040, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600040, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0520 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0540 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0560 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0580 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d0521 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0541 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0561 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0581 }, + { 0x00600040, 0x2a004629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x2a104629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a204629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a304629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e0 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0600 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0620 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0640 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d05e1 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0601 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0621 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0641 }, + { 0x00a02008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00a02008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00a02008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00a02008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0501 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0521 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0541 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0561 }, + { 0x00600042, 0x2a004629, 0x008d0580, 0x008d0581 }, + { 0x00600042, 0x2a104629, 0x008d05a0, 0x008d05a1 }, + { 0x00600042, 0x2a204629, 0x008d05c0, 0x008d05c1 }, + { 0x00600042, 0x2a304629, 0x008d05e0, 0x008d05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006e }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000003e }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600042, 0x29404629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29504629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29604629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29704629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x29c04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29d04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x29e04629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x29f04629, 0x008d0620, 0x008d0640 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0248a00b }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000000f }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0218a00a }, + { 0x00800031, 0x26401d29, 0x408d0400, 0x0218a00b }, + { 0x00600042, 0x29804629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29904629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29a04629, 0x008d0540, 0x008d0560 }, + { 0x00600042, 0x29b04629, 0x008d0560, 0x008d0580 }, + { 0x00600042, 0x2a004629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x2a104629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a204629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a304629, 0x008d0620, 0x008d0640 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600001, 0x29400229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29500229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29600229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29700229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x29c00229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x29d00229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x29e00229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x29f00229, 0x008d05e0, 0x00000000 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a00a }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a00b }, + { 0x00600001, 0x29800229, 0x008d0500, 0x00000000 }, + { 0x00600001, 0x29900229, 0x008d0520, 0x00000000 }, + { 0x00600001, 0x29a00229, 0x008d0540, 0x00000000 }, + { 0x00600001, 0x29b00229, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x2a000229, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x2a100229, 0x008d05a0, 0x00000000 }, + { 0x00600001, 0x2a200229, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x2a300229, 0x008d05e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4a new file mode 100644 index 000000000..2052481b8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4a @@ -0,0 +1,31 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +define(`UV_red',`0xffffffffUD') +define(`UV_white',`0x7f7f7f7fUD') +define(`UV_green',`0x00000000UD') +mov(2) g6.0<1>UD g82.12<2,2,1>UW {align1}; +mov(1) g6.8<1>UD 0x000f000fUD { align1 }; +mov(16) m1<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m3<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m5<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m7<1>UD 0xFFFFFFFFUD {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(0, 0, 2, 0) mlen 9 rlen 0 { align1 }; +/*Fill U buffer & V buffer with 0x7F*/ +shr (2) g6.0<1>UD g82.12<2,2,1>UW 1UW {align1}; +mov(1) g6.8<1>UD 0x00070007UD { align1 }; +mov (16) m1<1>UD UV_white {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b new file mode 100644 index 000000000..9d95f70b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05902000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d00c0, 0x05302001 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b.gen5 new file mode 100644 index 000000000..b12bddc0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_forward_16x8.g4b.gen5 @@ -0,0 +1,15 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00200001, 0x20c00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x000f000f }, + { 0x00802001, 0x20200062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20600062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20a00062, 0x00000000, 0xffffffff }, + { 0x00802001, 0x20e00062, 0x00000000, 0xffffffff }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x12082000 }, + { 0x00200008, 0x20c02d21, 0x00450a4c, 0x00010001 }, + { 0x00000001, 0x20c80061, 0x00000000, 0x00070007 }, + { 0x00802001, 0x20200062, 0x00000000, 0x7f7f7f7f }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x508d00c0, 0x06082001 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4a new file mode 100644 index 000000000..e85ec85c9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4a @@ -0,0 +1,209 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* + GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT tab + g31: read and write message descriptor + g32~g55:DCT data + g58~g81:reference data + g82: thread payload + g83~g106:IDCT data +*/ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; + +include(`iq_intra.g4i') + +//defined for idct +define(`ROW_SHIFT', `11UD') +define(`ROW_ADD', `0x400UD') +define(`COL_SHIFT', `20UD') +define(`COL_ADD', `0x80000UD') + +mov (1) a0.0<1>UD 0x06F006E0UD {align1}; //0x06F006E0UD+0x00200020UD=0x07100700UD (g56.0 and g56.16) + +//Y0 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g83.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g84.0<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g85.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g86.0<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g87.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g88.0<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g89.0<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g90.0<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y1 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g83.16<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g84.16<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g85.16<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g86.16<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g87.16<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g88.16<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g89.16<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g90.16<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y2 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g91.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g92.0<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g93.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g94.0<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g95.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g96.0<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g97.0<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g98.0<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y3 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g91.16<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g92.16<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g93.16<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g94.16<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g95.16<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g96.16<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g97.16<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g98.16<1>W g39.0<16,8,2>W 128UW {align1}; + +//U +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (16) g99.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (16) g100.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (16) g101.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (16) g102.0<1>W g38.0<16,8,2>W 128UW {align1}; + +//V +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (16) g103.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (16) g104.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (16) g105.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (16) g106.0<1>W g38.0<16,8,2>W 128UW {align1}; + +//send msg +mov (1) g31.8<1>UD 0x00F000FUD {align1}; +mov.sat (16) g83.0<2>UB g83.0<16,16,1>W {align1}; +mov.sat (16) g84.0<2>UB g84.0<16,16,1>W {align1}; +mov.sat (16) g85.0<2>UB g85.0<16,16,1>W {align1}; +mov.sat (16) g86.0<2>UB g86.0<16,16,1>W {align1}; +mov.sat (16) g87.0<2>UB g87.0<16,16,1>W {align1}; +mov.sat (16) g88.0<2>UB g88.0<16,16,1>W {align1}; +mov.sat (16) g89.0<2>UB g89.0<16,16,1>W {align1}; +mov.sat (16) g90.0<2>UB g90.0<16,16,1>W {align1}; +mov.sat (16) g91.0<2>UB g91.0<16,16,1>W {align1}; +mov.sat (16) g92.0<2>UB g92.0<16,16,1>W {align1}; +mov.sat (16) g93.0<2>UB g93.0<16,16,1>W {align1}; +mov.sat (16) g94.0<2>UB g94.0<16,16,1>W {align1}; +mov.sat (16) g95.0<2>UB g95.0<16,16,1>W {align1}; +mov.sat (16) g96.0<2>UB g96.0<16,16,1>W {align1}; +mov.sat (16) g97.0<2>UB g97.0<16,16,1>W {align1}; +mov.sat (16) g98.0<2>UB g98.0<16,16,1>W {align1}; + +and.nz (1) null g82.2<1,1,1>UW 0x20UW{align1}; +(f0) jmpi field_dct; + +mov (16) m1.0<1>UB g83.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g84.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g85.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g86.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g87.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g88.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g89.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g90.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g91.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g92.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g93.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g94.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g95.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g96.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g97.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g98.0<16,16,2>UB {align1}; +jmpi write_back; + +field_dct: +mov (16) m1.0<1>UB g83.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g91.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g84.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g92.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g85.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g93.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g86.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g94.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g87.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g95.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g88.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g96.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g89.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g97.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g90.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g98.0<16,16,2>UB {align1}; + +write_back: +send (16) 0 acc0<1>UW g31<8,8,1>UW write(0,0,2,0) mlen 9 rlen 0 {align1}; + +//U +mov (1) g31.8<1>UD 0x0070007UD { align1 }; +shr (2) g31.0<1>UD g82.12<2,2,1>UW 1D {align1}; +mov.sat (16) g99.0<2>UB g99.0<16,16,1>W {align1}; +mov.sat (16) g100.0<2>UB g100.0<16,16,1>W {align1}; +mov.sat (16) g101.0<2>UB g101.0<16,16,1>W {align1}; +mov.sat (16) g102.0<2>UB g102.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g99.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g100.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g101.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g102.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +//V +mov.sat (16) g103.0<2>UB g103.0<16,16,1>W {align1}; +mov.sat (16) g104.0<2>UB g104.0<16,16,1>W {align1}; +mov.sat (16) g105.0<2>UB g105.0<16,16,1>W {align1}; +mov.sat (16) g106.0<2>UB g106.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g103.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g104.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g105.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g106.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +OUT: +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; + +include(`do_iq_intra.g4i') +include(`idct.g4i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b new file mode 100644 index 000000000..4c1c8c44d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b @@ -0,0 +1,313 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x00000005, 0x2da42d29, 0x00210a48, 0x60006000 }, + { 0x00000008, 0x2da42d29, 0x00210da4, 0x000d000d }, + { 0x00000001, 0x2da60169, 0x00000000, 0x00080008 }, + { 0x00000008, 0x2da42529, 0x00210da6, 0x00210da4 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000009 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000005 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000001 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10020, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10030, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10040, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10050, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a1 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009b }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000095 }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000008f }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000089 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000083 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000008f }, + { 0x00600040, 0x2a602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2aa02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ac02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2ae02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000085 }, + { 0x00600040, 0x2a702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ab02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ad02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2af02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000007b }, + { 0x00600040, 0x2b602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ba02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bc02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2be02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000071 }, + { 0x00600040, 0x2b702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2bb02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bd02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2bf02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000067 }, + { 0x00800040, 0x2c602dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2c802dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2ca02dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2cc02dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000061 }, + { 0x00800040, 0x2ce02dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2d002dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2d202dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2d402dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x4a6001b1, 0x00b10a60, 0x00000000 }, + { 0x80800001, 0x4a8001b1, 0x00b10a80, 0x00000000 }, + { 0x80800001, 0x4aa001b1, 0x00b10aa0, 0x00000000 }, + { 0x80800001, 0x4ac001b1, 0x00b10ac0, 0x00000000 }, + { 0x80800001, 0x4ae001b1, 0x00b10ae0, 0x00000000 }, + { 0x80800001, 0x4b0001b1, 0x00b10b00, 0x00000000 }, + { 0x80800001, 0x4b2001b1, 0x00b10b20, 0x00000000 }, + { 0x80800001, 0x4b4001b1, 0x00b10b40, 0x00000000 }, + { 0x80800001, 0x4b6001b1, 0x00b10b60, 0x00000000 }, + { 0x80800001, 0x4b8001b1, 0x00b10b80, 0x00000000 }, + { 0x80800001, 0x4ba001b1, 0x00b10ba0, 0x00000000 }, + { 0x80800001, 0x4bc001b1, 0x00b10bc0, 0x00000000 }, + { 0x80800001, 0x4be001b1, 0x00b10be0, 0x00000000 }, + { 0x80800001, 0x4c0001b1, 0x00b10c00, 0x00000000 }, + { 0x80800001, 0x4c2001b1, 0x00b10c20, 0x00000000 }, + { 0x80800001, 0x4c4001b1, 0x00b10c40, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01d21, 0x00450a4c, 0x00000001 }, + { 0x80800001, 0x4c6001b1, 0x00b10c60, 0x00000000 }, + { 0x80800001, 0x4c8001b1, 0x00b10c80, 0x00000000 }, + { 0x80800001, 0x4ca001b1, 0x00b10ca0, 0x00000000 }, + { 0x80800001, 0x4cc001b1, 0x00b10cc0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20c60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20c80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20ca0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20cc0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x80800001, 0x4ce001b1, 0x00b10ce0, 0x00000000 }, + { 0x80800001, 0x4d0001b1, 0x00b10d00, 0x00000000 }, + { 0x80800001, 0x4d2001b1, 0x00b10d20, 0x00000000 }, + { 0x80800001, 0x4d4001b1, 0x00b10d40, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20ce0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20d00, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20d20, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20d40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00000001, 0x2de001ad, 0x00218000, 0x00000000 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000041, 0x2e8025a5, 0x00210de0, 0x00210da4 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b.gen5 new file mode 100644 index 000000000..957f6fc3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_intra.g4b.gen5 @@ -0,0 +1,313 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x00000005, 0x2da42d29, 0x00210a48, 0x60006000 }, + { 0x00000008, 0x2da42d29, 0x00210da4, 0x000d000d }, + { 0x00000001, 0x2da60169, 0x00000000, 0x00080008 }, + { 0x00000008, 0x2da42529, 0x00210da6, 0x00210da4 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10020, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10030, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10040, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10050, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000142 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000136 }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000012a }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000112 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000106 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x00600040, 0x2a602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2aa02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ac02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2ae02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000010a }, + { 0x00600040, 0x2a702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ab02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ad02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2af02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000f6 }, + { 0x00600040, 0x2b602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ba02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bc02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2be02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000e2 }, + { 0x00600040, 0x2b702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2bb02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bd02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2bf02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000ce }, + { 0x00800040, 0x2c602dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2c802dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2ca02dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2cc02dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000c2 }, + { 0x00800040, 0x2ce02dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2d002dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2d202dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2d402dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x4a6001b1, 0x00b10a60, 0x00000000 }, + { 0x80800001, 0x4a8001b1, 0x00b10a80, 0x00000000 }, + { 0x80800001, 0x4aa001b1, 0x00b10aa0, 0x00000000 }, + { 0x80800001, 0x4ac001b1, 0x00b10ac0, 0x00000000 }, + { 0x80800001, 0x4ae001b1, 0x00b10ae0, 0x00000000 }, + { 0x80800001, 0x4b0001b1, 0x00b10b00, 0x00000000 }, + { 0x80800001, 0x4b2001b1, 0x00b10b20, 0x00000000 }, + { 0x80800001, 0x4b4001b1, 0x00b10b40, 0x00000000 }, + { 0x80800001, 0x4b6001b1, 0x00b10b60, 0x00000000 }, + { 0x80800001, 0x4b8001b1, 0x00b10b80, 0x00000000 }, + { 0x80800001, 0x4ba001b1, 0x00b10ba0, 0x00000000 }, + { 0x80800001, 0x4bc001b1, 0x00b10bc0, 0x00000000 }, + { 0x80800001, 0x4be001b1, 0x00b10be0, 0x00000000 }, + { 0x80800001, 0x4c0001b1, 0x00b10c00, 0x00000000 }, + { 0x80800001, 0x4c2001b1, 0x00b10c20, 0x00000000 }, + { 0x80800001, 0x4c4001b1, 0x00b10c40, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01d21, 0x00450a4c, 0x00000001 }, + { 0x80800001, 0x4c6001b1, 0x00b10c60, 0x00000000 }, + { 0x80800001, 0x4c8001b1, 0x00b10c80, 0x00000000 }, + { 0x80800001, 0x4ca001b1, 0x00b10ca0, 0x00000000 }, + { 0x80800001, 0x4cc001b1, 0x00b10cc0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20c60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20c80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20ca0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20cc0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x80800001, 0x4ce001b1, 0x00b10ce0, 0x00000000 }, + { 0x80800001, 0x4d0001b1, 0x00b10d00, 0x00000000 }, + { 0x80800001, 0x4d2001b1, 0x00b10d20, 0x00000000 }, + { 0x80800001, 0x4d4001b1, 0x00b10d40, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20ce0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20d00, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20d20, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20d40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00000001, 0x2de001ad, 0x00218000, 0x00000000 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000041, 0x2e8025a5, 0x00210de0, 0x00210da4 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_uv.g4i new file mode 100644 index 000000000..201ee51fb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_uv.g4i @@ -0,0 +1,47 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ + + and.z (1) null mv1<1,1,1>W 2W {align1}; + (f0) jmpi L1; + and.z (1) null mv2<1,1,1>W 2W {align1}; + (f0) jmpi L2; + include(`field_read_x1y1_uv.g4i') + jmpi L5; +L2: + include(`field_read_x1y0_uv.g4i') + jmpi L5; +L1: + and.z (1) null mv2<1,1,1>W 2W {align1}; + (f0) jmpi L4; + include(`field_read_x0y1_uv.g4i') + jmpi L5; +L4: + include(`field_read_x0y0_uv.g4i') +L5: + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_y.g4i new file mode 100644 index 000000000..20adb3107 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_motion_y.g4i @@ -0,0 +1,45 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ + and.z (1) null mv1<1,1,1>W 1UW {align1}; + (f0) jmpi L1; + and.z (1) null mv2<1,1,1>W 1UW {align1}; + (f0) jmpi L2; + include(`field_read_x1y1_y.g4i') + jmpi L5; +L2: + include(`field_read_x1y0_y.g4i') + jmpi L5; +L1: + and.z (1) null mv2<1,1,1>W 1UW {align1}; + (f0) jmpi L4; + include(`field_read_x0y1_y.g4i') + jmpi L5; +L4: + include(`field_read_x0y0_y.g4i') +L5: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_uv.g4i new file mode 100644 index 000000000..ff439e5e6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_uv.g4i @@ -0,0 +1,65 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ + +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +//U +mov (8) g74.0<1>UW g40.0<8,8,1>UB {align1}; +mov (8) g74.16<1>UW g41.0<8,8,1>UB {align1}; +mov (8) g75.0<1>UW g42.0<8,8,1>UB {align1}; +mov (8) g75.16<1>UW g43.0<8,8,1>UB {align1}; +//V +mov (8) g78.0<1>UW g44.0<8,8,1>UB {align1}; +mov (8) g78.16<1>UW g45.0<8,8,1>UB {align1}; +mov (8) g79.0<1>UW g46.0<8,8,1>UB {align1}; +mov (8) g79.16<1>UW g47.0<8,8,1>UB {align1}; + +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +//U +mov (8) g76.0<1>UW g40.0<8,8,1>UB {align1}; +mov (8) g76.16<1>UW g41.0<8,8,1>UB {align1}; +mov (8) g77.0<1>UW g42.0<8,8,1>UB {align1}; +mov (8) g77.16<1>UW g43.0<8,8,1>UB {align1}; +//V +mov (8) g80.0<1>UW g44.0<8,8,1>UB {align1}; +mov (8) g80.16<1>UW g45.0<8,8,1>UB {align1}; +mov (8) g81.0<1>UW g46.0<8,8,1>UB {align1}; +mov (8) g81.16<1>UW g47.0<8,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_y.g4i new file mode 100644 index 000000000..3b0da9c02 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y0_y.g4i @@ -0,0 +1,62 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g32: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +mov (16) g58.0<1>UW g38.0<16,16,1>UB {align1}; +mov (16) g59.0<1>UW g40.0<16,16,1>UB {align1}; +mov (16) g60.0<1>UW g42.0<16,16,1>UB {align1}; +mov (16) g61.0<1>UW g44.0<16,16,1>UB {align1}; +mov (16) g62.0<1>UW g46.0<16,16,1>UB {align1}; +mov (16) g63.0<1>UW g48.0<16,16,1>UB {align1}; +mov (16) g64.0<1>UW g50.0<16,16,1>UB {align1}; +mov (16) g65.0<1>UW g52.0<16,16,1>UB {align1}; + +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +mov (16) g66.0<1>UW g38.0<16,16,1>UB {align1}; +mov (16) g67.0<1>UW g40.0<16,16,1>UB {align1}; +mov (16) g68.0<1>UW g42.0<16,16,1>UB {align1}; +mov (16) g69.0<1>UW g44.0<16,16,1>UB {align1}; +mov (16) g70.0<1>UW g46.0<16,16,1>UB {align1}; +mov (16) g71.0<1>UW g48.0<16,16,1>UB {align1}; +mov (16) g72.0<1>UW g50.0<16,16,1>UB {align1}; +mov (16) g73.0<1>UW g52.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_uv.g4i new file mode 100644 index 000000000..b72507a60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_uv.g4i @@ -0,0 +1,45 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x0FUD {align1}; +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g50.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V +//U +avg (8) g74.0<1>UW g40.0<8,8,1>UB g41.0<8,8,1>UB {align1}; +avg (8) g74.16<1>UW g41.0<8,8,1>UB g42.0<8,8,1>UB {align1}; +avg (8) g75.0<1>UW g42.0<8,8,1>UB g43.0<8,8,1>UB {align1}; +avg (8) g75.16<1>UW g43.0<8,8,1>UB g44.0<8,8,1>UB {align1}; +//V +avg (8) g78.0<1>UW g46.0<8,8,1>UB g47.0<8,8,1>UB {align1}; +avg (8) g78.16<1>UW g47.0<8,8,1>UB g48.0<8,8,1>UB {align1}; +avg (8) g79.0<1>UW g48.0<8,8,1>UB g49.0<8,8,1>UB {align1}; +avg (8) g79.16<1>UW g49.0<8,8,1>UB g50.0<8,8,1>UB {align1}; + +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x0FUD {align1}; +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g50.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V +//U +avg (8) g76.0<1>UW g40.0<8,8,1>UB g41.0<8,8,1>UB {align1}; +avg (8) g76.16<1>UW g41.0<8,8,1>UB g42.0<8,8,1>UB {align1}; +avg (8) g77.0<1>UW g42.0<8,8,1>UB g43.0<8,8,1>UB {align1}; +avg (8) g77.16<1>UW g43.0<8,8,1>UB g44.0<8,8,1>UB {align1}; +//V +avg (8) g80.0<1>UW g46.0<8,8,1>UB g47.0<8,8,1>UB {align1}; +avg (8) g80.16<1>UW g47.0<8,8,1>UB g48.0<8,8,1>UB {align1}; +avg (8) g81.0<1>UW g48.0<8,8,1>UB g49.0<8,8,1>UB {align1}; +avg (8) g81.16<1>UW g49.0<8,8,1>UB g50.0<8,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_y.g4i new file mode 100644 index 000000000..98a09edc9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x0y1_y.g4i @@ -0,0 +1,68 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +avg (16) g58.0<1>UW g38.0<16,16,1>UB g40.0<16,16,1>UB {align1}; +avg (16) g59.0<1>UW g40.0<16,16,1>UB g42.0<16,16,1>UB {align1}; +avg (16) g60.0<1>UW g42.0<16,16,1>UB g44.0<16,16,1>UB {align1}; +avg (16) g61.0<1>UW g44.0<16,16,1>UB g46.0<16,16,1>UB {align1}; +avg (16) g62.0<1>UW g46.0<16,16,1>UB g48.0<16,16,1>UB {align1}; +avg (16) g63.0<1>UW g48.0<16,16,1>UB g50.0<16,16,1>UB {align1}; +avg (16) g64.0<1>UW g50.0<16,16,1>UB g52.0<16,16,1>UB {align1}; +avg (16) g65.0<1>UW g52.0<16,16,1>UB g54.0<16,16,1>UB {align1}; + +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +avg (16) g66.0<1>UW g38.0<16,16,1>UB g40.0<16,16,1>UB {align1}; +avg (16) g67.0<1>UW g40.0<16,16,1>UB g42.0<16,16,1>UB {align1}; +avg (16) g68.0<1>UW g42.0<16,16,1>UB g44.0<16,16,1>UB {align1}; +avg (16) g69.0<1>UW g44.0<16,16,1>UB g46.0<16,16,1>UB {align1}; +avg (16) g70.0<1>UW g46.0<16,16,1>UB g48.0<16,16,1>UB {align1}; +avg (16) g71.0<1>UW g48.0<16,16,1>UB g50.0<16,16,1>UB {align1}; +avg (16) g72.0<1>UW g50.0<16,16,1>UB g52.0<16,16,1>UB {align1}; +avg (16) g73.0<1>UW g52.0<16,16,1>UB g54.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_uv.g4i new file mode 100644 index 000000000..8e318d7a9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_uv.g4i @@ -0,0 +1,37 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +//U +avg (8) g74.0<1>UW g40.0<8,8,1>UB g40.1<8,8,1>UB {align1}; +avg (8) g74.16<1>UW g41.0<8,8,1>UB g41.1<8,8,1>UB {align1}; +avg (8) g75.0<1>UW g42.0<8,8,1>UB g42.1<8,8,1>UB {align1}; +avg (8) g75.16<1>UW g43.0<8,8,1>UB g43.1<8,8,1>UB {align1}; +//V +avg (8) g78.0<1>UW g44.0<8,8,1>UB g44.1<8,8,1>UB {align1}; +avg (8) g78.16<1>UW g45.0<8,8,1>UB g45.1<8,8,1>UB {align1}; +avg (8) g79.0<1>UW g46.0<8,8,1>UB g46.1<8,8,1>UB {align1}; +avg (8) g79.16<1>UW g47.0<8,8,1>UB g47.1<8,8,1>UB {align1}; + +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +//U +avg (8) g76.0<1>UW g40.0<8,8,1>UB g40.1<8,8,1>UB {align1}; +avg (8) g76.16<1>UW g41.0<8,8,1>UB g41.1<8,8,1>UB {align1}; +avg (8) g77.0<1>UW g42.0<8,8,1>UB g42.1<8,8,1>UB {align1}; +avg (8) g77.16<1>UW g43.0<8,8,1>UB g43.1<8,8,1>UB {align1}; +//V +avg (8) g80.0<1>UW g44.0<8,8,1>UB g44.1<8,8,1>UB {align1}; +avg (8) g80.16<1>UW g45.0<8,8,1>UB g45.1<8,8,1>UB {align1}; +avg (8) g81.0<1>UW g46.0<8,8,1>UB g46.1<8,8,1>UB {align1}; +avg (8) g81.16<1>UW g47.0<8,8,1>UB g47.1<8,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_y.g4i new file mode 100644 index 000000000..0d2fbb1a4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y0_y.g4i @@ -0,0 +1,62 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +avg (16) g58.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +avg (16) g59.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +avg (16) g60.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +avg (16) g61.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +avg (16) g62.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +avg (16) g63.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +avg (16) g64.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +avg (16) g65.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; + +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +avg (16) g66.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +avg (16) g67.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +avg (16) g68.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +avg (16) g69.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +avg (16) g70.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +avg (16) g71.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +avg (16) g72.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +avg (16) g73.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_uv.g4i new file mode 100644 index 000000000..dd8877af3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_uv.g4i @@ -0,0 +1,91 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x0FUD {align1}; +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g50.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V +//U +add (8) g74.0<1>UW g40.0<8,8,1>UB g40.1<8,8,1>UB {align1}; +add (8) g74.16<1>UW g41.0<8,8,1>UB g41.1<8,8,1>UB {align1}; +add (8) g75.0<1>UW g42.0<8,8,1>UB g42.1<8,8,1>UB {align1}; +add (8) g75.16<1>UW g43.0<8,8,1>UB g43.1<8,8,1>UB {align1}; + +add (8) g74.0<1>UW g74.0<8,8,1>UW g41.0<8,8,1>UB {align1}; +add (8) g74.16<1>UW g74.16<8,8,1>UW g42.0<8,8,1>UB {align1}; +add (8) g75.0<1>UW g75.0<8,8,1>UW g43.0<8,8,1>UB {align1}; +add (8) g75.16<1>UW g75.16<8,8,1>UW g44.0<8,8,1>UB {align1}; + +add (8) g74.0<1>UW g74.0<8,8,1>UW g41.1<8,8,1>UB {align1}; +add (8) g74.16<1>UW g74.16<8,8,1>UW g42.1<8,8,1>UB {align1}; +add (8) g75.0<1>UW g75.0<8,8,1>UW g43.1<8,8,1>UB {align1}; +add (8) g75.16<1>UW g75.16<8,8,1>UW g44.1<8,8,1>UB {align1}; +//V +add (8) g78.0<1>UW g46.0<8,8,1>UB g46.1<8,8,1>UB {align1}; +add (8) g78.16<1>UW g47.0<8,8,1>UB g47.1<8,8,1>UB {align1}; +add (8) g79.0<1>UW g48.0<8,8,1>UB g48.1<8,8,1>UB {align1}; +add (8) g79.16<1>UW g49.0<8,8,1>UB g49.1<8,8,1>UB {align1}; + +add (8) g78.0<1>UW g78.0<8,8,1>UW g47.0<8,8,1>UB {align1}; +add (8) g78.16<1>UW g78.16<8,8,1>UW g48.0<8,8,1>UB {align1}; +add (8) g79.0<1>UW g79.0<8,8,1>UW g49.0<8,8,1>UB {align1}; +add (8) g79.16<1>UW g79.16<8,8,1>UW g50.0<8,8,1>UB {align1}; + +add (8) g78.0<1>UW g78.0<8,8,1>UW g47.1<8,8,1>UB {align1}; +add (8) g78.16<1>UW g78.16<8,8,1>UW g48.1<8,8,1>UB {align1}; +add (8) g79.0<1>UW g79.0<8,8,1>UW g49.1<8,8,1>UB {align1}; +add (8) g79.16<1>UW g79.16<8,8,1>UW g50.1<8,8,1>UB {align1}; + +mov (1) g32.8<1>UD 0x7000FUD {align1}; //8*16 +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x0FUD {align1}; +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g50.0<1>UW g32<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V +//U +add (8) g76.0<1>UW g40.0<8,8,1>UB g40.1<8,8,1>UB {align1}; +add (8) g76.16<1>UW g41.0<8,8,1>UB g41.1<8,8,1>UB {align1}; +add (8) g77.0<1>UW g42.0<8,8,1>UB g42.1<8,8,1>UB {align1}; +add (8) g77.16<1>UW g43.0<8,8,1>UB g43.1<8,8,1>UB {align1}; + +add (8) g76.0<1>UW g76.0<8,8,1>UW g41.0<8,8,1>UB {align1}; +add (8) g76.16<1>UW g76.16<8,8,1>UW g42.0<8,8,1>UB {align1}; +add (8) g77.0<1>UW g77.0<8,8,1>UW g43.0<8,8,1>UB {align1}; +add (8) g77.16<1>UW g77.16<8,8,1>UW g44.0<8,8,1>UB {align1}; + +add (8) g76.0<1>UW g76.0<8,8,1>UW g41.1<8,8,1>UB {align1}; +add (8) g76.16<1>UW g76.16<8,8,1>UW g42.1<8,8,1>UB {align1}; +add (8) g77.0<1>UW g77.0<8,8,1>UW g43.1<8,8,1>UB {align1}; +add (8) g77.16<1>UW g77.16<8,8,1>UW g44.1<8,8,1>UB {align1}; +//V +add (8) g80.0<1>UW g46.0<8,8,1>UB g46.1<8,8,1>UB {align1}; +add (8) g80.16<1>UW g47.0<8,8,1>UB g47.1<8,8,1>UB {align1}; +add (8) g81.0<1>UW g48.0<8,8,1>UB g48.1<8,8,1>UB {align1}; +add (8) g81.16<1>UW g49.0<8,8,1>UB g49.1<8,8,1>UB {align1}; + +add (8) g80.0<1>UW g80.0<8,8,1>UW g47.0<8,8,1>UB {align1}; +add (8) g80.16<1>UW g80.16<8,8,1>UW g48.0<8,8,1>UB {align1}; +add (8) g81.0<1>UW g81.0<8,8,1>UW g49.0<8,8,1>UB {align1}; +add (8) g81.16<1>UW g81.16<8,8,1>UW g50.0<8,8,1>UB {align1}; + +add (8) g80.0<1>UW g80.0<8,8,1>UW g47.1<8,8,1>UB {align1}; +add (8) g80.16<1>UW g80.16<8,8,1>UW g48.1<8,8,1>UB {align1}; +add (8) g81.0<1>UW g81.0<8,8,1>UW g49.1<8,8,1>UB {align1}; +add (8) g81.16<1>UW g81.16<8,8,1>UW g50.1<8,8,1>UB {align1}; + +shr (32) g74.0<1>UW g74.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g76.0<1>UW g76.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g78.0<1>UW g78.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g80.0<1>UW g80.0<16,16,1>UW 2UW {align1 compr}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_y.g4i new file mode 100644 index 000000000..7c28b86e6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/field_read_x1y1_y.g4i @@ -0,0 +1,123 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (16) g58.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +add (16) g59.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +add (16) g60.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +add (16) g61.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +add (16) g62.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +add (16) g63.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +add (16) g64.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +add (16) g65.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; + +add (16) g58.0<1>UW g58.0<16,16,1>UW g40.0<16,16,1>UB {align1}; +add (16) g59.0<1>UW g59.0<16,16,1>UW g42.0<16,16,1>UB {align1}; +add (16) g60.0<1>UW g60.0<16,16,1>UW g44.0<16,16,1>UB {align1}; +add (16) g61.0<1>UW g61.0<16,16,1>UW g46.0<16,16,1>UB {align1}; +add (16) g62.0<1>UW g62.0<16,16,1>UW g48.0<16,16,1>UB {align1}; +add (16) g63.0<1>UW g63.0<16,16,1>UW g50.0<16,16,1>UB {align1}; +add (16) g64.0<1>UW g64.0<16,16,1>UW g52.0<16,16,1>UB {align1}; +add (16) g65.0<1>UW g65.0<16,16,1>UW g54.0<16,16,1>UB {align1}; + +add (16) g58.0<1>UW g58.0<16,16,1>UW g40.1<16,16,1>UB {align1}; +add (16) g59.0<1>UW g59.0<16,16,1>UW g42.1<16,16,1>UB {align1}; +add (16) g60.0<1>UW g60.0<16,16,1>UW g44.1<16,16,1>UB {align1}; +add (16) g61.0<1>UW g61.0<16,16,1>UW g46.1<16,16,1>UB {align1}; +add (16) g62.0<1>UW g62.0<16,16,1>UW g48.1<16,16,1>UB {align1}; +add (16) g63.0<1>UW g63.0<16,16,1>UW g50.1<16,16,1>UB {align1}; +add (16) g64.0<1>UW g64.0<16,16,1>UW g52.1<16,16,1>UB {align1}; +add (16) g65.0<1>UW g65.0<16,16,1>UW g54.1<16,16,1>UB {align1}; + +shr (16) g58.0<1>UW g58.0<16,16,1>UW 2UW {align1}; +shr (16) g59.0<1>UW g59.0<16,16,1>UW 2UW {align1}; +shr (16) g60.0<1>UW g60.0<16,16,1>UW 2UW {align1}; +shr (16) g61.0<1>UW g61.0<16,16,1>UW 2UW {align1}; +shr (16) g62.0<1>UW g62.0<16,16,1>UW 2UW {align1}; +shr (16) g63.0<1>UW g63.0<16,16,1>UW 2UW {align1}; +shr (16) g64.0<1>UW g64.0<16,16,1>UW 2UW {align1}; +shr (16) g65.0<1>UW g65.0<16,16,1>UW 2UW {align1}; + +mov (1) g32.8<1>UD 0x07001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (16) g66.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +add (16) g67.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +add (16) g68.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +add (16) g69.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +add (16) g70.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +add (16) g71.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +add (16) g72.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +add (16) g73.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; + +add (16) g66.0<1>UW g66.0<16,16,1>UW g40.0<16,16,1>UB {align1}; +add (16) g67.0<1>UW g67.0<16,16,1>UW g42.0<16,16,1>UB {align1}; +add (16) g68.0<1>UW g68.0<16,16,1>UW g44.0<16,16,1>UB {align1}; +add (16) g69.0<1>UW g69.0<16,16,1>UW g46.0<16,16,1>UB {align1}; +add (16) g70.0<1>UW g70.0<16,16,1>UW g48.0<16,16,1>UB {align1}; +add (16) g71.0<1>UW g71.0<16,16,1>UW g50.0<16,16,1>UB {align1}; +add (16) g72.0<1>UW g72.0<16,16,1>UW g52.0<16,16,1>UB {align1}; +add (16) g73.0<1>UW g73.0<16,16,1>UW g54.0<16,16,1>UB {align1}; + +add (16) g66.0<1>UW g66.0<16,16,1>UW g40.1<16,16,1>UB {align1}; +add (16) g67.0<1>UW g67.0<16,16,1>UW g42.1<16,16,1>UB {align1}; +add (16) g68.0<1>UW g68.0<16,16,1>UW g44.1<16,16,1>UB {align1}; +add (16) g69.0<1>UW g69.0<16,16,1>UW g46.1<16,16,1>UB {align1}; +add (16) g70.0<1>UW g70.0<16,16,1>UW g48.1<16,16,1>UB {align1}; +add (16) g71.0<1>UW g71.0<16,16,1>UW g50.1<16,16,1>UB {align1}; +add (16) g72.0<1>UW g72.0<16,16,1>UW g52.1<16,16,1>UB {align1}; +add (16) g73.0<1>UW g73.0<16,16,1>UW g54.1<16,16,1>UB {align1}; + +shr (16) g66.0<1>UW g66.0<16,16,1>UW 2UW {align1}; +shr (16) g67.0<1>UW g67.0<16,16,1>UW 2UW {align1}; +shr (16) g68.0<1>UW g68.0<16,16,1>UW 2UW {align1}; +shr (16) g69.0<1>UW g69.0<16,16,1>UW 2UW {align1}; +shr (16) g70.0<1>UW g70.0<16,16,1>UW 2UW {align1}; +shr (16) g71.0<1>UW g71.0<16,16,1>UW 2UW {align1}; +shr (16) g72.0<1>UW g72.0<16,16,1>UW 2UW {align1}; +shr (16) g73.0<1>UW g73.0<16,16,1>UW 2UW {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4a new file mode 100644 index 000000000..9db50edaa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4a @@ -0,0 +1,126 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov(2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +/*field 0 of Y*/ +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`7') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`motion_field_y.g4i') +mov (8) g58.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g60.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g62.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g64.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g66.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g68.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g70.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g72.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 1 of Y*/ +asr (2) g31.14<1>W g82.28<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x8000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`7') +define(`mv1',`g82.28') +define(`mv2',`g82.30') +include(`motion_field_y.g4i') +mov (8) g59.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g61.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g63.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g65.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g67.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g69.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g71.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g73.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 0 of UV*/ +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g82.20<1>W g82.20<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `8') +define(`surface_v', `9') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`motion_field_uv.g4i') +mov (8) g74.0<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.0<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.0<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.0<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.0<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.0<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.0<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.0<1>UW g39.0<8,8,1>UW {align1}; + +/*field 1 of UV*/ +asr (2) g82.28<1>W g82.28<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.28<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x8000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`mv1',`g82.28') +define(`mv2',`g82.30') +include(`motion_field_uv.g4i') +mov (8) g74.16<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.16<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.16<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.16<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.16<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.16<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.16<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.16<1>UW g39.0<8,8,1>UW {align1}; + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b new file mode 100644 index 000000000..5d4682952 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b @@ -0,0 +1,553 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a543dad, 0x00450a54, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a5c3dad, 0x00450a5c, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b.gen5 new file mode 100644 index 000000000..18595b260 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_backward.g4b.gen5 @@ -0,0 +1,553 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a543dad, 0x00450a54, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a5c3dad, 0x00450a5c, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4a new file mode 100644 index 000000000..fdc1e838c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4a @@ -0,0 +1,213 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov(2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +/*field 0 forward prediction of Y*/ +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`4') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`motion_field_y.g4i') +mov (8) g58.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g60.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g62.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g64.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g66.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g68.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g70.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g72.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 1 forward prediction of Y*/ +asr (2) g31.14<1>W g82.24<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x4000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`4') +define(`mv1',`g82.24') +define(`mv2',`g82.26') +include(`motion_field_y.g4i') +mov (8) g59.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g61.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g63.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g65.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g67.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g69.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g71.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g73.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 0 forward prediction of UV*/ +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g82.16<1>W g82.16<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `5') +define(`surface_v', `6') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`motion_field_uv.g4i') +mov (8) g74.0<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.0<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.0<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.0<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.0<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.0<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.0<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.0<1>UW g39.0<8,8,1>UW {align1}; + +/*field 1 forward prediction of UV*/ +asr (2) g82.24<1>W g82.24<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.24<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x4000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`mv1',`g82.24') +define(`mv2',`g82.26') +include(`motion_field_uv.g4i') +mov (8) g74.16<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.16<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.16<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.16<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.16<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.16<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.16<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.16<1>UW g39.0<8,8,1>UW {align1}; + +/*field 0 backward prediction of Y*/ +mov(2) g31.0<1>UD g82.12<2,2,1>UW {align1}; + +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`7') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`motion_field_y.g4i') +avg.sat (16) g58.0<1>UW g58.0<16,16,1>UW g32.0<16,16,1>UW {align1}; +avg.sat (16) g60.0<1>UW g60.0<16,16,1>UW g33.0<16,16,1>UW {align1}; +avg.sat (16) g62.0<1>UW g62.0<16,16,1>UW g34.0<16,16,1>UW {align1}; +avg.sat (16) g64.0<1>UW g64.0<16,16,1>UW g35.0<16,16,1>UW {align1}; +avg.sat (16) g66.0<1>UW g66.0<16,16,1>UW g36.0<16,16,1>UW {align1}; +avg.sat (16) g68.0<1>UW g68.0<16,16,1>UW g37.0<16,16,1>UW {align1}; +avg.sat (16) g70.0<1>UW g70.0<16,16,1>UW g38.0<16,16,1>UW {align1}; +avg.sat (16) g72.0<1>UW g72.0<16,16,1>UW g39.0<16,16,1>UW {align1}; + +/*field 1 backward prediction of Y*/ +asr (2) g31.14<1>W g82.28<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x8000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`7') +define(`mv1',`g82.28') +define(`mv2',`g82.30') +include(`motion_field_y.g4i') +avg.sat (16) g59.0<1>UW g59.0<16,16,1>UW g32.0<16,16,1>UW {align1}; +avg.sat (16) g61.0<1>UW g61.0<16,16,1>UW g33.0<16,16,1>UW {align1}; +avg.sat (16) g63.0<1>UW g63.0<16,16,1>UW g34.0<16,16,1>UW {align1}; +avg.sat (16) g65.0<1>UW g65.0<16,16,1>UW g35.0<16,16,1>UW {align1}; +avg.sat (16) g67.0<1>UW g67.0<16,16,1>UW g36.0<16,16,1>UW {align1}; +avg.sat (16) g69.0<1>UW g69.0<16,16,1>UW g37.0<16,16,1>UW {align1}; +avg.sat (16) g71.0<1>UW g71.0<16,16,1>UW g38.0<16,16,1>UW {align1}; +avg.sat (16) g73.0<1>UW g73.0<16,16,1>UW g39.0<16,16,1>UW {align1}; + +/*field 0 backward prediction of UV*/ +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g82.20<1>W g82.20<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `8') +define(`surface_v', `9') +define(`mv1',`g82.20') +define(`mv2',`g82.22') +include(`motion_field_uv.g4i') +avg.sat (8) g74.0<1>UW g74.0<8,8,1>UW g32.0<8,8,1>UW {align1}; +avg.sat (8) g75.0<1>UW g75.0<8,8,1>UW g33.0<8,8,1>UW {align1}; +avg.sat (8) g76.0<1>UW g76.0<8,8,1>UW g34.0<8,8,1>UW {align1}; +avg.sat (8) g77.0<1>UW g77.0<8,8,1>UW g35.0<8,8,1>UW {align1}; +avg.sat (8) g78.0<1>UW g78.0<8,8,1>UW g36.0<8,8,1>UW {align1}; +avg.sat (8) g79.0<1>UW g79.0<8,8,1>UW g37.0<8,8,1>UW {align1}; +avg.sat (8) g80.0<1>UW g80.0<8,8,1>UW g38.0<8,8,1>UW {align1}; +avg.sat (8) g81.0<1>UW g81.0<8,8,1>UW g39.0<8,8,1>UW {align1}; + +/*field 1 backward prediction of UV*/ +asr (2) g82.28<1>W g82.28<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.28<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x8000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`mv1',`g82.28') +define(`mv2',`g82.30') +include(`motion_field_uv.g4i') +avg.sat (8) g74.16<1>UW g74.16<8,8,1>UW g32.0<8,8,1>UW {align1}; +avg.sat (8) g75.16<1>UW g75.16<8,8,1>UW g33.0<8,8,1>UW {align1}; +avg.sat (8) g76.16<1>UW g76.16<8,8,1>UW g34.0<8,8,1>UW {align1}; +avg.sat (8) g77.16<1>UW g77.16<8,8,1>UW g35.0<8,8,1>UW {align1}; +avg.sat (8) g78.16<1>UW g78.16<8,8,1>UW g36.0<8,8,1>UW {align1}; +avg.sat (8) g79.16<1>UW g79.16<8,8,1>UW g37.0<8,8,1>UW {align1}; +avg.sat (8) g80.16<1>UW g80.16<8,8,1>UW g38.0<8,8,1>UW {align1}; +avg.sat (8) g81.16<1>UW g81.16<8,8,1>UW g39.0<8,8,1>UW {align1}; + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b new file mode 100644 index 000000000..9bd272e43 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b @@ -0,0 +1,1007 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a503dad, 0x00450a50, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a583dad, 0x00450a58, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x80800042, 0x27402529, 0x00b10740, 0x00b10400 }, + { 0x80800042, 0x27802529, 0x00b10780, 0x00b10420 }, + { 0x80800042, 0x27c02529, 0x00b107c0, 0x00b10440 }, + { 0x80800042, 0x28002529, 0x00b10800, 0x00b10460 }, + { 0x80800042, 0x28402529, 0x00b10840, 0x00b10480 }, + { 0x80800042, 0x28802529, 0x00b10880, 0x00b104a0 }, + { 0x80800042, 0x28c02529, 0x00b108c0, 0x00b104c0 }, + { 0x80800042, 0x29002529, 0x00b10900, 0x00b104e0 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x80800042, 0x27602529, 0x00b10760, 0x00b10400 }, + { 0x80800042, 0x27a02529, 0x00b107a0, 0x00b10420 }, + { 0x80800042, 0x27e02529, 0x00b107e0, 0x00b10440 }, + { 0x80800042, 0x28202529, 0x00b10820, 0x00b10460 }, + { 0x80800042, 0x28602529, 0x00b10860, 0x00b10480 }, + { 0x80800042, 0x28a02529, 0x00b108a0, 0x00b104a0 }, + { 0x80800042, 0x28e02529, 0x00b108e0, 0x00b104c0 }, + { 0x80800042, 0x29202529, 0x00b10920, 0x00b104e0 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a543dad, 0x00450a54, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x80600042, 0x29402529, 0x008d0940, 0x008d0400 }, + { 0x80600042, 0x29602529, 0x008d0960, 0x008d0420 }, + { 0x80600042, 0x29802529, 0x008d0980, 0x008d0440 }, + { 0x80600042, 0x29a02529, 0x008d09a0, 0x008d0460 }, + { 0x80600042, 0x29c02529, 0x008d09c0, 0x008d0480 }, + { 0x80600042, 0x29e02529, 0x008d09e0, 0x008d04a0 }, + { 0x80600042, 0x2a002529, 0x008d0a00, 0x008d04c0 }, + { 0x80600042, 0x2a202529, 0x008d0a20, 0x008d04e0 }, + { 0x0020000c, 0x2a5c3dad, 0x00450a5c, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a008 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a008 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x80600042, 0x29502529, 0x008d0950, 0x008d0400 }, + { 0x80600042, 0x29702529, 0x008d0970, 0x008d0420 }, + { 0x80600042, 0x29902529, 0x008d0990, 0x008d0440 }, + { 0x80600042, 0x29b02529, 0x008d09b0, 0x008d0460 }, + { 0x80600042, 0x29d02529, 0x008d09d0, 0x008d0480 }, + { 0x80600042, 0x29f02529, 0x008d09f0, 0x008d04a0 }, + { 0x80600042, 0x2a102529, 0x008d0a10, 0x008d04c0 }, + { 0x80600042, 0x2a302529, 0x008d0a30, 0x008d04e0 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b.gen5 new file mode 100644 index 000000000..b99ad57f8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_bidirect.g4b.gen5 @@ -0,0 +1,1007 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a503dad, 0x00450a50, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a583dad, 0x00450a58, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x80800042, 0x27402529, 0x00b10740, 0x00b10400 }, + { 0x80800042, 0x27802529, 0x00b10780, 0x00b10420 }, + { 0x80800042, 0x27c02529, 0x00b107c0, 0x00b10440 }, + { 0x80800042, 0x28002529, 0x00b10800, 0x00b10460 }, + { 0x80800042, 0x28402529, 0x00b10840, 0x00b10480 }, + { 0x80800042, 0x28802529, 0x00b10880, 0x00b104a0 }, + { 0x80800042, 0x28c02529, 0x00b108c0, 0x00b104c0 }, + { 0x80800042, 0x29002529, 0x00b10900, 0x00b104e0 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a007 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a007 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a007 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x80800042, 0x27602529, 0x00b10760, 0x00b10400 }, + { 0x80800042, 0x27a02529, 0x00b107a0, 0x00b10420 }, + { 0x80800042, 0x27e02529, 0x00b107e0, 0x00b10440 }, + { 0x80800042, 0x28202529, 0x00b10820, 0x00b10460 }, + { 0x80800042, 0x28602529, 0x00b10860, 0x00b10480 }, + { 0x80800042, 0x28a02529, 0x00b108a0, 0x00b104a0 }, + { 0x80800042, 0x28e02529, 0x00b108e0, 0x00b104c0 }, + { 0x80800042, 0x29202529, 0x00b10920, 0x00b104e0 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a543dad, 0x00450a54, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x20002000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a54, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a56, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x80600042, 0x29402529, 0x008d0940, 0x008d0400 }, + { 0x80600042, 0x29602529, 0x008d0960, 0x008d0420 }, + { 0x80600042, 0x29802529, 0x008d0980, 0x008d0440 }, + { 0x80600042, 0x29a02529, 0x008d09a0, 0x008d0460 }, + { 0x80600042, 0x29c02529, 0x008d09c0, 0x008d0480 }, + { 0x80600042, 0x29e02529, 0x008d09e0, 0x008d04a0 }, + { 0x80600042, 0x2a002529, 0x008d0a00, 0x008d04c0 }, + { 0x80600042, 0x2a202529, 0x008d0a20, 0x008d04e0 }, + { 0x0020000c, 0x2a5c3dad, 0x00450a5c, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a5c, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x80008000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a5c, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a5e, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a009 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a008 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a009 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a008 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a009 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x80600042, 0x29502529, 0x008d0950, 0x008d0400 }, + { 0x80600042, 0x29702529, 0x008d0970, 0x008d0420 }, + { 0x80600042, 0x29902529, 0x008d0990, 0x008d0440 }, + { 0x80600042, 0x29b02529, 0x008d09b0, 0x008d0460 }, + { 0x80600042, 0x29d02529, 0x008d09d0, 0x008d0480 }, + { 0x80600042, 0x29f02529, 0x008d09f0, 0x008d04a0 }, + { 0x80600042, 0x2a102529, 0x008d0a10, 0x008d04c0 }, + { 0x80600042, 0x2a302529, 0x008d0a30, 0x008d04e0 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4a new file mode 100644 index 000000000..4c79c5f40 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4a @@ -0,0 +1,130 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +/*field 0 of Y*/ +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; //motion vertical field select +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`4') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`motion_field_y.g4i') +mov (8) g58.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g60.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g62.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g64.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g66.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g68.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g70.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g72.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 1 of Y*/ +asr (2) g31.14<1>W g82.24<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x4000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface',`4') +define(`mv1',`g82.24') +define(`mv2',`g82.26') +include(`motion_field_y.g4i') +mov (8) g59.0<1>UD g32.0<8,8,1>UD {align1}; +mov (8) g61.0<1>UD g33.0<8,8,1>UD {align1}; +mov (8) g63.0<1>UD g34.0<8,8,1>UD {align1}; +mov (8) g65.0<1>UD g35.0<8,8,1>UD {align1}; +mov (8) g67.0<1>UD g36.0<8,8,1>UD {align1}; +mov (8) g69.0<1>UD g37.0<8,8,1>UD {align1}; +mov (8) g71.0<1>UD g38.0<8,8,1>UD {align1}; +mov (8) g73.0<1>UD g39.0<8,8,1>UD {align1}; + +/*field 0 of UV*/ +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g82.16<1>W g82.16<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `5') +define(`surface_v', `6') +define(`mv1',`g82.16') +define(`mv2',`g82.18') +include(`motion_field_uv.g4i') +mov (8) g74.0<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.0<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.0<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.0<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.0<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.0<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.0<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.0<1>UW g39.0<8,8,1>UW {align1}; + +/*field 1 of UV*/ +asr (2) g82.24<1>W g82.24<2,2,1>W 1W {align1}; +asr (2) g31.14<1>W g82.24<2,2,1>W 1W {align1}; +shl (1) g31.16<1>W g31.16<1,1,1>W 1W {align1}; +add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1}; +and.nz (1) null g82.2<1,1,1>UW 0x4000UW {align1}; +(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1}; +define(`surface_u', `5') +define(`surface_v', `6') +define(`mv1',`g82.24') +define(`mv2',`g82.26') +include(`motion_field_uv.g4i') +mov (8) g74.16<1>UW g32.0<8,8,1>UW {align1}; +mov (8) g75.16<1>UW g33.0<8,8,1>UW {align1}; +mov (8) g76.16<1>UW g34.0<8,8,1>UW {align1}; +mov (8) g77.16<1>UW g35.0<8,8,1>UW {align1}; +mov (8) g78.16<1>UW g36.0<8,8,1>UW {align1}; +mov (8) g79.16<1>UW g37.0<8,8,1>UW {align1}; +mov (8) g80.16<1>UW g38.0<8,8,1>UW {align1}; +mov (8) g81.16<1>UW g39.0<8,8,1>UW {align1}; + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b new file mode 100644 index 000000000..6c02221ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b @@ -0,0 +1,555 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000045 }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002f }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000017 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x008d0e60, 0x0411a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000013 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x008d0e60, 0x0411a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x008d0e60, 0x0418a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a503dad, 0x00450a50, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a583dad, 0x00450a58, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000029 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0414a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001d }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x008d0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x008d0e60, 0x0414a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x008d0e60, 0x0411a005 }, + { 0x00800031, 0x26201d29, 0x008d0e60, 0x0411a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x00ad0e60, 0x0414a005 }, + { 0x00800031, 0x25a01d29, 0x00ad0e60, 0x0414a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b.gen5 new file mode 100644 index 000000000..4c2434abb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_field_pred_forward.g4b.gen5 @@ -0,0 +1,555 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27800021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27c00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29000021, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20002dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000008a }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x00800040, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x00800040, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x00800040, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x00800040, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x00800040, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x00800040, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x00800040, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x00800040, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10501 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10541 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b10581 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b105c1 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10601 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10641 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b10681 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b106c1 }, + { 0x00800040, 0x24004529, 0x00b10400, 0x00b10541 }, + { 0x00800040, 0x24204529, 0x00b10420, 0x00b10581 }, + { 0x00800040, 0x24404529, 0x00b10440, 0x00b105c1 }, + { 0x00800040, 0x24604529, 0x00b10460, 0x00b10601 }, + { 0x00800040, 0x24804529, 0x00b10480, 0x00b10641 }, + { 0x00800040, 0x24a04529, 0x00b104a0, 0x00b10681 }, + { 0x00800040, 0x24c04529, 0x00b104c0, 0x00b106c1 }, + { 0x00800040, 0x24e04529, 0x00b104e0, 0x00b10701 }, + { 0x00800008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00800008, 0x24202d29, 0x00b10420, 0x00020002 }, + { 0x00800008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00800008, 0x24602d29, 0x00b10460, 0x00020002 }, + { 0x00800008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00800008, 0x24a02d29, 0x00b104a0, 0x00020002 }, + { 0x00800008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00800008, 0x24e02d29, 0x00b104e0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b106c1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000005, 0x20002dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x27001d29, 0x408d0e60, 0x0218a004 }, + { 0x80800042, 0x24004629, 0x00b10500, 0x00b10540 }, + { 0x80800042, 0x24204629, 0x00b10540, 0x00b10580 }, + { 0x80800042, 0x24404629, 0x00b10580, 0x00b105c0 }, + { 0x80800042, 0x24604629, 0x00b105c0, 0x00b10600 }, + { 0x80800042, 0x24804629, 0x00b10600, 0x00b10640 }, + { 0x80800042, 0x24a04629, 0x00b10640, 0x00b10680 }, + { 0x80800042, 0x24c04629, 0x00b10680, 0x00b106c0 }, + { 0x80800042, 0x24e04629, 0x00b106c0, 0x00b10700 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25401d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00800031, 0x25c01d29, 0x408d0e60, 0x0218a004 }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000002 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x26001d29, 0x408d0e60, 0x0288a004 }, + { 0x00800001, 0x24000229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00b106c0, 0x00000000 }, + { 0x00600001, 0x27600021, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x27a00021, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x27e00021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28e00021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x29200021, 0x008d04e0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x2a503dad, 0x00450a50, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x10001000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a50, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a52, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29400129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29600129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29800129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29a00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29c00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29e00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a000129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a200129, 0x008d04e0, 0x00000000 }, + { 0x0020000c, 0x2a583dad, 0x00450a58, 0x00010001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a58, 0x00010001 }, + { 0x00000009, 0x23f03dad, 0x002103f0, 0x00010001 }, + { 0x00200040, 0x2e603421, 0x004503e0, 0x004503ee }, + { 0x00000005, 0x2e640c21, 0x00210e64, 0xfffffffe }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x40004000 }, + { 0x00010040, 0x2e640c21, 0x00210e64, 0x00000001 }, + { 0x01000005, 0x20003dbc, 0x00210a58, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0001000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800040, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800040, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800040, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800040, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0501 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0521 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0541 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0561 }, + { 0x00800040, 0x24004529, 0x00ad0400, 0x00ad0521 }, + { 0x00800040, 0x24204529, 0x00ad0420, 0x00ad0541 }, + { 0x00800040, 0x24404529, 0x00ad0440, 0x00ad0561 }, + { 0x00800040, 0x24604529, 0x00ad0460, 0x00ad0581 }, + { 0x00800040, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800040, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800040, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800040, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05a1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05c1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad05e1 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0601 }, + { 0x00800040, 0x24804529, 0x00ad0480, 0x00ad05c1 }, + { 0x00800040, 0x24a04529, 0x00ad04a0, 0x00ad05e1 }, + { 0x00800040, 0x24c04529, 0x00ad04c0, 0x00ad0601 }, + { 0x00800040, 0x24e04529, 0x00ad04e0, 0x00ad0621 }, + { 0x00a02008, 0x24002d29, 0x00b10400, 0x00020002 }, + { 0x00a02008, 0x24402d29, 0x00b10440, 0x00020002 }, + { 0x00a02008, 0x24802d29, 0x00b10480, 0x00020002 }, + { 0x00a02008, 0x24c02d29, 0x00b104c0, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0248a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0501 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0521 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0541 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0561 }, + { 0x00800042, 0x24804629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x24a04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x24c04629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x24e04629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000003a }, + { 0x01000005, 0x20003dbc, 0x00210a5a, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x408d0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x408d0e60, 0x0248a006 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0000000f }, + { 0x00000040, 0x2e640c21, 0x00210e64, 0x00000008 }, + { 0x00800031, 0x25801d29, 0x408d0e60, 0x0218a005 }, + { 0x00800031, 0x26201d29, 0x408d0e60, 0x0218a006 }, + { 0x00800042, 0x24004629, 0x00ad0500, 0x00ad0520 }, + { 0x00800042, 0x24204629, 0x00ad0520, 0x00ad0540 }, + { 0x00800042, 0x24404629, 0x00ad0540, 0x00ad0560 }, + { 0x00800042, 0x24604629, 0x00ad0560, 0x00ad0580 }, + { 0x00800042, 0x24804629, 0x00ad05a0, 0x00ad05c0 }, + { 0x00800042, 0x24a04629, 0x00ad05c0, 0x00ad05e0 }, + { 0x00800042, 0x24c04629, 0x00ad05e0, 0x00ad0600 }, + { 0x00800042, 0x24e04629, 0x00ad0600, 0x00ad0620 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x2e680061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x25001d29, 0x40ad0e60, 0x0248a005 }, + { 0x00800031, 0x25a01d29, 0x40ad0e60, 0x0248a006 }, + { 0x00800001, 0x24000229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x24400229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x24600229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x24800229, 0x00ad05a0, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00ad05c0, 0x00000000 }, + { 0x00800001, 0x24c00229, 0x00ad05e0, 0x00000000 }, + { 0x00800001, 0x24e00229, 0x00ad0600, 0x00000000 }, + { 0x00600001, 0x29500129, 0x008d0400, 0x00000000 }, + { 0x00600001, 0x29700129, 0x008d0420, 0x00000000 }, + { 0x00600001, 0x29900129, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x29b00129, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x29d00129, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x29f00129, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x2a100129, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x2a300129, 0x008d04e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4a new file mode 100644 index 000000000..28fe910ec --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4a @@ -0,0 +1,61 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov(2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +//Y, (x', y') = (x, y) + (motion_vector.x >> 1, motion_vector.y >> 1) +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface', `7') +define(`mv1', `g82.20') +define(`mv2', `g82.22') +include(`motion_frame_y.g4i') + +//UV, (x', y') = (x >> 1, y >> 1) + (motion_vector.x >> 2, motion_vector.y >> 2) +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface1', `8') +define(`input_surface2', `9') +include(`motion_frame_uv.g4i') + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b new file mode 100644 index 000000000..475200b66 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b @@ -0,0 +1,369 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005f }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000031 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000025 }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a009 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b.gen5 new file mode 100644 index 000000000..5f5c174a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_backward.g4b.gen5 @@ -0,0 +1,369 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000be }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000090 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a009 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4a new file mode 100644 index 000000000..cf7ef57c5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4a @@ -0,0 +1,120 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +//Y, Forward +mov (1) g31.8<1>UD 0x0070007UD {align1}; +define(`input_surface', `4') +define(`mv1', `g82.16') +define(`mv2', `g82.18') +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +include(`motion_frame_y.g4i') +//Save Forward +mov (16) g108.0<1>UD g58.0<16,16,1>UD {align1 compr}; +mov (16) g110.0<1>UD g60.0<16,16,1>UD {align1 compr}; +mov (16) g112.0<1>UD g62.0<16,16,1>UD {align1 compr}; +mov (16) g114.0<1>UD g64.0<16,16,1>UD {align1 compr}; +mov (16) g116.0<1>UD g66.0<16,16,1>UD {align1 compr}; +mov (16) g118.0<1>UD g68.0<16,16,1>UD {align1 compr}; +mov (16) g120.0<1>UD g70.0<16,16,1>UD {align1 compr}; +mov (16) g122.0<1>UD g72.0<16,16,1>UD {align1 compr}; +//Y, Backward +define(`input_surface', `7') +define(`mv1', `g82.20') +define(`mv2', `g82.22') +asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +include(`motion_frame_y.g4i') +//Average Forward and Backward +avg.sat (16) g58.0<1>UW g58.0<16,16,1>UW g108.0<16,16,1>UW {align1}; +avg.sat (16) g59.0<1>UW g59.0<16,16,1>UW g109.0<16,16,1>UW {align1}; +avg.sat (16) g60.0<1>UW g60.0<16,16,1>UW g110.0<16,16,1>UW {align1}; +avg.sat (16) g61.0<1>UW g61.0<16,16,1>UW g111.0<16,16,1>UW {align1}; +avg.sat (16) g62.0<1>UW g62.0<16,16,1>UW g112.0<16,16,1>UW {align1}; +avg.sat (16) g63.0<1>UW g63.0<16,16,1>UW g113.0<16,16,1>UW {align1}; +avg.sat (16) g64.0<1>UW g64.0<16,16,1>UW g114.0<16,16,1>UW {align1}; +avg.sat (16) g65.0<1>UW g65.0<16,16,1>UW g115.0<16,16,1>UW {align1}; +avg.sat (16) g66.0<1>UW g66.0<16,16,1>UW g116.0<16,16,1>UW {align1}; +avg.sat (16) g67.0<1>UW g67.0<16,16,1>UW g117.0<16,16,1>UW {align1}; +avg.sat (16) g68.0<1>UW g68.0<16,16,1>UW g118.0<16,16,1>UW {align1}; +avg.sat (16) g69.0<1>UW g69.0<16,16,1>UW g119.0<16,16,1>UW {align1}; +avg.sat (16) g70.0<1>UW g70.0<16,16,1>UW g120.0<16,16,1>UW {align1}; +avg.sat (16) g71.0<1>UW g71.0<16,16,1>UW g121.0<16,16,1>UW {align1}; +avg.sat (16) g72.0<1>UW g72.0<16,16,1>UW g122.0<16,16,1>UW {align1}; +avg.sat (16) g73.0<1>UW g73.0<16,16,1>UW g123.0<16,16,1>UW {align1}; + +//UV, Forward +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface1', `5') +define(`input_surface2', `6') +mov (1) g32.8<1>UD 0x007000fUD {align1}; +include(`motion_frame_uv.g4i') +//Save UV Forward +mov (16) g108.0<1>UB g74.0<16,16,2>UB {align1}; +mov (16) g108.16<1>UB g75.0<16,16,2>UB {align1}; +mov (16) g109.0<1>UB g76.0<16,16,2>UB {align1}; +mov (16) g109.16<1>UB g77.0<16,16,2>UB {align1}; +mov (16) g110.0<1>UB g78.0<16,16,2>UB {align1}; +mov (16) g110.16<1>UB g79.0<16,16,2>UB {align1}; +mov (16) g111.0<1>UB g80.0<16,16,2>UB {align1}; +mov (16) g111.16<1>UB g81.0<16,16,2>UB {align1}; +//UV, Backward +asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface1', `8') +define(`input_surface2', `9') +include(`motion_frame_uv.g4i') +//Average Forward and Backward +avg.sat (16) g74.0<1>UW g74.0<16,16,1>UW g108.0<16,16,1>UB {align1}; +avg.sat (16) g75.0<1>UW g75.0<16,16,1>UW g108.16<16,16,1>UB {align1}; +avg.sat (16) g76.0<1>UW g76.0<16,16,1>UW g109.0<16,16,1>UB {align1}; +avg.sat (16) g77.0<1>UW g77.0<16,16,1>UW g109.16<16,16,1>UB {align1}; +avg.sat (16) g78.0<1>UW g78.0<16,16,1>UW g110.0<16,16,1>UB {align1}; +avg.sat (16) g79.0<1>UW g79.0<16,16,1>UW g110.16<16,16,1>UB {align1}; +avg.sat (16) g80.0<1>UW g80.0<16,16,1>UW g111.0<16,16,1>UB {align1}; +avg.sat (16) g81.0<1>UW g81.0<16,16,1>UW g111.16<16,16,1>UB {align1}; + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b new file mode 100644 index 000000000..0ca1f3846 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b @@ -0,0 +1,675 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005f }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10740, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10780, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b107c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10800, 0x00000000 }, + { 0x00802001, 0x2e800021, 0x00b10840, 0x00000000 }, + { 0x00802001, 0x2ec00021, 0x00b10880, 0x00000000 }, + { 0x00802001, 0x2f000021, 0x00b108c0, 0x00000000 }, + { 0x00802001, 0x2f400021, 0x00b10900, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005f }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x80800042, 0x27402529, 0x00b10740, 0x00b10d80 }, + { 0x80800042, 0x27602529, 0x00b10760, 0x00b10da0 }, + { 0x80800042, 0x27802529, 0x00b10780, 0x00b10dc0 }, + { 0x80800042, 0x27a02529, 0x00b107a0, 0x00b10de0 }, + { 0x80800042, 0x27c02529, 0x00b107c0, 0x00b10e00 }, + { 0x80800042, 0x27e02529, 0x00b107e0, 0x00b10e20 }, + { 0x80800042, 0x28002529, 0x00b10800, 0x00b10e40 }, + { 0x80800042, 0x28202529, 0x00b10820, 0x00b10e60 }, + { 0x80800042, 0x28402529, 0x00b10840, 0x00b10e80 }, + { 0x80800042, 0x28602529, 0x00b10860, 0x00b10ea0 }, + { 0x80800042, 0x28802529, 0x00b10880, 0x00b10ec0 }, + { 0x80800042, 0x28a02529, 0x00b108a0, 0x00b10ee0 }, + { 0x80800042, 0x28c02529, 0x00b108c0, 0x00b10f00 }, + { 0x80800042, 0x28e02529, 0x00b108e0, 0x00b10f20 }, + { 0x80800042, 0x29002529, 0x00b10900, 0x00b10f40 }, + { 0x80800042, 0x29202529, 0x00b10920, 0x00b10f60 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000031 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000025 }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a006 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x2d800231, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x2d900231, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x2da00231, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x2db00231, 0x00b209a0, 0x00000000 }, + { 0x00800001, 0x2dc00231, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x2dd00231, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x2de00231, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x2df00231, 0x00b20a20, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a009 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000031 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a009 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000025 }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a008 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a008 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a009 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x008d0400, 0x0414a008 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a009 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x80800042, 0x29404529, 0x00b10940, 0x00b10d80 }, + { 0x80800042, 0x29604529, 0x00b10960, 0x00b10d90 }, + { 0x80800042, 0x29804529, 0x00b10980, 0x00b10da0 }, + { 0x80800042, 0x29a04529, 0x00b109a0, 0x00b10db0 }, + { 0x80800042, 0x29c04529, 0x00b109c0, 0x00b10dc0 }, + { 0x80800042, 0x29e04529, 0x00b109e0, 0x00b10dd0 }, + { 0x80800042, 0x2a004529, 0x00b10a00, 0x00b10de0 }, + { 0x80800042, 0x2a204529, 0x00b10a20, 0x00b10df0 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b.gen5 new file mode 100644 index 000000000..1078caa55 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_bidirect.g4b.gen5 @@ -0,0 +1,675 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000be }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000090 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00802001, 0x2d800021, 0x00b10740, 0x00000000 }, + { 0x00802001, 0x2dc00021, 0x00b10780, 0x00000000 }, + { 0x00802001, 0x2e000021, 0x00b107c0, 0x00000000 }, + { 0x00802001, 0x2e400021, 0x00b10800, 0x00000000 }, + { 0x00802001, 0x2e800021, 0x00b10840, 0x00000000 }, + { 0x00802001, 0x2ec00021, 0x00b10880, 0x00000000 }, + { 0x00802001, 0x2f000021, 0x00b108c0, 0x00000000 }, + { 0x00802001, 0x2f400021, 0x00b10900, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000be }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000090 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a007 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a007 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a007 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x80800042, 0x27402529, 0x00b10740, 0x00b10d80 }, + { 0x80800042, 0x27602529, 0x00b10760, 0x00b10da0 }, + { 0x80800042, 0x27802529, 0x00b10780, 0x00b10dc0 }, + { 0x80800042, 0x27a02529, 0x00b107a0, 0x00b10de0 }, + { 0x80800042, 0x27c02529, 0x00b107c0, 0x00b10e00 }, + { 0x80800042, 0x27e02529, 0x00b107e0, 0x00b10e20 }, + { 0x80800042, 0x28002529, 0x00b10800, 0x00b10e40 }, + { 0x80800042, 0x28202529, 0x00b10820, 0x00b10e60 }, + { 0x80800042, 0x28402529, 0x00b10840, 0x00b10e80 }, + { 0x80800042, 0x28602529, 0x00b10860, 0x00b10ea0 }, + { 0x80800042, 0x28802529, 0x00b10880, 0x00b10ec0 }, + { 0x80800042, 0x28a02529, 0x00b108a0, 0x00b10ee0 }, + { 0x80800042, 0x28c02529, 0x00b108c0, 0x00b10f00 }, + { 0x80800042, 0x28e02529, 0x00b108e0, 0x00b10f20 }, + { 0x80800042, 0x29002529, 0x00b10900, 0x00b10f40 }, + { 0x80800042, 0x29202529, 0x00b10920, 0x00b10f60 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a006 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00800001, 0x2d800231, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x2d900231, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x2da00231, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x2db00231, 0x00b209a0, 0x00000000 }, + { 0x00800001, 0x2dc00231, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x2dd00231, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x2de00231, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x2df00231, 0x00b20a20, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a54, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a54, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a009 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a009 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x01000005, 0x20000d3c, 0x00210a56, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a008 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a009 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a008 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a009 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x408d0400, 0x0248a008 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a009 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x80800042, 0x29404529, 0x00b10940, 0x00b10d80 }, + { 0x80800042, 0x29604529, 0x00b10960, 0x00b10d90 }, + { 0x80800042, 0x29804529, 0x00b10980, 0x00b10da0 }, + { 0x80800042, 0x29a04529, 0x00b109a0, 0x00b10db0 }, + { 0x80800042, 0x29c04529, 0x00b109c0, 0x00b10dc0 }, + { 0x80800042, 0x29e04529, 0x00b109e0, 0x00b10dd0 }, + { 0x80800042, 0x2a004529, 0x00b10a00, 0x00b10de0 }, + { 0x80800042, 0x2a204529, 0x00b10a20, 0x00b10df0 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4a new file mode 100644 index 000000000..22f480415 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4a @@ -0,0 +1,61 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +mov (1) g126.8<1>UD ip {align1}; +mov (1) ip g21.0<1,1,1>UD {align1}; + +//Y, (x', y') = (x, y) + (motion_vector.x >> 1, motion_vector.y >> 1) +asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface', `4') +define(`mv1', `g82.16') +define(`mv2', `g82.18') +include(`motion_frame_y.g4i') + +//UV, (x', y') = (x >> 1, y >> 1) + (motion_vector.x >> 2, motion_vector.y >> 2) +shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1}; +asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1}; +add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1}; +define(`input_surface1', `5') +define(`input_surface2', `6') +include(`motion_frame_uv.g4i') + +include(`addidct.g4i') +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b new file mode 100644 index 000000000..4bf6c9356 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b @@ -0,0 +1,369 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000005f }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000048 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000043 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002e }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x008d0400, 0x0411a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x008d0400, 0x0418a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x008d0400, 0x0418a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000004e }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a006 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000031 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0414a006 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000025 }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x008d0400, 0x0418a005 }, + { 0x00800031, 0x25801d29, 0x008d0400, 0x0418a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x008d0400, 0x0411a005 }, + { 0x00800031, 0x26801d29, 0x008d0400, 0x0411a006 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000b }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x008d0400, 0x0414a005 }, + { 0x00800031, 0x25001d29, 0x008d0400, 0x0414a006 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b.gen5 new file mode 100644 index 000000000..9d8948880 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_frame_pred_forward.g4b.gen5 @@ -0,0 +1,369 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000001, 0x2fc80001, 0x00001400, 0x00000000 }, + { 0x00000001, 0x34000020, 0x002102a0, 0x00000000 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00010001 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000be }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000090 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x00800040, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x00800040, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x00800040, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x00800040, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x00800040, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x00800040, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x00800040, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x00800040, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x00800040, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x00800040, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x00800040, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x00800040, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x00800040, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x00800040, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x00800040, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x00800040, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e0 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10500 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10520 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10540 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10560 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10580 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a0 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c0 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e0 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10600 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10620 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10640 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10660 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10680 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a0 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c0 }, + { 0x00800040, 0x27404529, 0x00b10740, 0x00b104e1 }, + { 0x00800040, 0x27604529, 0x00b10760, 0x00b10501 }, + { 0x00800040, 0x27804529, 0x00b10780, 0x00b10521 }, + { 0x00800040, 0x27a04529, 0x00b107a0, 0x00b10541 }, + { 0x00800040, 0x27c04529, 0x00b107c0, 0x00b10561 }, + { 0x00800040, 0x27e04529, 0x00b107e0, 0x00b10581 }, + { 0x00800040, 0x28004529, 0x00b10800, 0x00b105a1 }, + { 0x00800040, 0x28204529, 0x00b10820, 0x00b105c1 }, + { 0x00800040, 0x28404529, 0x00b10840, 0x00b105e1 }, + { 0x00800040, 0x28604529, 0x00b10860, 0x00b10601 }, + { 0x00800040, 0x28804529, 0x00b10880, 0x00b10621 }, + { 0x00800040, 0x28a04529, 0x00b108a0, 0x00b10641 }, + { 0x00800040, 0x28c04529, 0x00b108c0, 0x00b10661 }, + { 0x00800040, 0x28e04529, 0x00b108e0, 0x00b10681 }, + { 0x00800040, 0x29004529, 0x00b10900, 0x00b106a1 }, + { 0x00800040, 0x29204529, 0x00b10920, 0x00b106c1 }, + { 0x80800008, 0x27402d29, 0x00b10740, 0x00020002 }, + { 0x80800008, 0x27602d29, 0x00b10760, 0x00020002 }, + { 0x80800008, 0x27802d29, 0x00b10780, 0x00020002 }, + { 0x80800008, 0x27a02d29, 0x00b107a0, 0x00020002 }, + { 0x80800008, 0x27c02d29, 0x00b107c0, 0x00020002 }, + { 0x80800008, 0x27e02d29, 0x00b107e0, 0x00020002 }, + { 0x80800008, 0x28002d29, 0x00b10800, 0x00020002 }, + { 0x80800008, 0x28202d29, 0x00b10820, 0x00020002 }, + { 0x80800008, 0x28402d29, 0x00b10840, 0x00020002 }, + { 0x80800008, 0x28602d29, 0x00b10860, 0x00020002 }, + { 0x80800008, 0x28802d29, 0x00b10880, 0x00020002 }, + { 0x80800008, 0x28a02d29, 0x00b108a0, 0x00020002 }, + { 0x80800008, 0x28c02d29, 0x00b108c0, 0x00020002 }, + { 0x80800008, 0x28e02d29, 0x00b108e0, 0x00020002 }, + { 0x80800008, 0x29002d29, 0x00b10900, 0x00020002 }, + { 0x80800008, 0x29202d29, 0x00b10920, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000086 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104c1 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b104e1 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10501 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10521 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10541 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10561 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b10581 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105a1 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105c1 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b105e1 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10601 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10621 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10641 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10661 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b10681 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106a1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000005c }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x26c01d29, 0x408d0400, 0x0218a004 }, + { 0x80800042, 0x27404629, 0x00b104c0, 0x00b104e0 }, + { 0x80800042, 0x27604629, 0x00b104e0, 0x00b10500 }, + { 0x80800042, 0x27804629, 0x00b10500, 0x00b10520 }, + { 0x80800042, 0x27a04629, 0x00b10520, 0x00b10540 }, + { 0x80800042, 0x27c04629, 0x00b10540, 0x00b10560 }, + { 0x80800042, 0x27e04629, 0x00b10560, 0x00b10580 }, + { 0x80800042, 0x28004629, 0x00b10580, 0x00b105a0 }, + { 0x80800042, 0x28204629, 0x00b105a0, 0x00b105c0 }, + { 0x80800042, 0x28404629, 0x00b105c0, 0x00b105e0 }, + { 0x80800042, 0x28604629, 0x00b105e0, 0x00b10600 }, + { 0x80800042, 0x28804629, 0x00b10600, 0x00b10620 }, + { 0x80800042, 0x28a04629, 0x00b10620, 0x00b10640 }, + { 0x80800042, 0x28c04629, 0x00b10640, 0x00b10660 }, + { 0x80800042, 0x28e04629, 0x00b10660, 0x00b10680 }, + { 0x80800042, 0x29004629, 0x00b10680, 0x00b106a0 }, + { 0x80800042, 0x29204629, 0x00b106a0, 0x00b106c0 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24c01d29, 0x408d0400, 0x0288a004 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00800031, 0x25c01d29, 0x408d0400, 0x0288a004 }, + { 0x00800001, 0x27400229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x27600229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x27800229, 0x00b10500, 0x00000000 }, + { 0x00800001, 0x27a00229, 0x00b10520, 0x00000000 }, + { 0x00800001, 0x27c00229, 0x00b10540, 0x00000000 }, + { 0x00800001, 0x27e00229, 0x00b10560, 0x00000000 }, + { 0x00800001, 0x28000229, 0x00b10580, 0x00000000 }, + { 0x00800001, 0x28200229, 0x00b105a0, 0x00000000 }, + { 0x00800001, 0x28400229, 0x00b105c0, 0x00000000 }, + { 0x00800001, 0x28600229, 0x00b105e0, 0x00000000 }, + { 0x00800001, 0x28800229, 0x00b10600, 0x00000000 }, + { 0x00800001, 0x28a00229, 0x00b10620, 0x00000000 }, + { 0x00800001, 0x28c00229, 0x00b10640, 0x00000000 }, + { 0x00800001, 0x28e00229, 0x00b10660, 0x00000000 }, + { 0x00800001, 0x29000229, 0x00b10680, 0x00000000 }, + { 0x00800001, 0x29200229, 0x00b106a0, 0x00000000 }, + { 0x00200008, 0x23e00c21, 0x004503e0, 0x00000001 }, + { 0x0020000c, 0x23ee3dad, 0x00450a50, 0x00020002 }, + { 0x00200040, 0x24003421, 0x004503e0, 0x004503ee }, + { 0x01000005, 0x20000d3c, 0x00210a50, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000009c }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a006 }, + { 0x00600040, 0x29404629, 0x008d0440, 0x008d0441 }, + { 0x00600040, 0x29504629, 0x008d0460, 0x008d0461 }, + { 0x00600040, 0x29604629, 0x008d0480, 0x008d0481 }, + { 0x00600040, 0x29704629, 0x008d04a0, 0x008d04a1 }, + { 0x00600040, 0x29804629, 0x008d04c0, 0x008d04c1 }, + { 0x00600040, 0x29904629, 0x008d04e0, 0x008d04e1 }, + { 0x00600040, 0x29a04629, 0x008d0500, 0x008d0501 }, + { 0x00600040, 0x29b04629, 0x008d0520, 0x008d0521 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0460 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0480 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a0 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c0 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e0 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0500 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0520 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0540 }, + { 0x00600040, 0x29404529, 0x008d0940, 0x008d0461 }, + { 0x00600040, 0x29504529, 0x008d0950, 0x008d0481 }, + { 0x00600040, 0x29604529, 0x008d0960, 0x008d04a1 }, + { 0x00600040, 0x29704529, 0x008d0970, 0x008d04c1 }, + { 0x00600040, 0x29804529, 0x008d0980, 0x008d04e1 }, + { 0x00600040, 0x29904529, 0x008d0990, 0x008d0501 }, + { 0x00600040, 0x29a04529, 0x008d09a0, 0x008d0521 }, + { 0x00600040, 0x29b04529, 0x008d09b0, 0x008d0541 }, + { 0x00600040, 0x29c04629, 0x008d0580, 0x008d0581 }, + { 0x00600040, 0x29d04629, 0x008d05a0, 0x008d05a1 }, + { 0x00600040, 0x29e04629, 0x008d05c0, 0x008d05c1 }, + { 0x00600040, 0x29f04629, 0x008d05e0, 0x008d05e1 }, + { 0x00600040, 0x2a004629, 0x008d0600, 0x008d0601 }, + { 0x00600040, 0x2a104629, 0x008d0620, 0x008d0621 }, + { 0x00600040, 0x2a204629, 0x008d0640, 0x008d0641 }, + { 0x00600040, 0x2a304629, 0x008d0660, 0x008d0661 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a0 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c0 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e0 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0600 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0620 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0640 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0660 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0680 }, + { 0x00600040, 0x29c04529, 0x008d09c0, 0x008d05a1 }, + { 0x00600040, 0x29d04529, 0x008d09d0, 0x008d05c1 }, + { 0x00600040, 0x29e04529, 0x008d09e0, 0x008d05e1 }, + { 0x00600040, 0x29f04529, 0x008d09f0, 0x008d0601 }, + { 0x00600040, 0x2a004529, 0x008d0a00, 0x008d0621 }, + { 0x00600040, 0x2a104529, 0x008d0a10, 0x008d0641 }, + { 0x00600040, 0x2a204529, 0x008d0a20, 0x008d0661 }, + { 0x00600040, 0x2a304529, 0x008d0a30, 0x008d0681 }, + { 0x00800008, 0x29402d29, 0x00b10940, 0x00020002 }, + { 0x00800008, 0x29602d29, 0x00b10960, 0x00020002 }, + { 0x00800008, 0x29802d29, 0x00b10980, 0x00020002 }, + { 0x00800008, 0x29a02d29, 0x00b109a0, 0x00020002 }, + { 0x00800008, 0x29c02d29, 0x00b109c0, 0x00020002 }, + { 0x00800008, 0x29e02d29, 0x00b109e0, 0x00020002 }, + { 0x00800008, 0x2a002d29, 0x00b10a00, 0x00020002 }, + { 0x00800008, 0x2a202d29, 0x00b10a20, 0x00020002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0248a006 }, + { 0x00800042, 0x29404629, 0x00ad0440, 0x00ad0441 }, + { 0x00800042, 0x29604629, 0x00ad0460, 0x00ad0461 }, + { 0x00800042, 0x29804629, 0x00ad0480, 0x00ad0481 }, + { 0x00800042, 0x29a04629, 0x00ad04a0, 0x00ad04a1 }, + { 0x00800042, 0x29c04629, 0x00ad0580, 0x00ad0581 }, + { 0x00800042, 0x29e04629, 0x00ad05a0, 0x00ad05a1 }, + { 0x00800042, 0x2a004629, 0x00ad05c0, 0x00ad05c1 }, + { 0x00800042, 0x2a204629, 0x00ad05e0, 0x00ad05e1 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x01000005, 0x20000d3c, 0x00210a52, 0x00000002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007001f }, + { 0x00800031, 0x24401d29, 0x408d0400, 0x0288a005 }, + { 0x00800031, 0x25801d29, 0x408d0400, 0x0288a006 }, + { 0x00000040, 0x24040c21, 0x00210404, 0x00000008 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0000001f }, + { 0x00800031, 0x25401d29, 0x408d0400, 0x0218a005 }, + { 0x00800031, 0x26801d29, 0x408d0400, 0x0218a006 }, + { 0x00600042, 0x29404629, 0x008d0440, 0x008d0460 }, + { 0x00600042, 0x29504629, 0x008d0460, 0x008d0480 }, + { 0x00600042, 0x29604629, 0x008d0480, 0x008d04a0 }, + { 0x00600042, 0x29704629, 0x008d04a0, 0x008d04c0 }, + { 0x00600042, 0x29804629, 0x008d04c0, 0x008d04e0 }, + { 0x00600042, 0x29904629, 0x008d04e0, 0x008d0500 }, + { 0x00600042, 0x29a04629, 0x008d0500, 0x008d0520 }, + { 0x00600042, 0x29b04629, 0x008d0520, 0x008d0540 }, + { 0x00600042, 0x29c04629, 0x008d0580, 0x008d05a0 }, + { 0x00600042, 0x29d04629, 0x008d05a0, 0x008d05c0 }, + { 0x00600042, 0x29e04629, 0x008d05c0, 0x008d05e0 }, + { 0x00600042, 0x29f04629, 0x008d05e0, 0x008d0600 }, + { 0x00600042, 0x2a004629, 0x008d0600, 0x008d0620 }, + { 0x00600042, 0x2a104629, 0x008d0620, 0x008d0640 }, + { 0x00600042, 0x2a204629, 0x008d0640, 0x008d0660 }, + { 0x00600042, 0x2a304629, 0x008d0660, 0x008d0680 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x24080061, 0x00000000, 0x0007000f }, + { 0x00800031, 0x24801d29, 0x408d0400, 0x0248a005 }, + { 0x00800031, 0x25001d29, 0x408d0400, 0x0248a006 }, + { 0x00800001, 0x29400229, 0x00ad0480, 0x00000000 }, + { 0x00800001, 0x29600229, 0x00ad04a0, 0x00000000 }, + { 0x00800001, 0x29800229, 0x00ad04c0, 0x00000000 }, + { 0x00800001, 0x29a00229, 0x00ad04e0, 0x00000000 }, + { 0x00800001, 0x29c00229, 0x00ad0500, 0x00000000 }, + { 0x00800001, 0x29e00229, 0x00ad0520, 0x00000000 }, + { 0x00800001, 0x2a000229, 0x00ad0540, 0x00000000 }, + { 0x00800001, 0x2a200229, 0x00ad0560, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10a80, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10aa0, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10ac0, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10ae0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10b00, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10b20, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10b40, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10b60, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10b80, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10ba0, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10bc0, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10be0, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c00, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10c20, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800040, 0x274045ad, 0x00b10a60, 0x00b20740 }, + { 0x00800040, 0x276045ad, 0x00b10b60, 0x00b20760 }, + { 0x00800040, 0x278045ad, 0x00b10a80, 0x00b20780 }, + { 0x00800040, 0x27a045ad, 0x00b10b80, 0x00b207a0 }, + { 0x00800040, 0x27c045ad, 0x00b10aa0, 0x00b207c0 }, + { 0x00800040, 0x27e045ad, 0x00b10ba0, 0x00b207e0 }, + { 0x00800040, 0x280045ad, 0x00b10ac0, 0x00b20800 }, + { 0x00800040, 0x282045ad, 0x00b10bc0, 0x00b20820 }, + { 0x00800040, 0x284045ad, 0x00b10ae0, 0x00b20840 }, + { 0x00800040, 0x286045ad, 0x00b10be0, 0x00b20860 }, + { 0x00800040, 0x288045ad, 0x00b10b00, 0x00b20880 }, + { 0x00800040, 0x28a045ad, 0x00b10c00, 0x00b208a0 }, + { 0x00800040, 0x28c045ad, 0x00b10b20, 0x00b208c0 }, + { 0x00800040, 0x28e045ad, 0x00b10c20, 0x00b208e0 }, + { 0x00800040, 0x290045ad, 0x00b10b40, 0x00b20900 }, + { 0x00800040, 0x292045ad, 0x00b10c40, 0x00b20920 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x474001b1, 0x00b10740, 0x00000000 }, + { 0x80800001, 0x476001b1, 0x00b10760, 0x00000000 }, + { 0x80800001, 0x478001b1, 0x00b10780, 0x00000000 }, + { 0x80800001, 0x47a001b1, 0x00b107a0, 0x00000000 }, + { 0x80800001, 0x47c001b1, 0x00b107c0, 0x00000000 }, + { 0x80800001, 0x47e001b1, 0x00b107e0, 0x00000000 }, + { 0x80800001, 0x480001b1, 0x00b10800, 0x00000000 }, + { 0x80800001, 0x482001b1, 0x00b10820, 0x00000000 }, + { 0x80800001, 0x484001b1, 0x00b10840, 0x00000000 }, + { 0x80800001, 0x486001b1, 0x00b10860, 0x00000000 }, + { 0x80800001, 0x488001b1, 0x00b10880, 0x00000000 }, + { 0x80800001, 0x48a001b1, 0x00b108a0, 0x00000000 }, + { 0x80800001, 0x48c001b1, 0x00b108c0, 0x00000000 }, + { 0x80800001, 0x48e001b1, 0x00b108e0, 0x00000000 }, + { 0x80800001, 0x490001b1, 0x00b10900, 0x00000000 }, + { 0x80800001, 0x492001b1, 0x00b10920, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20740, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20760, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20780, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b207a0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b207c0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b207e0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20800, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20820, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20840, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20860, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20880, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b208a0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b208c0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b208e0, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20900, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20920, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01c21, 0x004503e0, 0x00000001 }, + { 0x00800040, 0x294025ad, 0x00b10c60, 0x00b10940 }, + { 0x00800040, 0x296025ad, 0x00b10c80, 0x00b10960 }, + { 0x00800040, 0x298025ad, 0x00b10ca0, 0x00b10980 }, + { 0x00800040, 0x29a025ad, 0x00b10cc0, 0x00b109a0 }, + { 0x80800001, 0x494001b1, 0x00b10940, 0x00000000 }, + { 0x80800001, 0x496001b1, 0x00b10960, 0x00000000 }, + { 0x80800001, 0x498001b1, 0x00b10980, 0x00000000 }, + { 0x80800001, 0x49a001b1, 0x00b109a0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20940, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20960, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20980, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b209a0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x00800040, 0x29c025a9, 0x00b10ce0, 0x00b109c0 }, + { 0x00800040, 0x29e025a9, 0x00b10d00, 0x00b109e0 }, + { 0x00800040, 0x2a0025a9, 0x00b10d20, 0x00b10a00 }, + { 0x00800040, 0x2a2025a9, 0x00b10d40, 0x00b10a20 }, + { 0x80800001, 0x49c001b1, 0x00b109c0, 0x00000000 }, + { 0x80800001, 0x49e001b1, 0x00b109e0, 0x00000000 }, + { 0x80800001, 0x4a0001b1, 0x00b10a00, 0x00000000 }, + { 0x80800001, 0x4a2001b1, 0x00b10a20, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b209c0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b209e0, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a00, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20a20, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4a new file mode 100644 index 000000000..cf12a449a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4a @@ -0,0 +1,211 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* + GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT tab + g31: read and write message descriptor + g32~g55:DCT data + g58~g81:reference data + g82: thread payload + g83~g106:IDCT data +*/ + +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +//shl (1) g31.4<1>UD g31.4<1,1,1>UD 1UD {align1}; + +include(`iq_intra.g4i') + +//defined for idct +define(`ROW_SHIFT', `11UD') +define(`ROW_ADD', `0x400UD') +define(`COL_SHIFT', `20UD') +define(`COL_ADD', `0x80000UD') + +mov (1) a0.0<1>UD 0x06F006E0UD {align1}; //0x06F006E0UD+0x00200020UD=0x07100700UD (g56.0 and g56.16) + +//Y0 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g83.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g84.0<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g85.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g86.0<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g87.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g88.0<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g89.0<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g90.0<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y1 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g83.16<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g84.16<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g85.16<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g86.16<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g87.16<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g88.16<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g89.16<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g90.16<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y2 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g91.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g92.0<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g93.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g94.0<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g95.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g96.0<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g97.0<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g98.0<1>W g39.0<16,8,2>W 128UW {align1}; + +//Y3 +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (8) g91.16<1>W g32.0<16,8,2>W 128UW {align1}; +add (8) g92.16<1>W g33.0<16,8,2>W 128UW {align1}; +add (8) g93.16<1>W g34.0<16,8,2>W 128UW {align1}; +add (8) g94.16<1>W g35.0<16,8,2>W 128UW {align1}; +add (8) g95.16<1>W g36.0<16,8,2>W 128UW {align1}; +add (8) g96.16<1>W g37.0<16,8,2>W 128UW {align1}; +add (8) g97.16<1>W g38.0<16,8,2>W 128UW {align1}; +add (8) g98.16<1>W g39.0<16,8,2>W 128UW {align1}; + +//U +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (16) g99.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (16) g100.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (16) g101.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (16) g102.0<1>W g38.0<16,8,2>W 128UW {align1}; + +//V +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +add (16) g103.0<1>W g32.0<16,8,2>W 128UW {align1}; +add (16) g104.0<1>W g34.0<16,8,2>W 128UW {align1}; +add (16) g105.0<1>W g36.0<16,8,2>W 128UW {align1}; +add (16) g106.0<1>W g38.0<16,8,2>W 128UW {align1}; + +//send msg +mov (1) g31.8<1>UD 0x00F000FUD {align1}; +mov.sat (16) g83.0<2>UB g83.0<16,16,1>W {align1}; +mov.sat (16) g84.0<2>UB g84.0<16,16,1>W {align1}; +mov.sat (16) g85.0<2>UB g85.0<16,16,1>W {align1}; +mov.sat (16) g86.0<2>UB g86.0<16,16,1>W {align1}; +mov.sat (16) g87.0<2>UB g87.0<16,16,1>W {align1}; +mov.sat (16) g88.0<2>UB g88.0<16,16,1>W {align1}; +mov.sat (16) g89.0<2>UB g89.0<16,16,1>W {align1}; +mov.sat (16) g90.0<2>UB g90.0<16,16,1>W {align1}; +mov.sat (16) g91.0<2>UB g91.0<16,16,1>W {align1}; +mov.sat (16) g92.0<2>UB g92.0<16,16,1>W {align1}; +mov.sat (16) g93.0<2>UB g93.0<16,16,1>W {align1}; +mov.sat (16) g94.0<2>UB g94.0<16,16,1>W {align1}; +mov.sat (16) g95.0<2>UB g95.0<16,16,1>W {align1}; +mov.sat (16) g96.0<2>UB g96.0<16,16,1>W {align1}; +mov.sat (16) g97.0<2>UB g97.0<16,16,1>W {align1}; +mov.sat (16) g98.0<2>UB g98.0<16,16,1>W {align1}; + +and.nz (1) null g82.2<1,1,1>UW 0x20UW{align1}; +(f0) jmpi field_dct; + +mov (16) m1.0<1>UB g83.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g84.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g85.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g86.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g87.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g88.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g89.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g90.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g91.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g92.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g93.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g94.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g95.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g96.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g97.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g98.0<16,16,2>UB {align1}; +jmpi write_back; + +field_dct: +mov (16) m1.0<1>UB g83.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g91.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g84.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g92.0<16,16,2>UB {align1}; +mov (16) m3.0<1>UB g85.0<16,16,2>UB {align1}; +mov (16) m3.16<1>UB g93.0<16,16,2>UB {align1}; +mov (16) m4.0<1>UB g86.0<16,16,2>UB {align1}; +mov (16) m4.16<1>UB g94.0<16,16,2>UB {align1}; +mov (16) m5.0<1>UB g87.0<16,16,2>UB {align1}; +mov (16) m5.16<1>UB g95.0<16,16,2>UB {align1}; +mov (16) m6.0<1>UB g88.0<16,16,2>UB {align1}; +mov (16) m6.16<1>UB g96.0<16,16,2>UB {align1}; +mov (16) m7.0<1>UB g89.0<16,16,2>UB {align1}; +mov (16) m7.16<1>UB g97.0<16,16,2>UB {align1}; +mov (16) m8.0<1>UB g90.0<16,16,2>UB {align1}; +mov (16) m8.16<1>UB g98.0<16,16,2>UB {align1}; + +write_back: +send (16) 0 acc0<1>UW g31<8,8,1>UW write(0,0,2,0) mlen 9 rlen 0 {align1}; + +//U +mov (1) g31.8<1>UD 0x0070007UD { align1 }; +shr (2) g31.0<1>UD g82.12<2,2,1>UW 1D {align1}; +mov.sat (16) g99.0<2>UB g99.0<16,16,1>W {align1}; +mov.sat (16) g100.0<2>UB g100.0<16,16,1>W {align1}; +mov.sat (16) g101.0<2>UB g101.0<16,16,1>W {align1}; +mov.sat (16) g102.0<2>UB g102.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g99.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g100.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g101.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g102.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +//V +mov.sat (16) g103.0<2>UB g103.0<16,16,1>W {align1}; +mov.sat (16) g104.0<2>UB g104.0<16,16,1>W {align1}; +mov.sat (16) g105.0<2>UB g105.0<16,16,1>W {align1}; +mov.sat (16) g106.0<2>UB g106.0<16,16,1>W {align1}; + +mov (16) m1.0<1>UB g103.0<16,16,2>UB {align1}; +mov (16) m1.16<1>UB g104.0<16,16,2>UB {align1}; +mov (16) m2.0<1>UB g105.0<16,16,2>UB {align1}; +mov (16) m2.16<1>UB g106.0<16,16,2>UB {align1}; +send (16) 0 acc0<1>UW g31<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +OUT: +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; + +include(`do_iq_intra.g4i') +include(`idct.g4i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b new file mode 100644 index 000000000..4c1c8c44d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b @@ -0,0 +1,313 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x00000005, 0x2da42d29, 0x00210a48, 0x60006000 }, + { 0x00000008, 0x2da42d29, 0x00210da4, 0x000d000d }, + { 0x00000001, 0x2da60169, 0x00000000, 0x00080008 }, + { 0x00000008, 0x2da42529, 0x00210da6, 0x00210da4 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000009 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000005 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000001 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10020, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10030, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10040, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10050, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a1 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000009b }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000095 }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000008f }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000089 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000083 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000008f }, + { 0x00600040, 0x2a602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2aa02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ac02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2ae02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000085 }, + { 0x00600040, 0x2a702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ab02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ad02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2af02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000007b }, + { 0x00600040, 0x2b602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ba02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bc02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2be02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000071 }, + { 0x00600040, 0x2b702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2bb02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bd02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2bf02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000067 }, + { 0x00800040, 0x2c602dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2c802dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2ca02dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2cc02dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000061 }, + { 0x00800040, 0x2ce02dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2d002dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2d202dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2d402dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x4a6001b1, 0x00b10a60, 0x00000000 }, + { 0x80800001, 0x4a8001b1, 0x00b10a80, 0x00000000 }, + { 0x80800001, 0x4aa001b1, 0x00b10aa0, 0x00000000 }, + { 0x80800001, 0x4ac001b1, 0x00b10ac0, 0x00000000 }, + { 0x80800001, 0x4ae001b1, 0x00b10ae0, 0x00000000 }, + { 0x80800001, 0x4b0001b1, 0x00b10b00, 0x00000000 }, + { 0x80800001, 0x4b2001b1, 0x00b10b20, 0x00000000 }, + { 0x80800001, 0x4b4001b1, 0x00b10b40, 0x00000000 }, + { 0x80800001, 0x4b6001b1, 0x00b10b60, 0x00000000 }, + { 0x80800001, 0x4b8001b1, 0x00b10b80, 0x00000000 }, + { 0x80800001, 0x4ba001b1, 0x00b10ba0, 0x00000000 }, + { 0x80800001, 0x4bc001b1, 0x00b10bc0, 0x00000000 }, + { 0x80800001, 0x4be001b1, 0x00b10be0, 0x00000000 }, + { 0x80800001, 0x4c0001b1, 0x00b10c00, 0x00000000 }, + { 0x80800001, 0x4c2001b1, 0x00b10c20, 0x00000000 }, + { 0x80800001, 0x4c4001b1, 0x00b10c40, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05902000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01d21, 0x00450a4c, 0x00000001 }, + { 0x80800001, 0x4c6001b1, 0x00b10c60, 0x00000000 }, + { 0x80800001, 0x4c8001b1, 0x00b10c80, 0x00000000 }, + { 0x80800001, 0x4ca001b1, 0x00b10ca0, 0x00000000 }, + { 0x80800001, 0x4cc001b1, 0x00b10cc0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20c60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20c80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20ca0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20cc0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302001 }, + { 0x80800001, 0x4ce001b1, 0x00b10ce0, 0x00000000 }, + { 0x80800001, 0x4d0001b1, 0x00b10d00, 0x00000000 }, + { 0x80800001, 0x4d2001b1, 0x00b10d20, 0x00000000 }, + { 0x80800001, 0x4d4001b1, 0x00b10d40, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20ce0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20d00, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20d20, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20d40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d03e0, 0x05302002 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00000001, 0x2de001ad, 0x00218000, 0x00000000 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000041, 0x2e8025a5, 0x00210de0, 0x00210da4 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b.gen5 new file mode 100644 index 000000000..957f6fc3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/frame_intra.g4b.gen5 @@ -0,0 +1,313 @@ + { 0x00600001, 0x2a400021, 0x008d03e0, 0x00000000 }, + { 0x00200001, 0x23e00121, 0x00450a4c, 0x00000000 }, + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x00000005, 0x2da42d29, 0x00210a48, 0x60006000 }, + { 0x00000008, 0x2da42d29, 0x00210da4, 0x000d000d }, + { 0x00000001, 0x2da60169, 0x00000000, 0x00080008 }, + { 0x00000008, 0x2da42529, 0x00210da6, 0x00210da4 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10020, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10030, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10040, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10050, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000142 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000136 }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000012a }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000112 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000106 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000011e }, + { 0x00600040, 0x2a602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2aa02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ac02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2ae02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000010a }, + { 0x00600040, 0x2a702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2a902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ab02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2ad02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2af02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2b102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2b302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2b502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000f6 }, + { 0x00600040, 0x2b602dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b802dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2ba02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bc02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2be02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c002dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c202dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c402dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000e2 }, + { 0x00600040, 0x2b702dad, 0x00ae0400, 0x00800080 }, + { 0x00600040, 0x2b902dad, 0x00ae0420, 0x00800080 }, + { 0x00600040, 0x2bb02dad, 0x00ae0440, 0x00800080 }, + { 0x00600040, 0x2bd02dad, 0x00ae0460, 0x00800080 }, + { 0x00600040, 0x2bf02dad, 0x00ae0480, 0x00800080 }, + { 0x00600040, 0x2c102dad, 0x00ae04a0, 0x00800080 }, + { 0x00600040, 0x2c302dad, 0x00ae04c0, 0x00800080 }, + { 0x00600040, 0x2c502dad, 0x00ae04e0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000ce }, + { 0x00800040, 0x2c602dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2c802dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2ca02dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2cc02dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000c2 }, + { 0x00800040, 0x2ce02dad, 0x00ae0400, 0x00800080 }, + { 0x00800040, 0x2d002dad, 0x00ae0440, 0x00800080 }, + { 0x00800040, 0x2d202dad, 0x00ae0480, 0x00800080 }, + { 0x00800040, 0x2d402dad, 0x00ae04c0, 0x00800080 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x000f000f }, + { 0x80800001, 0x4a6001b1, 0x00b10a60, 0x00000000 }, + { 0x80800001, 0x4a8001b1, 0x00b10a80, 0x00000000 }, + { 0x80800001, 0x4aa001b1, 0x00b10aa0, 0x00000000 }, + { 0x80800001, 0x4ac001b1, 0x00b10ac0, 0x00000000 }, + { 0x80800001, 0x4ae001b1, 0x00b10ae0, 0x00000000 }, + { 0x80800001, 0x4b0001b1, 0x00b10b00, 0x00000000 }, + { 0x80800001, 0x4b2001b1, 0x00b10b20, 0x00000000 }, + { 0x80800001, 0x4b4001b1, 0x00b10b40, 0x00000000 }, + { 0x80800001, 0x4b6001b1, 0x00b10b60, 0x00000000 }, + { 0x80800001, 0x4b8001b1, 0x00b10b80, 0x00000000 }, + { 0x80800001, 0x4ba001b1, 0x00b10ba0, 0x00000000 }, + { 0x80800001, 0x4bc001b1, 0x00b10bc0, 0x00000000 }, + { 0x80800001, 0x4be001b1, 0x00b10be0, 0x00000000 }, + { 0x80800001, 0x4c0001b1, 0x00b10c00, 0x00000000 }, + { 0x80800001, 0x4c2001b1, 0x00b10c20, 0x00000000 }, + { 0x80800001, 0x4c4001b1, 0x00b10c40, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a42, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00800001, 0x20200232, 0x00b20a60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20b60, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20a80, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20b80, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b20aa0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b20ba0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00b20ac0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00b20bc0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00b20ae0, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00b20be0, 0x00000000 }, + { 0x00800001, 0x20c00232, 0x00b20b00, 0x00000000 }, + { 0x00800001, 0x20d00232, 0x00b20c00, 0x00000000 }, + { 0x00800001, 0x20e00232, 0x00b20b20, 0x00000000 }, + { 0x00800001, 0x20f00232, 0x00b20c20, 0x00000000 }, + { 0x00800001, 0x21000232, 0x00b20b40, 0x00000000 }, + { 0x00800001, 0x21100232, 0x00b20c40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x12082000 }, + { 0x00000001, 0x23e80061, 0x00000000, 0x00070007 }, + { 0x00200008, 0x23e01d21, 0x00450a4c, 0x00000001 }, + { 0x80800001, 0x4c6001b1, 0x00b10c60, 0x00000000 }, + { 0x80800001, 0x4c8001b1, 0x00b10c80, 0x00000000 }, + { 0x80800001, 0x4ca001b1, 0x00b10ca0, 0x00000000 }, + { 0x80800001, 0x4cc001b1, 0x00b10cc0, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20c60, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20c80, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20ca0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20cc0, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082001 }, + { 0x80800001, 0x4ce001b1, 0x00b10ce0, 0x00000000 }, + { 0x80800001, 0x4d0001b1, 0x00b10d00, 0x00000000 }, + { 0x80800001, 0x4d2001b1, 0x00b10d20, 0x00000000 }, + { 0x80800001, 0x4d4001b1, 0x00b10d40, 0x00000000 }, + { 0x00800001, 0x20200232, 0x00b20ce0, 0x00000000 }, + { 0x00800001, 0x20300232, 0x00b20d00, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00b20d20, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b20d40, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x508d03e0, 0x06082002 }, + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00000001, 0x2de001ad, 0x00218000, 0x00000000 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000041, 0x2e8025a5, 0x00210de0, 0x00210da4 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/idct.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/idct.g4i new file mode 100644 index 000000000..c1747d186 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/idct.g4i @@ -0,0 +1,147 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix in UB format + g3~g4:non intra IQ matrix in UB format + g5~g20:IDCT table + g56~g79:DCT data after IQ before idct + g83~g106: IDCT data after idct + g82: thread payload backup + g125: ip before idct +*/ +IDCT_START: +mov (1) g126.0<1>UD ip {align1}; +jmpi DO_IDCT; +add (16) g32<1>D g32<8,8,1>D ROW_ADD {compr}; +add (16) g34<1>D g34<8,8,1>D ROW_ADD {compr}; +add (16) g36<1>D g36<8,8,1>D ROW_ADD {compr}; +add (16) g38<1>D g38<8,8,1>D ROW_ADD {compr}; + +shr (16) g32<1>D g32<8,8,1>D ROW_SHIFT {compr}; +shr (16) g34<1>D g34<8,8,1>D ROW_SHIFT {compr}; +shr (16) g36<1>D g36<8,8,1>D ROW_SHIFT {compr}; +shr (16) g38<1>D g38<8,8,1>D ROW_SHIFT {compr}; + +mov (16) g110.0<1>W g32<16,8,2>W {align1}; +mov (16) g111.0<1>W g34<16,8,2>W {align1}; +mov (16) g112.0<1>W g36<16,8,2>W {align1}; +mov (16) g113.0<1>W g38<16,8,2>W {align1}; + +mov (1) g80.0<1>UD a0.0<1,1,1>UD {align1}; //save a0 +mov (1) a0.0<1>UD 0x0DB00DA0UD {align1}; //begin at g110.0, the output of idct_row.g4i +mov (1) g126.0<1>UD ip {align1}; +jmpi DO_IDCT; + +add (16) g32<1>D g32<8,8,1>D COL_ADD {compr}; +add (16) g34<1>D g34<8,8,1>D COL_ADD {compr}; +add (16) g36<1>D g36<8,8,1>D COL_ADD {compr}; +add (16) g38<1>D g38<8,8,1>D COL_ADD {compr}; + +shr (16) g32<1>D g32<8,8,1>D COL_SHIFT {compr}; +shr (16) g34<1>D g34<8,8,1>D COL_SHIFT {compr}; +shr (16) g36<1>D g36<8,8,1>D COL_SHIFT {compr}; +shr (16) g38<1>D g38<8,8,1>D COL_SHIFT {compr}; + +mov (1) a0.0<1>UD g80.0<1,1,1>UD {align1}; //restore a0 +add (1) ip g125.0<1,1,1>UD 0x20UD {align1}; //jump back + +DO_IDCT: +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; //increase the address +dp4 (16) g40<1>D g[a0.0]<8,8,1>W g5<8,8,1>D {align1 compr}; +dp4 (16) g42<1>D g[a0.0]<8,8,1>W g7<8,8,1>D {align1 compr}; +dp4 (16) g44<1>D g[a0.0]<8,8,1>W g9<8,8,1>D {align1 compr}; +dp4 (16) g46<1>D g[a0.0]<8,8,1>W g11<8,8,1>D {align1 compr}; +dp4 (16) g48<1>D g[a0.0]<8,8,1>W g13<8,8,1>D {align1 compr}; +dp4 (16) g50<1>D g[a0.0]<8,8,1>W g15<8,8,1>D {align1 compr}; +dp4 (16) g52<1>D g[a0.0]<8,8,1>W g17<8,8,1>D {align1 compr}; +dp4 (16) g54<1>D g[a0.0]<8,8,1>W g19<8,8,1>D {align1 compr}; +add (2) g32.0<1>D g40.0<8,1,8>D g40.16<8,1,8>D {align1}; +add (2) g33.0<1>D g42.0<8,1,8>D g42.16<8,1,8>D {align1}; +add (2) g34.0<1>D g44.0<8,1,8>D g44.16<8,1,8>D {align1}; +add (2) g35.0<1>D g46.0<8,1,8>D g46.16<8,1,8>D {align1}; +add (2) g36.0<1>D g48.0<8,1,8>D g48.16<8,1,8>D {align1}; +add (2) g37.0<1>D g50.0<8,1,8>D g50.16<8,1,8>D {align1}; +add (2) g38.0<1>D g52.0<8,1,8>D g52.16<8,1,8>D {align1}; +add (2) g39.0<1>D g54.0<8,1,8>D g54.16<8,1,8>D {align1}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +dp4 (16) g40<1>D g[a0.0]<8,8,1>W g5<8,8,1>D {align1 compr}; +dp4 (16) g42<1>D g[a0.0]<8,8,1>W g7<8,8,1>D {align1 compr}; +dp4 (16) g44<1>D g[a0.0]<8,8,1>W g9<8,8,1>D {align1 compr}; +dp4 (16) g46<1>D g[a0.0]<8,8,1>W g11<8,8,1>D {align1 compr}; +dp4 (16) g48<1>D g[a0.0]<8,8,1>W g13<8,8,1>D {align1 compr}; +dp4 (16) g50<1>D g[a0.0]<8,8,1>W g15<8,8,1>D {align1 compr}; +dp4 (16) g52<1>D g[a0.0]<8,8,1>W g17<8,8,1>D {align1 compr}; +dp4 (16) g54<1>D g[a0.0]<8,8,1>W g19<8,8,1>D {align1 compr}; +add (2) g32.8<1>D g40.0<8,1,8>D g40.16<8,1,8>D {align1}; +add (2) g33.8<1>D g42.0<8,1,8>D g42.16<8,1,8>D {align1}; +add (2) g34.8<1>D g44.0<8,1,8>D g44.16<8,1,8>D {align1}; +add (2) g35.8<1>D g46.0<8,1,8>D g46.16<8,1,8>D {align1}; +add (2) g36.8<1>D g48.0<8,1,8>D g48.16<8,1,8>D {align1}; +add (2) g37.8<1>D g50.0<8,1,8>D g50.16<8,1,8>D {align1}; +add (2) g38.8<1>D g52.0<8,1,8>D g52.16<8,1,8>D {align1}; +add (2) g39.8<1>D g54.0<8,1,8>D g54.16<8,1,8>D {align1}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +dp4 (16) g40<1>D g[a0.0]<8,8,1>W g5<8,8,1>D {align1 compr}; +dp4 (16) g42<1>D g[a0.0]<8,8,1>W g7<8,8,1>D {align1 compr}; +dp4 (16) g44<1>D g[a0.0]<8,8,1>W g9<8,8,1>D {align1 compr}; +dp4 (16) g46<1>D g[a0.0]<8,8,1>W g11<8,8,1>D {align1 compr}; +dp4 (16) g48<1>D g[a0.0]<8,8,1>W g13<8,8,1>D {align1 compr}; +dp4 (16) g50<1>D g[a0.0]<8,8,1>W g15<8,8,1>D {align1 compr}; +dp4 (16) g52<1>D g[a0.0]<8,8,1>W g17<8,8,1>D {align1 compr}; +dp4 (16) g54<1>D g[a0.0]<8,8,1>W g19<8,8,1>D {align1 compr}; +add (2) g32.16<1>D g40.0<8,1,8>D g40.16<8,1,8>D {align1}; +add (2) g33.16<1>D g42.0<8,1,8>D g42.16<8,1,8>D {align1}; +add (2) g34.16<1>D g44.0<8,1,8>D g44.16<8,1,8>D {align1}; +add (2) g35.16<1>D g46.0<8,1,8>D g46.16<8,1,8>D {align1}; +add (2) g36.16<1>D g48.0<8,1,8>D g48.16<8,1,8>D {align1}; +add (2) g37.16<1>D g50.0<8,1,8>D g50.16<8,1,8>D {align1}; +add (2) g38.16<1>D g52.0<8,1,8>D g52.16<8,1,8>D {align1}; +add (2) g39.16<1>D g54.0<8,1,8>D g54.16<8,1,8>D {align1}; + +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00200020UD {align1}; +dp4 (16) g40<1>D g[a0.0]<8,8,1>W g5<8,8,1>D {align1 compr}; +dp4 (16) g42<1>D g[a0.0]<8,8,1>W g7<8,8,1>D {align1 compr}; +dp4 (16) g44<1>D g[a0.0]<8,8,1>W g9<8,8,1>D {align1 compr}; +dp4 (16) g46<1>D g[a0.0]<8,8,1>W g11<8,8,1>D {align1 compr}; +dp4 (16) g48<1>D g[a0.0]<8,8,1>W g13<8,8,1>D {align1 compr}; +dp4 (16) g50<1>D g[a0.0]<8,8,1>W g15<8,8,1>D {align1 compr}; +dp4 (16) g52<1>D g[a0.0]<8,8,1>W g17<8,8,1>D {align1 compr}; +dp4 (16) g54<1>D g[a0.0]<8,8,1>W g19<8,8,1>D {align1 compr}; +add (2) g32.24<1>D g40.0<8,1,8>D g40.16<8,1,8>D {align1}; +add (2) g33.24<1>D g42.0<8,1,8>D g42.16<8,1,8>D {align1}; +add (2) g34.24<1>D g44.0<8,1,8>D g44.16<8,1,8>D {align1}; +add (2) g35.24<1>D g46.0<8,1,8>D g46.16<8,1,8>D {align1}; +add (2) g36.24<1>D g48.0<8,1,8>D g48.16<8,1,8>D {align1}; +add (2) g37.24<1>D g50.0<8,1,8>D g50.16<8,1,8>D {align1}; +add (2) g38.24<1>D g52.0<8,1,8>D g52.16<8,1,8>D {align1}; +add (2) g39.24<1>D g54.0<8,1,8>D g54.16<8,1,8>D {align1}; + +add (1) ip g126.0<1,1,1>UD 0x20UD {align1}; //jump back diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_intra.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_intra.g4i new file mode 100644 index 000000000..b01436137 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_intra.g4i @@ -0,0 +1,131 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix in UB format + g3~g4:non intra IQ matrix in UB format + g5~g20:IDCT table + g32~g55:DCT data before IQ + g56~g79:DCT data after IQ + g82: thread payload backup + g109: g109.0:q_scale_code, g109.4:intra_dc_mult, + g110: q_scale_code + g111: intra DC coefficient + g112~g115: intra IQ matrix in UW format (in order to use instruction compress), copys from g1~g2 + g125: ip before jump +*/ +and (1) g109.0<1>UW g82.8<1,1,1>UW 0x1fUW {align1}; //q_scale_code + +and (1) g109.4<1>UW g82.8<1,1,1>UW 0x6000UW {align1}; //intra_dc_presion +shr (1) g109.4<1>UW g109.4<1,1,1>UW 13UW {align1}; +mov (1) g109.6<1>UW 0x8UW {align1}; +shr (1) g109.4<1>UW g109.6<1,1,1>UW g109.4<1,1,1>UW {align1}; //intra_dc_mult + +and.z (1) null g82.8<1,1,1>UW 0x20UW {align1}; //if(q_scale_type==0) q_scale=q_scale_code*2; +(f0) jmpi Q_SCALE_TYPE_0; + +cmp.l (1) null g109.0<1,1,1>UW 9UW {align1}; //if(q_scale_type!=0) calculate q_scale +(f0) jmpi DO_IQ; +cmp.l (1) null g109.0<1,1,1>UW 17UW {align1}; +(f0) jmpi RANG_9_16; +cmp.l (1) null g109.0<1,1,1>UW 25UW {align1}; +(f0) jmpi RANG_17_24; + +RANG_25_31: +add (1) g109.0<1>UW g109.0<1,1,1>UW -25W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 3UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 64UW {align1}; +jmpi DO_IQ; + +RANG_9_16: +add (1) g109.0<1>UW g109.0<1,1,1>UW -9W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 1UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 10UW {align1}; +jmpi DO_IQ; + +RANG_17_24: +add (1) g109.0<1>UW g109.0<1,1,1>UW -17W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 2UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 28UW {align1}; +jmpi DO_IQ; + +Q_SCALE_TYPE_0: +shl (1) g109.0<1>UW g109.0<1,1,1>UW 1UD {align1}; + +DO_IQ: +mov (1) g110.0<1>UW g109.0<1,1,1>UW {align1}; + +mov (16) g112.0<1>UW g1.0<16,16,1>UB {align1}; +mov (16) g113.0<1>UW g1.16<16,16,1>UB {align1}; +mov (16) g114.0<1>UW g2.0<16,16,1>UB {align1}; +mov (16) g115.0<1>UW g2.16<16,16,1>UB {align1}; + +mov (1) a0.0<1>UD 0x03F003E0UD {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g56.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g57.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g58.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g59.0<1>W g122.0<16,8,2>W {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g60.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g61.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g62.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g63.0<1>W g122.0<16,8,2>W {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g64.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g65.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g66.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g67.0<1>W g122.0<16,8,2>W {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g68.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g69.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g70.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g71.0<1>W g122.0<16,8,2>W {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g72.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g73.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g74.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g75.0<1>W g122.0<16,8,2>W {align1}; + +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_INTRA; +mov (16) g76.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g77.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g78.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g79.0<1>W g122.0<16,8,2>W {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_non_intra.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_non_intra.g4i new file mode 100644 index 000000000..03c09aa0e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/iq_non_intra.g4i @@ -0,0 +1,150 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix in UB format + g3~g4:non intra IQ matrix in UB format + g5~g20:IDCT table + g32~g55:DCT data before IQ + g56~g79:DCT data after IQ + g82: thread payload backup + g109: q_scale_code + g110: q_scale_code + g112~g115: non intra IQ matrix in UW format (in order to use instruction compress), copys from g3~g4 + g125: ip before jump +*/ +and (1) g109.0<1>UW g82.8<1,1,1>UW 0x1fUW {align1}; //q_scale_code + +and.z (1) null g82.8<1,1,1>UW 0x20UW {align1}; //if(q_scale_type==0) q_scale=q_scale_code*2; +(f0) jmpi Q_SCALE_TYPE_0; + +cmp.l (1) null g109.0<1,1,1>UW 9UW {align1}; //if(q_scale_type!=0) calculate q_scale +(f0) jmpi DO_IQ; +cmp.l (1) null g109.0<1,1,1>UW 17UW {align1}; +(f0) jmpi RANG_9_16; +cmp.l (1) null g109.0<1,1,1>UW 25UW {align1}; +(f0) jmpi RANG_17_24; + +RANG_25_31: +add (1) g109.0<1>UW g109.0<1,1,1>UW -25W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 3UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 64UW {align1}; +jmpi DO_IQ; + +RANG_9_16: +add (1) g109.0<1>UW g109.0<1,1,1>UW -9W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 1UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 10UW {align1}; +jmpi DO_IQ; + +RANG_17_24: +add (1) g109.0<1>UW g109.0<1,1,1>UW -17W {align1}; +shl (1) g109.0<1>UW g109.0<1,1,1>UW 2UW {align1}; +add (1) g109.0<1>UW g109.0<1,1,1>UW 28UW {align1}; +jmpi DO_IQ; + +Q_SCALE_TYPE_0: +shl (1) g109.0<1>UW g109.0<1,1,1>UW 1UD {align1}; + +DO_IQ: +mov (1) g110.0<1>UW g109.0<1,1,1>UW {align1}; + +mov (16) g112.0<1>UW g3.0<16,16,1>UB {align1}; +mov (16) g113.0<1>UW g3.16<16,16,1>UB {align1}; +mov (16) g114.0<1>UW g4.0<16,16,1>UB {align1}; +mov (16) g115.0<1>UW g4.16<16,16,1>UB {align1}; + +mov (1) a0.0<1>UD 0x03F003E0UD {align1}; + +//Y0 +iq_non_intra_y0: +and.z (1) null g82.8<1,1,1>UW 0x800UW {align1}; +(f0) jmpi iq_non_intra_y1; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g56.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g57.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g58.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g59.0<1>W g122.0<16,8,2>W {align1}; + +//Y1 +iq_non_intra_y1: +and.z (1) null g82.8<1,1,1>UW 0x400UW {align1}; +(f0) jmpi iq_non_intra_y2; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g60.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g61.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g62.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g63.0<1>W g122.0<16,8,2>W {align1}; + +//Y2 +iq_non_intra_y2: +and.z (1) null g82.8<1,1,1>UW 0x200UW {align1}; +(f0) jmpi iq_non_intra_y3; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g64.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g65.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g66.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g67.0<1>W g122.0<16,8,2>W {align1}; + +//Y3 +iq_non_intra_y3: +and.z (1) null g82.8<1,1,1>UW 0x100UW {align1}; +(f0) jmpi iq_non_intra_u; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g68.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g69.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g70.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g71.0<1>W g122.0<16,8,2>W {align1}; + +//U +iq_non_intra_u: +and.z (1) null g82.8<1,1,1>UW 0x80UW {align1}; +(f0) jmpi iq_non_intra_v; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g72.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g73.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g74.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g75.0<1>W g122.0<16,8,2>W {align1}; + +//V +iq_non_intra_v: +and.z (1) null g82.8<1,1,1>UW 0x40UW {align1}; +(f0) jmpi iq_non_intra_end; +mov (1) g125.0<1>UD ip {align1}; +jmpi DO_IQ_NON_INTRA; +mov (16) g76.0<1>W g116.0<16,8,2>W {align1}; +mov (16) g77.0<1>W g118.0<16,8,2>W {align1}; +mov (16) g78.0<1>W g120.0<16,8,2>W {align1}; +mov (16) g79.0<1>W g122.0<16,8,2>W {align1}; + +iq_non_intra_end: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4a new file mode 100644 index 000000000..567caafe7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4a @@ -0,0 +1,190 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix in UB format + g3~g4:non intra IQ matrix in UB format + g5~g20:IDCT table + g32~g55:DCT data before IQ + g56~g79:DCT data after IQ + g83~g106: IDCT data after idct + g82: thread payload backup + g125: ip before jump +*/ +include(`iq_non_intra.g4i') + +define(`ROW_SHIFT', `11UD') //define for idct +define(`ROW_ADD', `0x400UD') +define(`COL_SHIFT', `20UD') +define(`COL_ADD', `0x80000UD') + +mov (1) a0.0<1>UD 0x06F006E0UD {align1};//0x06F006E0UD+0x00200020UD=0x07100700UD (g56.0 and g56.16,the start of DCT data) + +//Y0 +and.nz (1) null g82.8<1,1,1>UW 0x800UW {align1}; +(f0) jmpi do_idct_y0; + +mov (8) g83.0<1>UW 0UW {align1}; +mov (8) g84.0<1>UW 0UW {align1}; +mov (8) g85.0<1>UW 0UW {align1}; +mov (8) g86.0<1>UW 0UW {align1}; +mov (8) g87.0<1>UW 0UW {align1}; +mov (8) g88.0<1>UW 0UW {align1}; +mov (8) g89.0<1>UW 0UW {align1}; +mov (8) g90.0<1>UW 0UW {align1}; +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00800080UD {align1}; +jmpi block_y1; +do_idct_y0: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (8) g83.0<1>W g32.0<16,8,2>W {align1}; +mov (8) g84.0<1>W g33.0<16,8,2>W {align1}; +mov (8) g85.0<1>W g34.0<16,8,2>W {align1}; +mov (8) g86.0<1>W g35.0<16,8,2>W {align1}; +mov (8) g87.0<1>W g36.0<16,8,2>W {align1}; +mov (8) g88.0<1>W g37.0<16,8,2>W {align1}; +mov (8) g89.0<1>W g38.0<16,8,2>W {align1}; +mov (8) g90.0<1>W g39.0<16,8,2>W {align1}; + +//Y1 +block_y1: +and.nz (1) null g82.8<1,1,1>UW 0x400UW {align1}; +(f0) jmpi do_idct_y1; +mov (8) g83.16<1>UW 0UW {align1}; +mov (8) g84.16<1>UW 0UW {align1}; +mov (8) g85.16<1>UW 0UW {align1}; +mov (8) g86.16<1>UW 0UW {align1}; +mov (8) g87.16<1>UW 0UW {align1}; +mov (8) g88.16<1>UW 0UW {align1}; +mov (8) g89.16<1>UW 0UW {align1}; +mov (8) g90.16<1>UW 0UW {align1}; +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00800080UD {align1}; +jmpi block_y2; +do_idct_y1: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (8) g83.16<1>W g32.0<16,8,2>W {align1}; +mov (8) g84.16<1>W g33.0<16,8,2>W {align1}; +mov (8) g85.16<1>W g34.0<16,8,2>W {align1}; +mov (8) g86.16<1>W g35.0<16,8,2>W {align1}; +mov (8) g87.16<1>W g36.0<16,8,2>W {align1}; +mov (8) g88.16<1>W g37.0<16,8,2>W {align1}; +mov (8) g89.16<1>W g38.0<16,8,2>W {align1}; +mov (8) g90.16<1>W g39.0<16,8,2>W {align1}; + +//Y2 +block_y2: +and.nz (1) null g82.8<1,1,1>UW 0x200UW {align1}; +(f0) jmpi do_idct_y2; +mov (8) g91.0<1>UW 0UW {align1}; +mov (8) g92.0<1>UW 0UW {align1}; +mov (8) g93.0<1>UW 0UW {align1}; +mov (8) g94.0<1>UW 0UW {align1}; +mov (8) g95.0<1>UW 0UW {align1}; +mov (8) g96.0<1>UW 0UW {align1}; +mov (8) g97.0<1>UW 0UW {align1}; +mov (8) g98.0<1>UW 0UW {align1}; +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00800080UD {align1}; +jmpi block_y3; +do_idct_y2: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (8) g91.0<1>W g32.0<16,8,2>W {align1}; +mov (8) g92.0<1>W g33.0<16,8,2>W {align1}; +mov (8) g93.0<1>W g34.0<16,8,2>W {align1}; +mov (8) g94.0<1>W g35.0<16,8,2>W {align1}; +mov (8) g95.0<1>W g36.0<16,8,2>W {align1}; +mov (8) g96.0<1>W g37.0<16,8,2>W {align1}; +mov (8) g97.0<1>W g38.0<16,8,2>W {align1}; +mov (8) g98.0<1>W g39.0<16,8,2>W {align1}; + +//Y3 +block_y3: +and.nz (1) null g82.8<1,1,1>UW 0x100UW {align1}; +(f0) jmpi do_idct_y3; +mov (8) g91.16<1>UW 0UW {align1}; +mov (8) g92.16<1>UW 0UW {align1}; +mov (8) g93.16<1>UW 0UW {align1}; +mov (8) g94.16<1>UW 0UW {align1}; +mov (8) g95.16<1>UW 0UW {align1}; +mov (8) g96.16<1>UW 0UW {align1}; +mov (8) g97.16<1>UW 0UW {align1}; +mov (8) g98.16<1>UW 0UW {align1}; +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00800080UD {align1}; +jmpi block_u; +do_idct_y3: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (8) g91.16<1>W g32.0<16,8,2>W {align1}; +mov (8) g92.16<1>W g33.0<16,8,2>W {align1}; +mov (8) g93.16<1>W g34.0<16,8,2>W {align1}; +mov (8) g94.16<1>W g35.0<16,8,2>W {align1}; +mov (8) g95.16<1>W g36.0<16,8,2>W {align1}; +mov (8) g96.16<1>W g37.0<16,8,2>W {align1}; +mov (8) g97.16<1>W g38.0<16,8,2>W {align1}; +mov (8) g98.16<1>W g39.0<16,8,2>W {align1}; + +//U +block_u: +and.nz (1) null g82.8<1,1,1>UW 0x80UW {align1}; +(f0) jmpi do_idct_u; +mov (16) g99.0<1>UW 0UW {align1}; +mov (16) g100.0<1>UW 0UW {align1}; +mov (16) g101.0<1>UW 0UW {align1}; +mov (16) g102.0<1>UW 0UW {align1}; +add (1) a0.0<1>UD a0.0<1,1,1>UD 0x00800080UD {align1}; +jmpi block_v; +do_idct_u: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (16) g99.0<1>W g32.0<16,8,2>W {align1}; +mov (16) g100.0<1>W g34.0<16,8,2>W {align1}; +mov (16) g101.0<1>W g36.0<16,8,2>W {align1}; +mov (16) g102.0<1>W g38.0<16,8,2>W {align1}; + +//V +block_v: +and.nz (1) null g82.8<1,1,1>UW 0x40UW {align1}; +(f0) jmpi do_idct_v; +mov (16) g103.0<1>UW 0UW {align1}; +mov (16) g104.0<1>UW 0UW {align1}; +mov (16) g105.0<1>UW 0UW {align1}; +mov (16) g106.0<1>UW 0UW {align1}; +jmpi block_end; +do_idct_v: +mov (1) g125.0<1>UD ip {align1}; +jmpi IDCT_START; +mov (16) g103.0<1>W g32.0<16,8,2>W {align1}; +mov (16) g104.0<1>W g34.0<16,8,2>W {align1}; +mov (16) g105.0<1>W g36.0<16,8,2>W {align1}; +mov (16) g106.0<1>W g38.0<16,8,2>W {align1}; +block_end: + +add (1) ip g126.8<1,1,1>UD 0x20UD {align1}; //jump back +include(`do_iq_non_intra.g4i') +include(`idct.g4i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b new file mode 100644 index 000000000..262bff903 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b @@ -0,0 +1,307 @@ + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000011 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000009 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000005 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000001 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10060, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10070, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10080, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10090, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a1 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x04000400 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000099 }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x02000200 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000091 }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x01000100 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000089 }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00800080 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000081 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00400040 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000079 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00600001, 0x2a600169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2aa00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ac00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000077 }, + { 0x00600001, 0x2a6001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2a8001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2aa001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2ac001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2ae001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2b0001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2b2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2b4001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x04000400 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00600001, 0x2a700169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a900169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ab00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ad00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2af00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b100169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b300169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b500169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000061 }, + { 0x00600001, 0x2a7001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2a9001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2ab001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2ad001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2af001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2b1001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2b3001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2b5001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x02000200 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00600001, 0x2b600169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b800169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ba00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bc00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2be00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c000169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c200169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c400169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004b }, + { 0x00600001, 0x2b6001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2b8001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2ba001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2bc001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2be001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2c0001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2c2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2c4001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x01000100 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00600001, 0x2b700169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b900169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bb00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bd00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bf00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c100169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c300169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c500169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000035 }, + { 0x00600001, 0x2b7001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2b9001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2bb001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2bd001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2bf001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2c1001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2c3001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2c5001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x00800080 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00800001, 0x2c600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2c800169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2ca00169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2cc00169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000023 }, + { 0x00800001, 0x2c6001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2c8001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2ca001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2cc001ad, 0x00ae04c0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x00400040 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000005 }, + { 0x00800001, 0x2ce00169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d400169, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00800001, 0x2ce001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2d0001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2d2001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2d4001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fc8, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b.gen5 new file mode 100644 index 000000000..2371beb0c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/lib.g4b.gen5 @@ -0,0 +1,307 @@ + { 0x00000005, 0x2da02d29, 0x00210a48, 0x001f001f }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00200020 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00090009 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00110011 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x05000010, 0x20002d3c, 0x00210da0, 0x00190019 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffe7ffe7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00030003 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x00400040 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xfff7fff7 }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00010001 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x000a000a }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000040, 0x2da03d29, 0x00210da0, 0xffefffef }, + { 0x00000009, 0x2da02d29, 0x00210da0, 0x00020002 }, + { 0x00000040, 0x2da02d29, 0x00210da0, 0x001c001c }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00000009, 0x2da00d29, 0x00210da0, 0x00000001 }, + { 0x00000001, 0x2dc00129, 0x00210da0, 0x00000000 }, + { 0x00800001, 0x2e000229, 0x00b10060, 0x00000000 }, + { 0x00800001, 0x2e200229, 0x00b10070, 0x00000000 }, + { 0x00800001, 0x2e400229, 0x00b10080, 0x00000000 }, + { 0x00800001, 0x2e600229, 0x00b10090, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x03f003e0 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000142 }, + { 0x00800001, 0x270001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x272001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x274001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x276001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x04000400 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000132 }, + { 0x00800001, 0x278001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x27a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x27c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x27e001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x02000200 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000122 }, + { 0x00800001, 0x280001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x282001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x284001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x286001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x01000100 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000112 }, + { 0x00800001, 0x288001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x28a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x28c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x28e001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00800080 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000102 }, + { 0x00800001, 0x290001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x292001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x294001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x296001ad, 0x00ae0f40, 0x00000000 }, + { 0x01000005, 0x20002d3c, 0x00210a48, 0x00400040 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000f2 }, + { 0x00800001, 0x298001ad, 0x00ae0e80, 0x00000000 }, + { 0x00800001, 0x29a001ad, 0x00ae0ec0, 0x00000000 }, + { 0x00800001, 0x29c001ad, 0x00ae0f00, 0x00000000 }, + { 0x00800001, 0x29e001ad, 0x00ae0f40, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x06f006e0 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x08000800 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00600001, 0x2a600169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2aa00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ac00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000ee }, + { 0x00600001, 0x2a6001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2a8001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2aa001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2ac001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2ae001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2b0001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2b2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2b4001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x04000400 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00600001, 0x2a700169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a900169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ab00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ad00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2af00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b100169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b300169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b500169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000c2 }, + { 0x00600001, 0x2a7001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2a9001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2ab001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2ad001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2af001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2b1001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2b3001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2b5001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x02000200 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00600001, 0x2b600169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b800169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ba00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bc00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2be00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c000169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c200169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c400169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x00600001, 0x2b6001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2b8001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2ba001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2bc001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2be001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2c0001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2c2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2c4001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x01000100 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00600001, 0x2b700169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b900169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bb00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bd00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2bf00169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c100169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c300169, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2c500169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000006a }, + { 0x00600001, 0x2b7001ad, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x2b9001ad, 0x00ae0420, 0x00000000 }, + { 0x00600001, 0x2bb001ad, 0x00ae0440, 0x00000000 }, + { 0x00600001, 0x2bd001ad, 0x00ae0460, 0x00000000 }, + { 0x00600001, 0x2bf001ad, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x2c1001ad, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x2c3001ad, 0x00ae04c0, 0x00000000 }, + { 0x00600001, 0x2c5001ad, 0x00ae04e0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x00800080 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00800001, 0x2c600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2c800169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2ca00169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2cc00169, 0x00000000, 0x00000000 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00800080 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000046 }, + { 0x00800001, 0x2c6001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2c8001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2ca001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2cc001ad, 0x00ae04c0, 0x00000000 }, + { 0x02000005, 0x20002d3c, 0x00210a48, 0x00400040 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00800001, 0x2ce00169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2d400169, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x2fa00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00800001, 0x2ce001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2d0001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2d2001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2d4001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fc8, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2e8025a5, 0x008d8000, 0x008d0e00 }, + { 0x00802041, 0x2e8024a5, 0x008d0e80, 0x008c0da0 }, + { 0x0080200c, 0x2e802ca5, 0x008d0e80, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2ec025a5, 0x008d8000, 0x008d0e20 }, + { 0x00802041, 0x2ec024a5, 0x008d0ec0, 0x008c0da0 }, + { 0x0080200c, 0x2ec02ca5, 0x008d0ec0, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f0025a5, 0x008d8000, 0x008d0e40 }, + { 0x00802041, 0x2f0024a5, 0x008d0f00, 0x008c0da0 }, + { 0x0080200c, 0x2f002ca5, 0x008d0f00, 0x00040004 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802041, 0x2f4025a5, 0x008d8000, 0x008d0e60 }, + { 0x00802041, 0x2f4024a5, 0x008d0f40, 0x008c0da0 }, + { 0x0080200c, 0x2f402ca5, 0x008d0f40, 0x00040004 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00000400 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00000400 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00000400 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00000400 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x0000000b }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x0000000b }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x0000000b }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x0000000b }, + { 0x00800001, 0x2dc001ad, 0x00ae0400, 0x00000000 }, + { 0x00800001, 0x2de001ad, 0x00ae0440, 0x00000000 }, + { 0x00800001, 0x2e0001ad, 0x00ae0480, 0x00000000 }, + { 0x00800001, 0x2e2001ad, 0x00ae04c0, 0x00000000 }, + { 0x00000001, 0x2a000001, 0x00210200, 0x00000000 }, + { 0x00000001, 0x22000060, 0x00000000, 0x0db00da0 }, + { 0x00000001, 0x2fc00001, 0x00001400, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00802040, 0x24000ca5, 0x008d0400, 0x00080000 }, + { 0x00802040, 0x24400ca5, 0x008d0440, 0x00080000 }, + { 0x00802040, 0x24800ca5, 0x008d0480, 0x00080000 }, + { 0x00802040, 0x24c00ca5, 0x008d04c0, 0x00080000 }, + { 0x00802008, 0x24000ca5, 0x008d0400, 0x00000014 }, + { 0x00802008, 0x24400ca5, 0x008d0440, 0x00000014 }, + { 0x00802008, 0x24800ca5, 0x008d0480, 0x00000014 }, + { 0x00802008, 0x24c00ca5, 0x008d04c0, 0x00000014 }, + { 0x00000001, 0x22000020, 0x00210a00, 0x00000000 }, + { 0x00000040, 0x34000c20, 0x00210fa0, 0x00000020 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x240814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x242814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x244814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x246814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x248814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24a814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24c814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24e814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241014a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243014a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245014a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247014a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249014a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b014a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d014a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f014a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x22000c00, 0x00210200, 0x00200020 }, + { 0x00802054, 0x250015a5, 0x008d8000, 0x008d00a0 }, + { 0x00802054, 0x254015a5, 0x008d8000, 0x008d00e0 }, + { 0x00802054, 0x258015a5, 0x008d8000, 0x008d0120 }, + { 0x00802054, 0x25c015a5, 0x008d8000, 0x008d0160 }, + { 0x00802054, 0x260015a5, 0x008d8000, 0x008d01a0 }, + { 0x00802054, 0x264015a5, 0x008d8000, 0x008d01e0 }, + { 0x00802054, 0x268015a5, 0x008d8000, 0x008d0220 }, + { 0x00802054, 0x26c015a5, 0x008d8000, 0x008d0260 }, + { 0x00200040, 0x241814a5, 0x00800500, 0x00800510 }, + { 0x00200040, 0x243814a5, 0x00800540, 0x00800550 }, + { 0x00200040, 0x245814a5, 0x00800580, 0x00800590 }, + { 0x00200040, 0x247814a5, 0x008005c0, 0x008005d0 }, + { 0x00200040, 0x249814a5, 0x00800600, 0x00800610 }, + { 0x00200040, 0x24b814a5, 0x00800640, 0x00800650 }, + { 0x00200040, 0x24d814a5, 0x00800680, 0x00800690 }, + { 0x00200040, 0x24f814a5, 0x008006c0, 0x008006d0 }, + { 0x00000040, 0x34000c20, 0x00210fc0, 0x00000020 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_uv.g4i new file mode 100644 index 000000000..4598c85af --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_uv.g4i @@ -0,0 +1,46 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ + and.z (1) null mv1<1,1,1>W 1W {align1}; + (f0) jmpi L1; + and.z (1) null mv2<1,1,1>W 1W {align1}; + (f0) jmpi L2; + include(`read_field_x1y1_uv.g4i') + jmpi L5; +L2: + include(`read_field_x1y0_uv.g4i') + jmpi L5; +L1: + and.z (1) null mv2<1,1,1>W 1W {align1}; + (f0) jmpi L4; + include(`read_field_x0y1_uv.g4i') + jmpi L5; +L4: + include(`read_field_x0y0_uv.g4i') +L5: + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_y.g4i new file mode 100644 index 000000000..47d2ec40a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_field_y.g4i @@ -0,0 +1,45 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ + and.z (1) null mv1<1,1,1>W 1UW {align1}; + (f0) jmpi L1; + and.z (1) null mv2<1,1,1>W 1UW {align1}; + (f0) jmpi L2; + include(`read_field_x1y1_y.g4i') + jmpi L5; +L2: + include(`read_field_x1y0_y.g4i') + jmpi L5; +L1: + and.z (1) null mv2<1,1,1>W 1UW {align1}; + (f0) jmpi L4; + include(`read_field_x0y1_y.g4i') + jmpi L5; +L4: + include(`read_field_x0y0_y.g4i') +L5: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_uv.g4i new file mode 100644 index 000000000..00a5f2bfb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_uv.g4i @@ -0,0 +1,45 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + */ + + and.z (1) null mv1<1,1,1>UW 2UD {align1}; + (f0) jmpi LL1; + and.z (1) null mv2<1,1,1>UW 2UD {align1}; + (f0) jmpi LL2; + include(`read_frame_x1y1_uv.g4i') + jmpi LL5; +LL2: + include(`read_frame_x1y0_uv.g4i') + jmpi LL5; +LL1: + and.z (1) null mv2<1,1,1>UW 2UD {align1}; + (f0) jmpi LL4; + include(`read_frame_x0y1_uv.g4i') + jmpi LL5; +LL4: + include(`read_frame_x0y0_uv.g4i') +LL5: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_y.g4i new file mode 100644 index 000000000..88c80851b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/motion_frame_y.g4i @@ -0,0 +1,57 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + */ + +/* if (motion_vect.x & 1) { + * if (motion_vect.y & 1) + * half_pixel in x and y; + * else + * half_pixel in x; + * } else { + * if (motion_vect.y & 1) + * half_pixel y; + * else + * full_pixel_read; + * } + */ + + and.z (1) null mv1<1,1,1>UW 1UD {align1}; + (f0) jmpi LL1; + and.z (1) null mv2<1,1,1>UW 1UD {align1}; + (f0) jmpi LL2; + include(`read_frame_x1y1_y.g4i') + jmpi LL5; +LL2: + include(`read_frame_x1y0_y.g4i') + jmpi LL5; +LL1: + and.z (1) null mv2<1,1,1>UW 1UD {align1}; + (f0) jmpi LL4; + include(`read_frame_x0y1_y.g4i') + jmpi LL5; +LL4: + include(`read_frame_x0y0_y.g4i') +LL5: + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/null.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/null.g4a new file mode 100644 index 000000000..1e1dcea57 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/null.g4a @@ -0,0 +1,51 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * + */ +mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1}; +mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1}; +define(`UV_red',`0xffffffffUD') +define(`UV_white',`0x7f7f7f7fUD') +define(`UV_green',`0x00000000UD') + +mov(2) g6.0<1>UD g82.12<2,2,1>UW {align1}; +mov(1) g6.8<1>UD 0x000f000fUD { align1 }; +mov(16) m1<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m3<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m5<1>UD 0xFFFFFFFFUD {align1 compr}; +mov(16) m7<1>UD 0xFFFFFFFFUD {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(0, 0, 2, 0) mlen 9 rlen 0 { align1 }; + +/*Fill U buffer & V buffer with 0x7F*/ +shr (2) g6.0<1>UD g82.12<2,2,1>UW 1UW {align1}; + +mov(1) g6.8<1>UD 0x00070007UD { align1 }; +mov (16) m1<1>UD UV_white {align1 compr}; +//mov (16) m1<1>UD g1.0<16,8,1>UD {align1 compr}; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(2, 0, 2, 0) mlen 3 rlen 0 { align1 }; +send (16) 0 acc0<1>UW g6<8,8,1>UW write(1, 0, 2, 0) mlen 3 rlen 0 { align1 }; + +send (16) 0 acc0<1>UW g0<8,8,1>UW + thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_uv.g4i new file mode 100644 index 000000000..36e589a1f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_uv.g4i @@ -0,0 +1,50 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ + +mov (1) g115.8<1>UD 0x7000FUD {align1}; // 8*16/32=4 +send (16) 0 g40.0<1>UW g115<16,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g45.0<1>UW g115<16,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V + +mov (16) g32.0<1>UW g40.0<16,8,1>UB {align1}; +mov (16) g33.0<1>UW g41.0<16,8,1>UB {align1}; +mov (16) g34.0<1>UW g42.0<16,8,1>UB {align1}; +mov (16) g35.0<1>UW g43.0<16,8,1>UB {align1}; +mov (16) g36.0<1>UW g45.0<16,8,1>UB {align1}; +mov (16) g37.0<1>UW g46.0<16,8,1>UB {align1}; +mov (16) g38.0<1>UW g47.0<16,8,1>UB {align1}; +mov (16) g39.0<1>UW g48.0<16,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_y.g4i new file mode 100644 index 000000000..e54959819 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y0_y.g4i @@ -0,0 +1,57 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g115.8<1>UD 0x01FUD {align1}; +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g42.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g46.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +mov (1) g115.8<1>UD 0x07001FUD {align1}; +send (16) 0 g48.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; + +mov (16) g32.0<1>UW g40.0<16,16,1>UB {align1}; +mov (16) g33.0<1>UW g42.0<16,16,1>UB {align1}; +mov (16) g34.0<1>UW g44.0<16,16,1>UB {align1}; +mov (16) g35.0<1>UW g46.0<16,16,1>UB {align1}; +mov (16) g36.0<1>UW g48.0<16,16,1>UB {align1}; +mov (16) g37.0<1>UW g50.0<16,16,1>UB {align1}; +mov (16) g38.0<1>UW g52.0<16,16,1>UB {align1}; +mov (16) g39.0<1>UW g54.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_uv.g4i new file mode 100644 index 000000000..ac8030b8b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_uv.g4i @@ -0,0 +1,28 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ + +mov (1) g115.8<1>UD 0x07000FUD {align1}; // 8*16/32=4 +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g45.0<1>UW g115<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +mov (1) g115.8<1>UD 0xFUD {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 8UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g49.0<1>UW g115<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V + +avg (16) g32.0<1>UW g40.0<16,8,1>UB g41.0<16,8,1>UB {align1}; +avg (16) g33.0<1>UW g41.0<16,8,1>UB g42.0<16,8,1>UB {align1}; +avg (16) g34.0<1>UW g42.0<16,8,1>UB g43.0<16,8,1>UB {align1}; +avg (16) g35.0<1>UW g43.0<16,8,1>UB g44.0<16,8,1>UB {align1}; + +avg (16) g36.0<1>UW g45.0<16,8,1>UB g46.0<16,8,1>UB {align1}; +avg (16) g37.0<1>UW g46.0<16,8,1>UB g47.0<16,8,1>UB {align1}; +avg (16) g38.0<1>UW g47.0<16,8,1>UB g48.0<16,8,1>UB {align1}; +avg (16) g39.0<1>UW g48.0<16,8,1>UB g49.0<16,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_y.g4i new file mode 100644 index 000000000..7a7909fea --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x0y1_y.g4i @@ -0,0 +1,60 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g115.8<1>UD 0x01FUD {align1}; +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g42.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g46.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +mov (1) g115.8<1>UD 0x07001FUD {align1}; +send (16) 0 g48.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 8UD {align1}; +mov (1) g115.8<1>UD 0x1FUD {align1}; +send (16) 0 g56.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; + +avg.sat (16) g32.0<1>UW g40.0<16,16,1>UB g42.0<16,16,1>UB {align1}; +avg.sat (16) g33.0<1>UW g42.0<16,16,1>UB g44.0<16,16,1>UB {align1}; +avg.sat (16) g34.0<1>UW g44.0<16,16,1>UB g46.0<16,16,1>UB {align1}; +avg.sat (16) g35.0<1>UW g46.0<16,16,1>UB g48.0<16,16,1>UB {align1}; +avg.sat (16) g36.0<1>UW g48.0<16,16,1>UB g50.0<16,16,1>UB {align1}; +avg.sat (16) g37.0<1>UW g50.0<16,16,1>UB g52.0<16,16,1>UB {align1}; +avg.sat (16) g38.0<1>UW g52.0<16,16,1>UB g54.0<16,16,1>UB {align1}; +avg.sat (16) g39.0<1>UW g54.0<16,16,1>UB g56.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_uv.g4i new file mode 100644 index 000000000..4c3643826 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_uv.g4i @@ -0,0 +1,24 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ + +mov (1) g115.8<1>UD 0x07000FUD {align1}; // 8*16/32=4 +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V + +avg (16) g32.0<1>UW g40.0<16,8,1>UB g40.1<16,8,1>UB {align1}; +avg (16) g33.0<1>UW g41.0<16,8,1>UB g41.1<16,8,1>UB {align1}; +avg (16) g34.0<1>UW g42.0<16,8,1>UB g42.1<16,8,1>UB {align1}; +avg (16) g35.0<1>UW g43.0<16,8,1>UB g43.1<16,8,1>UB {align1}; + +avg (16) g36.0<1>UW g44.0<16,8,1>UB g44.1<16,8,1>UB {align1}; +avg (16) g37.0<1>UW g45.0<16,8,1>UB g45.1<16,8,1>UB {align1}; +avg (16) g38.0<1>UW g46.0<16,8,1>UB g46.1<16,8,1>UB {align1}; +avg (16) g39.0<1>UW g47.0<16,8,1>UB g47.1<16,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_y.g4i new file mode 100644 index 000000000..c8ff505d4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y0_y.g4i @@ -0,0 +1,57 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g115.8<1>UD 0x01FUD {align1}; +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g42.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g46.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +mov (1) g115.8<1>UD 0x07001FUD {align1}; +send (16) 0 g48.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; + +avg.sat (16) g32.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +avg.sat (16) g33.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +avg.sat (16) g34.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +avg.sat (16) g35.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +avg.sat (16) g36.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +avg.sat (16) g37.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +avg.sat (16) g38.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; +avg.sat (16) g39.0<1>UW g54.0<16,16,1>UB g54.1<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_uv.g4i new file mode 100644 index 000000000..816dd7247 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_uv.g4i @@ -0,0 +1,53 @@ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g115.8<1>UD 0x07000FUD {align1}; +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 4 {align1};//U +send (16) 0 g45.0<1>UW g115<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 4 {align1};//V +mov (1) g115.8<1>UD 0x01000FUD {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 8UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface_u, 2, 0, 2) mlen 1 rlen 1 {align1};//U +send (16) 0 g49.0<1>UW g115<8,8,1>UW read(surface_v, 2, 0, 2) mlen 1 rlen 1 {align1};//V +//U +add (16) g32.0<1>UW g40.0<16,8,1>UB g41.0<16,8,1>UB {align1}; +add (16) g33.0<1>UW g41.0<16,8,1>UB g42.0<16,8,1>UB {align1}; +add (16) g34.0<1>UW g42.0<16,8,1>UB g43.0<16,8,1>UB {align1}; +add (16) g35.0<1>UW g43.0<16,8,1>UB g44.0<16,8,1>UB {align1}; + +add (16) g32.0<1>UW g32.0<16,8,1>UW g40.1<16,8,1>UB {align1}; +add (16) g33.0<1>UW g33.0<16,8,1>UW g41.1<16,8,1>UB {align1}; +add (16) g34.0<1>UW g34.0<16,8,1>UW g42.1<16,8,1>UB {align1}; +add (16) g35.0<1>UW g35.0<16,8,1>UW g43.1<16,8,1>UB {align1}; + +add (16) g32.0<1>UW g32.0<16,8,1>UW g41.1<16,8,1>UB {align1}; +add (16) g33.0<1>UW g33.0<16,8,1>UW g42.1<16,8,1>UB {align1}; +add (16) g34.0<1>UW g34.0<16,8,1>UW g43.1<16,8,1>UB {align1}; +add (16) g35.0<1>UW g35.0<16,8,1>UW g44.1<16,8,1>UB {align1}; +//V +add (16) g36.0<1>UW g45.0<16,8,1>UB g46.0<16,8,1>UB {align1}; +add (16) g37.0<1>UW g46.0<16,8,1>UB g47.0<16,8,1>UB {align1}; +add (16) g38.0<1>UW g47.0<16,8,1>UB g48.0<16,8,1>UB {align1}; +add (16) g39.0<1>UW g48.0<16,8,1>UB g49.0<16,8,1>UB {align1}; + +add (16) g36.0<1>UW g36.0<16,8,1>UW g45.1<16,8,1>UB {align1}; +add (16) g37.0<1>UW g37.0<16,8,1>UW g46.1<16,8,1>UB {align1}; +add (16) g38.0<1>UW g38.0<16,8,1>UW g47.1<16,8,1>UB {align1}; +add (16) g39.0<1>UW g39.0<16,8,1>UW g48.1<16,8,1>UB {align1}; + +add (16) g36.0<1>UW g36.0<16,8,1>UW g46.1<16,8,1>UB {align1}; +add (16) g37.0<1>UW g37.0<16,8,1>UW g47.1<16,8,1>UB {align1}; +add (16) g38.0<1>UW g38.0<16,8,1>UW g48.1<16,8,1>UB {align1}; +add (16) g39.0<1>UW g39.0<16,8,1>UW g49.1<16,8,1>UB {align1}; + +shr (32) g32.0<1>UW g32.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g34.0<1>UW g34.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g36.0<1>UW g36.0<16,16,1>UW 2UW {align1 compr}; +shr (32) g38.0<1>UW g38.0<16,16,1>UW 2UW {align1 compr}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_y.g4i new file mode 100644 index 000000000..dcc9ebf05 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_field_x1y1_y.g4i @@ -0,0 +1,87 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data + g115: message descriptor for reading reference data */ +mov (1) g115.8<1>UD 0x01FUD {align1}; +send (16) 0 g40.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g42.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g44.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +send (16) 0 g46.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 2UD {align1}; +mov (1) g115.8<1>UD 0x07001FUD {align1}; +send (16) 0 g48.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 8 {align1}; +add (1) g115.4<1>UD g115.4<1,1,1>UD 8UD {align1}; +mov (1) g115.8<1>UD 0x1FUD {align1}; +send (16) 0 g56.0<1>UW g115<8,8,1>UW read(surface,2,0,2) mlen 1 rlen 1 {align1}; + +add (16) g32.0<1>UW g40.0<16,16,1>UB g42.0<16,16,1>UB {align1}; +add (16) g33.0<1>UW g42.0<16,16,1>UB g44.0<16,16,1>UB {align1}; +add (16) g34.0<1>UW g44.0<16,16,1>UB g46.0<16,16,1>UB {align1}; +add (16) g35.0<1>UW g46.0<16,16,1>UB g48.0<16,16,1>UB {align1}; +add (16) g36.0<1>UW g48.0<16,16,1>UB g50.0<16,16,1>UB {align1}; +add (16) g37.0<1>UW g50.0<16,16,1>UB g52.0<16,16,1>UB {align1}; +add (16) g38.0<1>UW g52.0<16,16,1>UB g54.0<16,16,1>UB {align1}; +add (16) g39.0<1>UW g54.0<16,16,1>UB g56.0<16,16,1>UB {align1}; + +add (16) g32.0<1>UW g32.0<16,16,1>UW g40.1<16,16,1>UB {align1}; +add (16) g33.0<1>UW g33.0<16,16,1>UW g42.1<16,16,1>UB {align1}; +add (16) g34.0<1>UW g34.0<16,16,1>UW g44.1<16,16,1>UB {align1}; +add (16) g35.0<1>UW g35.0<16,16,1>UW g46.1<16,16,1>UB {align1}; +add (16) g36.0<1>UW g36.0<16,16,1>UW g48.1<16,16,1>UB {align1}; +add (16) g37.0<1>UW g37.0<16,16,1>UW g50.1<16,16,1>UB {align1}; +add (16) g38.0<1>UW g38.0<16,16,1>UW g52.1<16,16,1>UB {align1}; +add (16) g39.0<1>UW g39.0<16,16,1>UW g54.1<16,16,1>UB {align1}; + +add (16) g32.0<1>UW g32.0<16,16,1>UW g42.1<16,16,1>UB {align1}; +add (16) g33.0<1>UW g33.0<16,16,1>UW g44.1<16,16,1>UB {align1}; +add (16) g34.0<1>UW g34.0<16,16,1>UW g46.1<16,16,1>UB {align1}; +add (16) g35.0<1>UW g35.0<16,16,1>UW g48.1<16,16,1>UB {align1}; +add (16) g36.0<1>UW g36.0<16,16,1>UW g50.1<16,16,1>UB {align1}; +add (16) g37.0<1>UW g37.0<16,16,1>UW g52.1<16,16,1>UB {align1}; +add (16) g38.0<1>UW g38.0<16,16,1>UW g54.1<16,16,1>UB {align1}; +add (16) g39.0<1>UW g39.0<16,16,1>UW g56.1<16,16,1>UB {align1}; + +shr (16) g32.0<1>UW g32.0<16,16,1>UW 2UW {align1}; +shr (16) g33.0<1>UW g33.0<16,16,1>UW 2UW {align1}; +shr (16) g34.0<1>UW g34.0<16,16,1>UW 2UW {align1}; +shr (16) g35.0<1>UW g35.0<16,16,1>UW 2UW {align1}; +shr (16) g36.0<1>UW g36.0<16,16,1>UW 2UW {align1}; +shr (16) g37.0<1>UW g37.0<16,16,1>UW 2UW {align1}; +shr (16) g38.0<1>UW g38.0<16,16,1>UW 2UW {align1}; +shr (16) g39.0<1>UW g39.0<16,16,1>UW 2UW {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_uv.g4i new file mode 100644 index 000000000..63f898f18 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_uv.g4i @@ -0,0 +1,49 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (1) g32.8<1>UD 0x007000fUD {align1}; +send (16) 0 g36.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 4 {align1}; +send (16) 0 g40.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 4 {align1}; + +mov (16) g74.0<1>UW g36.0<16,8,1>UB {align1}; +mov (16) g75.0<1>UW g37.0<16,8,1>UB {align1}; +mov (16) g76.0<1>UW g38.0<16,8,1>UB {align1}; +mov (16) g77.0<1>UW g39.0<16,8,1>UB {align1}; +mov (16) g78.0<1>UW g40.0<16,8,1>UB {align1}; +mov (16) g79.0<1>UW g41.0<16,8,1>UB {align1}; +mov (16) g80.0<1>UW g42.0<16,8,1>UB {align1}; +mov (16) g81.0<1>UW g43.0<16,8,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_y.g4i new file mode 100644 index 000000000..3ab5ccd5e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y0_y.g4i @@ -0,0 +1,58 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; + +mov (16) g58.0<1>UW g38.0<16,16,1>UB {align1}; +mov (16) g59.0<1>UW g39.0<16,16,1>UB {align1}; +mov (16) g60.0<1>UW g40.0<16,16,1>UB {align1}; +mov (16) g61.0<1>UW g41.0<16,16,1>UB {align1}; +mov (16) g62.0<1>UW g42.0<16,16,1>UB {align1}; +mov (16) g63.0<1>UW g43.0<16,16,1>UB {align1}; +mov (16) g64.0<1>UW g44.0<16,16,1>UB {align1}; +mov (16) g65.0<1>UW g45.0<16,16,1>UB {align1}; +mov (16) g66.0<1>UW g46.0<16,16,1>UB {align1}; +mov (16) g67.0<1>UW g47.0<16,16,1>UB {align1}; +mov (16) g68.0<1>UW g48.0<16,16,1>UB {align1}; +mov (16) g69.0<1>UW g49.0<16,16,1>UB {align1}; +mov (16) g70.0<1>UW g50.0<16,16,1>UB {align1}; +mov (16) g71.0<1>UW g51.0<16,16,1>UB {align1}; +mov (16) g72.0<1>UW g52.0<16,16,1>UB {align1}; +mov (16) g73.0<1>UW g53.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_uv.g4i new file mode 100644 index 000000000..6351ec50a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_uv.g4i @@ -0,0 +1,56 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDINg BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINgEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIgHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAgES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISINg FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINgS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g34.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 8 {align1}; //U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 8 {align1}; //V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g42.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 1 {align1}; //U +send (16) 0 g52.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 1 {align1}; //V + +//U +avg (8) g74.0<1>UW g34.0<8,8,1>UB g35.0<8,8,1>UB {align1}; +avg (8) g74.16<1>UW g35.0<8,8,1>UB g36.0<8,8,1>UB {align1}; +avg (8) g75.0<1>UW g36.0<8,8,1>UB g37.0<8,8,1>UB {align1}; +avg (8) g75.16<1>UW g37.0<8,8,1>UB g38.0<8,8,1>UB {align1}; +avg (8) g76.0<1>UW g38.0<8,8,1>UB g39.0<8,8,1>UB {align1}; +avg (8) g76.16<1>UW g39.0<8,8,1>UB g40.0<8,8,1>UB {align1}; +avg (8) g77.0<1>UW g40.0<8,8,1>UB g41.0<8,8,1>UB {align1}; +avg (8) g77.16<1>UW g41.0<8,8,1>UB g42.0<8,8,1>UB {align1}; + +//V +avg (8) g78.0<1>UW g44.0<8,8,1>UB g45.0<8,8,1>UB {align1}; +avg (8) g78.16<1>UW g45.0<8,8,1>UB g46.0<8,8,1>UB {align1}; +avg (8) g79.0<1>UW g46.0<8,8,1>UB g47.0<8,8,1>UB {align1}; +avg (8) g79.16<1>UW g47.0<8,8,1>UB g48.0<8,8,1>UB {align1}; +avg (8) g80.0<1>UW g48.0<8,8,1>UB g49.0<8,8,1>UB {align1}; +avg (8) g80.16<1>UW g49.0<8,8,1>UB g50.0<8,8,1>UB {align1}; +avg (8) g81.0<1>UW g50.0<8,8,1>UB g51.0<8,8,1>UB {align1}; +avg (8) g81.16<1>UW g51.0<8,8,1>UB g52.0<8,8,1>UB {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_y.g4i new file mode 100644 index 000000000..db3dcc556 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x0y1_y.g4i @@ -0,0 +1,61 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 1 {align1}; + +avg.sat (16) g58.0<1>UW g38.0<16,16,1>UB g39.0<16,16,1>UB {align1}; +avg.sat (16) g59.0<1>UW g39.0<16,16,1>UB g40.0<16,16,1>UB {align1}; +avg.sat (16) g60.0<1>UW g40.0<16,16,1>UB g41.0<16,16,1>UB {align1}; +avg.sat (16) g61.0<1>UW g41.0<16,16,1>UB g42.0<16,16,1>UB {align1}; +avg.sat (16) g62.0<1>UW g42.0<16,16,1>UB g43.0<16,16,1>UB {align1}; +avg.sat (16) g63.0<1>UW g43.0<16,16,1>UB g44.0<16,16,1>UB {align1}; +avg.sat (16) g64.0<1>UW g44.0<16,16,1>UB g45.0<16,16,1>UB {align1}; +avg.sat (16) g65.0<1>UW g45.0<16,16,1>UB g46.0<16,16,1>UB {align1}; +avg.sat (16) g66.0<1>UW g46.0<16,16,1>UB g47.0<16,16,1>UB {align1}; +avg.sat (16) g67.0<1>UW g47.0<16,16,1>UB g48.0<16,16,1>UB {align1}; +avg.sat (16) g68.0<1>UW g48.0<16,16,1>UB g49.0<16,16,1>UB {align1}; +avg.sat (16) g69.0<1>UW g49.0<16,16,1>UB g50.0<16,16,1>UB {align1}; +avg.sat (16) g70.0<1>UW g50.0<16,16,1>UB g51.0<16,16,1>UB {align1}; +avg.sat (16) g71.0<1>UW g51.0<16,16,1>UB g52.0<16,16,1>UB {align1}; +avg.sat (16) g72.0<1>UW g52.0<16,16,1>UB g53.0<16,16,1>UB {align1}; +avg.sat (16) g73.0<1>UW g53.0<16,16,1>UB g54.0<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_uv.g4i new file mode 100644 index 000000000..05736f0ee --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_uv.g4i @@ -0,0 +1,42 @@ +/* + * Copyright © 2008 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Zhang Hua jun + * Xing Dong sheng + * + */ + +mov (1) g32.8<1>UD 0x007000fUD {align1}; +send (16) 0 g34.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 4 {align1}; +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 4 {align1}; + +avg (16) g74.0<1>UW g34.0<16,8,1>UB g34.1<16,8,1>UB{align1}; +avg (16) g75.0<1>UW g35.0<16,8,1>UB g35.1<16,8,1>UB{align1}; +avg (16) g76.0<1>UW g36.0<16,8,1>UB g36.1<16,8,1>UB{align1}; +avg (16) g77.0<1>UW g37.0<16,8,1>UB g37.1<16,8,1>UB{align1}; + +avg (16) g78.0<1>UW g44.0<16,8,1>UB g44.1<16,8,1>UB{align1}; +avg (16) g79.0<1>UW g45.0<16,8,1>UB g45.1<16,8,1>UB{align1}; +avg (16) g80.0<1>UW g46.0<16,8,1>UB g46.1<16,8,1>UB{align1}; +avg (16) g81.0<1>UW g47.0<16,8,1>UB g47.1<16,8,1>UB{align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_y.g4i new file mode 100644 index 000000000..c236d1179 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y0_y.g4i @@ -0,0 +1,58 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; + +avg.sat (16) g58.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +avg.sat (16) g59.0<1>UW g39.0<16,16,1>UB g39.1<16,16,1>UB {align1}; +avg.sat (16) g60.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +avg.sat (16) g61.0<1>UW g41.0<16,16,1>UB g41.1<16,16,1>UB {align1}; +avg.sat (16) g62.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +avg.sat (16) g63.0<1>UW g43.0<16,16,1>UB g43.1<16,16,1>UB {align1}; +avg.sat (16) g64.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +avg.sat (16) g65.0<1>UW g45.0<16,16,1>UB g45.1<16,16,1>UB {align1}; +avg.sat (16) g66.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +avg.sat (16) g67.0<1>UW g47.0<16,16,1>UB g47.1<16,16,1>UB {align1}; +avg.sat (16) g68.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +avg.sat (16) g69.0<1>UW g49.0<16,16,1>UB g49.1<16,16,1>UB {align1}; +avg.sat (16) g70.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +avg.sat (16) g71.0<1>UW g51.0<16,16,1>UB g51.1<16,16,1>UB {align1}; +avg.sat (16) g72.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; +avg.sat (16) g73.0<1>UW g53.0<16,16,1>UB g53.1<16,16,1>UB {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_uv.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_uv.g4i new file mode 100644 index 000000000..2f741fa01 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_uv.g4i @@ -0,0 +1,74 @@ +/* + */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g34.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 8 {align1}; //U +send (16) 0 g44.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 8 {align1}; //V +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g42.0<1>UW g32<8,8,1>UW read(input_surface1, 2, 0, 2) mlen 1 rlen 1 {align1}; //U +send (16) 0 g52.0<1>UW g32<8,8,1>UW read(input_surface2, 2, 0, 2) mlen 1 rlen 1 {align1}; //V + +//U +add (8) g74.0<1>UW g34.0<8,8,1>UB g34.1<8,8,1>UB {align1}; +add (8) g74.16<1>UW g35.0<8,8,1>UB g35.1<8,8,1>UB {align1}; +add (8) g75.0<1>UW g36.0<8,8,1>UB g36.1<8,8,1>UB {align1}; +add (8) g75.16<1>UW g37.0<8,8,1>UB g37.1<8,8,1>UB {align1}; +add (8) g76.0<1>UW g38.0<8,8,1>UB g38.1<8,8,1>UB {align1}; +add (8) g76.16<1>UW g39.0<8,8,1>UB g39.1<8,8,1>UB {align1}; +add (8) g77.0<1>UW g40.0<8,8,1>UB g40.1<8,8,1>UB {align1}; +add (8) g77.16<1>UW g41.0<8,8,1>UB g41.1<8,8,1>UB {align1}; + +add (8) g74.0<1>UW g74.0<8,8,1>UW g35.0<8,8,1>UB {align1}; +add (8) g74.16<1>UW g74.16<8,8,1>UW g36.0<8,8,1>UB {align1}; +add (8) g75.0<1>UW g75.0<8,8,1>UW g37.0<8,8,1>UB {align1}; +add (8) g75.16<1>UW g75.16<8,8,1>UW g38.0<8,8,1>UB {align1}; +add (8) g76.0<1>UW g76.0<8,8,1>UW g39.0<8,8,1>UB {align1}; +add (8) g76.16<1>UW g76.16<8,8,1>UW g40.0<8,8,1>UB {align1}; +add (8) g77.0<1>UW g77.0<8,8,1>UW g41.0<8,8,1>UB {align1}; +add (8) g77.16<1>UW g77.16<8,8,1>UW g42.0<8,8,1>UB {align1}; + +add (8) g74.0<1>UW g74.0<8,8,1>UW g35.1<8,8,1>UB {align1}; +add (8) g74.16<1>UW g74.16<8,8,1>UW g36.1<8,8,1>UB {align1}; +add (8) g75.0<1>UW g75.0<8,8,1>UW g37.1<8,8,1>UB {align1}; +add (8) g75.16<1>UW g75.16<8,8,1>UW g38.1<8,8,1>UB {align1}; +add (8) g76.0<1>UW g76.0<8,8,1>UW g39.1<8,8,1>UB {align1}; +add (8) g76.16<1>UW g76.16<8,8,1>UW g40.1<8,8,1>UB {align1}; +add (8) g77.0<1>UW g77.0<8,8,1>UW g41.1<8,8,1>UB {align1}; +add (8) g77.16<1>UW g77.16<8,8,1>UW g42.1<8,8,1>UB {align1}; + +//V +add (8) g78.0<1>UW g44.0<8,8,1>UB g44.1<8,8,1>UB {align1}; +add (8) g78.16<1>UW g45.0<8,8,1>UB g45.1<8,8,1>UB {align1}; +add (8) g79.0<1>UW g46.0<8,8,1>UB g46.1<8,8,1>UB {align1}; +add (8) g79.16<1>UW g47.0<8,8,1>UB g47.1<8,8,1>UB {align1}; +add (8) g80.0<1>UW g48.0<8,8,1>UB g48.1<8,8,1>UB {align1}; +add (8) g80.16<1>UW g49.0<8,8,1>UB g49.1<8,8,1>UB {align1}; +add (8) g81.0<1>UW g50.0<8,8,1>UB g50.1<8,8,1>UB {align1}; +add (8) g81.16<1>UW g51.0<8,8,1>UB g51.1<8,8,1>UB {align1}; + +add (8) g78.0<1>UW g78.0<8,8,1>UW g45.0<8,8,1>UB {align1}; +add (8) g78.16<1>UW g78.16<8,8,1>UW g46.0<8,8,1>UB {align1}; +add (8) g79.0<1>UW g79.0<8,8,1>UW g47.0<8,8,1>UB {align1}; +add (8) g79.16<1>UW g79.16<8,8,1>UW g48.0<8,8,1>UB {align1}; +add (8) g80.0<1>UW g80.0<8,8,1>UW g49.0<8,8,1>UB {align1}; +add (8) g80.16<1>UW g80.16<8,8,1>UW g50.0<8,8,1>UB {align1}; +add (8) g81.0<1>UW g81.0<8,8,1>UW g51.0<8,8,1>UB {align1}; +add (8) g81.16<1>UW g81.16<8,8,1>UW g52.0<8,8,1>UB {align1}; + +add (8) g78.0<1>UW g78.0<8,8,1>UW g45.1<8,8,1>UB {align1}; +add (8) g78.16<1>UW g78.16<8,8,1>UW g46.1<8,8,1>UB {align1}; +add (8) g79.0<1>UW g79.0<8,8,1>UW g47.1<8,8,1>UB {align1}; +add (8) g79.16<1>UW g79.16<8,8,1>UW g48.1<8,8,1>UB {align1}; +add (8) g80.0<1>UW g80.0<8,8,1>UW g49.1<8,8,1>UB {align1}; +add (8) g80.16<1>UW g80.16<8,8,1>UW g50.1<8,8,1>UB {align1}; +add (8) g81.0<1>UW g81.0<8,8,1>UW g51.1<8,8,1>UB {align1}; +add (8) g81.16<1>UW g81.16<8,8,1>UW g52.1<8,8,1>UB {align1}; + +shr (16) g74.0<1>UW g74.0<16,16,1>UW 2UW {align1}; +shr (16) g75.0<1>UW g75.0<16,16,1>UW 2UW {align1}; +shr (16) g76.0<1>UW g76.0<16,16,1>UW 2UW {align1}; +shr (16) g77.0<1>UW g77.0<16,16,1>UW 2UW {align1}; +shr (16) g78.0<1>UW g78.0<16,16,1>UW 2UW {align1}; +shr (16) g79.0<1>UW g79.0<16,16,1>UW 2UW {align1}; +shr (16) g80.0<1>UW g80.0<16,16,1>UW 2UW {align1}; +shr (16) g81.0<1>UW g81.0<16,16,1>UW 2UW {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_y.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_y.g4i new file mode 100644 index 000000000..990927dc8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/mpeg2/vld/read_frame_x1y1_y.g4i @@ -0,0 +1,112 @@ +/* + * Copyright © 2009 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: + * Zou Nan hai + * Yan Li + * Liu Xi bin + */ +/* GRF allocation: + g1~g30: constant buffer + g1~g2:intra IQ matrix + g3~g4:non intra IQ matrix + g5~g20:IDCT table + g31: thread payload + g32: message descriptor for reading reference data + g58~g81:reference data + g82: thread payload backup + g83~g106:IDCT data */ +mov (1) g32.8<1>UD 0x007001FUD {align1}; +send (16) 0 g38.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +send (16) 0 g46.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 8 {align1}; +add (1) g32.4<1>UD g32.4<1,1,1>UD 8UD {align1}; +mov (1) g32.8<1>UD 0x1FUD {align1}; +send (16) 0 g54.0<1>UW g32<8,8,1>UW read(input_surface, 2, 0, 2) mlen 1 rlen 1 {align1}; + +add (16) g58.0<1>UW g38.0<16,16,1>UB g38.1<16,16,1>UB {align1}; +add (16) g59.0<1>UW g39.0<16,16,1>UB g39.1<16,16,1>UB {align1}; +add (16) g60.0<1>UW g40.0<16,16,1>UB g40.1<16,16,1>UB {align1}; +add (16) g61.0<1>UW g41.0<16,16,1>UB g41.1<16,16,1>UB {align1}; +add (16) g62.0<1>UW g42.0<16,16,1>UB g42.1<16,16,1>UB {align1}; +add (16) g63.0<1>UW g43.0<16,16,1>UB g43.1<16,16,1>UB {align1}; +add (16) g64.0<1>UW g44.0<16,16,1>UB g44.1<16,16,1>UB {align1}; +add (16) g65.0<1>UW g45.0<16,16,1>UB g45.1<16,16,1>UB {align1}; +add (16) g66.0<1>UW g46.0<16,16,1>UB g46.1<16,16,1>UB {align1}; +add (16) g67.0<1>UW g47.0<16,16,1>UB g47.1<16,16,1>UB {align1}; +add (16) g68.0<1>UW g48.0<16,16,1>UB g48.1<16,16,1>UB {align1}; +add (16) g69.0<1>UW g49.0<16,16,1>UB g49.1<16,16,1>UB {align1}; +add (16) g70.0<1>UW g50.0<16,16,1>UB g50.1<16,16,1>UB {align1}; +add (16) g71.0<1>UW g51.0<16,16,1>UB g51.1<16,16,1>UB {align1}; +add (16) g72.0<1>UW g52.0<16,16,1>UB g52.1<16,16,1>UB {align1}; +add (16) g73.0<1>UW g53.0<16,16,1>UB g53.1<16,16,1>UB {align1}; + +add (16) g58.0<1>UW g58.0<16,16,1>UW g39.0<16,16,1>UB {align1}; +add (16) g59.0<1>UW g59.0<16,16,1>UW g40.0<16,16,1>UB {align1}; +add (16) g60.0<1>UW g60.0<16,16,1>UW g41.0<16,16,1>UB {align1}; +add (16) g61.0<1>UW g61.0<16,16,1>UW g42.0<16,16,1>UB {align1}; +add (16) g62.0<1>UW g62.0<16,16,1>UW g43.0<16,16,1>UB {align1}; +add (16) g63.0<1>UW g63.0<16,16,1>UW g44.0<16,16,1>UB {align1}; +add (16) g64.0<1>UW g64.0<16,16,1>UW g45.0<16,16,1>UB {align1}; +add (16) g65.0<1>UW g65.0<16,16,1>UW g46.0<16,16,1>UB {align1}; +add (16) g66.0<1>UW g66.0<16,16,1>UW g47.0<16,16,1>UB {align1}; +add (16) g67.0<1>UW g67.0<16,16,1>UW g48.0<16,16,1>UB {align1}; +add (16) g68.0<1>UW g68.0<16,16,1>UW g49.0<16,16,1>UB {align1}; +add (16) g69.0<1>UW g69.0<16,16,1>UW g50.0<16,16,1>UB {align1}; +add (16) g70.0<1>UW g70.0<16,16,1>UW g51.0<16,16,1>UB {align1}; +add (16) g71.0<1>UW g71.0<16,16,1>UW g52.0<16,16,1>UB {align1}; +add (16) g72.0<1>UW g72.0<16,16,1>UW g53.0<16,16,1>UB {align1}; +add (16) g73.0<1>UW g73.0<16,16,1>UW g54.0<16,16,1>UB {align1}; + +add (16) g58.0<1>UW g58.0<16,16,1>UW g39.1<16,16,1>UB {align1}; +add (16) g59.0<1>UW g59.0<16,16,1>UW g40.1<16,16,1>UB {align1}; +add (16) g60.0<1>UW g60.0<16,16,1>UW g41.1<16,16,1>UB {align1}; +add (16) g61.0<1>UW g61.0<16,16,1>UW g42.1<16,16,1>UB {align1}; +add (16) g62.0<1>UW g62.0<16,16,1>UW g43.1<16,16,1>UB {align1}; +add (16) g63.0<1>UW g63.0<16,16,1>UW g44.1<16,16,1>UB {align1}; +add (16) g64.0<1>UW g64.0<16,16,1>UW g45.1<16,16,1>UB {align1}; +add (16) g65.0<1>UW g65.0<16,16,1>UW g46.1<16,16,1>UB {align1}; +add (16) g66.0<1>UW g66.0<16,16,1>UW g47.1<16,16,1>UB {align1}; +add (16) g67.0<1>UW g67.0<16,16,1>UW g48.1<16,16,1>UB {align1}; +add (16) g68.0<1>UW g68.0<16,16,1>UW g49.1<16,16,1>UB {align1}; +add (16) g69.0<1>UW g69.0<16,16,1>UW g50.1<16,16,1>UB {align1}; +add (16) g70.0<1>UW g70.0<16,16,1>UW g51.1<16,16,1>UB {align1}; +add (16) g71.0<1>UW g71.0<16,16,1>UW g52.1<16,16,1>UB {align1}; +add (16) g72.0<1>UW g72.0<16,16,1>UW g53.1<16,16,1>UB {align1}; +add (16) g73.0<1>UW g73.0<16,16,1>UW g54.1<16,16,1>UB {align1}; + +shr.sat (16) g58.0<1>UW g58.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g59.0<1>UW g59.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g60.0<1>UW g60.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g61.0<1>UW g61.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g62.0<1>UW g62.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g63.0<1>UW g63.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g64.0<1>UW g64.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g65.0<1>UW g65.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g66.0<1>UW g66.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g67.0<1>UW g67.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g68.0<1>UW g68.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g69.0<1>UW g69.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g70.0<1>UW g70.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g71.0<1>UW g71.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g72.0<1>UW g72.0<16,16,1>UW 2UW {align1}; +shr.sat (16) g73.0<1>UW g73.0<16,16,1>UW 2UW {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.am new file mode 100644 index 000000000..8901a2c1a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = gen5_6 gen7 gen75 gen8 gen9 + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.in new file mode 100644 index 000000000..782262233 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/Makefile.in @@ -0,0 +1,633 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders/post_processing +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SUBDIRS = gen5_6 gen7 gen75 gen8 gen9 + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.asm new file mode 100644 index 000000000..b62ab9125 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.asm @@ -0,0 +1,83 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: AYUV_Load_16x8.asm +//---------------------------------------------------------------- + + +#include "AYUV_Load_16x8.inc" + +// In order to load 64x8 AYUV data (16x8 pixels), we need to divide the data +// into two regions and load them separately. +// +// 32 byte 32 byte +//|----------------|----------------| +//| | | +//| A | B |8 +//| | | +//| | | +//|----------------|----------------| + +// Load the first 32x8 data block +// Packed data block should be loaded as 32x8 pixel block + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Block origin + shl (1) rMSGSRC.0<1>:d acc0:w 2:w { NoDDClr } // H. block origin need to be four times larger + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_YUV:ud { NoDDChk } // Block width and height (32x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_YUV(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV+nBI_CURRENT_SRC_YUV:ud + +//Load the second 32x8 data block +// Offset the origin X - move to next 32 colomns + add (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 32:w // Increase X origin by 8 + +// Size stays the same - 32x8 + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud // Copy message description to message header + send (8) udSRC_YUV(8)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV+nBI_CURRENT_SRC_YUV:ud + +// Give AYUV region addresses to address register + mov (1) SRC_YUV_OFFSET<1>:ud 0x00400038*32:ud //Address registers contain starting addresses of two halves + +//Directly move the data to destination + $for(0; r[SRC_YUV_OFFSET,%1*32+2]<8,4>:ub + mov (16) uwDEST_U(%1)<1> r[SRC_YUV_OFFSET,%1*32+1]<8,4>:ub + mov (16) uwDEST_V(%1)<1> r[SRC_YUV_OFFSET,%1*32+0]<8,4>:ub + } + \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.inc new file mode 100644 index 000000000..b6223ea9f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/AYUV_Load_16x8.inc @@ -0,0 +1,73 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: AYUV_Load_16x8.inc +// +// AYUV data are first loaded to bottom I/O REGION_2, then unpacked to planar data +// and stored in top I/O REGION_1 + +#undef nY_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block + +#define nDPR_BLOCK_SIZE_YUV nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // Y block size 32x8 +#define nDPR_MSG_SIZE_YUV nRESLEN_8 // # of MRF's to hold Y block data (8) + +//Temporary storage for unpacked AYUV data +#define rUNPACK_TEMP REG(r,nTEMP0) +.declare udUNPACK_TEMP Base=rUNPACK_TEMP ElementSize=4 SrcRegion=<8;8,1> Type=ud //1 GRF +.declare ubUNPACK_TEMP Base=rUNPACK_TEMP ElementSize=1 SrcRegion=<32;32,1> Type=ub //1 GRF + +.declare ubBOT_Y_IO Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(32,1) Type=ub + + +#define udSRC_YUV udBOT_Y_IO +#define ubSRC_YUV ubBOT_Y_IO +#define nSRC_YUV_REG nBOT_Y + +#define uwDEST_Y uwTOP_Y +#define uwDEST_U uwTOP_U +#define uwDEST_V uwTOP_V + +#define SRC_YUV_OFFSET a0.0 + +#define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +// End of AYUV_Load_16x8.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Expansion.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Expansion.inc new file mode 100644 index 000000000..b34a72f5c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Expansion.inc @@ -0,0 +1,61 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: Expansion.inc +// Number of U/V rows per block definition +#undef nUV_NUM_OF_ROWS +#ifdef EXPAND_9x5 + #define nUV_NUM_OF_ROWS 6 +#else + #define nUV_NUM_OF_ROWS 8 +#endif + +// Source/destination region definitions +#undef uwDEST_U +#undef uwDEST_V +#if (nSRC_REGION==nREGION_1) + #define uwDEST_U uwTOP_U + #define uwDEST_V uwTOP_V +#elif (nSRC_REGION==nREGION_2) + #define uwDEST_U uwBOT_U + #define uwDEST_V uwBOT_V +#endif + +// End of Expansion.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x4.asm new file mode 100644 index 000000000..ff6fe0d60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x4.asm @@ -0,0 +1,77 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: IMC3_Load_8x4.asm +// +//---------------------------------------------------------------- + +#define IMC3_LOAD_8x4 +#include "PL3_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Block width and height (16x8) + + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 8x4 planar U and V ----------------------------------------------------- + asr (2) rMSGSRC.0<1>:d rMSGSRC.0<2;2,1>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (8x4) + + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_U:ud + mov (8) mMSGHDRV<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_V(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_V:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + mov (16) uwDEST_U(0, %1*16)<1> ubSRC_U(0, %1*16) + mov (16) uwDEST_V(0, %1*16)<1> ubSRC_V(0, %1*16) + } + +// End of IMC3_Load_8x4 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x5.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x5.asm new file mode 100644 index 000000000..9975d00be --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_8x5.asm @@ -0,0 +1,77 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: IMC3_Load_8x5.asm +// +//---------------------------------------------------------------- + +#define IMC3_LOAD_8x5 +#include "PL3_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Block width and height (16x8) + + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 8x5 planar U and V ----------------------------------------------------- + asr (2) rMSGSRC.0<1>:d rMSGSRC.0<2;2,1>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (8x5) + + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_U:ud + mov (8) mMSGHDRV<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_V(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_V:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + mov (16) uwDEST_U(0, %1*16)<1> ubSRC_U(0, %1*16) + mov (16) uwDEST_V(0, %1*16)<1> ubSRC_V(0, %1*16) + } + +// End of IMC3_Load_8x5 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_9x5.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_9x5.asm new file mode 100644 index 000000000..4c835c968 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/IMC3_Load_9x5.asm @@ -0,0 +1,80 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: IMC3_Load_9x5.asm +// +//---------------------------------------------------------------- +// This module loads 16x8 Y, 9x5 U and 9x5 V planar data blocks for CSC module +// and stores it in byte-aligned format. +//---------------------------------------------------------------- + +#define IMC3_LOAD_9x5 +#include "PL3_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Block width and height (16x8) + + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 9x5 planar U and V ----------------------------------------------------- + asr (2) rMSGSRC.0<1>:d rMSGSRC.0<2;2,1>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (12x5) + + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_U:ud + mov (8) mMSGHDRV<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_V(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_V:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for(nUV_NUM_OF_ROWS-2; >-1; -1) { + mov (16) uwDEST_U(0, %1*16)<1> ubSRC_U(0, %1*16) + mov (16) uwDEST_V(0, %1*16)<1> ubSRC_V(0, %1*16) + } + +// End of IMC3_Load_9x5 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Init_All_Regs.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Init_All_Regs.asm new file mode 100644 index 000000000..a87c72b0b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Init_All_Regs.asm @@ -0,0 +1,48 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef GT // to remove error messages of un-initialized GRF + .declare udGRF_space Base=r0.0 ElementSize=4 SrcRegion=REGION(8,1) Type=ud + + $for (7; <80; 1) { + mov (8) udGRF_space(%1)<1> 0:ud + } +#else +#endif \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop.asm new file mode 100644 index 000000000..65e5f4272 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop.asm @@ -0,0 +1,123 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +///////////////////////////////////////////////////////////////////////////////// +// Multiple_Loop.asm + + +// This lable is for satisfying component kernel build. +// DL will remove this label and reference the real one in Multiple_Loop_Head.asm. +#if defined(COMPONENT) +VIDEO_PROCESSING_LOOP: +#endif + + +//===== Possible build flags for component kernels +// 1) INC_SCALING +// 2) INC_BLENDING +// 3) INC_BLENDING and INC_SCALING +// 4) (no flags) + + +#define MxN_MULTIPLE_BLOCKS + +//------------------------------------------------------------------------------ +#if defined(MxN_MULTIPLE_BLOCKS) +// Do Multiple Block Processing ------------------------------------------------ + + // The 1st block has been processed before entering the loop + + // Processed all blocks? + add.z.f0.0 (1) wNUM_BLKS:w wNUM_BLKS:w -1:w + + // Reached multi-block width? + add (1) wORIX:w wORIX:w 16:w + cmp.l.f0.1 (1) null:w wORIX:w wFRAME_ENDX:w // acc0.0 has wORIX + + #if defined(INC_SCALING) + // Update SRC_VID_H_ORI for scaling + mul (1) REG(r,nTEMP0):f fVIDEO_STEP_X:f 16.0:f + add (1) fSRC_VID_H_ORI:f REG(r,nTEMP0):f fSRC_VID_H_ORI:f + #endif + + #if defined(INC_BLENDING) + // Update SRC_ALPHA_H_ORI for blending + mul (1) REG(r,nTEMP0):f fALPHA_STEP_X:f 16.0:f + add (1) fSRC_ALPHA_H_ORI:f REG(r,nTEMP0):f fSRC_ALPHA_H_ORI:f + #endif + + (f0.0)jmpi (1) END_VIDEO_PROCESSING // All blocks are done - Exit loop + + // blocks in the middle of the loop (neither the first nor the last one)? + // it may be on the left edge (Mx1) or not (1xN) + mov (1) uwBLOCK_MASK_H<1>:uw uwBLOCK_MASK_H_MIDDLE:uw + + // the last block? + cmp.e.f0.0 (1) null:w wNUM_BLKS:w 1:w + (f0.0) mov (1) uwBLOCK_MASK_H<1>:uw uwBLOCK_MASK_H_RIGHT:uw + (f0.0) mov (1) ubBLOCK_MASK_V<1>:ub ubBLOCK_MASK_V_BOTTOM:ub + + (f0.1)jmpi (1) VIDEO_PROCESSING_LOOP // If not the end of row, goto the beginning of the loop + + //If end of row, restart Horizontal offset and calculate Vertical offsets next row. + mov (1) wORIX:w wCOPY_ORIX:w + add (1) wORIY:w wORIY:w 8:w + + #if defined(INC_SCALING) + // Update SRC_VID_H_ORI and SRC_VID_V_ORI for scaling + mov (1) fSRC_VID_H_ORI:f fFRAME_VID_ORIX:f // Reset normalised X origin to 0 for video and alpha + mul (1) REG(r,nTEMP0):f fVIDEO_STEP_Y:f 8.0:f + add (1) fSRC_VID_V_ORI:f REG(r,nTEMP0):f fSRC_VID_V_ORI:f + #endif + + #if defined(INC_BLENDING) + // Update SRC_ALPHA_H_ORI and SRC_ALPHA_V_ORI for blending + mov (1) fSRC_ALPHA_H_ORI:f fFRAME_ALPHA_ORIX:f // Reset normalised X origin to 0 for video and alpha + mul (1) REG(r,nTEMP0):f fALPHA_STEP_Y:f 8.0:f + add (1) fSRC_ALPHA_V_ORI:f REG(r,nTEMP0):f fSRC_ALPHA_V_ORI:f + #endif + + jmpi (1) VIDEO_PROCESSING_LOOP // Continue Loop + +END_VIDEO_PROCESSING: + nop + +#endif +END_THREAD // End of Thread diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop_Head.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop_Head.asm new file mode 100644 index 000000000..4780d938e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/Multiple_Loop_Head.asm @@ -0,0 +1,53 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +////////////////////////////////////////////////////////////////////////////////// +// Multiple_Loop_Head.asm +// This code sets up the loop control for multiple blocks per thread + + mul (1) wFRAME_ENDX:w ubBLK_CNT_X:ub 16:uw { NoDDClr } // Build multi-block loop counters + mov (1) wNUM_BLKS:w ubNUM_BLKS:ub { NoDDClr, NoDDChk } // Copy num blocks to word variable + mov (1) wCOPY_ORIX:w wORIX:w { NoDDChk } // Copy multi-block origin in pixel + mov (2) fFRAME_VID_ORIX<1>:f fSRC_VID_H_ORI<4;2,2>:f // Copy src video origin for scaling, and alpha origin for blending + add (1) wFRAME_ENDX:w wFRAME_ENDX:w wORIX:w // Continue building multi-block loop counters + +VIDEO_PROCESSING_LOOP: // Loop back entry point as the biginning of the loop for multiple blocks + +// Beginning of the loop diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_4x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_4x8.asm new file mode 100644 index 000000000..170085329 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_4x8.asm @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: NV11_Load_4x8.asm +//---------------------------------------------------------------- + +#define NV11_LOAD_4x8 +#include "PL2_Load.inc" + +// Load 16x8 NV11 Y ------------------------------------------------------------ + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 8x8 NV11 UV ---------------------------------------------------------- + asr (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (8x8) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for (nUV_NUM_OF_ROWS/4-1; >-1; -1) { + mov (16) uwDEST_U(0,%1*16)<1> ubSRC_U(0,%1*32)<32;16,2> + mov (16) uwDEST_V(0,%1*16)<1> ubSRC_U(0,%1*32+1)<32;16,2> + } + +// End of NV11_Load_4x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_5x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_5x8.asm new file mode 100644 index 000000000..869d7bf08 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV11_Load_5x8.asm @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: NV11_Load_5x8.asm +//---------------------------------------------------------------- + +#define NV11_LOAD_5x8 +#include "PL2_Load.inc" + +// Load 16x8 NV11 Y ------------------------------------------------------------ + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 12x8 NV11 UV --------------------------------------------------------- + asr (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (12x8) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + mov (16) uwDEST_U(0,%1*16)<1> ubSRC_U(0,%1*32)<16;8,2> + mov (16) uwDEST_V(0,%1*16)<1> ubSRC_U(0,%1*32+1)<16;8,2> + } + +// End of NV11_Load_5x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x4.asm new file mode 100644 index 000000000..19bcd76da --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x4.asm @@ -0,0 +1,100 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: NV12_Load_8x4.asm +//---------------------------------------------------------------- + +#define NV12_LOAD_8x4 +#include "PL2_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 8x4 planar U and V ----------------------------------------------------- + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (16x4) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if defined(FIX_POINT_CONVERSION) || defined(FLOAT_POINT_CONVERSION) + // load NV12 and save it as packed AYUV to dst (64x8) + + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + // #### Y + mov (8) ubDEST_Y(0,%1*16*4)<4> ubSRC_Y(0,%1*16)<0;8,1> + mov (8) ubDEST_Y(0,(%1*16+8)*4)<4> ubSRC_Y(0,%1*16+8)<0;8,1> + + // #### U/V + // error from compile: "Invalid horiz size 8", so I have to repeat UV first + // mov (4) ubDEST_Y(0,%1*16*4+1)<8> ubSRC_U(0,%1/2*16)<0;4,2> + // mov (4) ubDEST_Y(0,%1*16*4+1+32)<8> ubSRC_U(0,%1/2*16+8)<0;4,2> + + // repeate U/V for each one + mov (8) REG2(r,nTEMP18,0)<2>:uw uwSRC_U(0,%1/2*8)<0;8,1> + mov (8) REG2(r,nTEMP18,1)<2>:uw uwSRC_U(0,%1/2*8)<0;8,1> + + // mov U/V to ubDEST + mov (8) ubDEST_Y(0,%1*16*4+1)<4> REG2(r,nTEMP18,0)<0;8,2>:ub + mov (8) ubDEST_Y(0,%1*16*4+1+32)<4> REG2(r,nTEMP18,16)<0;8,2>:ub + + mov (8) ubDEST_Y(0,%1*16*4+2)<4> REG2(r,nTEMP18,1)<0;8,2>:ub + mov (8) ubDEST_Y(0,%1*16*4+2+32)<4> REG2(r,nTEMP18,17)<0;8,2>:ub + } +#else + #if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } + #endif + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + // why "mov (16)"? should it be 8? + mov (16) uwDEST_U(0,%1*16)<1> ubSRC_U(0,%1*32)<32;16,2> + mov (16) uwDEST_V(0,%1*16)<1> ubSRC_U(0,%1*32+1)<32;16,2> + } + +#endif + +// End of NV12_Load_8x4 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x5.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x5.asm new file mode 100644 index 000000000..9cc3c2988 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_8x5.asm @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: NV12_Load_8x5.asm +//---------------------------------------------------------------- + +#define NV12_LOAD_8x5 +#include "PL2_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 8x5 planar U and V ----------------------------------------------------- + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (16x5) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + mov (16) uwDEST_U(0,%1*16)<1> ubSRC_U(0,%1*32)<16;8,2> + mov (16) uwDEST_V(0,%1*16)<1> ubSRC_U(0,%1*32+1)<16;8,2> + } + +// End of NV12_Load_8x5 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_9x5.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_9x5.asm new file mode 100644 index 000000000..101de116b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/NV12_Load_9x5.asm @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: NV12_Load_9x5.asm +//---------------------------------------------------------------- + +#define NV12_LOAD_9x5 +#include "PL2_Load.inc" + +// Load 16x8 planar Y ---------------------------------------------------------- + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + +// Load 9x5 planar U and V ----------------------------------------------------- + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (20x5) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (nY_NUM_OF_ROWS-1; >-1; -1) { + mov (16) uwDEST_Y(0,%1*16)<1> ubSRC_Y(0,%1*16) + } +#endif + $for(nUV_NUM_OF_ROWS-2; >-1; -1) { + mov (16) uwDEST_U(0,%1*16)<1> ubSRC_U(0,%1*32)<16;8,2> + mov (16) uwDEST_V(0,%1*16)<1> ubSRC_U(0,%1*32+1)<16;8,2> + } + +// End of NV12_Load_9x5 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_8x8.asm new file mode 100644 index 000000000..ec9b35c02 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_8x8.asm @@ -0,0 +1,71 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: P208_Load_8x8.asm +//---------------------------------------------------------------- + +#define P208_LOAD_8x8 +#include "PL2_Load.inc" + + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y Block width and height (16x8) (U/V block size is the same) + +// Load 16x8 P208 Y ------------------------------------------------------------ +#if !defined(LOAD_UV_ONLY) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + + // Load 16x8 planar UV ----------------------------------------------------- + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (0; + mov (16) uwDEST_V(0,%1*16) ubSRC_U(0,%1*32+1)<32;16,2> + } + +// End of P208_Load_8x8.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_9x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_9x8.asm new file mode 100644 index 000000000..76ab04089 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/P208_Load_9x8.asm @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: P208_Load_9x8.asm +//---------------------------------------------------------------- + +#define P208_LOAD_9x8 +#include "PL2_Load.inc" + + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin + +// Load 16x8 P208 Y ------------------------------------------------------------ +#if !defined(LOAD_UV_ONLY) + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_Y:ud // Y block width and height (16x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_CURRENT_SRC_Y:ud +#endif + + // Load 16x8 planar UV ----------------------------------------------------- + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (20x8) + mov (8) mMSGHDRU<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDRU udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_CURRENT_SRC_UV:ud + +// Convert to word-aligned format ---------------------------------------------- +#if !defined(LOAD_UV_ONLY) + $for (0; + mov (16) uwDEST_V(0,%1*16) ubSRC_U(0,%1*32+1)<32;16,2> + } + +// End of P208_Load_9x8.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load.inc new file mode 100644 index 000000000..bfe34959e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load.inc @@ -0,0 +1,72 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PA_Load.inc +// +// YUV422 data are first loaded to bottom I/O REGION_2, then unpacked to planar data +// and stored in top I/O REGION_1 + +#undef nY_NUM_OF_ROWS +#undef nUV_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block +#define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + +#if defined(PA_LOAD_8x8) + #define nDPR_BLOCK_SIZE_YUV nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // Y block size 32x8 + #define nDPR_MSG_SIZE_YUV nRESLEN_8 // # of MRF's to hold Y block data (8) +#endif +#if defined(PA_LOAD_9x8) + #define nDPR_BLOCK_SIZE_YUV_MAIN nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // Main YUV block size 32x8 + #define nDPR_MSG_SIZE_YUV_MAIN nRESLEN_8 // # of MRF's to hold Y block data (8) + #define nDPR_BLOCK_SIZE_YUV_ADDITION nBLOCK_WIDTH_4+nBLOCK_HEIGHT_8 // Additional YUV block size 4x8 + #define nDPR_MSG_SIZE_YUV_ADDITION nRESLEN_1 // # of MRF's to hold Y block data (8) +#endif + +#define udSRC_YUV udBOT_Y_IO +#define nSRC_YUV_REG nBOT_Y + +#define uwDEST_Y uwTOP_Y +#define uwDEST_U uwTOP_U +#define uwDEST_V uwTOP_V + +#define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +// End of PA_Load.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_8x8.asm new file mode 100644 index 000000000..470e9c69d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_8x8.asm @@ -0,0 +1,63 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PA_Load_8x8.asm +//---------------------------------------------------------------- + +#define PA_LOAD_8x8 +#include "PA_Load.inc" + +// Load 16x8 packed data block +// Packed data block should be loaded as 32x8 pixel block + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Block origin + shl (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:w 1:w // H. block origin need to be doubled + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_YUV:ud // Block width and height (32x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_YUV(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV+nBI_CURRENT_SRC_YUV:ud + +// Unpack to "planar" YUV422 format in word-aligned bytes + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub nSRC_YUV_REG*nGRFWIB:w // Initial Y,U,V offset in YUV422 block + $for(0; r[pCF_Y_OFFSET, %1*nGRFWIB]REGION(16,2) + mov (8) uwDEST_U(0, %1*8)<1> r[pCF_U_OFFSET, %1*nGRFWIB]REGION(8,4) + mov (8) uwDEST_V(0, %1*8)<1> r[pCF_V_OFFSET, %1*nGRFWIB]REGION(8,4) + } + +// End of PA_Load_8x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_9x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_9x8.asm new file mode 100644 index 000000000..ed9e3a2ac --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PA_Load_9x8.asm @@ -0,0 +1,77 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PA_Load_9x8.asm +//---------------------------------------------------------------- +// This module loads 16x8 Y, 9x8 U and 9x8 V planar data blocks for CSC module +// and stores it in word-aligned format. +//---------------------------------------------------------------- + +#define PA_LOAD_9x8 +#include "PA_Load.inc" + +// Load 18x8 packed data block +// Packed data block should be loaded as 36x8 pixel block + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Block origin + shl (1) rMSGSRC.0<1>:d acc0:w 1:w // H. block origin need to be doubled + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_YUV_MAIN:ud // Block width and height (32x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_YUV(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV_MAIN+nBI_CURRENT_SRC_YUV:ud + + add (1) rMSGSRC.0<1>:d rMSGSRC.0:d 32:w //the last 4 pixels are read again for optimization + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_YUV_ADDITION:ud // Block width and height (4x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_YUV(8)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV_ADDITION+nBI_CURRENT_SRC_YUV:ud + +// Unpack to "planar" YUV422 format in word-aligned bytes + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub nSRC_YUV_REG*nGRFWIB:w // Initial Y,U,V offset in YUV422 block + $for(0; r[pCF_Y_OFFSET, %1*nGRFWIB]REGION(16,2) + mov (8) uwDEST_U(0, %1*16)<1> r[pCF_U_OFFSET, %1*nGRFWIB]REGION(8,4) + mov (8) uwDEST_V(0, %1*16)<1> r[pCF_V_OFFSET, %1*nGRFWIB]REGION(8,4) + } + + $for(0; r[pCF_U_OFFSET, %1*4+256]REGION(1,0) + mov (1) uwDEST_V(0, %1*16+8)<1> r[pCF_V_OFFSET, %1*4+256]REGION(1,0) + } + //UV expansion done in PL9x8_PL16x8.asm module + +// End of PA_Load_9x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x4.asm new file mode 100644 index 000000000..ff08793fc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x4.asm @@ -0,0 +1,68 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL16x8_PL8x4.asm +//---------------------------------------------------------------- + +#include "common.inc" + +#ifndef DEST_U //DEST_U, DEST_V not defined + + #if (nSRC_REGION==nREGION_1) + #define DEST_Y uwTOP_Y + #define DEST_U uwTOP_U + #define DEST_V uwTOP_V + #elif (nSRC_REGION==nREGION_2) + #define DEST_Y uwBOT_Y + #define DEST_U uwBOT_U + #define DEST_V uwBOT_V + #endif + +#endif + +//Convert 444 from sampler to 422 +$for (0, 0; <8; 2, 1) { + mov (8) DEST_U(0,%2*8)<1> DEST_U(%1)<16;8,2> + mov (8) DEST_V(0,%2*8)<1> DEST_V(%1)<16;8,2> +} + +// Re-define new number of lines +#undef nUV_NUM_OF_ROWS +#define nUV_NUM_OF_ROWS 4 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x8.asm new file mode 100644 index 000000000..bf67443f9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL16x8_PL8x8.asm @@ -0,0 +1,66 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL16x8_PL8x8.asm +//---------------------------------------------------------------- + +#include "common.inc" + +#ifndef DEST_U + + //DEST_U, DEST_V not defined + #if (nSRC_REGION==nREGION_1) + #define DEST_Y uwTOP_Y + #define DEST_U uwTOP_U + #define DEST_V uwTOP_V + #elif (nSRC_REGION==nREGION_2) + #define DEST_Y uwBOT_Y + #define DEST_U uwBOT_U + #define DEST_V uwBOT_V + #endif + +#endif + + +//Convert 444 from sampler to 422 +$for (0, 0; <8; 2, 1) { + mov DEST_U(%2)<1> DEST_U(%1)<16;8,2> + mov DEST_V(%2)<1> DEST_V(%1)<16;8,2> +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL2_Load.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL2_Load.inc new file mode 100644 index 000000000..6391454c1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL2_Load.inc @@ -0,0 +1,111 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL2_Load.inc + +#undef nY_NUM_OF_ROWS +#undef nUV_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block +#define nDPR_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPR_MSG_SIZE_Y nRESLEN_4 // # of MRF's to hold Y block data (4) + + +#if defined(NV11_LOAD_4x8) + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_8 // U/V block size 8x8 + #define nDPR_MSG_SIZE_UV nRESLEN_2 // # of MRF's to hold U/V block data (2) +#endif + +#if defined(NV11_LOAD_5x8) + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_12+nBLOCK_HEIGHT_8 // U/V block size 12x8 + #define nDPR_MSG_SIZE_UV nRESLEN_4 // # of MRF's to hold U/V block data (4) +#endif +#if defined(NV12_LOAD_8x4) + #define nUV_NUM_OF_ROWS 4 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // U/V block size 16x4 + #define nDPR_MSG_SIZE_UV nRESLEN_2 // # of MRF's to hold U/V block data (2) +#endif +#if defined(NV12_LOAD_8x5) + #define nUV_NUM_OF_ROWS 6 // Number of U/V rows per block (Rounded Up to Nearest Even Number) + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_5 // U/V block size 16x5 + #define nDPR_MSG_SIZE_UV nRESLEN_3 // # of MRF's to hold U/V block data (3) +#endif +#if defined(NV12_LOAD_9x5) + #define nUV_NUM_OF_ROWS 6 // Number of U/V rows per block (Rounded Up to Nearest Even Number) + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_20+nBLOCK_HEIGHT_5 // U/V block size 20x5 + #define nDPR_MSG_SIZE_UV nRESLEN_5 // # of MRF's to hold U/V block data (5) +#endif +#if defined(P208_LOAD_8x8) + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // U/V block size 16x8 + #define nDPR_MSG_SIZE_UV nRESLEN_4 // # of MRF's to hold U/V block data (4) +#endif +#if defined(P208_LOAD_9x8) + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_20+nBLOCK_HEIGHT_8 // U/V block size 20x8 + #define nDPR_MSG_SIZE_UV nRESLEN_8 // # of MRF's to hold U/V block data (8) +#endif + +// Source/destination region definitions +#if !defined(udSRC_Y) + #define udSRC_Y udBOT_Y_IO // Default Y source region is top Y region +#endif + +#if !defined(udSRC_U) + #define udSRC_U udBOT_U_IO // Default U source region is top U region +#endif + +#define ubSRC_Y ubBOT_Y +#define nSRC_Y_REG nBOT_Y +#define ubSRC_U ubBOT_U +#define nSRC_U_REG nBOT_U + +#define uwDEST_Y uwTOP_Y // However they can be transferred to word-aligned byte if desired +#define uwDEST_U uwTOP_U +#define uwDEST_V uwTOP_V + +#define ubDEST_Y ubTOP_Y // I'd like use them for color conversion +#define uwSRC_U uwBOT_U + +#define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +// End of PL2_Load.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL3_Load.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL3_Load.inc new file mode 100644 index 000000000..1bbc1d1e1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL3_Load.inc @@ -0,0 +1,89 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL3_Load.inc + +#undef nY_NUM_OF_ROWS +#undef nUV_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block +#define nDPR_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPR_MSG_SIZE_Y nRESLEN_4 // # of MRF's to hold Y block data (4) + +#if defined(IMC3_LOAD_8x4) + #define nUV_NUM_OF_ROWS 4 // Number of U/V rows per block + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_4 // U/V block size 8x4 + #define nDPR_MSG_SIZE_UV nRESLEN_1 // # of MRF's to hold U/V block data (1) +#endif +#if defined(IMC3_LOAD_8x5) + #define nUV_NUM_OF_ROWS 6 // Number of U/V rows per block (Rounded Up to Nearest Even Number) + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_5 // U/V block size 8x5 + #define nDPR_MSG_SIZE_UV nRESLEN_2 // # of MRF's to hold U/V block data (2) +#endif +#if defined(IMC3_LOAD_9x5) + #define nUV_NUM_OF_ROWS 6 // Number of U/V rows per block (Rounded Up to Nearest Even Number) + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_12+nBLOCK_HEIGHT_5 // U/V block size 12x5 + #define nDPR_MSG_SIZE_UV nRESLEN_3 // # of MRF's to hold U/V block data (3) +#endif + +// Source/destination region definitions +#if !defined(udSRC_Y) + #define udSRC_Y udBOT_Y_IO // Default Y source region is top Y region +#endif + +#if !defined(udSRC_U) + #define udSRC_U udBOT_U_IO // Default U source region is top U region +#endif + +#if !defined(udSRC_V) + #define udSRC_V udBOT_V_IO // Default V source region is top V region +#endif + +#define ubSRC_Y ubBOT_Y // Loading data are always in byte type +#define ubSRC_U ubBOT_U +#define ubSRC_V ubBOT_V + +#define uwDEST_Y uwTOP_Y // However they can be transferred to word-aligned byte if desired +#define uwDEST_U uwTOP_U +#define uwDEST_V uwTOP_V + +#define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +// End of PL3_Load.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.asm new file mode 100644 index 000000000..eeea3a272 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.asm @@ -0,0 +1,116 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include "PL4x8_Save_NV11.inc" + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +#if !defined(SAVE_UV_ONLY) +// Save current planar frame Y block data (16x8) ------------------------------- + + mov (2) mMSGHDR.0<1>:d wORIX<2;2,1>:w // Block origin + mov (1) mMSGHDR.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) + +///* Yoni - masking is not relevant for ILK?!? +// +// //Use the mask to determine which pixels shouldn't be over-written +// cmp.ge.f0.0 (1) NULLREG BLOCK_MASK_D:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified +// (f0.0) jmpi WritePlanarToDataPort +// +// //If mask is not all 1's, then load the entire 16x8 block +// //so that only those bytes may be modified that need to be (using the mask) +// send (8) SRC_YD(0)<1> MSGHDR MSGSRC<8;8,1>:ud DWBRMSGDSC+0x00040000+BI_DEST_Y:ud //16x8 +// +// asr (2) MSGSRC.0<1>:ud ORIX<2;2,1>:w 1:w // U/V block origin should be half of Y's +// mov (1) MSGSRC.2<1>:ud 0x00030007:ud // Block width and height (8x4) +// send (8) SRC_UD(0)<1> MSGHDR MSGSRC<8;8,1>:ud DWBRMSGDSC+0x00010000+BI_DEST_U:ud +// send (8) SRC_VD(0)<1> MSGHDR MSGSRC<8;8,1>:ud DWBRMSGDSC+0x00010000+BI_DEST_V:ud +// +// //Restore the origin information +// mov (2) MSGSRC.0<1>:ud ORIX<2;2,1>:w // Block origin +// mov (1) MSGSRC.2<1>:ud 0x0007000F:ud // Block width and height (16x8) +// +// //expand U and V to be aligned on word boundary +// mov (16) SRC_UW(1)<1> SRC_U(0,16) +// mov (16) SRC_UW(0)<1> SRC_U(0, 0) +// mov (16) SRC_VW(1)<1> SRC_V(0,16) +// mov (16) SRC_VW(0)<1> SRC_V(0, 0) +// +// //Merge the data +// mov (1) f0.1:uw BLOCK_MASK_V:uw //Load the mask on flag reg +// (f0.1) mov (8) TEMP0<1>:uw BLOCK_MASK_H:uw +// (-f0.1) mov (8) TEMP0<1>:uw 0:uw +// +// // Destination is Word aligned +// $for(0; +// (-f0.1) mov (16) DEST_Y(0, %1*32)<2> SRC_Y(0, %1*16) +// (-f0.1) mov (16) DEST_U(0, %1*8)<1> SRC_U(0, %1*8) //only works for Word aligned Byte data +// (-f0.1) mov (16) DEST_V(0, %1*8)<1> SRC_V(0, %1*8) //only works for Word aligned Byte data +// +// mov (1) f0.1:uw TEMP(0,1+%1)<0;1,0> +// (-f0.1) mov (16) DEST_Y(0, 1+%1*32)<2> SRC_Y(0, 1+%1*16) +// +// } +// +//*/ Yoni - masking is not relevant for ILK?!? + +WritePlanarToDataPort: + $for(0,0; ub2DEST_Y(%1)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,16)<1> ub2DEST_Y(%1+1)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_Y+nBI_DESTINATION_Y:ud +#endif + +// Save U/V data block in planar format (4x8) ---------------------------------- + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin + asr (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + $for(0,0; ub2DEST_U(%2)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,1)<2> ub2DEST_V(%2)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_UV+nBI_DESTINATION_UV:ud + +// End of PL4x8_Save_NV11 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.inc new file mode 100644 index 000000000..01830eb78 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL4x8_Save_NV11.inc @@ -0,0 +1,90 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//Module name: PL8x4_Save_NV11.inc +// +// Setup for storing planar data +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +#define nDPW_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPW_MSG_SIZE_Y nMSGLEN_4 // # of MRF's to hold Y block data (4) +#define nDPW_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_8 // U/V interleaved block width and height (8x8) +#define nDPW_MSG_SIZE_UV nMSGLEN_2 // # of MRF's to hold U/V block data (2) + +#if (nSRC_REGION==nREGION_1) + #define udSRC_Y udBOT_Y_IO + #define udSRC_U udBOT_U_IO + #define udSRC_V udBOT_V_IO + #define ubSRC_Y ubBOT_Y + #define ubSRC_U ubBOT_U + #define ubSRC_V ubBOT_V + + #define uwSRC_U uwBOT_U //For masking operation + #define uwSRC_V uwBOT_V + + #define ub2DEST_Y ub2TOP_Y + #define ub2DEST_U ub2TOP_U + #define ub2DEST_V ub2TOP_V + +#elif (nSRC_REGION==nREGION_2) + #define udSRC_Y udTOP_Y_IO + #define udSRC_U udTOP_U_IO + #define udSRC_V udTOP_V_IO + #define ubSRC_Y ubTOP_Y + #define ubSRC_U ubTOP_U + #define ubSRC_V ubTOP_V + + #define uwSRC_U uwTOP_U //For masking operation + #define uwSRC_V uwTOP_V + + #define ub2DEST_Y ub2BOT_Y + #define ub2DEST_U ub2BOT_U + #define ub2DEST_V ub2BOT_V + +#endif + +///* Yoni - masking is not relevant for ILK?!? +//#define TEMP0 REG(r,54) +//.declare TEMP Base=TEMP0 ElementSize=2 SrcRegion=<8;8,1> Type=uw +///* Yoni - masking is not relevant for ILK?!? + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL16x8.asm new file mode 100644 index 000000000..4dca14dc8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL16x8.asm @@ -0,0 +1,59 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL5x8_PL16x8.asm + +#include "Expansion.inc" + +//------------------------------ Horizontal Upconversion ----------------------------- + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + avg.sat (16) uwDEST_U(0, %1*32+16) uwDEST_U(0, %1*16+7)<1;2,0> uwDEST_U(0, %1*16+7)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*32+16) uwDEST_V(0, %1*16+7)<1;2,0> uwDEST_V(0, %1*16+7)<1;2,1> + avg.sat (16) uwDEST_U(0, %1*32) uwDEST_U(0, %1*16)<1;2,0> uwDEST_U(0, %1*16)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*32) uwDEST_V(0, %1*16)<1;2,0> uwDEST_V(0, %1*16)<1;2,1> + } + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + avg.sat (16) uwDEST_U(0, %1*32+16) uwDEST_U(0, %1*32+18)<1;2,0> uwDEST_U(0, %1*32+18)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*32+16) uwDEST_V(0, %1*32+18)<1;2,0> uwDEST_V(0, %1*32+18)<1;2,1> + avg.sat (16) uwDEST_U(0, %1*32) uwDEST_U(0, %1*32)<1;2,0> uwDEST_U(0, %1*32)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*32) uwDEST_V(0, %1*32)<1;2,0> uwDEST_V(0, %1*32)<1;2,1> + } + +// End of PL5x8_PL16x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL8x8.asm new file mode 100644 index 000000000..46447639b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL5x8_PL8x8.asm @@ -0,0 +1,51 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL5x8_PL8x8.asm + +#include "Expansion.inc" + +//------------------------------ Horizontal Upconversion ----------------------------- + $for (0; uwDEST_U(0, %1*8)<1;2,1> + avg.sat (8) uwDEST_V(0, %1*8) uwDEST_V(0, %1*8)<1;2,0> uwDEST_V(0, %1*8)<1;2,1> + } + +// End of PL5x8_PL8x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.asm new file mode 100644 index 000000000..e2439a9d3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.asm @@ -0,0 +1,118 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x4_Save_IMC3.asm +// +// Save planar YUV420 frame data block of size 16x8 + +#include "PL8x4_Save_IMC3.inc" + +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0(1) dNULLREG acc0.0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WritePlanarToDataPort + + //If mask is not all 1's, then load the entire 16x8 block + //so that only those bytes may be modified that need to be (using the mask) + + // Load 16x8 planar Y ---------------------------------------------------------- + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_Y(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_DESTINATION_Y:ud + // Load 8x4 planar U and V ----------------------------------------------------- + asr (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_UV:ud // Block width and height (8x4) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_U(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_DESTINATION_U:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_V(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_DESTINATION_V:ud + + //expand U and V to be aligned on word boundary - Y remains in bytes + $for (nUV_NUM_OF_ROWS/2-1; >-1; -1) { + mov (16) uwSRC_U(0, %1*16)<1> ubSRC_U(0, %1*16) + mov (16) uwSRC_V(0, %1*16)<1> ubSRC_V(0, %1*16) + } + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + // Destination is Word aligned + $for(0; + (-f0.1) mov (16) ub2DEST_Y(0, %1*32)<2> ubSRC_Y(0, %1*16) + (-f0.1) mov (16) ub2DEST_U(0, %1*8)<1> ubSRC_U(0, %1*8) //only works for Word aligned Byte data + (-f0.1) mov (16) ub2DEST_V(0, %1*8)<1> ubSRC_V(0, %1*8) //only works for Word aligned Byte data + + mov (1) f0.1:uw uwMASK_TEMP(0,1+%1)<0;1,0> + (-f0.1) mov (16) ub2DEST_Y(0, (1+%1)*32)<2> ubSRC_Y(0, (1+%1)*16) + } + +WritePlanarToDataPort: +#if !defined(SAVE_UV_ONLY) +// Save current planar frame Y block data (16x8) ------------------------------- + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + $for(0,0; ub2DEST_Y(%1)REGION(16,2) + mov(16) mubMSGPAYLOAD(%2,16)<1> ub2DEST_Y(%1+1)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_Y+nBI_DESTINATION_Y:ud +#endif +// Save U/V data block in planar format (8x4) ---------------------------------- + asr (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_UV:ud // Block width and height (8x4) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +// Save U picture data --------------------------------------------------------- + mov (16) mubMSGPAYLOAD(0,0)<1> ub2DEST_U(0)REGION(16,2) // U rows 0,1 + mov (16) mubMSGPAYLOAD(0,16)<1> ub2DEST_U(1)REGION(16,2) // U rows 2,3 + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_UV+nBI_DESTINATION_U:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +// Save V picture data --------------------------------------------------------- + mov (16) mubMSGPAYLOAD(0,0)<1> ub2DEST_V(0)REGION(16,2) // V rows 0,1 + mov (16) mubMSGPAYLOAD(0,16)<1> ub2DEST_V(1)REGION(16,2) // V rows 2,3 + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_UV+nBI_DESTINATION_V:ud + +// End of PL8x4_Save_IMC3 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.inc new file mode 100644 index 000000000..9e026a1e0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_IMC3.inc @@ -0,0 +1,92 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x4_Save_IMC3.inc +// +// Setup for storing planar data +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +// For saving +#define nDPW_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPW_MSG_SIZE_Y nMSGLEN_4 // # of MRF's to hold Y block data (4) +#define nDPW_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_4 // U/V block size 8x4 +#define nDPW_MSG_SIZE_UV nMSGLEN_1 // # of MRF's to hold U/V block data (1) + +// For masking +#undef nDPR_MSG_SIZE_Y +#define nDPR_MSG_SIZE_Y nRESLEN_4 // # of MRF's to hold Y block data (4) +#undef nDPR_MSG_SIZE_UV +#define nDPR_MSG_SIZE_UV nRESLEN_1 // # of MRF's to hold U/V block data (1) +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + +#if (nSRC_REGION==nREGION_1) + // For saving + #define ub2DEST_Y ub2TOP_Y + #define ub2DEST_U ub2TOP_U + #define ub2DEST_V ub2TOP_V + //For masking operation + #define udSRC_Y udBOT_Y_IO + #define udSRC_U udBOT_U_IO + #define udSRC_V udBOT_V_IO + #define ubSRC_Y ubBOT_Y + #define ubSRC_U ubBOT_U + #define ubSRC_V ubBOT_V + #define uwSRC_U uwBOT_U + #define uwSRC_V uwBOT_V + +#elif (nSRC_REGION==nREGION_2) + // For saving + #define ub2DEST_Y ub2BOT_Y + #define ub2DEST_U ub2BOT_U + #define ub2DEST_V ub2BOT_V + //For masking operation + #define udSRC_Y udTOP_Y_IO + #define udSRC_U udTOP_U_IO + #define udSRC_V udTOP_V_IO + #define ubSRC_Y ubTOP_Y + #define ubSRC_U ubTOP_U + #define ubSRC_V ubTOP_V + #define uwSRC_U uwTOP_U + #define uwSRC_V uwTOP_V + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.asm new file mode 100644 index 000000000..ffebaaa0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.asm @@ -0,0 +1,132 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// Module name: PL8x4_Save_NV12.asm +// +// Save entire current planar frame data block of size 16x8 +//--------------------------------------------------------------- +// Symbols needed to be defined before including this module +// +// DWORD_ALIGNED_DEST: only if DEST_Y, DEST_U, DEST_V data are DWord aligned +// ORIX: +//--------------------------------------------------------------- + +#include "PL8x4_Save_NV12.inc" + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +#if !defined(SAVE_UV_ONLY) +// Save current planar frame Y block data (16x8) ------------------------------- + + mov (2) mMSGHDR.0<1>:d wORIX<2;2,1>:w // Block origin + mov (1) mMSGHDR.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) +#endif + +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0 (1) dNULLREG acc0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WritePlanarToDataPort + +//If mask is not all 1's, then load the entire 16x8 block +//so that only those bytes may be modified that need to be (using the mask) + send (8) udSRC_Y(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_Y+nBI_DESTINATION_Y:ud //16x8 + + asr (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_UV:ud { NoDDChk } // Block width and height (16x4) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud //move message desrcptor to the message header + send (8) udSRC_U(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_UV+nBI_DESTINATION_UV:ud + +//Restore the origin information + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud //move message desrcptor to the message header + +//Merge the data + mov (1) f0.1:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.1) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw + (-f0.1) mov (8) rMASK_TEMP<1>:uw 0:uw + +//convert the mask from 16bits to 8bits by selecting every other bit + mov (1) udMASK_TEMP1(0,0)<1> 0x00040001:ud + mov (1) udMASK_TEMP1(0,1)<1> 0x00400010:ud + mov (1) udMASK_TEMP1(0,2)<1> 0x04000100:ud + mov (1) udMASK_TEMP1(0,3)<1> 0x40001000:ud + +//merge the loaded block with the current block + $for(0,0; + (-f0.1) mov (16) ubDEST_Y(0,%1*32)<2> ubSRC_Y(0,%1*16) + + and.nz.f0.1 (8) wNULLREG uwMASK_TEMP(0,%1)<0;1,0> uwMASK_TEMP1(0,0) //change the mask by selecting every other bit + (-f0.1) mov (8) ubDEST_U(0, %2*16)<2> ub2SRC_U(0, %1*8)<16;8,2> + (-f0.1) mov (8) ubDEST_V(0, %2*16)<2> ub2SRC_U(0, %1*8+1)<16;8,2> + + mov (1) f0.1:uw uwMASK_TEMP(0,1+%1)<0;1,0> + (-f0.1) mov (16) ubDEST_Y(0, (1+%1)*32)<2> ubSRC_Y(0, (1+%1)*16) + + } + +WritePlanarToDataPort: +#if !defined(SAVE_UV_ONLY) + $for(0,0; ub2DEST_Y(%1)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,16)<1> ub2DEST_Y(%1+1)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_Y+nBI_DESTINATION_Y:ud +#endif + +//** Save 8x4 packed U and V ----------------------------------------------------- +// we could write directly wORIX to mMSGHDR and then execute asr on it, that way we could +// avoid using rMSGSRC as a buffer and have one command less in code, but it is unknown whether +//it is possible to do asr on mMSGHDR so we use rMSGSRC. + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_UV:ud // U/V block width and height (16x4) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + $for(0,0; ub2DEST_U(%2)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,1)<2> ub2DEST_V(%2)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_UV+nBI_DESTINATION_UV:ud + +// End of PL8x4_Save_NV12 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.inc new file mode 100644 index 000000000..8056b708b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x4_Save_NV12.inc @@ -0,0 +1,115 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//Module name: PL8x4_Save_NV12.inc +// +// Setup for storing planar data +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols +#undef nDPW_BLOCK_SIZE_Y +#undef nDPW_MSG_SIZE_Y +#undef nDPW_BLOCK_SIZE_UV +#undef nDPW_MSG_SIZE_UV + +#define nDPW_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPW_MSG_SIZE_Y nMSGLEN_4 // # of MRF's to hold Y block data (4) +#define nDPW_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // U/V interleaved block width and height (16x4) +#define nDPW_MSG_SIZE_UV nMSGLEN_2 // # of MRF's to hold U/V block data (2) + +// For masking +#undef nDPR_MSG_SIZE_Y +#define nDPR_MSG_SIZE_Y nRESLEN_4 // # of MRF's to hold Y block data (4) +#undef nDPR_MSG_SIZE_UV +#define nDPR_MSG_SIZE_UV nRESLEN_2 +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF +#define rMASK_TEMP1 REG(r,nTEMP1) +.declare udMASK_TEMP1 Base=rMASK_TEMP1 ElementSize=4 SrcRegion=<4;4,1> Type=ud //1 GRF +.declare uwMASK_TEMP1 Base=rMASK_TEMP1 ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + + +#if (nSRC_REGION==nREGION_1) + #define udSRC_Y udBOT_Y_IO + #define udSRC_U udBOT_U_IO + #define udSRC_V udBOT_V_IO + #define ubSRC_Y ubBOT_Y + #define ubSRC_U ubBOT_U + #define ubSRC_V ubBOT_V + + #define uwSRC_U uwBOT_U //For masking operation + #define uwSRC_V uwBOT_V + + #define ub2DEST_Y ub2TOP_Y + #define ub2DEST_U ub2TOP_U + #define ub2DEST_V ub2TOP_V + + #define ubDEST_Y ubTOP_Y + #define ubDEST_U ubTOP_U + #define ubDEST_V ubTOP_V + + #define ub2SRC_U ub2BOT_U +#elif (nSRC_REGION==nREGION_2) + #define udSRC_Y udTOP_Y_IO + #define udSRC_U udTOP_U_IO + #define udSRC_V udTOP_V_IO + #define ubSRC_Y ubTOP_Y + #define ubSRC_U ubTOP_U + #define ubSRC_V ubTOP_V + + #define uwSRC_U uwTOP_U //For masking operation + #define uwSRC_V uwTOP_V + + #define ub2DEST_Y ub2BOT_Y + #define ub2DEST_U ub2BOT_U + #define ub2DEST_V ub2BOT_V + + #define ubDEST_Y ubBOT_Y + #define ubDEST_U ubBOT_U + #define ubDEST_V ubBOT_V + + #define ub2SRC_U ub2TOP_U +#endif + +///* Yoni - masking is not relevant for ILK?!? +//#define TEMP0 REG(r,54) +//.declare TEMP Base=TEMP0 ElementSize=2 SrcRegion=<8;8,1> Type=uw +///* Yoni - masking is not relevant for ILK?!? + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x5_PL8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x5_PL8x8.asm new file mode 100644 index 000000000..9b86846a7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x5_PL8x8.asm @@ -0,0 +1,57 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x5_PL8x8.asm + +#include "Expansion.inc" + +//------------------------------- Vertical Upconversion ------------------------------ + avg.sat (8) uwDEST_U(0, 3*16+8)<1> uwDEST_U(0, 3*8) uwDEST_U(0, (1+3)*8) // Optimization + avg.sat (8) uwDEST_V(0, 3*16+8)<1> uwDEST_V(0, 3*8) uwDEST_V(0, (1+3)*8) // Optimization + + $for(nUV_NUM_OF_ROWS/2-2; >-1; -1) { + mov (8) uwDEST_U(0, (1+%1)*16)<1> uwDEST_U(0, (1+%1)*8) + avg.sat (8) uwDEST_U(0, %1*16+8)<1> uwDEST_U(0, %1*8) uwDEST_U(0, (1+%1)*8) + + mov (8) uwDEST_V(0, (1+%1)*16)<1> uwDEST_V(0, (1+%1)*8) + avg.sat (8) uwDEST_V(0, %1*16+8)<1> uwDEST_V(0, %1*8) uwDEST_V(0, (1+%1)*8) + } + +// End of PL8x5_PL8x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.asm new file mode 100644 index 000000000..7c65541c1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.asm @@ -0,0 +1,60 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x8_PL8x4.asm +// +// Convert PL 8x8 to PL8x4 in GRF +//--------------------------------------------------------------- +// Symbols needed to be defined before including this module +// +// DWORD_ALIGNED_DEST: only if DEST_Y, DEST_U, DEST_V data are DWord aligned +// ORIX: +//--------------------------------------------------------------- + +#include "PL8x8_PL8x4.inc" + +// Convert PL8x8 to PL8x4 --------------------------------------------------------- + + mov (8) ubDEST_U(0,16)<2> ubDEST_U(1)<16;8,2> //selecting U every other row + mov (16) ubDEST_U(0,32)<2> ubDEST_U(2)<32;8,2> //selecting U every other row + mov (8) ubDEST_V(0,16)<2> ubDEST_V(1)<16;8,2> //selecting V every other row + mov (16) ubDEST_V(0,32)<2> ubDEST_V(2)<32;8,2> //selecting V every other row + +// End of PL8x8_PL8x4.asm ------------------------------------------------------- \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.inc new file mode 100644 index 000000000..56e0c296b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_PL8x4.inc @@ -0,0 +1,66 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x8_PL8x4.inc +// +// Setup module for convert PL8x8 to PL8x4 +// +// + +// Source/destination region definitions +// +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +#if (nSRC_REGION==nREGION_1) + + //REGION_1 selected + #define ubDEST_Y ubTOP_Y + #define ubDEST_U ubTOP_U + #define ubDEST_V ubTOP_V + +#elif (nSRC_REGION==nREGION_2) + + //REGION_2 selected + #define ubDEST_Y ubBOT_Y + #define ubDEST_U ubBOT_U + #define ubDEST_V ubBOT_V + + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.asm new file mode 100644 index 000000000..16da3fa6b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.asm @@ -0,0 +1,86 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// Module name: PL8x8_Save_P208.asm +// +// Save entire current planar frame data block of size 16x8 +//--------------------------------------------------------------- +// Symbols needed to be defined before including this module +// +// DWORD_ALIGNED_DEST: only if DEST_Y, DEST_U, DEST_V data are DWord aligned +// ORIX: +//--------------------------------------------------------------- + +#include "PL8x8_Save_P208.inc" + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +#if !defined(SAVE_UV_ONLY) +// Save current planar frame Y block data (16x8) ------------------------------- + + mov (2) mMSGHDR.0<1>:d wORIX<2;2,1>:w // Block origin + mov (1) mMSGHDR.2<1>:ud nDPW_BLOCK_SIZE_Y:ud // Block width and height (16x8) + +WritePlanarToDataPort: + $for(0,0; ub2DEST_Y(%1)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,16)<1> ub2DEST_Y(%1+1)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_Y+nBI_DESTINATION_Y:ud +#endif + +//** Save 8x8 packed U and V ----------------------------------------------------- +// we could write directly wORIX to mMSGHDR and then execute asr on it, that way we could +// avoid using rMSGSRC as a buffer and have one command less in code, but it is unknown whether +//it is possible to do asr on mMSGHDR so we use rMSGSRC. + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin + + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_UV:ud // U/V block width and height (16x4) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + $for(0,0; ub2DEST_U(%2)REGION(16,2) + mov (16) mubMSGPAYLOAD(%2,1)<2> ub2DEST_V(%2)REGION(16,2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_UV+nBI_DESTINATION_UV:ud + +//End of PL8x8_Save_P208.asm + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.inc new file mode 100644 index 000000000..f9bb80e57 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_P208.inc @@ -0,0 +1,91 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +//Module name: PL8x8_Save_P208.inc +// +// Setup for storing planar data +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +#define nDPW_BLOCK_SIZE_Y nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // Y block size 16x8 +#define nDPW_MSG_SIZE_Y nMSGLEN_4 // # of MRF's to hold Y block data (4) +#define nDPW_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // U/V interleaved block width and height (16x8) +#define nDPW_MSG_SIZE_UV nMSGLEN_4 // # of MRF's to hold U/V block data (4) + +#if (nSRC_REGION==nREGION_1) + #define udSRC_Y udBOT_Y_IO + #define udSRC_U udBOT_U_IO + #define udSRC_V udBOT_V_IO + #define ubSRC_Y ubBOT_Y + #define ubSRC_U ubBOT_U + #define ubSRC_V ubBOT_V + + #define uwSRC_U uwBOT_U //For masking operation + #define uwSRC_V uwBOT_V + + #define ub2DEST_Y ub2TOP_Y + #define ub2DEST_U ub2TOP_U + #define ub2DEST_V ub2TOP_V + +#elif (nSRC_REGION==nREGION_2) + #define udSRC_Y udTOP_Y_IO + #define udSRC_U udTOP_U_IO + #define udSRC_V udTOP_V_IO + #define ubSRC_Y ubTOP_Y + #define ubSRC_U ubTOP_U + #define ubSRC_V ubTOP_V + + #define uwSRC_U uwTOP_U //For masking operation + #define uwSRC_V uwTOP_V + + #define ub2DEST_Y ub2BOT_Y + #define ub2DEST_U ub2BOT_U + #define ub2DEST_V ub2BOT_V + +#endif + +///* Yoni - masking is not relevant for ILK?!? +//#define TEMP0 REG(r,54) +//.declare TEMP Base=TEMP0 ElementSize=2 SrcRegion=<8;8,1> Type=uw +///* Yoni - masking is not relevant for ILK?!? + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.asm new file mode 100644 index 000000000..bf787a48d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.asm @@ -0,0 +1,101 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x8_Save_PA.asm +// +// Save planar YUV422 to packed YUV422 format data +// +// Note: SRC_* must reference to regions with data type "BYTE" +// in order to save to byte-aligned byte location + +#include "PL8x8_Save_PA.inc" + + add (4) pCF_Y_OFFSET<1>:uw ubDEST_CF_OFFSET<4;4,1>:ub nDEST_YUV_REG*nGRFWIB:w // Initial Y,U,V offset in YUV422 block + + // Pack Y + $for(0; ubSRC_Y(0,%1*32) + } + + // Pack U/V + $for(0; ubSRC_U(0, %1*16) + mov (8) r[pCF_V_OFFSET, %1*nGRFWIB]<4> ubSRC_V(0, %1*16) + } + + shl (1) rMSGSRC.0<1>:d wORIX<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled + mov (1) rMSGSRC.1<1>:d wORIY<0;1,0>:w { NoDDClr, NoDDChk } // Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_YUV:ud { NoDDChk } // Block width and height (32x8) + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0(1) dNULLREG acc0.0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WritePackedToDataPort + + //If mask is not all 1's, then load the entire 32x8 block + //so that only those bytes may be modified that need to be (using the mask) + + // Load 32x8 packed YUV 422 ---------------------------------------------------- + send (8) udSRC_YUV(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_YUV+nBI_DESTINATION_YUV:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + // Destination is Byte aligned + $for(0; + (-f0.1) mov (16) uwDEST_YUV(%1)<1> uwSRC_YUV(%1) //check the UV merge - vK + } + +WritePackedToDataPort: + // Packed YUV data are stored in one of the I/O regions before moving to MRF + // Note: This is necessary since indirect addressing is not supported for MRF. + // Packed data block should be saved as 32x8 pixel block + $for(0; udDEST_YUV(%1)REGION(8,1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_YUV+nBI_DESTINATION_YUV:ud + +// End of PL8x8_Save_PA diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.inc new file mode 100644 index 000000000..082a9194b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL8x8_Save_PA.inc @@ -0,0 +1,82 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL8x8_Save_PA.inc +// +// Setup for storing packed data +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +// For saving +#define nDPW_BLOCK_SIZE_YUV nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // YUV block size 32x8 +#define nDPW_MSG_SIZE_YUV nMSGLEN_8 // # of MRF's to hold YUV block data (8) + +// For masking +#undef nDPR_MSG_SIZE_YUV +#define nDPR_MSG_SIZE_YUV nRESLEN_8 // # of MRF's to hold YUV block data (8) +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + +#if (nSRC_REGION==nREGION_1) + // For saving + #define udSRC_YUV udTOP_Y_IO + #define udDEST_YUV udBOT_Y_IO + #define nDEST_YUV_REG nBOT_Y + //For masking operation + #define ubSRC_Y ub2TOP_Y + #define ubSRC_U ub2TOP_U + #define ubSRC_V ub2TOP_V + #define uwSRC_YUV uwTOP_Y + #define uwDEST_YUV uwBOT_Y + +#elif (nSRC_REGION==nREGION_2) + // For saving + #define udSRC_YUV udBOT_Y_IO + #define udDEST_YUV udTOP_Y_IO + #define nDEST_YUV_REG nTOP_Y + //For masking operation + #define ubSRC_Y ub2BOT_Y + #define ubSRC_U ub2BOT_U + #define ubSRC_V ub2BOT_V + #define uwSRC_YUV uwBOT_Y + #define uwDEST_YUV uwTOP_Y + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x5_PL16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x5_PL16x8.asm new file mode 100644 index 000000000..a5671f63c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x5_PL16x8.asm @@ -0,0 +1,67 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL9x5_PL16x8.asm + +#define EXPAND_9x5 +#include "Expansion.inc" + +//------------------------------ Horizontal Upconversion ----------------------------- + $for (nUV_NUM_OF_ROWS-2; >-1; -1) { + avg.sat (16) uwDEST_U(0, %1*16)<1> uwDEST_U(0, %1*16)<1;2,0> uwDEST_U(0, %1*16)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*16)<1> uwDEST_V(0, %1*16)<1;2,0> uwDEST_V(0, %1*16)<1;2,1> + } + +#undef nUV_NUM_OF_ROWS +#define nUV_NUM_OF_ROWS 8 //use packed version of all post-processing kernels + +//------------------------------- Vertical Upconversion ------------------------------ + avg.sat (16) uwDEST_U(0, 3*32+16)<1> uwDEST_U(0, 3*16) uwDEST_U(0, (1+3)*16) + avg.sat (16) uwDEST_V(0, 3*32+16)<1> uwDEST_V(0, 3*16) uwDEST_V(0, (1+3)*16) + + $for(nUV_NUM_OF_ROWS/2-2; >-1; -1) { + mov (16) uwDEST_U(0, (1+%1)*32)<1> uwDEST_U(0, (1+%1)*16) + avg.sat (16) uwDEST_U(0, %1*32+16)<1> uwDEST_U(0, %1*16) uwDEST_U(0, (1+%1)*16) + + mov (16) uwDEST_V(0, (1+%1)*32)<1> uwDEST_V(0, (1+%1)*16) + avg.sat (16) uwDEST_V(0, %1*32+16)<1> uwDEST_V(0, %1*16) uwDEST_V(0, (1+%1)*16) + } + +// End of PL9x5_PL16x8 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x8_PL16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x8_PL16x8.asm new file mode 100644 index 000000000..516334674 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/PL9x8_PL16x8.asm @@ -0,0 +1,51 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: PL9x5_PL16x8.asm + +#include "Expansion.inc" + +//------------------------------ Horizontal Upconversion ----------------------------- + $for (0; uwDEST_U(0, %1*16)<1;2,0> uwDEST_U(0, %1*16)<1;2,1> + avg.sat (16) uwDEST_V(0, %1*16)<1> uwDEST_V(0, %1*16)<1;2,0> uwDEST_V(0, %1*16)<1;2,1> + } + +// End of PL9x5_PL16x8 \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.asm new file mode 100644 index 000000000..19d799261 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.asm @@ -0,0 +1,118 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_RGB.asm +// +// Save packed ARGB 444 frame data block of size 16x8 +// +// To save 16x8 block (64x8 byte layout for ARGB8888) we need 2 send instructions +// --------- +// | 1 | 2 | +// --------- + +#include "RGB16x8_Save_RGB.inc" + + shl (1) rMSGSRC.0<1>:d wORIX<0;1,0>:w 2:w { NoDDClr } // H. block origin need to be quadrupled + mov (1) rMSGSRC.1<1>:d wORIY<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_ARGB:ud { NoDDChk } // Block width and height (32x8) + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0(1) dNULLREG acc0.0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WriteARGBToDataPort + + //If mask is not all 1's, then load the entire 64x8 block + //so that only those bytes may be modified that need to be (using the mask) + + // Load first block 16x8 packed ARGB 444 --------------------------------------- + or (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0xFF00FF00:ud //Check first block + cmp.e.f0.0 (1) dNULLREG acc0.0<0;1,0>:ud 0xFFFFFFFF:ud + (f0.0) jmpi SkipFirstBlockMerge //If full mask then skip this block + + send (8) udSRC_ARGB(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw //use sel instruction - vK + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + $for(0, 0; + (-f0.1) mov (8) udDEST_ARGB(%2)<1> udSRC_ARGB(%1) + } + +SkipFirstBlockMerge: + // Load second block 16x8 packed ARGB 444 --------------------------------------- + or (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0xFF0000FF:ud //Check second block + cmp.e.f0.0 (1) dNULLREG acc0.0<0;1,0>:ud 0xFFFFFFFF:ud + (f0.0) jmpi WriteARGBToDataPort //If full mask then skip this block + + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 32:d // Point to 2nd part + send (8) udSRC_ARGB(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud // Point to 1st part again + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) shr (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw 8:uw //load the mask for second block + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + $for(0, 1; + (-f0.1) mov (8) udDEST_ARGB(%2)<1> udSRC_ARGB(%1) + } + +WriteARGBToDataPort: + // Move packed data to MRF and output + $for(0; udDEST_ARGB(%1*2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 32:d // Point to 2nd part + $for(0; udDEST_ARGB(%1*2+1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + +// End of RGB16x8_Save_RGB diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.inc new file mode 100644 index 000000000..f66b705a7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB.inc @@ -0,0 +1,68 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_RGB.inc +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +// For saving +#define nDPW_BLOCK_SIZE_ARGB nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // ARGB block size 32x8 +#define nDPW_MSG_SIZE_ARGB nMSGLEN_8 // # of MRF's to hold ARGB block data (8) + +// For masking +#undef nDPR_MSG_SIZE_ARGB +#define nDPR_MSG_SIZE_ARGB nRESLEN_8 // # of MRF's to hold ARGB block data (8) +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + +#if (nSRC_REGION==nREGION_1) + // For saving + #define udDEST_ARGB udTOP_Y_IO //The output of previous stage is stored here; This is modified and is written to render cache + //For masking operation + #define udSRC_ARGB udBOT_Y_IO //To hold the destination data that shouldn't be modified + +#elif (nSRC_REGION==nREGION_2) + // For saving + #define udDEST_ARGB udBOT_Y_IO //The output of previous stage is stored here; This is modified and is written to render cache + //For masking operation + #define udSRC_ARGB udTOP_Y_IO //To hold the destination data that shouldn't be modified + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.asm new file mode 100644 index 000000000..73371af07 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.asm @@ -0,0 +1,102 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_RGB16.asm +// +// Save packed RGB565 frame data block of size 16x8 +// +// To save 16x8 block (32x8 byte layout for RGB565) we need 1 send instruction +// ----- +// | 1 | +// ----- + +#include "RGB16x8_Save_RGB16.inc" + +//convert 32 bit RGB to 16 bit RGB + // Truncate A8R8G8B8 to A6R5G6B5 within byte. + // That is keeping 5 MSB of R and B, and 6 MSB of G. + + $for (0, 0; ubDEST_ARGB(%2,0)<32;8,4> 3:w // B >> 3 + + shl (16) uwTEMP_RGB16(0)<1> uwDEST_ARGB(%2,1)<16;8,2> 8:w // R << 8 + and (16) uwTEMP_RGB16(0)<1> uwTEMP_RGB16(0) 0xF800:uw + or (16) uwCSC_TEMP(%1,0)<1> uwCSC_TEMP(%1,0)<16;16,1> uwTEMP_RGB16(0) + + shr (16) uwTEMP_RGB16(0)<1> uwDEST_ARGB(%2,0)<16;8,2> 5:w // G >> 5 + and (16) uwTEMP_RGB16(0)<1> uwTEMP_RGB16(0) 0x07E0:uw + or (16) uwCSC_TEMP(%1,0)<1> uwCSC_TEMP(%1,0)<16;16,1> uwTEMP_RGB16(0) + } + + mov (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w // Block origin (1st quadrant) + shl (1) rMSGSRC.0<1>:d wORIX<0;1,0>:w 1:w // H. block origin need to be doubled for byte offset + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_RGB16:ud // Block width and height (32x8) + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0(1) dNULLREG acc0.0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WriteRGB16ToDataPort + + //If mask is not all 1's, then load the entire 32x8 block + //so that only those bytes may be modified that need to be (using the mask) + + // Load 32x8 packed RGB565 ----------------------------------------------------- + send (8) udSRC_RGB16(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_RGB16+nBI_DESTINATION_RGB:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw //use sel instruction - vK + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + $for(0; + (-f0.1) mov (16) uwCSC_TEMP(%1)<1> uwSRC_RGB16(%1) + } + +WriteRGB16ToDataPort: + // Move packed data to MRF and output + $for(0; udCSC_TEMP(%1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_RGB16+nBI_DESTINATION_RGB:ud + +// End of RGB16x8_Save_RGB16 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.inc new file mode 100644 index 000000000..844b2bc15 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_RGB16.inc @@ -0,0 +1,79 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_RGB16.inc +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +// For saving +#define nDPW_BLOCK_SIZE_RGB16 nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // RGB16 block size 32x8 +#define nDPW_MSG_SIZE_RGB16 nMSGLEN_8 // # of MRF's to hold RGB16 block data (8) + +// For conversion to 16bit +.declare uwTEMP_RGB16 Base=REG(r,nTEMP1) ElementSize=2 SrcRegion=<16;16,1> Type=uw //1 GRF + +// For masking +#undef nDPR_MSG_SIZE_RGB16 +#define nDPR_MSG_SIZE_RGB16 nRESLEN_8 // # of MRF's to hold ARGB block data (8) +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + +#if (nSRC_REGION==nREGION_1) + // For saving + #define ubDEST_ARGB ubTOP_Y //Data from previous module + #define uwDEST_ARGB uwTOP_Y //Data from previous module + #define udCSC_TEMP udBOT_Y_IO //Data Converted to 16 bits + #define uwCSC_TEMP uwBOT_Y + //For masking operation + #define udSRC_RGB16 udTOP_Y_IO //To hold the destination data that shouldn't be modified + #define uwSRC_RGB16 uwTOP_Y + +#elif (nSRC_REGION==nREGION_2) + // For saving + #define ubDEST_ARGB ubBOT_Y //Data from previous module + #define uwDEST_ARGB uwBOT_Y //Data from previous module + #define udCSC_TEMP udTOP_Y_IO //Data Converted to 16 bits + #define uwCSC_TEMP uwTOP_Y + //For masking operation + #define udSRC_RGB16 udBOT_Y_IO //To hold the destination data that shouldn't be modified + #define uwSRC_RGB16 uwBOT_Y + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.asm new file mode 100644 index 000000000..ced7390d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.asm @@ -0,0 +1,137 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_Y416.asm +// +// Save packed ARGB 444 frame data block of size 16x8 +// +// To save 16x8 block (128x8 byte layout for ARGB 16bit per component) we need 4 send instructions +// ----------------- +// | 1 | 2 | 3 | 4 | +// ----------------- + +#include "RGB16x8_Save_RGB.inc" + + shl (1) rMSGSRC.0<1>:d wORIX<0;1,0>:w 3:w { NoDDClr } // H. block origin need to become 8 times + mov (1) rMSGSRC.1<1>:d wORIY<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_ARGB:ud { NoDDChk } // Block width and height (32x8) + + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud +/* Not needed for validation kernels for now -vK +//Use the mask to determine which pixels shouldn't be over-written + and (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0x00FFFFFF:ud + cmp.ge.f0.0(1) dNULLREG acc0.0<0;1,0>:ud 0x00FFFFFF:ud //Check if all pixels in the block need to be modified + (f0.0) jmpi WriteARGBToDataPort + + //If mask is not all 1's, then load the entire 64x8 block + //so that only those bytes may be modified that need to be (using the mask) + + // Load first block 16x8 packed ARGB 444 --------------------------------------- + or (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0xFF00FF00:ud //Check first block + cmp.e.f0.0 (1) dNULLREG acc0.0<0;1,0>:ud 0xFFFFFFFF:ud + (f0.0) jmpi SkipFirstBlockMerge //If full mask then skip this block + + send (8) udSRC_ARGB(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) mov (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw //use sel instruction - vK + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + $for(0, 0; + (-f0.1) mov (8) udDEST_ARGB(%2)<1> udSRC_ARGB(%1) + } + +SkipFirstBlockMerge: + // Load second block 16x8 packed ARGB 444 --------------------------------------- + or (1) acc0.0<1>:ud udBLOCK_MASK<0;1,0>:ud 0xFF0000FF:ud //Check second block + cmp.e.f0.0 (1) dNULLREG acc0.0<0;1,0>:ud 0xFFFFFFFF:ud + (f0.0) jmpi WriteARGBToDataPort //If full mask then skip this block + + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 32:d // Point to 2nd part + send (8) udSRC_ARGB(0)<1> mMSGHDR udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud // Point to 1st part again + + //Merge the data + mov (1) f0.0:uw ubBLOCK_MASK_V:ub //Load the mask on flag reg + (f0.0) shr (8) rMASK_TEMP<1>:uw uwBLOCK_MASK_H:uw 8:uw //load the mask for second block + (-f0.0) mov (8) rMASK_TEMP<1>:uw 0:uw + + $for(0, 1; + (-f0.1) mov (8) udDEST_ARGB(%2)<1> udSRC_ARGB(%1) + } +*/ +WriteARGBToDataPort: + // Move packed data to MRF and output + + //Write 1st 4X8 pixels + $for(0; udDEST_ARGB(%1*4) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + + //Write 2nd 4X8 pixels + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 32:d // Point to 2nd part + $for(0; udDEST_ARGB(%1*4+1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + + //Write 3rd 4X8 pixels + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 64:d // Point to 2nd part + $for(0; udDEST_ARGB(%1*4+2) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + + //Write 4th 4X8 pixels + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + add (1) mMSGHDR.0<1>:d rMSGSRC.0<0;1,0>:d 96:d // Point to 2nd part + $for(0; udDEST_ARGB(%1*4+3) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_ARGB+nBI_DESTINATION_RGB:ud + +// End of RGB16x8_Save_Y416 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.inc new file mode 100644 index 000000000..384db9162 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB16x8_Save_Y416.inc @@ -0,0 +1,68 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGB16x8_Save_Y416.inc +// + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + +// For saving +#define nDPW_BLOCK_SIZE_ARGB nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // ARGB block size 32x8 +#define nDPW_MSG_SIZE_ARGB nMSGLEN_8 // # of MRF's to hold ARGB block data (8) + +// For masking +#undef nDPR_MSG_SIZE_ARGB +#define nDPR_MSG_SIZE_ARGB nRESLEN_8 // # of MRF's to hold ARGB block data (8) +#define rMASK_TEMP REG(r,nTEMP0) +.declare uwMASK_TEMP Base=rMASK_TEMP ElementSize=2 SrcRegion=<8;8,1> Type=uw //1 GRF + +#if (nSRC_REGION==nREGION_1) + // For saving + #define udDEST_ARGB udTOP_Y_IO //The output of previous stage is stored here; This is modified and is written to render cache + //For masking operation + #define udSRC_ARGB udBOT_Y_IO //To hold the destination data that shouldn't be modified + +#elif (nSRC_REGION==nREGION_2) + // For saving + #define udDEST_ARGB udBOT_Y_IO //The output of previous stage is stored here; This is modified and is written to render cache + //For masking operation + #define udSRC_ARGB udTOP_Y_IO //To hold the destination data that shouldn't be modified + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.asm new file mode 100644 index 000000000..a661b49e5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.asm @@ -0,0 +1,87 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: RGBA_Load_16x8.asm (copied from AYUV_Load_16x8.asm) +//---------------------------------------------------------------- + + +#include "RGBX_Load_16x8.inc" + +// In order to load 64x8 RGBA data (16x8 pixels), we need to divide the data +// into two regions and load them separately. +// +// 32 byte 32 byte +//|----------------|----------------| +//| | | +//| A | B |8 +//| | | +//| | | +//|----------------|----------------| + +// Load the first 32x8 data block +// Packed data block should be loaded as 32x8 pixel block + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Block origin + shl (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:w 2:w { NoDDClr } // H. block origin need to be four times larger + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_RGBA:ud { NoDDChk } // Block width and height (32x8) + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud + send (8) udSRC_RGBA(0)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_RGBA+nBI_CURRENT_SRC_YUV:ud + +//Load the second 32x8 data block +// Offset the origin X - move to next 32 colomns + add (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 32:w // Increase X origin by 8 + +// Size stays the same - 32x8 + mov (8) mMSGHDRY<1>:ud rMSGSRC<8;8,1>:ud // Copy message description to message header + send (8) udSRC_RGBA(8)<1> mMSGHDRY udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nDPR_MSG_SIZE_RGBA+nBI_CURRENT_SRC_YUV:ud + +// Give AYUV region addresses to address register + // a0.0 is 0x38*32, a0.1 is 0x40*32. 0x40-0x38=8 (pixel) + mov (1) SRC_RGBA_OFFSET<1>:ud 0x00400038*32:ud //Address registers contain starting addresses of two halves + +#if !defined(FIX_POINT_CONVERSION) && !defined(FLOAT_POINT_CONVERSION) + //Directly move the data to destination + $for(0; r[SRC_RGBA_OFFSET,%1*32+3]<8,4>:ub // A/R + mov (16) uwDEST_U(%1)<1> r[SRC_RGBA_OFFSET,%1*32+2]<8,4>:ub // Y/G + mov (16) uwDEST_V(%1)<1> r[SRC_RGBA_OFFSET,%1*32+1]<8,4>:ub // U/B + } +#endif + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.inc new file mode 100644 index 000000000..ba7d5213d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Load_16x8.inc @@ -0,0 +1,78 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#ifndef RGBA_LOAD_16X8_INC +#define RGBA_LOAD_16X8_INC + +// Module name: RGBA_Load_16x8.inc +// +// RGBA data are first loaded to bottom I/O REGION_2, then does color conversion from RGB to YUV +// finally, YUV data are stored in top I/O REGION_1 with planar format + +#undef nY_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block + +#define nDPR_BLOCK_SIZE_RGBA nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // RGBA block size 32x8 (it is half size) +#define nDPR_MSG_SIZE_RGBA nRESLEN_8 // # of MRF's to hold RGBA block data (8) + +//Temporary storage for unpacked AYUV data +#define rUNPACK_TEMP REG(r,nTEMP0) +.declare udUNPACK_TEMP Base=rUNPACK_TEMP ElementSize=4 SrcRegion=<8;8,1> Type=ud //1 GRF +.declare ubUNPACK_TEMP Base=rUNPACK_TEMP ElementSize=1 SrcRegion=<32;32,1> Type=ub //1 GRF + +.declare ubBOT_Y_IO Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(32,1) Type=ub + + +#define udSRC_RGBA udBOT_Y_IO +#define ubSRC_RGBA ubBOT_Y_IO +#define nSRC_RGBA_REG nBOT_Y + +#define uwDEST_Y uwTOP_Y +#define uwDEST_U uwTOP_U +#define uwDEST_V uwTOP_V + +#define SRC_RGBA_OFFSET a0.0 +#define SRC_RGBA_OFFSET_1 a0.0 +#define SRC_RGBA_OFFSET_2 a0.1 + +#define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +// End of RGBA_Load_16x8.inc +#endif \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Fix.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Fix.asm new file mode 100644 index 000000000..55c10ed5f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Fix.asm @@ -0,0 +1,145 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: PL16x8_PL8x4.asm +//---------------------------------------------------------------- + +#include "RGBX_Load_16x8.inc" + +#if (0) + #define nTEMP0 34 // transformation coefficient + #define nTEMP1 35 // one row of Y (first half register is used) + #define nTEMP2 36 // first half of one row + #define nTEMP3 37 // second half of one row + #define nTEMP4 38 // mul and add + #define nTEMP5 39 // mul and add + #define nTEMP6 40 // mul and add + #define nTEMP7 41 // mul and add + #define nTEMP8 42 // sum of mul + #define nTEMP10 44 + #define nTEMP12 46 + #define nTEMP14 48 + #define nTEMP16 50 + #define nTEMP17 51 + #define nTEMP18 52 + + #define nTEMP24 58 +#endif + +$for(0; :uw r[SRC_RGBA_OFFSET_1, %1*32 + 0]<0; 16,1>:ub ubRGB_to_Y_Coef_Fix<0;4,1>:ub + mul (16) REG2(r, nTEMP5, 0)<1>:uw r[SRC_RGBA_OFFSET_1, %1*32 + 16]<0; 16,1>:ub ubRGB_to_Y_Coef_Fix<0;4,1>:ub + mul (16) REG2(r, nTEMP6, 0)<1>:uw r[SRC_RGBA_OFFSET_2, %1*32 + 0]<0; 16,1>:ub ubRGB_to_Y_Coef_Fix<0;4,1>:ub + mul (16) REG2(r, nTEMP7, 0)<1>:uw r[SRC_RGBA_OFFSET_2, %1*32 + 16]<0; 16,1>:ub ubRGB_to_Y_Coef_Fix<0;4,1>:ub + + add (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:uw REG2(r, nTEMP4, 1)<0;4,4>:uw + add (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:uw REG2(r, nTEMP5, 1)<0;4,4>:uw + add (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:uw REG2(r, nTEMP6, 1)<0;4,4>:uw + add (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:uw REG2(r, nTEMP7, 1)<0;4,4>:uw + add (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:uw REG2(r, nTEMP4, 2)<0;4,4>:uw + add (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:uw REG2(r, nTEMP5, 2)<0;4,4>:uw + add (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:uw REG2(r, nTEMP6, 2)<0;4,4>:uw + add (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:uw REG2(r, nTEMP7, 2)<0;4,4>:uw + + // #### write Y to the 1 row + mov (4) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP4, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 4)<1>:uw REG2(r, nTEMP5, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 8)<1>:uw REG2(r, nTEMP6, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 12)<1>:uw REG2(r, nTEMP7, 0)<0; 4, 4>:uw + add (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 0x1080:uw + mov (16) REG2(r, nTEMP8, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + mov (16) uwDEST_Y(%1)<1> REG2(r,nTEMP8, 0)<0;16,1>:ub + + // ###### do one row for U + // #### mul and add + mul (16) REG2(r, nTEMP4, 0)<1>:w r[SRC_RGBA_OFFSET_1, %1*32 + 0]<0; 16,1>:ub bRGB_to_U_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP5, 0)<1>:w r[SRC_RGBA_OFFSET_1, %1*32 + 16]<0; 16,1>:ub bRGB_to_U_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP6, 0)<1>:w r[SRC_RGBA_OFFSET_2, %1*32 + 0]<0; 16,1>:ub bRGB_to_U_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP7, 0)<1>:w r[SRC_RGBA_OFFSET_2, %1*32 + 16]<0; 16,1>:ub bRGB_to_U_Coef_Fix<0;4,1>:b + + add (4) REG2(r, nTEMP4, 0)<4>:w REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 1)<0;4,4>:w + add (4) REG2(r, nTEMP5, 0)<4>:w REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 1)<0;4,4>:w + add (4) REG2(r, nTEMP6, 0)<4>:w REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 1)<0;4,4>:w + add (4) REG2(r, nTEMP7, 0)<4>:w REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 1)<0;4,4>:w + add (4) REG2(r, nTEMP4, 0)<4>:w REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 2)<0;4,4>:w + add (4) REG2(r, nTEMP5, 0)<4>:w REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 2)<0;4,4>:w + add (4) REG2(r, nTEMP6, 0)<4>:w REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 2)<0;4,4>:w + add (4) REG2(r, nTEMP7, 0)<4>:w REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 2)<0;4,4>:w + + // #### write U to the 1 row + mov (4) REG2(r, nTEMP8, 0)<1>:w REG2(r, nTEMP4, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 4)<1>:w REG2(r, nTEMP5, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 8)<1>:w REG2(r, nTEMP6, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 12)<1>:w REG2(r, nTEMP7, 0)<0; 4, 4>:w + add (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:w 0x8080:uw + mov (16) REG2(r, nTEMP8, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + mov (16) uwDEST_U(%1)<1> REG2(r,nTEMP8, 0)<0;16,1>:ub + + // ###### do one row for V + // #### mul and add + mul (16) REG2(r, nTEMP4, 0)<1>:w r[SRC_RGBA_OFFSET_1, %1*32 + 0]<0; 16,1>:ub bRGB_to_V_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP5, 0)<1>:w r[SRC_RGBA_OFFSET_1, %1*32 + 16]<0; 16,1>:ub bRGB_to_V_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP6, 0)<1>:w r[SRC_RGBA_OFFSET_2, %1*32 + 0]<0; 16,1>:ub bRGB_to_V_Coef_Fix<0;4,1>:b + mul (16) REG2(r, nTEMP7, 0)<1>:w r[SRC_RGBA_OFFSET_2, %1*32 + 16]<0; 16,1>:ub bRGB_to_V_Coef_Fix<0;4,1>:b + + add (4) REG2(r, nTEMP4, 0)<4>:w REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 1)<0;4,4>:w + add (4) REG2(r, nTEMP5, 0)<4>:w REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 1)<0;4,4>:w + add (4) REG2(r, nTEMP6, 0)<4>:w REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 1)<0;4,4>:w + add (4) REG2(r, nTEMP7, 0)<4>:w REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 1)<0;4,4>:w + add (4) REG2(r, nTEMP4, 0)<4>:w REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 2)<0;4,4>:w + add (4) REG2(r, nTEMP5, 0)<4>:w REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 2)<0;4,4>:w + add (4) REG2(r, nTEMP6, 0)<4>:w REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 2)<0;4,4>:w + add (4) REG2(r, nTEMP7, 0)<4>:w REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 2)<0;4,4>:w + + // #### write V to the 1 row + mov (4) REG2(r, nTEMP8, 0)<1>:w REG2(r, nTEMP4, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 4)<1>:w REG2(r, nTEMP5, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 8)<1>:w REG2(r, nTEMP6, 0)<0; 4, 4>:w + mov (4) REG2(r, nTEMP8, 12)<1>:w REG2(r, nTEMP7, 0)<0; 4, 4>:w + add (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:w 0x8080:uw + mov (16) REG2(r, nTEMP8, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + mov (16) uwDEST_V(%1)<1> REG2(r,nTEMP8, 0)<0;16,1>:ub +} + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Float.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Float.asm new file mode 100644 index 000000000..e3d9255c6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_Save_YUV_Float.asm @@ -0,0 +1,182 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: RGBX_Save_YUV_Float.asm +//---------------------------------------------------------------- + +#include "RGBX_Load_16x8.inc" + +#if (0) + // 8 grf reg for one row of pixel (2 pixel per grf) + #define nTEMP0 34 + #define nTEMP1 35 + #define nTEMP2 36 + #define nTEMP3 37 + #define nTEMP4 38 + #define nTEMP5 39 + #define nTEMP6 40 + #define nTEMP7 41 + + #define nTEMP8 42 // transformation coefficient + #define nTEMP10 44 // transformation coefficient + + #define nTEMP12 46 // save Y/U/V in ub format + #define nTEMP14 48 // save YUV in ud format + #define nTEMP16 50 // dp4 result + #define nTEMP17 51 + #define nTEMP18 52 + + #define nTEMP24 58 +#endif + +$for(0; :f r[SRC_RGBA_OFFSET_1,%1*32 + 0]<4,1>:ub + mov (4) REG(r, nTEMP1)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 8]<4,1>:ub + mov (4) REG(r, nTEMP2)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 16]<4,1>:ub + mov (4) REG(r, nTEMP3)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 24]<4,1>:ub + mov (4) REG(r, nTEMP4)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 0]<4,1>:ub + mov (4) REG(r, nTEMP5)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 8]<4,1>:ub + mov (4) REG(r, nTEMP6)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 16]<4,1>:ub + mov (4) REG(r, nTEMP7)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 24]<4,1>:ub + mov (4) REG2(r, nTEMP0, 4)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 4]<4,1>:ub + mov (4) REG2(r, nTEMP1, 4)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 12]<4,1>:ub + mov (4) REG2(r, nTEMP2, 4)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 20]<4,1>:ub + mov (4) REG2(r, nTEMP3, 4)<1>:f r[SRC_RGBA_OFFSET_1,%1*32 + 28]<4,1>:ub + mov (4) REG2(r, nTEMP4, 4)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 4]<4,1>:ub + mov (4) REG2(r, nTEMP5, 4)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 12]<4,1>:ub + mov (4) REG2(r, nTEMP6, 4)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 20]<4,1>:ub + mov (4) REG2(r, nTEMP7, 4)<1>:f r[SRC_RGBA_OFFSET_2,%1*32 + 24]<4,1>:ub + + // ###### do one row for Y + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(0, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(1, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(2, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(3, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(4, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(5, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(6, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(7, 0)<0;8,1> fRGB_to_Y_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + // #### write Y to the 1 row + mov (16) uwDEST_Y(%1)<1> REG2(r,nTEMP12, 0)<0;16,1>:ub + + // ###### do one row for U + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(0, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(1, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(2, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(3, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(4, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(5, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(6, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(7, 0)<0;8,1> fRGB_to_U_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + add (16) REG2(r, nTEMP12, 0)<1>:w REG2(r, nTEMP12, 0)<0;16,1>:w 128:w + // #### write U to the 1 row + mov (16) uwDEST_U(%1)<1> REG2(r,nTEMP12, 0)<0;16,2>:ub + + // ###### do one row for V + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(0, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(1, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(2, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(3, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(4, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(5, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(6, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_BGRX(7, 0)<0;8,1> fRGB_to_V_Coef_Float<0;4,1>:f + mov (2) REG2(r, nTEMP14, 0)<1>:d REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:w REG2(r, nTEMP14, 0)<0;2,2>:w + add (16) REG2(r, nTEMP12, 0)<1>:w REG2(r, nTEMP12, 0)<0;16,1>:w 128:w + + // #### write V to the 1 row + mov (16) uwDEST_V(%1)<1> REG2(r,nTEMP12, 0)<0;16,2>:ub +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_to_YUV_Coef.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_to_YUV_Coef.asm new file mode 100644 index 000000000..95fc405e5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGBX_to_YUV_Coef.asm @@ -0,0 +1,94 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: RGB_to_YUV_Coef.asm +//---------------------------------------------------------------- + +// is src surface |R|G|B|X| layout? otherwise it is |B|G|R|X| +and.nz.f0.1 (1) dNULLREG r1.1:ud 0xFF000000:ud +#ifdef FIX_POINT_CONVERSION + // Y = ( ( 66 * R + 129 * G + 25 * B + 128 ) >> 8) + 16 + (-f0.1) mov (1) REG2(r, nTEMP0, 0):ud 0x00428119:ud // used as unsigned byte + ( f0.1) mov (1) REG2(r, nTEMP0, 0):ud 0x00198142:ud // used as unsigned byte + // U = ( ( -38 * R - 74 * G + 112 * B + 128 ) >> 8) + 128 + (-f0.1) mov (1) REG2(r, nTEMP0, 1):ud 0x00DAB670:ud // used as signed byte + ( f0.1) mov (1) REG2(r, nTEMP0, 1):ud 0x0070B6DA:ud // used as signed byte + // V = ( ( 112 * R - 94 * G - 18 * B + 128 ) >> 8) + 128 + (-f0.1) mov (1) REG2(r, nTEMP0, 2):ud 0x0070A2EEud // used as signed byte + ( f0.1) mov (1) REG2(r, nTEMP0, 2):ud 0x00EEA270ud // used as signed byte + + #define ubRGB_to_Y_Coef_Fix REG2(r, nTEMP0, 0) + #define bRGB_to_U_Coef_Fix REG2(r, nTEMP0, 4) + #define bRGB_to_V_Coef_Fix REG2(r, nTEMP0, 8) +#else + // Y = 0.299R + 0.587G + 0.114B + (-f0.1) mov (1) REG2(r, nTEMP8, 0):f 0.114f // B coef + ( f0.1) mov (1) REG2(r, nTEMP8, 2):f 0.114f // R coef + mov (1) REG2(r, nTEMP8, 1):f 0.587f // G coef + (-f0.1) mov (1) REG2(r, nTEMP8, 2):f 0.299f // R coef + ( f0.1) mov (1) REG2(r, nTEMP8, 0):f 0.299f // B coef + mov (1) REG2(r, nTEMP8, 3):f 0.000f // A coef + + // Cb= -0.169R - 0.331G + 0.499B + 128 + // U = -0.147R - 0.289G + 0.436B + 128 + (-f0.1) mov (1) REG2(r, nTEMP8, 4):f 0.436f // B coef + ( f0.1) mov (1) REG2(r, nTEMP8, 6):f 0.436f // R coef + mov (1) REG2(r, nTEMP8, 5):f -0.289f // G coef + (-f0.1) mov (1) REG2(r, nTEMP8, 6):f -0.147f // R coef + ( f0.1) mov (1) REG2(r, nTEMP8, 4):f -0.147f // B coef + mov (1) REG2(r, nTEMP8, 7):f 0.000f // A coef + + // Cr= 0.499R - 0.418G - 0.0813B+ 128 + // V = 0.615R - 0.515G - 0.100B + 128 + (-f0.1) mov (1) REG2(r, nTEMP10, 0):f -0.100f // B coef + ( f0.1) mov (1) REG2(r, nTEMP10, 2):f -0.100f // R coef + mov (1) REG2(r, nTEMP10, 1):f -0.515f // G coef + (-f0.1) mov (1) REG2(r, nTEMP10, 2):f 0.615f // R coef + ( f0.1) mov (1) REG2(r, nTEMP10, 0):f 0.615f // B coef + mov (1) REG2(r, nTEMP10, 3):f 0.000f // A coef + + #define fRGB_to_Y_Coef_Float REG2(r, nTEMP8, 0) + #define fRGB_to_U_Coef_Float REG2(r, nTEMP8, 4) + #define fRGB_to_V_Coef_Float REG2(r, nTEMP10, 0) + .declare fROW_BGRX Base=REG(r,nTEMP0) ElementSize=4 SrcRegion=REGION(8,8) Type=f // r nTEMP0 - r nTEMP7 +#endif + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB_Pack.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB_Pack.asm new file mode 100644 index 000000000..ede4411d0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/RGB_Pack.asm @@ -0,0 +1,70 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +.declare SRC_B Base=REG(r,10) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare SRC_G Base=REG(r,18) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare SRC_R Base=REG(r,26) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare SRC_A Base=REG(r,34) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw + +#define DEST_ARGB ubBOT_ARGB + +#undef nSRC_REGION +#define nSRC_REGION nREGION_2 + + +//Pack directly to mrf as optimization - vK + +$for(0, 0; <8; 1, 2) { +// mov (16) DEST_ARGB(%2,0)<4> SRC_B(%1) { Compr, NoDDClr } // 16 B +// mov (16) DEST_ARGB(%2,1)<4> SRC_G(%1) { Compr, NoDDClr, NoDDChk } // 16 G +// mov (16) DEST_ARGB(%2,2)<4> SRC_R(%1) { Compr, NoDDClr, NoDDChk } // 16 R //these 2 inst can be merged - vK +// mov (16) DEST_ARGB(%2,3)<4> SRC_A(%1) { Compr, NoDDChk } //DEST_RGB_FORMAT<0;1,0>:ub { Compr, NoDDChk } // 16 A + + mov (8) DEST_ARGB(%2, 0)<4> SRC_B(%1) { NoDDClr } // 8 B + mov (8) DEST_ARGB(%2, 1)<4> SRC_G(%1) { NoDDClr, NoDDChk } // 8 G + mov (8) DEST_ARGB(%2, 2)<4> SRC_R(%1) { NoDDClr, NoDDChk } // 8 R + mov (8) DEST_ARGB(%2, 3)<4> SRC_A(%1) { NoDDChk } // 8 A + + mov (8) DEST_ARGB(%2+1,0)<4> SRC_B(%1,8) { NoDDClr } // 8 B + mov (8) DEST_ARGB(%2+1,1)<4> SRC_G(%1,8) { NoDDClr, NoDDChk } // 8 G + mov (8) DEST_ARGB(%2+1,2)<4> SRC_R(%1,8) { NoDDClr, NoDDChk } // 8 R + mov (8) DEST_ARGB(%2+1,3)<4> SRC_A(%1,8) { NoDDChk } // 8 A +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/SetupVPKernel.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/SetupVPKernel.asm new file mode 100644 index 000000000..1d992564c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/SetupVPKernel.asm @@ -0,0 +1,64 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Modual name: SetupVPKernel.asm +// +// Initial setup for running video-processing kernels +// + +#include "common.inc" + +// +// Now, begin source code.... +// +.code + +#include "Init_All_Regs.asm" + +mov (8) rMSGSRC.0<1>:ud r0.0<8;8,1>:ud // Initialize message payload header with R0 +#if defined (INC_BLENDING) + mul (1) fALPHA_STEP_X:f fSCALING_STEP_RATIO:f fVIDEO_STEP_X:f //StepX_ratio = AlphaStepX / VideoStepX +#endif + +// End of SetupVPKernel + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Fix.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Fix.asm new file mode 100644 index 000000000..4a53a4bbb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Fix.asm @@ -0,0 +1,200 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: YUVX_Save_RGBX_Fix.asm +//---------------------------------------------------------------- + +#include "RGBX_Load_16x8.inc" + +#if (0) + #define nTEMP0 34 // transformation coefficient + #define nTEMP1 35 // one row of R (first half register is used) + #define nTEMP2 36 // one row of G (first half register is used) + #define nTEMP3 37 // one row of B (first half register is used) + #define nTEMP4 38 // mul and add + #define nTEMP5 39 // mul and add + #define nTEMP6 40 // mul and add + #define nTEMP7 41 // mul and add + #define nTEMP8 42 // sum of mul + #define nTEMP10 44 + #define nTEMP10 44 // split ub pixel to word width 1st quarter + #define nTEMP12 46 // split ub pixel to word width 2nd quarter + #define nTEMP14 48 // split ub pixel to word width 3rd quarter + #define nTEMP16 50 // split ub pixel to word width 4th quarter + #define nTEMP17 51 + #define nTEMP18 52 + + #define nTEMP24 58 // temp using for repeat U/V in NV12_Load_8x4.asm +#endif + +#define ONE_ROW_DEBUG 0 + +#if (ONE_ROW_DEBUG) + #define ROW_NUM 0 + #define DBG_ROWNUM_BASE 1 + CHANNEL_2 2 +#else + #define ROW_NUM %1 + $for(0; :w ubDEST_RGBX(0,ROW_NUM*64 )<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP12,0)<1>:w ubDEST_RGBX(0,ROW_NUM*64+16)<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP14,0)<1>:w ubDEST_RGBX(0,ROW_NUM*64+32)<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP16,0)<1>:w ubDEST_RGBX(0,ROW_NUM*64+48)<0;16,1> bYUV_OFF<0;4,1>:b + +#if (ONE_ROW_DEBUG) + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64 )<1> REG2(r,nTEMP10, 0)<0;16,2>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+16)<1> REG2(r,nTEMP12, 0)<0;16,2>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+32)<1> REG2(r,nTEMP14, 0)<0;16,2>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+48)<1> REG2(r,nTEMP16, 0)<0;16,2>:ub +#endif + + // |Y|U|V|X|==>|R|G|B|X| + // ###### do one row for R + // #### mul and add + mul.sat (16) REG2(r, nTEMP4, 0)<1>:w REG2(r,nTEMP10,0)<0;16,1>:w wYUV_to_RGB_CH2_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP5, 0)<1>:w REG2(r,nTEMP12,0)<0;16,1>:w wYUV_to_RGB_CH2_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP6, 0)<1>:w REG2(r,nTEMP14,0)<0;16,1>:w wYUV_to_RGB_CH2_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP7, 0)<1>:w REG2(r,nTEMP16,0)<0;16,1>:w wYUV_to_RGB_CH2_Coef_Fix<0;4,1>:w + + #if (ONE_ROW_DEBUG) + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64+CHANNEL_2 )<4> bYUV_to_RGB_CH2_Coef_Fix<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64+CHANNEL_2+32)<4> bYUV_to_RGB_CH2_Coef_Fix<0;8,1>:ub + + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL_2 )<4> REG2(r,nTEMP4, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL_2+32)<4> REG2(r,nTEMP4, 8)<0;8,1>:ub + #endif + + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:uw REG2(r, nTEMP4, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:uw REG2(r, nTEMP5, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:uw REG2(r, nTEMP6, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:uw REG2(r, nTEMP7, 2)<0;4,4>:w + + // #### write one row of R to rnTEMP1 + mov (4) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP4, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 4)<1>:uw REG2(r, nTEMP5, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 8)<1>:uw REG2(r, nTEMP6, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 12)<1>:uw REG2(r, nTEMP7, 0)<0; 4, 4>:uw + + #if (ONE_ROW_DEBUG) + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL_2 )<4> REG2(r,nTEMP8, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL_2+32)<4> REG2(r,nTEMP8, 8)<0;8,1>:ub + #endif + + add.sat (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 0x80:uw + shl.sat (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 1:w + mov (16) REG2(r, nTEMP1, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + + #if (ONE_ROW_DEBUG) + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL_2 )<4> REG2(r,nTEMP8, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL_2+32)<4> REG2(r,nTEMP8, 8)<0;8,1>:ub + #endif + // ###### do one row for G + // #### mul and add + mul.sat (16) REG2(r, nTEMP4, 0)<1>:w REG2(r,nTEMP10,0)<0;16,1>:w wYUV_to_RGB_CH1_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP5, 0)<1>:w REG2(r,nTEMP12,0)<0;16,1>:w wYUV_to_RGB_CH1_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP6, 0)<1>:w REG2(r,nTEMP14,0)<0;16,1>:w wYUV_to_RGB_CH1_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP7, 0)<1>:w REG2(r,nTEMP16,0)<0;16,1>:w wYUV_to_RGB_CH1_Coef_Fix<0;4,1>:w + + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:uw REG2(r, nTEMP4, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:uw REG2(r, nTEMP5, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:uw REG2(r, nTEMP6, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:uw REG2(r, nTEMP7, 2)<0;4,4>:w + + // #### write one row of G to rnTEMP2 + mov (4) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP4, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 4)<1>:uw REG2(r, nTEMP5, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 8)<1>:uw REG2(r, nTEMP6, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 12)<1>:uw REG2(r, nTEMP7, 0)<0; 4, 4>:uw + + add (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 0x80:uw // saturation + shl.sat (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 1:w + mov (16) REG2(r, nTEMP2, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + + // ###### do one row for B + // #### mul and add + mul.sat (16) REG2(r, nTEMP4, 0)<1>:w REG2(r,nTEMP10,0)<0;16,1>:w wYUV_to_RGB_CH0_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP5, 0)<1>:w REG2(r,nTEMP12,0)<0;16,1>:w wYUV_to_RGB_CH0_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP6, 0)<1>:w REG2(r,nTEMP14,0)<0;16,1>:w wYUV_to_RGB_CH0_Coef_Fix<0;4,1>:w + mul.sat (16) REG2(r, nTEMP7, 0)<1>:w REG2(r,nTEMP16,0)<0;16,1>:w wYUV_to_RGB_CH0_Coef_Fix<0;4,1>:w + + // I had reduced the following add because U coef is zero for B; but in order to support BGR/RGB at the same time, I have to add it back. + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:w REG2(r, nTEMP4, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:w REG2(r, nTEMP5, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:w REG2(r, nTEMP6, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:w REG2(r, nTEMP7, 1)<0;4,4>:w + add.sat (4) REG2(r, nTEMP4, 0)<4>:uw REG2(r, nTEMP4, 0)<0;4,4>:uw REG2(r, nTEMP4, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP5, 0)<4>:uw REG2(r, nTEMP5, 0)<0;4,4>:uw REG2(r, nTEMP5, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP6, 0)<4>:uw REG2(r, nTEMP6, 0)<0;4,4>:uw REG2(r, nTEMP6, 2)<0;4,4>:w + add.sat (4) REG2(r, nTEMP7, 0)<4>:uw REG2(r, nTEMP7, 0)<0;4,4>:uw REG2(r, nTEMP7, 2)<0;4,4>:w + + // #### write one row of B to rnTEMP3 + mov (4) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP4, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 4)<1>:uw REG2(r, nTEMP5, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 8)<1>:uw REG2(r, nTEMP6, 0)<0; 4, 4>:uw + mov (4) REG2(r, nTEMP8, 12)<1>:uw REG2(r, nTEMP7, 0)<0; 4, 4>:uw + + add.sat (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 0x80:uw // saturation + shl.sat (16) REG2(r, nTEMP8, 0)<1>:uw REG2(r, nTEMP8, 0)<0; 16, 1>:uw 1:w + mov (16) REG2(r, nTEMP3, 0)<1>:ub REG2(r, nTEMP8, 1)<0; 16, 2>:ub + + // B + mov (8) ubDEST_RGBX(0,ROW_NUM*64 )<4> REG2(r,nTEMP3, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM*64+32)<4> REG2(r,nTEMP3, 8)<0;8,1>:ub + // G + mov (8) ubDEST_RGBX(0,ROW_NUM*64+1 )<4> REG2(r,nTEMP2, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM*64+1+32)<4> REG2(r,nTEMP2, 8)<0;8,1>:ub + // R + mov (8) ubDEST_RGBX(0,ROW_NUM*64+2 )<4> REG2(r,nTEMP1, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM*64+2+32)<4> REG2(r,nTEMP1, 8)<0;8,1>:ub +#if (!ONE_ROW_DEBUG) + } +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Float.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Float.asm new file mode 100644 index 000000000..c3fd5dfb1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUVX_Save_RGBX_Float.asm @@ -0,0 +1,317 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: YUVX_Save_RGBX_Float.asm +//---------------------------------------------------------------- + +#include "RGBX_Load_16x8.inc" + +#if (0) + // 8 grf reg for one row of pixel (2 pixel per grf) + #define nTEMP0 34 + #define nTEMP1 35 + #define nTEMP2 36 + #define nTEMP3 37 + #define nTEMP4 38 + #define nTEMP5 39 + #define nTEMP6 40 + #define nTEMP7 41 + + #define nTEMP8 42 // transformation coefficient + #define nTEMP10 44 // transformation coefficient + + #define nTEMP12 46 // save Y/U/V in ub format + #define nTEMP14 48 // save YUV in ud format + #define nTEMP16 50 // dp4 result + #define nTEMP17 51 + #define nTEMP18 52 // temp used for repeat U/V in NV12_Load_8x4.asm + + #define nTEMP24 58 // it is not safe to use in my case. I try to use it for repeat U/V in NV12_Load_8x4.asm, Y data is taint in row 4/5 +#endif + +#define ONE_ROW_DEBUG 0 + +#if (ONE_ROW_DEBUG) + // if you want to debug a row which is not the first one, try the following: + // 1. define ROW_NUM_READ to the row you want to debug + // 2. ROW_NUM_WRITE can be same to DBG_ROWNUM_READ to overwrite original YUV data, or define it to a new row + // 3. change (DBG_ROWNUM_BASE+?)=ROW_NUM_READ or ROW_NUM_WRITE to DBG_ROWNUM_0, to not conflict with others + #define ROW_NUM_READ 0 + #define ROW_NUM_WRITE 0 + #define DBG_ROWNUM_BASE 1 + #define DBG_ROWNUM_0 0 +#else + #define ROW_NUM_READ %1 + #define ROW_NUM_WRITE %1 + $for(0; :f r[SRC_RGBA_OFFSET_1,ROW_NUM_READ*32 + 0]<4,1>:ub REG2(r, nTEMP10, 16)<0;4,1>:b + + add (16) REG2(r,nTEMP12,0)<1>:w ubDEST_RGBX(0,ROW_NUM_READ*64 )<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP14,0)<1>:w ubDEST_RGBX(0,ROW_NUM_READ*64+16)<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP16,0)<1>:w ubDEST_RGBX(0,ROW_NUM_READ*64+32)<0;16,1> bYUV_OFF<0;4,1>:b + add (16) REG2(r,nTEMP17,0)<1>:w ubDEST_RGBX(0,ROW_NUM_READ*64+48)<0;16,1> bYUV_OFF<0;4,1>:b + + mov (8) fROW_YUVA(0,0)<1> REG2(r, nTEMP12, 0)<0;8,1>:w + mov (8) fROW_YUVA(1,0)<1> REG2(r, nTEMP12, 8)<0;8,1>:w + mov (8) fROW_YUVA(2,0)<1> REG2(r, nTEMP14, 0)<0;8,1>:w + mov (8) fROW_YUVA(3,0)<1> REG2(r, nTEMP14, 8)<0;8,1>:w + mov (8) fROW_YUVA(4,0)<1> REG2(r, nTEMP16, 0)<0;8,1>:w + mov (8) fROW_YUVA(5,0)<1> REG2(r, nTEMP16, 8)<0;8,1>:w + mov (8) fROW_YUVA(6,0)<1> REG2(r, nTEMP17, 0)<0;8,1>:w + mov (8) fROW_YUVA(7,0)<1> REG2(r, nTEMP17, 8)<0;8,1>:w + + #if (ONE_ROW_DEBUG) + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(0,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + // write Y-16, U-128, V-128 to the 2nd row of RGB (convert float to int first, write whole ud): 1st half, 2 pixels + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64 )<1> REG2(r,nTEMP14, 0)<0;16,1>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+16)<1> REG2(r,nTEMP14, 16)<0;16,1>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(1,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + // write Y-16, U-128, V-128 to the 2nd row of RGB (convert float to int first, write whole ud): 2nd half, 2 pixels + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+32)<1> REG2(r,nTEMP14, 0)<0;16,1>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE)*64+48)<1> REG2(r,nTEMP14, 16)<0;16,1>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(2,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 16)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(3,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 24)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + // write Y-16, U-128, V-128 to the 3rd row of RGB (convert float to int first, only LSB is used): 1st half, 8 pixels + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64 )<1> REG2(r,nTEMP12, 0)<0;16,1>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64+16)<1> REG2(r,nTEMP12, 16)<0;16,1>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(4,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(5,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(6,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 16)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + mov.sat (8) REG2(r, nTEMP14, 0)<1>:ud fROW_YUVA(7,0)<0;8,1>:f + mov (8) REG2(r, nTEMP12, 24)<1>:ub REG2(r, nTEMP14, 0)<0;8,4>:ub + + // write Y-16, U-128, V-128 to the 3rd row of RGB (convert float to int first, only LSB is used): 2nd half, 8 pixels + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64+32)<1> REG2(r,nTEMP12, 0)<0;16,1>:ub + mov (16) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+1)*64+48)<1> REG2(r,nTEMP12, 16)<0;16,1>:ub + #endif + + // ######## do one row for Red ######## + #define fCOEF_REG fYUV_to_RGB_CH2_Coef_Float + #define CHANNEL 2 + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(0, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + #if (ONE_ROW_DEBUG) + // write dp4 (raw float) of 2 pixel to the 4/5th row + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL )<4> REG2(r,nTEMP16, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL )<4> REG2(r,nTEMP16, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 24)<0;8,1>:ub + + // write dp4 (convert float to ud first, write whole ud) of 2 pixel to the 6/7th row + mov (8) REG2(r, nTEMP17, 0)<1>:d REG2(r, nTEMP16, 0)<0;8,1>:f + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL )<4> REG2(r,nTEMP17, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL )<4> REG2(r,nTEMP17, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 24)<0;8,1>:ub + #endif + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(1, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(2, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(3, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(4, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(5, 0)<5;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(6, 0)<6;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(7, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + // #### write this channel + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL )<4> REG2(r,nTEMP12, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL+32)<4> REG2(r,nTEMP12, 8)<0;8,1>:ub + + // ######## do one row for Green ######## + #define fCOEF_REG fYUV_to_RGB_CH1_Coef_Float // reg for green coefficient + #define CHANNEL 1 + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(0, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + #if (ONE_ROW_DEBUG) + // write dp4 (raw float) of 2 pixel to the 4/5th row + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL )<4> REG2(r,nTEMP16, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL )<4> REG2(r,nTEMP16, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 24)<0;8,1>:ub + + // write dp4 (convert float to ud first, write whole ud) of 2 pixel to the 6/7th row + mov (8) REG2(r, nTEMP17, 0)<1>:d REG2(r, nTEMP16, 0)<0;8,1>:f + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL )<4> REG2(r,nTEMP17, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL )<4> REG2(r,nTEMP17, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 24)<0;8,1>:ub + #endif + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(1, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(2, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(3, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(4, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(5, 0)<5;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(6, 0)<6;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(7, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + // #### write this channel + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL )<4> REG2(r,nTEMP12, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL+32)<4> REG2(r,nTEMP12, 8)<0;8,1>:ub + + // ###### do one row for Blue channel + #define fCOEF_REG fYUV_to_RGB_CH0_Coef_Float // reg for Blue coefficient + #define CHANNEL 0 + // ##### dp4(nTEMP16) and save result to uw format(nTEMP12) + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(0, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 0)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + #if (ONE_ROW_DEBUG) + // write dp4 (raw float) of 2 pixel to the 4/5th row + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL )<4> REG2(r,nTEMP16, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+2)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL )<4> REG2(r,nTEMP16, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+3)*64+CHANNEL+32)<4> REG2(r,nTEMP16, 24)<0;8,1>:ub + + // write dp4 (convert float to ud first, write whole ud) of 2 pixel to the 6/7th row + mov (8) REG2(r, nTEMP17, 0)<1>:d REG2(r, nTEMP16, 0)<0;8,1>:f + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL )<4> REG2(r,nTEMP17, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+4)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 8)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL )<4> REG2(r,nTEMP17, 16)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,(DBG_ROWNUM_BASE+5)*64+CHANNEL+32)<4> REG2(r,nTEMP17, 24)<0;8,1>:ub + #endif + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(1, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 2)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(2, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 4)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(3, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 6)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(4, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 8)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(5, 0)<5;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 10)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(6, 0)<6;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 12)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + dp4 (8) REG2(r, nTEMP16, 0)<1>:f fROW_YUVA(7, 0)<0;8,1> fCOEF_REG<0;4,1>:f + mov.sat (2) REG2(r, nTEMP14, 0)<1>:ud REG2(r, nTEMP16, 0)<0;2,4>:f + mov (2) REG2(r, nTEMP12, 14)<1>:ub REG2(r, nTEMP14, 0)<0;2,4>:ub + + // #### write this channel + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL )<4> REG2(r,nTEMP12, 0)<0;8,1>:ub + mov (8) ubDEST_RGBX(0,ROW_NUM_WRITE*64+CHANNEL+32)<4> REG2(r,nTEMP12, 8)<0;8,1>:ub +#if (!ONE_ROW_DEBUG) + } +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUV_to_RGBX_Coef.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUV_to_RGBX_Coef.asm new file mode 100644 index 000000000..6aae1a5f7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/YUV_to_RGBX_Coef.asm @@ -0,0 +1,129 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * Halley Zhao + */ + +// Module name: YUV_to_RGBX_Coef.asm +//---------------------------------------------------------------- +#define ubDEST_RGBX ubTOP_Y // I'd like use them for color conversion + +// is dst surface |R|G|B|X| layout? otherwise, it is |B|G|R|X| layout +and.nz.f0.1 (1) dNULLREG r1.2:ud 0xFF000000:ud +#ifdef FIX_POINT_CONVERSION + // ###### set up transformation coefficient + // R = clip(( 298 * C + 0 * D + 409 * E + 128) >> 8) + // R = clip((0x012A * C + 0 * D + 0x0199 * E + 128) >> 8) + (-f0.1) mov (1) REG2(r, nTEMP0, 0):ud 0x0000012A:ud + (-f0.1) mov (1) REG2(r, nTEMP0, 1):ud 0x00000199:ud + ( f0.1) mov (1) REG2(r, nTEMP0, 4):ud 0x0000012A:ud + ( f0.1) mov (1) REG2(r, nTEMP0, 5):ud 0x00000199:ud + + // G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8) + // G = clip(( 0x012A * C - 0x64 * D - 0xD0 * E + 128) >> 8) + // G = clip(( 0x012A * C + 0xFF9C * D + 0xFF30 * E + 128) >> 8) + mov (1) REG2(r, nTEMP0, 2):ud 0xFF9C012A:ud + mov (1) REG2(r, nTEMP0, 3):ud 0x0000FF30:ud + + // B = clip(( 298 * C + 516 * D + 0 * E + 128) >> 8) + // B = clip((0x012A* C + 0x0204 * D + 0 * E + 128) >> 8) + (-f0.1) mov (1) REG2(r, nTEMP0, 4):ud 0x0204012A:ud + (-f0.1) mov (1) REG2(r, nTEMP0, 5):ud 0x00000000:ud + ( f0.1) mov (1) REG2(r, nTEMP0, 0):ud 0x0204012A:ud + ( f0.1) mov (1) REG2(r, nTEMP0, 1):ud 0x00000000:ud + + // asr.sat (24) REG2(r,nTEMP0,0)<1> REG2(r,nTEMP0,0)<0;24,1> 1:w + asr.sat (8) REG2(r,nTEMP0, 0)<1>:w REG2(r,nTEMP0, 0)<0;8,1>:w 1:w + asr.sat (4) REG2(r,nTEMP0,8)<1>:w REG2(r,nTEMP0,8)<0;4,1>:w 1:w + + // C = Y' - 16 D = U - 128 E = V - 128 + mov (1) REG2(r, nTEMP0, 6):ud 0x008080F0:ud + + #define wYUV_to_RGB_CH2_Coef_Fix REG2(r, nTEMP0, 0) + #define wYUV_to_RGB_CH1_Coef_Fix REG2(r, nTEMP0, 4) + #define wYUV_to_RGB_CH0_Coef_Fix REG2(r, nTEMP0, 8) + #define bYUV_OFF REG2(r,nTEMP0,24) + + // debug use + #define bYUV_to_RGB_CH2_Coef_Fix REG2(r, nTEMP0, 0) + #define bYUV_to_RGB_CH1_Coef_Fix REG2(r, nTEMP0, 8) + #define bYUV_to_RGB_CH0_Coef_Fix REG2(r, nTEMP0, 16) + +#else + // R = Y + 1.13983*V + // R = clip( Y + 1.402*(Cr-128)) // ITU-R + (-f0.1) mov (1) REG2(r, nTEMP8, 3):f 0.000f // A coef + (-f0.1) mov (1) REG2(r, nTEMP8, 2):f 1.402f // V coef + (-f0.1) mov (1) REG2(r, nTEMP8, 1):f 0.0f // U coef + (-f0.1) mov (1) REG2(r, nTEMP8, 0):f 1.0f // Y coef + + ( f0.1) mov (1) REG2(r, nTEMP10, 3):f 0.000f // A coef + ( f0.1) mov (1) REG2(r, nTEMP10, 2):f 1.402f // V coef + ( f0.1) mov (1) REG2(r, nTEMP10, 1):f 0.0f // U coef + ( f0.1) mov (1) REG2(r, nTEMP10, 0):f 1.0f // Y coef + + // G = Y - 0.39465*U - 0.58060*V + // G = clip( Y - 0.344*(Cb-128) - 0.714*(Cr-128)) + mov (1) REG2(r, nTEMP8, 7):f 0.000f // A coef + mov (1) REG2(r, nTEMP8, 6):f -0.714f // V coef + mov (1) REG2(r, nTEMP8, 5):f -0.344f // U coef + mov (1) REG2(r, nTEMP8, 4):f 1.0f // Y coef + + // B = Y + 2.03211*U + // B = clip( Y + 1.772*(Cb-128)) + (-f0.1) mov (1) REG2(r, nTEMP10, 3):f 0.000f // A coef + (-f0.1) mov (1) REG2(r, nTEMP10, 2):f 0.0f // V coef + (-f0.1) mov (1) REG2(r, nTEMP10, 1):f 1.772f // U coef + (-f0.1) mov (1) REG2(r, nTEMP10, 0):f 1.0f // Y coef + + ( f0.1) mov (1) REG2(r, nTEMP8, 3):f 0.000f // A coef + ( f0.1) mov (1) REG2(r, nTEMP8, 2):f 0.0f // V coef + ( f0.1) mov (1) REG2(r, nTEMP8, 1):f 1.772f // U coef + ( f0.1) mov (1) REG2(r, nTEMP8, 0):f 1.0f // Y coef + + mov (1) REG2(r, nTEMP10, 4):ud 0x008080F0:ud + + #define fYUV_to_RGB_CH2_Coef_Float REG2(r, nTEMP8, 0) + #define fYUV_to_RGB_CH1_Coef_Float REG2(r, nTEMP8, 4) + #define fYUV_to_RGB_CH0_Coef_Float REG2(r, nTEMP10, 0) + #define bYUV_OFF REG2(r,nTEMP10,16) + + .declare fROW_YUVA Base=REG(r,nTEMP0) ElementSize=4 SrcRegion=REGION(8,8) Type=f // r nTEMP0 - r nTEMP7 + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/common.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/common.inc new file mode 100644 index 000000000..fde764095 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/common.inc @@ -0,0 +1,647 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef COMMON_INC +#define COMMON_INC + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 80 +.reg_count_payload 4 + + +//========== Common constants ========== + +// Bit position constants +#define BIT0 0x01 +#define BIT1 0x02 +#define BIT2 0x04 +#define BIT3 0x08 +#define BIT4 0x10 +#define BIT5 0x20 +#define BIT6 0x40 +#define BIT7 0x80 +#define BIT8 0x0100 +#define BIT9 0x0200 +#define BIT10 0x0400 +#define BIT11 0x0800 +#define BIT12 0x1000 +#define BIT13 0x2000 +#define BIT14 0x4000 +#define BIT15 0x8000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +#define nGRFWIB 32 // GRF register width in byte +#define nGRFWIW 16 // GRF register width in word +#define nGRFWID 8 // GRF register width in dword + +#define nTOP_FIELD 0 +#define nBOTTOM_FIELD 1 + +#define nPREVIOUS_FRAME 0 // Previous frame +#define nCURRENT_FRAME 1 // Current frame +#define nNEXT_FRAME 2 // Next frame + +#ifdef GT +// GT DI Kernel +#else // ILK +// ILK DI Kernel +#endif + +//=================================== + +//========== Macros ========== +#define REGION(Width,HStride) // Region definition when ExecSize = Width + +#define RegFile(a) a +#define REG(r,n) _REG(RegFile(r),n) +#define _REG(r,n) __REG(r,n) +#define __REG(r,n) r##n.0 +#define REG2(r,n,s) _REG2(RegFile(r),n,s) +#define _REG2(r,n,s) __REG2(r,n,s) +#define __REG2(r,n,s) r##n.##s + +#define dNULLREG null<1>:d +#define wNULLREG null<1>:w + +#define KERNEL_ID(kernel_ID) mov NULLREG kernel_ID:ud + + +#define NODDCLR +#define NODDCLR_NODDCHK +#define NODDCHK + +//#define NODDCLR { NoDDClr } +//#define NODDCLR_NODDCHK { NoDDClr, NoDDChk } +//#define NODDCHK { NoDDChk } + + +//========== Defines ==================== + + +//========== GRF partition ========== +// r0 header : r0 (1 GRF) +// Static parameters : r1 - r5 (5 GRFS) +// Inline parameters : r6 - r7 (2 GRFs) +// MSGSRC : r9 (1 GRF) +// Top IO region : r10 - r33 (24 GRFS 8 for each component Y,U,V 16X8:w) +// Free space : r34 - r55 (22 GRFS) +// Bottom IO region : r56 - r79 (24 GRFS 8 for each component Y,U,V 16X8:w) +//=================================== + + +//========== Static Parameters ========== +// r1 +#define fPROCAMP_C0 r1.0 // DWORD 0, Procamp constant C0 in :f +#define wPROCAMP_C0 r1.0 // DWORD 0, Procamp constant C0 in :w +#define NUMBER_0002 r1.1 // DWORD 0, 0x0002 used in procamp for GT +#define udCP_MessageFormat r1.0 // DWORD 0, bits 2:3 of DWORD. (CE) +#define udCP_StatePointer r1.0 // DWORD 0, bits 31:5 of DWORD.(CE) + +#define ubSRC_CF_OFFSET r1.4 // DWORD 1, byte 0-2. SRC packed color format YUV offset in :ub + +#define ubDEST_RGB_FORMAT r1.8 // DWORD 2, byte 0. Dest RGB color format (0:ARGB FF:XRGB) +#define ubDEST_CF_OFFSET r1.8 // DWORD 2, byte 0-2. Dest packed color format YUV offset in :ub + +#define fPROCAMP_C1 r1.3 // DWORD 3, Procamp constant C1 in :f +#define wPROCAMP_C1 r1.6 // DWORD 3, Procamp constant C1 in :w +#define NUMBER_0100 r1.7 // DWORD 3, 0x0100 used in procamp for GT + +#define fPROCAMP_C2 r1.4 // DWORD 4, Procamp constant C2 in :f +#define wPROCAMP_C2 r1.8 // DWORD 4, Procamp constant C2 in :w + +#define uwSPITCH_DIV2 r1.10 // DWORD 5, byte 0-1. statistics surface pitch divided by 2 + +#define fVIDEO_STEP_Y r1.6 // DWORD 6, :f, AVS normalized reciprocal of Y Scaling factor +#define ubSTMM_SHIFT r1.24 // DWORD 6, byte 0. Amount of right shift for the DI blending equation +#define ubSTMM_MIN r1.25 // DWORD 6, byte 1. Min STMM for DI blending equation +#define ubSTMM_MAX r1.26 // DWORD 6, byte 2. Max STMM for DI blending equation +#define ubTFLD_FIRST r1.27 // DWORD 6, byte 3. Field parity order + +#define fPROCAMP_C5 r1.7 // DWORD 7, Procamp constant C3 in :f +#define wPROCAMP_C5 r1.14 // DWORD 7, Procamp constant C3 in :w + +// r2 +#define fPROCAMP_C3 r2.0 // DWORD 0, Procamp constant C4 in :f +#define wPROCAMP_C3 r2.0 // DWORD 0, Procamp constant C4 in :w + +#define fCSC_C5 r2.2 // DWORD 2. WG+CSC constant C5 +#define wCSC_C5 r2.4 // DWORD 2. WG+CSC constant C5 + +#define fPROCAMP_C4 r2.3 // DWORD 3, Procamp constant C5 in :f +#define wPROCAMP_C4 r2.6 // DWORD 3, Procamp constant C5 in :w + +#define fCSC_C8 r2.4 // DWORD 4. WG+CSC constant C8 +#define wCSC_C8 r2.8 // DWORD 4. WG+CSC constant C8 +#define fCSC_C9 r2.7 // DWORD 7. WG+CSC constant C9 +#define wCSC_C9 r2.14 // DWORD 7. WG+CSC constant C9 + +// r3 +#define fCSC_C0 r3.0 // DWORD 0. WG+CSC constant C0 +#define wCSC_C0 r3.0 // DWORD 0. WG+CSC constant C0 + +#define fSCALING_STEP_RATIO r3.1 // DWORD 1, = Alpha_X_Scaling_Step / Video_X_scaling_Step :f (blending) +#define fALPHA_STEP_X r3.1 // DWORD 1, = 1/Scale X, 0.5 = 2x, in :f (blending) + +#define fALPHA_STEP_Y r3.2 // DWORD 2, = 1/Scale Y, in :f + +#define fCSC_C4 r3.3 // DWORD 3. WG+CSC constant C4 +#define wCSC_C4 r3.6 // DWORD 3. WG+CSC constant C4 +#define fCSC_C1 r3.4 // DWORD 4. WG+CSC constant C1 +#define wCSC_C1 r3.8 // DWORD 4. WG+CSC constant C1 + +#define wSRC_H_ORI_OFFSET r3.10 // DWORD 5, bytes 0,1 :w +#define wSRC_V_ORI_OFFSET r3.11 // DWORD 5, bytes 2,3 :w + +#define dCOLOR_PIXEL r3.6 // DWORD 6. Color pixel for Colorfill + +#define fCSC_C2 r3.6 // DWORD 6. WG+CSC constant C2 +#define wCSC_C2 r3.12 // DWORD 6. WG+CSC constant C2 +#define fCSC_C3 r3.7 // DWORD 7. WG+CSC constant C3 +#define wCSC_C3 r3.14 // DWORD 7. WG+CSC constant C3 + +// r4 +#define fCSC_C6 r4.0 // DWORD 0. WG+CSC constant C6 +#define wCSC_C6 r4.0 // DWORD 0. WG+CSC constant C6 + +#define wFRAME_ENDX r4.2 // DWORD 1, word 0. Horizontal end = Origin+Width (in pixels)(for multiple blocks) +#define wNUM_BLKS r4.3 // DWORD 1, word 1. Number of blocks to process (for multiple blocks) + +#define wCOPY_ORIX r4.5 // DWORD 2, word 1. A copy of X origin (for multiple blocks) +#define uwNLAS_ENABLE r4.4 // DWORD 2, bit 15, NLAS enble bit + +#define fCSC_C7 r4.3 // DWORD 3. WG+CSC constant C7 +#define wCSC_C7 r4.6 // DWORD 3. WG+CSC constant C7 +#define fCSC_C10 r4.4 // DWORD 4. WG+CSC constant C10 +#define wCSC_C10 r4.8 // DWORD 4. WG+CSC constant C10 + +#define fFRAME_VID_ORIX r4.5 // DWORD 5, Frame horizontal origin normalized for scale kernel + +#define fFRAME_ALPHA_ORIX r4.6 // DWORD 6. Normalized alpha horiz origin for the frame + +#define fCSC_C11 r4.7 // DWORD 7. WG+CSC constant C11 +#define wCSC_C11 r4.14 // DWORD 7. WG+CSC constant C11 + +//======================================== + +//========== Inline parameters =========== +// r5 +#define wORIX r5.0 // DWORD 0, byte 0-1. :w, Destination Block Horizontal Origin in pel +#define wORIY r5.1 // DWORD 0, byte 2-3. :w, Destination Block Vertical Origin in pel + +#define fSRC_VID_H_ORI r5.1 // DWORD 1, :f, SRC Y horizontal origin normalized for scale kernel + +#define fSRC_VID_V_ORI r5.2 // DWORD 2, :f, SRC Y vertical origin normalized for scale kernel + +#define fSRC_ALPHA_H_ORI r5.3 // DWORD 3, :f, Normalized alpha horizontal origin + +#define fSRC_ALPHA_V_ORI r5.4 // DWORD 4, :f, Normalized alpha vertical origin + +#define uwALPHA_MASK_X r5.10 // DWORD 5, byte 0-1 :w, H. alpha mask +#define ubALPHA_MASK_Y r5.22 // DWORD 5, byte 2. :ub,V. alpha mask +#define ubBLK_CNT_X r5.23 // DWORD 5, byte 3, :ub, Horizontal Block Count per thread + +// mask is used for each block. it will be reloaded from r6 below for the last block. +#define udBLOCK_MASK r5.6 // DWORD 6 +#define uwBLOCK_MASK_H r5.12 // DWORD 6, byte 0-1 :uw, Block horizontal mask used in non-DWord aligned kernels +#define ubBLOCK_MASK_V r5.26 // DWORD 6, byte 2 :ub, Block vertical mask used in non-DWord aligned kernels +#define ubNUM_BLKS r5.27 // DWORD 6, byte 3, :ub, Total Block Count per thread + +#define fVIDEO_STEP_X r5.7 // DWORD 7. :f, AVS normalized reciprocal of X Scaling factor + +// r6 +#define fVIDEO_STEP_DELTA r6.0 // DWORD 0. :f, AVS normalized delta between 2 adjacent scaling steps (used for non-linear scaling) + +// mask is used for the last block (assume only M*1 and 1*N block partation aer supported) +#define udBLOCK_MASK_2 r6.1 // DWORD 1 +#define uwBLOCK_MASK_H_RIGHT r6.2 // DWORD 1, byte 0-1 :uw, Block horizontal mask used in non-DWord aligned kernels (right) +#define ubBLOCK_MASK_V_BOTTOM r6.6 // DWORD 1, byte 2 :ub, Block vertical mask used in non-DWord aligned kernels +#define uwBLOCK_MASK_H_MIDDLE r6.4 // DWORD 2, byte 0-1 :uw, Block horizontal mask used in non-DWord aligned kernels (left) + + +//====================== Binding table ========================================= + +#if defined(DNDI) + // DNDI Surface Binding Table + //#define nBI_SRC_CURR 0 // Current input frame surface + //#define nBI_SRC_PRIV 1 // Denoised previous input frame surface + //#define nBI_SRC_STAT 2 // Statistics input surface (STMM / Noise motion history) + //#define nBI_DEST_1ST 3 // 1st deinterlaced output frame surface +// #define nBI_DEST_YUV 3 // Dest frame YUV (for DN only) + //#define nBI_DEST_Y 3 // Dest frame Y (for DN only) + //#define nBI_DEST_2ND 4 // 2nd deinterlaced output frame surface + //#define nBI_DEST_DN_CURR 6 // Denoised current output frame surface + //#define nBI_DEST_STAT 7 // Statistics output surface (STMM / Noise motion history) +// #define nBI_DEST_U 8 // Dest frame U (for DN only) +// #define nBI_DEST_V 9 // Dest frame V (for DN only) +// #define nBI_SRC_U 10 // Src frame U (for DN only) +// #define nBI_SRC_V 11 // Src frame V (for DN only) +// #define nBI_SRC_UV 10 // Current src frame for UV + +#endif + +#if defined(INPUT_PL3) + // PL3 Surface Binding Table +// #define nBI_SRC_ALPHA 0 // Alpha +// #define nBI_SRC_Y 1 // Current src frame +// #define nBI_SRC_U 2 // Current src frame +// #define nBI_SRC_V 3 // Current src frame +// #define nBI_DEST_Y 10 // Dest frame +// #define nBI_DEST_U 11 // Dest frame +// #define nBI_DEST_V 12 // Dest frame +// #define nBI_DEST_YUV 7 // Dest frame +// #define nBI_DEST_RGB 7 // same num as BI_DEST_YUV, never used at the same time +#endif + +#if defined(INPUT_PL2) + // PL2 Surface Binding Table +// #define nBI_SRC_ALPHA 0 // Alpha +// #define nBI_SRC_Y 1 // Current src frame for Y + offseted UV +// #define nBI_SRC_YUV 1 // Current src frame for YUV in case of NV12_AVS +// #define nBI_SRC_UV 2 // Current src frame for UV +// #define nBI_DEST_YUV 7 // Current dest frame for Y + offseted UV +// #define nBI_DEST_RGB 7 // same num as BI_DEST_YUV, never used at the same time +// #define nBI_DEST_Y 10 // Dest frame +// #define nBI_DEST_U 11 // Dest frame +// #define nBI_DEST_V 12 // Dest frame +#endif + +#if defined(INPUT_PA) || defined(COLORFILL) + // Packed Surface Binding Table +// #define nBI_SRC_ALPHA 0 // Alpha +// #define nBI_SRC_YUV 1 // Current src frame +// #define nBI_DEST_YUV 3 // Dest frame +// #define nBI_DEST_RGB 3 // same num as BI_DEST_YUV, never used at the same time +#endif + + +//supper binding table +#define nBI_ALPHA_SRC 0 +#define nBI_CURRENT_SRC_YUV 1 +#define nBI_FIELD_COPY_SRC_1_YUV 1 +#define nBI_CURRENT_SRC_Y 1 +#define nBI_FIELD_COPY_SRC_1_Y 1 +#define nBI_CURRENT_SRC_RGB 1 +#define nBI_CURRENT_SRC_UV 2 +#define nBI_FIELD_COPY_SRC_1_UV 2 +#define nBI_CURRENT_SRC_U 2 +#define nBI_FIELD_COPY_SRC_1_U 2 +#define nBI_CURRENT_SRC_V 3 +#define nBI_FIELD_COPY_SRC_1_V 3 +#define nBI_TEMPORAL_REFERENCE_YUV 4 +#define nBI_FIELD_COPY_SRC_2_YUV 4 +#define nBI_TEMPORAL_REFERENCE_Y 4 +#define nBI_FIELD_COPY_SRC_2_Y 4 +#define nBI_CURRENT_SRC_YUV_HW_DI 4 +#define nBI_TEMPORAL_REFERENCE_UV 5 +#define nBI_FIELD_COPY_SRC_2_UV 5 +#define nBI_TEMPORAL_REFERENCE_U 5 +#define nBI_FIELD_COPY_SRC_2_U 5 +#define nBI_DENOISED_PREV_HW_DI 5 +#define nBI_TEMPORAL_REFERENCE_V 6 +#define nBI_FIELD_COPY_SRC_2_V 6 +#define nBI_STMM_HISTORY 6 +#define nBI_DESTINATION_YUV 7 +#define nBI_DESTINATION_RGB 7 +#define nBI_DESTINATION_Y 7 +#define nBI_DESTINATION_UV 8 +#define nBI_DESTINATION_U 8 +#define nBI_DESTINATION_V 9 +#define nBI_DESTINATION_1_YUV 10 +#define nBI_DESTINATION_1_Y 10 +#define nBI_DESTINATION_1_UV 11 +#define nBI_DESTINATION_1_U 11 +#define nBI_DESTINATION_1_V 12 +#define nBI_DESTINATION_2_YUV 13 +#define nBI_DESTINATION_2_Y 13 +#define nBI_DESTINATION_2_UV 14 +#define nBI_DESTINATION_2_U 14 +#define nBI_DESTINATION_2_V 15 +#define nBI_STMM_HISTORY_OUTPUT 20 +#define nBI_TEMPORAL_REFERENCE_YUV_PDI 21 +#define nBI_TEMPORAL_REFERENCE_Y_PDI 21 +#define nBI_TEMPORAL_REFERENCE_UV_PDI 22 +#define nBI_TEMPORAL_REFERENCE_U_PDI 22 +#define nBI_TEMPORAL_REFERENCE_V_PDI 23 +#define nBI_SUBVIDEO_YUV 26 +#define nBI_SUBVIDEO_Y 26 +#define nBI_SUBVIDEO_UV 27 +#define nBI_SUBVIDEO_U 27 +#define nBI_SUBVIDEO_V 28 +#define nBI_SUBPICTURE_YUV 29 +#define nBI_SUBPICTURE_P8 29 +#define nBI_SUBPICTURE_A8 30 +#define nBI_GRAPHIC_YUV 31 +#define nBI_GRAPHIC_P8 31 +#define nBI_GRAPHIC_A8 32 + + + +//========== Planar Sampler State Table Index ========== +#define nSI_SRC_ALPHA 0x000 // Sampler State for Alpha + +//Sampler Index for AVS/IEF messages +#define nSI_SRC_Y 0x400 // Sampler State for Y +#define nSI_SRC_U 0x800 // Sampler State for U +#define nSI_SRC_V 0xC00 // Sampler State for V +#define nSI_SRC_UV 0x800 // For NV12 surfaces +#define nSI_SRC_YUV 0x400 // For Packed surfaces +#define nSI_SRC_RGB 0x400 // For ARGB surfaces + +//Sampler Index for SIMD16 sampler messages +#define nSI_SRC_SIMD16_Y 0x100 // Sampler State for Y +#define nSI_SRC_SIMD16_U 0x200 // Sampler State for U +#define nSI_SRC_SIMD16_V 0x300 // Sampler State for V +#define nSI_SRC_SIMD16_UV 0x200 // For NV12 surfaces +#define nSI_SRC_SIMD16_YUV 0x100 // For Packed surfaces +#define nSI_SRC_SIMD16_RGB 0x100 // For ARGB surfaces + + + +// Common Registers +#define pCF_Y_OFFSET a0.4 // Address register holding Y offset +#define pCF_U_OFFSET a0.5 // Address register holding U offset +#define pCF_V_OFFSET a0.6 // Address register holding V offset + +// #define YUV_ORI ORIX // Used by writing packed data to dport + + +//================= Message Payload Header fields ============================== +#define IDP r0.2:ud // Interface Descriptor Pointer + +//================= Common Message Descriptor TBD add common load and save ===== +// Message descriptor for dataport media write +#ifdef GT + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 0 1010 (media block write) 00000 + // 00000000 (binding table index - set later) + // = 0x02094000 + #define nDPMW_MSGDSC 0x02094000 + #define nDPMR_MSGDSC 0x02098000 // Data Port Media Block Read Message Descriptor + // TBD +#else // ILK + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 000 0 010 (media block write) 0000 + // 00000000 (binding table index - set later) + // = 0x02082000 + #define nDPMW_MSGDSC 0x02082000 // Data Port Media Block Write Message Descriptor + #define nDPMR_MSGDSC 0x0208A000 // Data Port Media Block Read Message Descriptor +#endif + +// Message Length defines +#define nMSGLEN_1 0x02000000 // Message Length of 1 GRF for Send +#define nMSGLEN_2 0x04000000 // Message Length of 2 GRF for Send +#define nMSGLEN_4 0x08000000 // Message Length of 4 GRF for Send +#define nMSGLEN_8 0x10000000 // Message Length of 8 GRF for Send + +// Response Length defines +#define nRESLEN_1 0x00100000 // Message Response Length of 1 GRF from Send +#define nRESLEN_2 0x00200000 // Message Response Length of 2 GRF from Send +#define nRESLEN_3 0x00300000 // Message Response Length of 3 GRF from Send +#define nRESLEN_4 0x00400000 // Message Response Length of 4 GRF from Send +#define nRESLEN_5 0x00500000 // Message Response Length of 5 GRF from Send +#define nRESLEN_8 0x00800000 // Message Response Length of 8 GRF from Send +#define nRESLEN_9 0x00900000 // Message Response Length of 9 GRF from Send +#define nRESLEN_11 0x00B00000 // Message Response Length of 11 GRF from Send +#define nRESLEN_12 0x00C00000 // Message Response Length of 12 GRF from Send +#define nRESLEN_16 0x01000000 // Message Response Length of 16 GRF from Send + +// Block Width and Height Size defines +#define nBLOCK_WIDTH_4 0x00000003 // Block Width 4 +#define nBLOCK_WIDTH_5 0x00000004 // Block Width 5 +#define nBLOCK_WIDTH_8 0x00000007 // Block Width 8 +#define nBLOCK_WIDTH_9 0x00000008 // Block Width 9 +#define nBLOCK_WIDTH_12 0x0000000B // Block Width 12 +#define nBLOCK_WIDTH_16 0x0000000F // Block Width 16 +#define nBLOCK_WIDTH_20 0x00000013 // Block Width 20 +#define nBLOCK_WIDTH_32 0x0000001F // Block Width 32 +#define nBLOCK_HEIGHT_1 0x00000000 // Block Height 1 +#define nBLOCK_HEIGHT_2 0x00010000 // Block Height 2 +#define nBLOCK_HEIGHT_4 0x00030000 // Block Height 4 +#define nBLOCK_HEIGHT_5 0x00040000 // Block Height 5 +#define nBLOCK_HEIGHT_8 0x00070000 // Block Height 8 + +// Extended Message Descriptors +#define nEXTENDED_MATH 0x1 +#define nSMPL_ENGINE 0x2 +#define nMESSAGE_GATEWAY 0x3 +#define nDATAPORT_READ 0x4 +#define nDATAPORT_WRITE 0x5 +#define nURB 0x6 +#define nTS_EOT 0x27 // with End-Of-Thread bit ON + +// Common message descriptors: +#ifdef GT + #define nEOT_MSGDSC 0x02000010 // End of Thread Message Descriptor + #define IF_NULL null:uw null:uw null:uw //for different if instructions on ILK and Gen6 +#else //ILK + #define nEOT_MSGDSC 0x02000000 // End of Thread Message Descriptor + #define IF_NULL +#endif + + +//===================== Math Function Control =================================== +#define mfcINV 0x1 // reciprocal +#define mfcLOG 0x2 // log +#define mfcEXP 0x3 // exponent +#define mfcSQRT 0x4 // square root +#define mfcRSQ 0x5 // reciprocal square root +#define mfcSIN 0x6 // sine (in radians) +#define mfcCOS 0x7 // cosine (in radians) +#define mfcSINCOS 0x8 // dst0 = sin of src0, dst1 = cosine of src0 (in radians) - GT+ ONLY +#define mfcPOW 0xA // abs(src0) raised to the src1 power +#define mfcINT_DIV_QR 0xB // return quotient and remainder +#define mfcINT_DIV_Q 0xC // return quotient +#define mfcINT_DIV_R 0xD // return remainder + + +//=================== Message related registers ================================= + +#ifdef GT + #define udDUMMY_NULL +#else // _ILK + #define udDUMMY_NULL null:ud // Used in send inst as src0 +#endif + + +//----------- Message Registers ------------ +#define mMSGHDR m1 // Message Payload Header +#define mMSGHDRY m1 // Message Payload Header register for Y data +#define mMSGHDRU m2 // Message Payload Header register for U data +#define mMSGHDRV m3 // Message Payload Header register for V data +#define mMSGHDRYA m4 // Second Message Payload Header register for Y data +#define mMSGHDRH m5 // Message Payload Header register for motion history +#define mMSGHDRY1 m1 // Message Payload Header register for first Y data +#define mMSGHDRY2 m2 // Message Payload Header register for second Y data +#define mMSGHDRY3 m3 // Message Payload Header register for third Y data +#define mMSGHDRY4 m4 // Message Payload Header register for fourth Y data +#define mMSGHDRY5 m5 // Message Payload Header register for fifth Y data +#define mMSGHDRY6 m6 // Message Payload Header register for sixth Y data +#define mMSGHDR_EOT m15 // Dummy Message Register for EOT + +#define rMSGSRC r8 // Message source register +#define pMSGDSC a0.0:ud // Message Descriptor register (type DWORD) + +#define udMH_ORI rMSGSRC.0 // Data Port Media Block R/W message header block offset +#define udMH_ORIX rMSGSRC.0 // Data Port Media Block R/W message header X offset +#define udMH_ORIY rMSGSRC.1 // Data Port Media Block R/W message header Y offset +#define udMH_SIZE rMSGSRC.2 // Data Port Media Block R/W message header block width & height + +// M2 - M9 for message data payload +.declare mubMSGPAYLOAD Base=m2 ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare muwMSGPAYLOAD Base=m2 ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare mudMSGPAYLOAD Base=m2 ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare mfMSGPAYLOAD Base=m2 ElementSize=4 SrcRegion=REGION(8,1) Type=f + +//=================== End of thread instruction =========================== +#ifdef GT + #define END_THREAD mov (8) mMSGHDR_EOT<1>:ud r0.0<8;8,1>:ud \n\ + send (1) null<1>:d mMSGHDR_EOT nTS_EOT nEOT_MSGDSC +#else // ILK This should be changed to 1 instruction; I have tested it and it works - vK + #define END_THREAD mov (8) mMSGHDR_EOT<1>:ud r0.0<8;8,1>:ud \n\ + send (1) dNULLREG mMSGHDR_EOT udDUMMY_NULL nTS_EOT nEOT_MSGDSC:ud +#endif + + +//======================================================================= +// Region declarations for SRC and DEST as TOP and BOT + +// Common I/O regions +#define nREGION_1 1 +#define nREGION_2 2 + +//*** These region base GRFs are fixed regardless planar/packed, and data alignment. +//*** Each kernel is responsible to select the correct region declaration below. +//*** YUV regions are not necessarily next to each other. +#define nTOP_Y 10 // r10 - r17 (8 GRFs) +#define nTOP_U 18 // r18 - r25 (8 GRFs) +#define nTOP_V 26 // r26 - r33 (8 GRFs) + +#define nBOT_Y 56 // r56 - r63 (8 GRFs) +#define nBOT_U 64 // r64 - r71 (8 GRFs) +#define nBOT_V 72 // r72 - r79 (8 GRFs) + +// Define temp space for any usages +#define nTEMP0 34 +#define nTEMP1 35 +#define nTEMP2 36 +#define nTEMP3 37 +#define nTEMP4 38 +#define nTEMP5 39 +#define nTEMP6 40 +#define nTEMP7 41 +#define nTEMP8 42 +#define nTEMP10 44 +#define nTEMP12 46 +#define nTEMP14 48 +#define nTEMP16 50 +#define nTEMP17 51 +#define nTEMP18 52 + +#define nTEMP24 58 + +// Common region 1 +.declare ubTOP_Y Base=REG(r,nTOP_Y) ElementSize=1 SrcRegion=REGION(16,1) DstRegion=<1> Type=ub +.declare ubTOP_U Base=REG(r,nTOP_U) ElementSize=1 SrcRegion=REGION(8,1) DstRegion=<1> Type=ub +.declare ubTOP_V Base=REG(r,nTOP_V) ElementSize=1 SrcRegion=REGION(8,1) DstRegion=<1> Type=ub + +.declare uwTOP_Y Base=REG(r,nTOP_Y) ElementSize=2 SrcRegion=REGION(16,1) DstRegion=<1> Type=uw +.declare uwTOP_U Base=REG(r,nTOP_U) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare uwTOP_V Base=REG(r,nTOP_V) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare ub2TOP_Y Base=REG(r,nTOP_Y) ElementSize=1 SrcRegion=REGION(16,2) DstRegion=<1> Type=ub +.declare ub2TOP_U Base=REG(r,nTOP_U) ElementSize=1 SrcRegion=REGION(8,2) DstRegion=<1> Type=ub +.declare ub2TOP_V Base=REG(r,nTOP_V) ElementSize=1 SrcRegion=REGION(8,2) DstRegion=<1> Type=ub + +.declare ub4TOP_Y Base=REG(r,nTOP_Y) ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare ub4TOP_U Base=REG(r,nTOP_U) ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare ub4TOP_V Base=REG(r,nTOP_V) ElementSize=1 SrcRegion=REGION(8,4) Type=ub + +.declare ubTOP_ARGB Base=REG(r,nTOP_Y) ElementSize=1 SrcRegion=REGION(8,4) Type=ub + +// Used by "send" instruction +.declare udTOP_Y_IO Base=REG(r,nTOP_Y) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare udTOP_U_IO Base=REG(r,nTOP_U) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare udTOP_V_IO Base=REG(r,nTOP_V) ElementSize=4 SrcRegion=REGION(8,1) Type=ud + +// Common region 2 +.declare ubBOT_Y Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(16,1) DstRegion=<1> Type=ub +.declare ubBOT_U Base=REG(r,nBOT_U) ElementSize=1 SrcRegion=REGION(8,1) DstRegion=<1> Type=ub +.declare ubBOT_V Base=REG(r,nBOT_V) ElementSize=1 SrcRegion=REGION(8,1) DstRegion=<1> Type=ub + +.declare uwBOT_Y Base=REG(r,nBOT_Y) ElementSize=2 SrcRegion=REGION(16,1) DstRegion=<1> Type=uw +.declare uwBOT_U Base=REG(r,nBOT_U) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare uwBOT_V Base=REG(r,nBOT_V) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare ub2BOT_Y Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(16,2) DstRegion=<1> Type=ub +.declare ub2BOT_U Base=REG(r,nBOT_U) ElementSize=1 SrcRegion=REGION(8,2) DstRegion=<1> Type=ub +.declare ub2BOT_V Base=REG(r,nBOT_V) ElementSize=1 SrcRegion=REGION(8,2) DstRegion=<1> Type=ub + +.declare ubBOT_ARGB Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(8,4) Type=ub + +// Used by "send" instruction +.declare udBOT_Y_IO Base=REG(r,nBOT_Y) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare udBOT_U_IO Base=REG(r,nBOT_U) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare udBOT_V_IO Base=REG(r,nBOT_V) ElementSize=4 SrcRegion=REGION(8,1) Type=ud + +// End of common.inc + +#endif // COMMON_INC diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/readSampler16x1.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/readSampler16x1.asm new file mode 100644 index 000000000..d6c308f34 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/readSampler16x1.asm @@ -0,0 +1,85 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: readSampler16x1.asm +// +// Read one row of pix through sampler +// + + + +//#define SAMPLER_MSG_DSC 0x166A0000 // ILK Sampler Message Descriptor + + + +// Send Message [DevILK] Message Descriptor +// MBZ MsgL=5 MsgR=8 H MBZ SIMD MsgType SmplrIndx BindTab +// 000 0 101 0 1000 1 0 10 0000 0000 00000000 +// 0 A 8 A 0 0 0 0 + +// MsgL=1+2*2(u,v)=5 MsgR=8 + +#define SAMPLER_MSG_DSC 0x0A8A0000 // ILK Sampler Message Descriptor + + + + + + + + // Assume MSGSRC is set already in the caller + //mov (8) rMSGSRC.0<1>:ud 0:ud // Unused fileds + + + + // Read 16 sampled pixels and stored them in float32 in 8 GRFs + // 422 data is expanded to 444, return 8 GRF in the order of RGB- (UYV-). + // 420 data has three surfaces, return 8 GRF. Valid is always in the 1st GRF when in R8. Make sure no overwrite the following 3 GRFs. + // alpha data is expanded to 4444, return 8 GRF in the order of RGBA (UYVA). + + mov(16) mMSGHDR<1>:uw rMSGSRC<16;16,1>:uw + send (16) DATABUF(0)<1> mMSGHDR udDUMMY_NULL 0x2 SAMPLER_MSG_DSC+SAMPLER_IDX+BINDING_IDX:ud + + + + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/undefall.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/undefall.inc new file mode 100644 index 000000000..e70595b73 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Common/undefall.inc @@ -0,0 +1,95 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Modual name: undefall.inc +// +// undefine all global symbol for new process +// + +//Source definitions +#undef ubSRC_Y +#undef ubSRC_U +#undef ubSRC_V + +#undef ub2SRC_Y +#undef ub2SRC_U +#undef ub2SRC_V + +#undef ub4SRC_Y +#undef ub4SRC_U +#undef ub4SRC_V + +#undef uwSRC_Y +#undef uwSRC_U +#undef uwSRC_V + +#undef udSRC_Y +#undef udSRC_U +#undef udSRC_V + +#undef udSRC_YUV +#undef nSRC_YUV_REG + +//Destination definitions +#undef ubDEST_Y +#undef ubDEST_U +#undef ubDEST_V + +#undef ub2DEST_Y +#undef ub2DEST_U +#undef ub2DEST_V + +#undef ub4DEST_Y +#undef ub4DEST_U +#undef ub4DEST_V + +#undef uwDEST_Y +#undef uwDEST_U +#undef uwDEST_V + +#undef udDEST_Y +#undef udDEST_U +#undef udDEST_V + +#undef udDEST_YUV +#undef nDEST_YUV_REG +#undef ubDEST_ARGB + +// End of undefall.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_IEF.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_IEF.inc new file mode 100644 index 000000000..49321f0ea --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_IEF.inc @@ -0,0 +1,138 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: AVS_IEF.inc + +#ifndef _AVS_INF_INC_ +#define _AVS_INF_INC_ + +#include "undefall.inc" //Undefine the SRC and DEST sysmbols + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (V) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (U) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + +#define mAVS_8x8_HDR m0 // Message Header +#define mAVS_PAYLOAD m1 // Message Payload Header + +#define mAVS_8x8_HDR_2 m2 // Message Header +#define mAVS_PAYLOAD_2 m3 // Message Payload Header + +#define mAVS_8x8_HDR_UV m2 // Message Header +#define mAVS_PAYLOAD_UV m3 // Message Payload Header + +#define rAVS_8x8_HDR rMSGSRC // Mirror of Message Header +#define rAVS_PAYLOAD r9 // Mirror of Message Payload Header + + // AVS payload + // m1.7 Ignored + // m1.6 Pixel 0 V Address ---> ORIY (Y0) + // m1.5 Delta V ---> Step Y + // m1.4 Ignored + // m1.3 Ignored + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 U 2nd Derivative ---> NLAS dx + // m1.0 Delta U ---> Step X + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel + // 19 Header Present 1 + // 18 MBZ 0 + // 17:16 SIMD Mode 11 ---> SIMD64 + // 15:12 Message Type 0011 ---> sample_8x8 + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx +#define nAVS_MSG_DSC_1CH 0x044BB000 +#define nAVS_MSG_DSC_2CH 0x048BB000 +#define nAVS_MSG_DSC_3CH 0x04CBB000 +#define nAVS_MSG_DSC_4CH 0x050BB000 + +#define nAVS_RED_CHANNEL_ONLY 0x0000E000 // Enable Red channel only +#define nAVS_GREEN_CHANNEL_ONLY 0x0000D000 // Enable Green channel only +#define nAVS_RED_BLUE_CHANNELS 0x0000A000 // Enable Red and Blue channels +#define nAVS_RGB_CHANNELS 0x00008000 // Enable RGB(YUV) channels +#define nAVS_ALL_CHANNELS 0x00000000 // Enable all channels (ARGB\AYUV) + + + +.declare ubAVS_RESPONSE Base=REG(r,nTEMP8) ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare uwAVS_RESPONSE Base=REG(r,nTEMP8) ElementSize=2 SrcRegion=REGION(16,1) Type=uw + +.declare ubAVS_RESPONSE_2 Base=REG(r,nTEMP24) ElementSize=1 SrcRegion=REGION(16,1) Type=ub +.declare uwAVS_RESPONSE_2 Base=REG(r,nTEMP24) ElementSize=2 SrcRegion=REGION(16,1) Type=uw + + +#if (nSRC_REGION==nREGION_2) + #define uwDEST_Y uwBOT_Y + #define uwDEST_U uwBOT_U + #define uwDEST_V uwBOT_V + + #define ubDEST_Y ubBOT_Y + + #undef nSRC_REGION + #define nSRC_REGION nREGION_2 + +#else //(nSRC_REGION==nREGION_1) + #define uwDEST_Y uwTOP_Y + #define uwDEST_U uwTOP_U + #define uwDEST_V uwTOP_V + + #define ubDEST_Y ubTOP_Y + + #undef nSRC_REGION + #define nSRC_REGION nREGION_1 + +#endif + + +#endif //_AVS_INF_INC_ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupFirstBlock.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupFirstBlock.asm new file mode 100644 index 000000000..f00b07c96 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupFirstBlock.asm @@ -0,0 +1,65 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//------------------------------------------------------------------------------ +// AVS_SetupFirstBlock.asm +//------------------------------------------------------------------------------ + + // Setup Message Header +// mov (8) mAVS_8x8_HDR<1>:ud rMSGSRC<8;8,1>:ud + + // Check NLAS Enable bit + and.z.f0.0 (1) wNULLREG uwNLAS_ENABLE:uw BIT15:uw + (f0.0)mov (1) fVIDEO_STEP_DELTA:f 0.0:f + + // Setup Message Payload Header for 1st block of Media Sampler 8x8 + mov (1) rAVS_PAYLOAD.0:f fVIDEO_STEP_DELTA:f //NLAS dx + mov (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f //Step X + mov (1) rAVS_PAYLOAD.5:f fVIDEO_STEP_Y:f //Step Y + mov (2) rAVS_PAYLOAD.2<4>:f fSRC_VID_H_ORI<2;2,1>:f //Orig X and Y + + + + + + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupSecondBlock.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupSecondBlock.asm new file mode 100644 index 000000000..fb93ed1c6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/AVS_SetupSecondBlock.asm @@ -0,0 +1,57 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//------------------------------------------------------------------------------ +// AVS_SetupSecondBlock.asm +//------------------------------------------------------------------------------ + + //NLAS calculations for 2nd block of Media Sampler 8x8: + // X(i) = X0 + dx*i + ddx*i*(i-1)/2 ==> X(8) = X0 + dx*8 +ddx*28 + // dx(i)= dx(0) + ddx*i ==> dx(8)= dx + ddx*8 + + // Calculating X(8) + mov (1) acc0.2<1>:f fSRC_VID_H_ORI:f + mac (1) acc0.2<1>:f fVIDEO_STEP_X:f 8.0:f + mac (1) rAVS_PAYLOAD.2:f fVIDEO_STEP_DELTA:f 28.0:f + + // Calculating dx(8) + mov (1) acc0.1<1>:f fVIDEO_STEP_X:f + mac (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_DELTA:f 8.0:f + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI.inc new file mode 100644 index 000000000..5a02574d7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI.inc @@ -0,0 +1,224 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: DI.inc + +#ifdef GT +// GT DI Kernel +#else // ILK +// ILK DI Kernel +#endif + + +//--------------------------------------------------------------------------- +// Binding table indices +//--------------------------------------------------------------------------- +#define nBIDX_DI_PRV 10 // Previous DI-ed frame +#define nBIDX_DI_CUR 13 // Current DI-ed frame +#define nBIDX_DN 7 // Denoised frame +#define nBIDX_STAT 20 // Statistics +#define nBIDX_DI_Source 4 // Source Surface + + +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor +#define nSMPL_ENGINE 0x2 +#define nDATAPORT_WRITE 0x5 +#define nTS_EOT 0x27 // with End-Of-Thread bit ON + + // Message descriptor for end-of-thread + // = 000 0001 (message len) 00000 (resp len) + // 0 (header present 0) 00000000000000 0 (URB dereferenced) 0000 +#define nEOT_MSGDSC 0x02000000 + + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + +// comment begin +// The following is commented out because of walker feature +// It corresponds to the #ifdef GT #else and #endif +//#define nSMPL_MSGDSC 0x040b8000 +//#define nSMPL_RESP_LEN_DI 0x00c00000 // 12 +//#define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 +//#define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 +//#define nSMPL_RESP_LEN_NODN 0x00900000 // 9 +//#define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 +// comment end + +#ifdef GT + +#define nSMPL_MSGDSC 0x040b8000 +#define nSMPL_RESP_LEN_DI 0x00c00000 // 12 +#define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 //DI disable, the XY stored in 5th GRF, no impact to return length +#define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 //DI disable, the XY stored in 5th GRF, no impact to return length +#define nSMPL_RESP_LEN_NODN 0x00a00000 // 10 //NO DN, originally use 9, now we need use 10 to store the XY with walker +#define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 + +#else + +#define nSMPL_MSGDSC 0x040b8000 +#define nSMPL_RESP_LEN_DI 0x00c00000 // 12 +#define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 +#define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 +#define nSMPL_RESP_LEN_NODN 0x00900000 // 9 +#define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 + +#endif + + // Message descriptor for dataport media write +#ifdef GT + // = 000 0000 (message len - set later) 00000 (resp len 0) + // 1 (header present 1) 0 0 1010 (media block write) 00000 + // 00000000 (binding table index - set later) + // = 0x00094000 +#define nDPMW_MSGDSC 0x00094000 +#else // ILK + // = 000 0000 (message len - set later) 00000 (resp len 0) + // 1 (header present 1) 000 0 010 (media block write) 0000 + // 00000000 (binding table index - set later) + // = 0x00082000 +#define nDPMW_MSGDSC 0x00082000 +#endif +#define nDPMW_MSG_LEN_STMM 0x04000000 // 2 - STMM +#define nDPMW_MSG_LEN_DH 0x04000000 // 2 - Denoise history +#define nDPMW_MSG_LEN_PA_DN 0x0a000000 // 5 - Denoised output +#define nDPMW_MSG_LEN_PA_NODI 0x12000000 // 9 - Denoised output - denoise only - DI disabled +#define nDPMW_MSG_LEN_PL_DN 0x06000000 // 3 - Denoised output +#define nDPMW_MSG_LEN_PL_NODI 0x0a000000 // 5 - Denoised output - denoise only - DI disabled +#define nDPMW_MSG_LEN_DI 0x0a000000 // 5 - DI output + + +//--------------------------------------------------------------------------- +// Static and inline parameters +//--------------------------------------------------------------------------- +// Static parameters +.declare ubTFLD_FIRST Base=r1.27 ElementSize=1 Type=ub // top field first +.declare ubSRCYUVOFFSET Base=r1.4 ElementSize=1 Type=ub // source packed format +.declare ubDSTYUVOFFSET Base=r1.8 ElementSize=1 Type=ub // destination packed format +.declare uwSPITCH_DIV2 Base=r1.10 ElementSize=2 Type=uw // statistics surface pitch divided by 2 + +// Inline parameters +.declare uwXORIGIN Base=r5.0 ElementSize=2 Type=uw // X and Y origin +.declare uwYORIGIN Base=r5.1 ElementSize=2 Type=uw + + +//--------------------------------------------------------------------------- +// Kernel GRF variables +//--------------------------------------------------------------------------- +// Message response (Denoised & DI-ed pixels & statistics) +.declare dRESP Base=r8 ElementSize=4 Type=d // Response message (12 or 5 or 11) +.declare ubRESP Base=r8 ElementSize=1 Type=ub + +.declare dSTMM Base=r16 ElementSize=4 Type=d // STMM +.declare ubDN_HIST_NODI Base=r12 ElementSize=1 Type=ub // Denoise history data (DI disabled) +.declare ubDN_HIST_DI Base=r17 ElementSize=1 Type=ub // Denoise history data (DI enabled) +.declare uwRETURNED_POSITION_DI Base=r17 ElementSize=2 Type=uw // XY_Return_Data (DI enabled) +.declare uwRETURNED_POSITION_DN Base=r12 ElementSize=2 Type=uw // XY_Return_Data (DI disabled) + +.declare ub1ST_FLD_DN Base=r12 ElementSize=1 Type=ub // 1st field Denoised data (DI enabled) +.declare d1ST_FLD_DN Base=r12 ElementSize=4 Type=d +.declare ub2ND_FLD_DN Base=r18 ElementSize=1 Type=ub // 2nd field Denoised data (DI enabled) +.declare d2ND_FLD_DN Base=r18 ElementSize=4 Type=d +.declare ubPRV_DI Base=r8 ElementSize=1 Type=ub // Previous frame DI (DI enabled) +.declare ubCUR_DI Base=r12 ElementSize=1 Type=ub // Previous frame DI (DI enabled) + +// Packed denoised output +.declare ubDN_YUV Base=r22 ElementSize=1 Type=ub // Denoised YUV422 +.declare dDN_YUV Base=r22 ElementSize=4 Type=d +#define npDN_YUV 704 // = 22*32 = 0x280 + +// Packed DI output +.declare dDI_YUV_PRV Base=r32 ElementSize=4 Type=d // Previous frame DI output +.declare dDI_YUV_CUR Base=r36 ElementSize=4 Type=d // Current frame DI output +#define npDI_YUV 1024 // = 32*32 = 0x + +// For packed output +#define p422_YOFFSET a0.2 +#define p422_UOFFSET a0.3 +#define p422_VOFFSET a0.4 +#define pDN_TFLDSRC a0.6 +#define pDN_BFLDSRC a0.7 +#define npRESP 192 // = 6*32 + +// Message source +.declare udMSGSRC Base=r70 ElementSize=4 Type=ud +.declare uwMSGSRC Base=r70 ElementSize=2 Type=uw +.declare dMSGSRC Base=r70 ElementSize=4 Type=d + + +//--------------------------------------------------------------------------- +// Kernel MRF variables +//--------------------------------------------------------------------------- +#define mMSGHDR_SMPL m1 // Sampler response: m1~m2 +.declare mudMSGHDR_SMPL Base=m1 ElementSize=4 Type=ud +.declare muwMSGHDR_SMPL Base=m1 ElementSize=2 Type=uw +#define mMSGHDR_DN m3 // Denoise output: m3~m7 for PA, m3~m5 for PL +.declare mdMSGHDR_DN Base=m3 ElementSize=4 Type=d +#define mMSGHDR_STAT m8 // Statistics output: m8~m9 +.declare mdMSGHDR_STAT Base=m8 ElementSize=4 Type=d +.declare mubMSGHDR_STAT Base=m8 ElementSize=1 Type=ub +#define mMSGHDR_DI m10 // DI output: m10~m14 +.declare mdMSGHDR_DI Base=m10 ElementSize=4 Type=d +#define mMSGHDR_EOT m15 // EOT + +#ifdef GT +#define MSGSRC +#else +#define MSGSRC null:ud +#endif + + +//--------------------------------------------------------------------------- +// End of thread instruction +//--------------------------------------------------------------------------- +#ifdef GT +#define END_THREAD send (8) null<1>:d mMSGHDR_EOT nTS_EOT nEOT_MSGDSC +#else // ILK +#define END_THREAD send (8) null<1>:d mMSGHDR_EOT null:ud nTS_EOT nEOT_MSGDSC +#endif + + +// end of DI.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_Hist_Save.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_Hist_Save.asm new file mode 100644 index 000000000..267971a99 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_Hist_Save.asm @@ -0,0 +1,54 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// Write denoise history to memory +shr (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w 2:w NODDCLR // X,Y origin / 4 +add (1) rMSGSRC.0<1>:ud rMSGSRC.0<0;1,0>:ud uwSPITCH_DIV2<0;1,0>:uw NODDCLR_NODDCHK // Add pitch to X origin +mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_HIST:ud NODDCHK // block width and height (4x2) + +mov (8) mMSGHDR_HIST<1>:ud rMSGSRC.0<8;8,1>:ud // message header +mov (1) mudMSGHDR_HIST(1)<1> udRESP(nDI_HIST_OFFSET,0)<0;1,0> // Move denoise history to MRF + +send (8) dNULLREG mMSGHDR_HIST udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_HIST+nBI_STMM_HISTORY_OUTPUT:ud + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_SAVE_PA.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_SAVE_PA.asm new file mode 100644 index 000000000..c9e1adfec --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DI_SAVE_PA.asm @@ -0,0 +1,86 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + shl (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR // H. block origin need to be doubled + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DI:ud NODDCHK // Block width and height (32x8) + + + add (4) pCF_Y_OFFSET<1>:uw ubDEST_CF_OFFSET<4;4,1>:ub nDEST_YUV_REG*nGRFWIB:w // Initial Y,U,V offset in YUV422 block + + // Pack 2nd field Y + $for(0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + // Pack 1st field Y + $for(0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + // Pack 2nd field U + $for(0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + } + // Pack 1st field U + $for(0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + } + // Pack 2nd field V + $for(0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //Vpixels + } + // Packs1st field V + $for(0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //Vpixels + } + + //save the previous frame + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + $for(0; <4; 1) { + mov (8) mudMSGPAYLOAD(%1)<1> udDEST_YUV(%1)REGION(8,1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_DI+nBI_DESTINATION_1_YUV:ud + + //save the current frame + mov (8) mMSGHDR<1>:ud rMSGSRC<8;8,1>:ud + $for(0; <4; 1) { + mov (8) mudMSGPAYLOAD(%1)<1> udDEST_YUV(%1+4)REGION(8,1) + } + send (8) dNULLREG mMSGHDR udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPW_MSG_SIZE_DI+nBI_DESTINATION_2_YUV:ud + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI.inc new file mode 100644 index 000000000..ddf384700 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI.inc @@ -0,0 +1,192 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Module name: DI.inc + +#ifdef GT +// GT DI Kernel +#else // ILK +// ILK DI Kernel +#endif + +#include "undefall.inc" + +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read +// // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) +// // 1 (header present 1) 0 11 (SIMD32/64 mode) +// // 1000 (message type) 0000 (DI state index) +// // 00000000 (binding table index - set later) +// // = 0x040b8000 +#define nSMPL_DI_MSGDSC 0x040b8000 + +#define nSMPL_RESP_LEN_DNDI nRESLEN_12 // 12 - for DN + DI Alg +#define nSMPL_RESP_LEN_DN_PL nRESLEN_5 // 5 - for DN Planar Alg +#define nSMPL_RESP_LEN_DN_PA nRESLEN_9 // 9 - for DN Packed Alg +#define nSMPL_RESP_LEN_DI nRESLEN_9 // 9 - for DI Only Alg +#define nSMPL_RESP_LEN_PDI nRESLEN_11 // 11 - for Partial DI Alg + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header +#define nDPMW_MSG_LEN_STMM nMSGLEN_1 // 1 - For STMM Save +#define nDPMW_MSG_LEN_HIST nMSGLEN_1 // 1 - For Denoise History Save +#define nDPMW_MSG_LEN_PA_DN_DI nMSGLEN_4 // 4 - For DN Curr Save +#define nDPMW_MSG_LEN_PA_DN_NODI nMSGLEN_8 // 8 - For DN Curr Save (denoise only - DI disabled) +#define nDPMW_MSG_LEN_PL_DN_DI nMSGLEN_2 // 2 - For DN Curr Save +#define nDPMW_MSG_LEN_PL_DN_NODI nMSGLEN_4 // 4 - For DN Curr Save (denoise only - DI disabled) + +#define nDPW_BLOCK_SIZE_STMM nBLOCK_WIDTH_8+nBLOCK_HEIGHT_4 // Y block size 8x4 + +#undef nDPW_BLOCK_SIZE_DI +#undef nDPW_MSG_SIZE_DI +#define nDPW_BLOCK_SIZE_DI nBLOCK_WIDTH_32+nBLOCK_HEIGHT_4 +#define nDPW_MSG_SIZE_DI nMSGLEN_4 + + +//--------------------------------------------------------------------------- +// Kernel GRF variables +//--------------------------------------------------------------------------- +// Defines for DI enabled +#define nDI_PREV_FRAME_LUMA_OFFSET 0 +#define nDI_PREV_FRAME_CHROMA_OFFSET 2 +#define nDI_CURR_FRAME_LUMA_OFFSET 4 +#define nDI_CURR_FRAME_CHROMA_OFFSET 6 +#define nDI_STMM_OFFSET 8 +#define nDI_HIST_OFFSET 9 +#define nDI_CURR_2ND_FIELD_LUMA_OFFSET 10 +#define nDI_CURR_2ND_FIELD_CHROMA_OFFSET 11 + +// Defines for DI disabled +#define nNODI_LUMA_OFFSET 0 +#define nNODI_HIST_OFFSET 4 +#define nNODI_CHROMA_OFFSET 5 + +#ifdef DI_ENABLE + #define nHIST_OFFSET nDI_HIST_OFFSET + #undef nY_NUM_OF_ROWS + #define nY_NUM_OF_ROWS 8 // Number of Y rows per block (4 rows for each frame) + #undef nUV_NUM_OF_ROWS + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + +#endif + +#ifdef DI_DISABLE + #define nHIST_OFFSET nNODI_HIST_OFFSET +#endif + +#if (nSRC_REGION==nREGION_2) + #define ub2SRC_Y ub2BOT_Y + #define ub2SRC_U ub2BOT_U + #define ub2SRC_V ub2BOT_V + #define uwDEST_Y uwBOT_Y + #define uwDEST_U uwBOT_U + #define uwDEST_V uwBOT_V + #define nDEST_YUV_REG nTOP_Y + #define udDEST_YUV udTOP_Y_IO + + #define nRESP nTEMP0 // DI return message requires 12 GRFs + #define nDN_YUV nTOP_Y // Space for Packing DN for next run requires 8 GRFs + + #undef nSRC_REGION + #define nSRC_REGION nREGION_2 + +#else + #define ub2SRC_Y ub2TOP_Y + #define ub2SRC_U ub2TOP_U + #define ub2SRC_V ub2TOP_V + #define uwDEST_Y uwTOP_Y + #define uwDEST_U uwTOP_U + #define uwDEST_V uwTOP_V + #define nDEST_YUV_REG nBOT_Y + #define udDEST_YUV udBOT_Y_IO + #define nRESP nTEMP0 // DI return message requires 12 GRFs + #define nDN_YUV nBOT_Y // Space for Packing DN for next run requires 8 GRFs + + #undef nSRC_REGION + #define nSRC_REGION nREGION_1 // REGION_1 will be the source region for first kernel + +#endif + + + + + + + + + +// Message response (Denoised & DI-ed pixels & statistics) +.declare udRESP Base=REG(r,nRESP) ElementSize=4 SrcRegion=REGION(8,1) DstRegion=<1> Type=ud +.declare ubRESP Base=REG(r,nRESP) ElementSize=1 SrcRegion=REGION(16,1) DstRegion=<1> Type=ub + +// For Denoised Curr Output (Used as Priv in Next Run) +.declare ubDN_YUV Base=REG(r,nDN_YUV) ElementSize=1 Type=ub +.declare udDN_YUV Base=REG(r,nDN_YUV) ElementSize=4 Type=ud +#define npDN_YUV nDN_YUV*nGRFWIB + +// For DI Process Output (1st and 2nd Frames Output) +//.declare udDI_YUV_PRIV Base=REG(r,nTEMP0) ElementSize=4 Type=ud // Previous frame DI output +//.declare udDI_YUV_CURR Base=REG(r,nTEMP0) ElementSize=4 Type=ud // Current frame DI output +//#define npDI_YUV nTEMP0*nGRFWIB + +//--------------------------------------------------------------------------- +// Kernel MRF variables +//--------------------------------------------------------------------------- +#define mMSG_SMPL m1 // Sampler Command is in: m1~m2 +.declare mudMSG_SMPL Base=mMSG_SMPL ElementSize=4 Type=ud +.declare muwMSG_SMPL Base=mMSG_SMPL ElementSize=2 Type=uw + +#define mMSGHDR_DN m1 // Denoise Output: m1~m9 for PA, m3~m5 for PL +.declare mudMSGHDR_DN Base=mMSGHDR_DN ElementSize=4 Type=ud +.declare mubMSGHDR_DN Base=mMSGHDR_DN ElementSize=1 Type=ub + +#define mMSGHDR_STMM m11 // STMM Output: m11~m12 +.declare mudMSGHDR_STMM Base=mMSGHDR_STMM ElementSize=4 Type=ud +#define mMSGHDR_HIST m13 // HIST Output: m13~m14 +.declare mudMSGHDR_HIST Base=mMSGHDR_HIST ElementSize=1 Type=ud + +#define mMSGHDR_DI_1ST m1 // DI output: m1~m5 +.declare mudMSGHDR_DI_1ST Base=mMSGHDR_DI_1ST ElementSize=4 Type=ud +#define mMSGHDR_DI_2ND m6 // DI output: m6~m10 +.declare mudMSGHDR_DI_2ND Base=mMSGHDR_DI_2ND ElementSize=4 Type=ud + +// end of DNDI.inc diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_COMMAND.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_COMMAND.asm new file mode 100644 index 000000000..7fbb202d9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_COMMAND.asm @@ -0,0 +1,47 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Activate the DNDI send command +mov (8) mudMSG_SMPL(0)<1> rMSGSRC.0<8;8,1>:ud NODDCLR // message header +mov (1) muwMSG_SMPL(1,4)<1> wORIX<0;1,0>:w NODDCLR_NODDCHK// horizontal origin +mov (1) muwMSG_SMPL(1,12)<1> wORIY<0;1,0>:w NODDCLR_NODDCHK // vertical origin +//mov (2) muwMSG_SMPL(1,4)<2> wORIX<2;2,1>:w NODDCHK// problem during compile !! when using this line + +send (8) udRESP(0)<1> mMSG_SMPL udDUMMY_NULL nSMPL_ENGINE nSMPL_DI_MSGDSC+nSMPL_RESP_LEN+nBI_CURRENT_SRC_YUV_HW_DI:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_Hist_Save.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_Hist_Save.asm new file mode 100644 index 000000000..84a485476 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/DNDI_Hist_Save.asm @@ -0,0 +1,50 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +// Write denoise history to memory +shr (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w 2:w NODDCLR // X,Y origin / 4 +add (1) rMSGSRC.0<1>:ud rMSGSRC.0<0;1,0>:ud uwSPITCH_DIV2<0;1,0>:uw NODDCLR_NODDCHK// Add pitch to X origin +mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_HIST:ud NODDCHK // block width and height (4x2) + +mov (8) mMSGHDR_HIST<1>:ud rMSGSRC.0<8;8,1>:ud // message header +mov (2) mudMSGHDR_HIST(1)<1> udRESP(nNODI_HIST_OFFSET,0)<2;2,1> // Move denoise history to MRF + +send (8) dNULLREG mMSGHDR_HIST udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_HIST+nBI_STMM_HISTORY_OUTPUT:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_16x8.asm new file mode 100644 index 000000000..1f9940237 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_16x8.asm @@ -0,0 +1,56 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_16x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 YUV packed +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Sample.asm" + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:4:4 internal planar +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Unpack_16x8.asm" + +//------------------------------------------------------------------------------ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x4.asm new file mode 100644 index 000000000..d18b2812d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x4.asm @@ -0,0 +1,55 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_8x4.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 YUV packed +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Sample.asm" + +//------------------------------------------------------------------------------ +// Unpacking sampler data to 4:2:0 internal planar +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Unpack_8x4.asm" + +//------------------------------------------------------------------------------ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x8.asm new file mode 100644 index 000000000..cfa8ab1d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_8x8.asm @@ -0,0 +1,55 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_8x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 YUV packed +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Sample.asm" + +//------------------------------------------------------------------------------ +// Unpacking sampler data to 4:2:2 internal planar +//------------------------------------------------------------------------------ +#include "PA_AVS_IEF_Unpack_8x8.asm" + +//------------------------------------------------------------------------------ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Sample.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Sample.asm new file mode 100644 index 000000000..592be148c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Sample.asm @@ -0,0 +1,64 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_Sample.asm ---------- + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 YUV packed +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // Enable RGB(YUV) channels + mov (1) rAVS_8x8_HDR.2:ud nAVS_RGB_CHANNELS:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_3CH+nSI_SRC_YUV+nBI_CURRENT_SRC_YUV + // Return YUV in 12 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + mov (16) mAVS_8x8_HDR_2.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR_2 udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_3CH+nSI_SRC_YUV+nBI_CURRENT_SRC_YUV + // Return YUV in 12 GRFs + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_16x8.asm new file mode 100644 index 000000000..df7878f0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_16x8.asm @@ -0,0 +1,318 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_Unpack_16x8.asm ---------- + +#ifdef AVS_OUTPUT_16_BIT //Output is packed in AVYU format +// Move first 8x8 words of Y to dest GRF (as packed) + mov (4) uwDEST_Y(0,1)<4> uwAVS_RESPONSE(2,0)<4;4,1> + mov (4) uwDEST_Y(1,1)<4> uwAVS_RESPONSE(2,8)<4;4,1> + mov (4) uwDEST_Y(4,1)<4> uwAVS_RESPONSE(2,4)<4;4,1> + mov (4) uwDEST_Y(5,1)<4> uwAVS_RESPONSE(2,12)<4;4,1> + mov (4) uwDEST_Y(8,1)<4> uwAVS_RESPONSE(3,0)<4;4,1> + mov (4) uwDEST_Y(9,1)<4> uwAVS_RESPONSE(3,8)<4;4,1> + mov (4) uwDEST_Y(12,1)<4> uwAVS_RESPONSE(3,4)<4;4,1> + mov (4) uwDEST_Y(13,1)<4> uwAVS_RESPONSE(3,12)<4;4,1> + mov (4) uwDEST_Y(16,1)<4> uwAVS_RESPONSE(8,0)<4;4,1> + mov (4) uwDEST_Y(17,1)<4> uwAVS_RESPONSE(8,8)<4;4,1> + mov (4) uwDEST_Y(20,1)<4> uwAVS_RESPONSE(8,4)<4;4,1> + mov (4) uwDEST_Y(21,1)<4> uwAVS_RESPONSE(8,12)<4;4,1> + mov (4) uwDEST_Y(24,1)<4> uwAVS_RESPONSE(9,0)<4;4,1> + mov (4) uwDEST_Y(25,1)<4> uwAVS_RESPONSE(9,8)<4;4,1> + mov (4) uwDEST_Y(28,1)<4> uwAVS_RESPONSE(9,4)<4;4,1> + mov (4) uwDEST_Y(29,1)<4> uwAVS_RESPONSE(9,12)<4;4,1> + +// Move first 8x8 words of U to dest GRF (as packed) + mov (4) uwDEST_Y(0,0)<4> uwAVS_RESPONSE(4,0)<4;4,1> + mov (4) uwDEST_Y(1,0)<4> uwAVS_RESPONSE(4,8)<4;4,1> + mov (4) uwDEST_Y(4,0)<4> uwAVS_RESPONSE(4,4)<4;4,1> + mov (4) uwDEST_Y(5,0)<4> uwAVS_RESPONSE(4,12)<4;4,1> + mov (4) uwDEST_Y(8,0)<4> uwAVS_RESPONSE(5,0)<4;4,1> + mov (4) uwDEST_Y(9,0)<4> uwAVS_RESPONSE(5,8)<4;4,1> + mov (4) uwDEST_Y(12,0)<4> uwAVS_RESPONSE(5,4)<4;4,1> + mov (4) uwDEST_Y(13,0)<4> uwAVS_RESPONSE(5,12)<4;4,1> + mov (4) uwDEST_Y(16,0)<4> uwAVS_RESPONSE(10,0)<4;4,1> + mov (4) uwDEST_Y(17,0)<4> uwAVS_RESPONSE(10,8)<4;4,1> + mov (4) uwDEST_Y(20,0)<4> uwAVS_RESPONSE(10,4)<4;4,1> + mov (4) uwDEST_Y(21,0)<4> uwAVS_RESPONSE(10,12)<4;4,1> + mov (4) uwDEST_Y(24,0)<4> uwAVS_RESPONSE(11,0)<4;4,1> + mov (4) uwDEST_Y(25,0)<4> uwAVS_RESPONSE(11,8)<4;4,1> + mov (4) uwDEST_Y(28,0)<4> uwAVS_RESPONSE(11,4)<4;4,1> + mov (4) uwDEST_Y(29,0)<4> uwAVS_RESPONSE(11,12)<4;4,1> + +// Move first 8x8 words of V to dest GRF (as packed) + mov (4) uwDEST_Y(0,2)<4> uwAVS_RESPONSE(0,0)<4;4,1> + mov (4) uwDEST_Y(1,2)<4> uwAVS_RESPONSE(0,8)<4;4,1> + mov (4) uwDEST_Y(4,2)<4> uwAVS_RESPONSE(0,4)<4;4,1> + mov (4) uwDEST_Y(5,2)<4> uwAVS_RESPONSE(0,12)<4;4,1> + mov (4) uwDEST_Y(8,2)<4> uwAVS_RESPONSE(1,0)<4;4,1> + mov (4) uwDEST_Y(9,2)<4> uwAVS_RESPONSE(1,8)<4;4,1> + mov (4) uwDEST_Y(12,2)<4> uwAVS_RESPONSE(1,4)<4;4,1> + mov (4) uwDEST_Y(13,2)<4> uwAVS_RESPONSE(1,12)<4;4,1> + mov (4) uwDEST_Y(16,2)<4> uwAVS_RESPONSE(6,0)<4;4,1> + mov (4) uwDEST_Y(17,2)<4> uwAVS_RESPONSE(6,8)<4;4,1> + mov (4) uwDEST_Y(20,2)<4> uwAVS_RESPONSE(6,4)<4;4,1> + mov (4) uwDEST_Y(21,2)<4> uwAVS_RESPONSE(6,12)<4;4,1> + mov (4) uwDEST_Y(24,2)<4> uwAVS_RESPONSE(7,0)<4;4,1> + mov (4) uwDEST_Y(25,2)<4> uwAVS_RESPONSE(7,8)<4;4,1> + mov (4) uwDEST_Y(28,2)<4> uwAVS_RESPONSE(7,4)<4;4,1> + mov (4) uwDEST_Y(29,2)<4> uwAVS_RESPONSE(7,12)<4;4,1> + +// Move first 8x8 words of A to dest GRF (as packed) + mov (4) uwDEST_Y(0,3)<4> 0:uw + mov (4) uwDEST_Y(1,3)<4> 0:uw + mov (4) uwDEST_Y(4,3)<4> 0:uw + mov (4) uwDEST_Y(5,3)<4> 0:uw + mov (4) uwDEST_Y(8,3)<4> 0:uw + mov (4) uwDEST_Y(9,3)<4> 0:uw + mov (4) uwDEST_Y(12,3)<4> 0:uw + mov (4) uwDEST_Y(13,3)<4> 0:uw + mov (4) uwDEST_Y(16,3)<4> 0:uw + mov (4) uwDEST_Y(17,3)<4> 0:uw + mov (4) uwDEST_Y(20,3)<4> 0:uw + mov (4) uwDEST_Y(21,3)<4> 0:uw + mov (4) uwDEST_Y(24,3)<4> 0:uw + mov (4) uwDEST_Y(25,3)<4> 0:uw + mov (4) uwDEST_Y(28,3)<4> 0:uw + mov (4) uwDEST_Y(29,3)<4> 0:uw + +// Move second 8x8 words of Y to dest GRF + mov (4) uwDEST_Y(2,1)<4> uwAVS_RESPONSE_2(2,0)<4;4,1> + mov (4) uwDEST_Y(3,1)<4> uwAVS_RESPONSE_2(2,8)<4;4,1> + mov (4) uwDEST_Y(6,1)<4> uwAVS_RESPONSE_2(2,4)<4;4,1> + mov (4) uwDEST_Y(7,1)<4> uwAVS_RESPONSE_2(2,12)<4;4,1> + mov (4) uwDEST_Y(10,1)<4> uwAVS_RESPONSE_2(3,0)<4;4,1> + mov (4) uwDEST_Y(11,1)<4> uwAVS_RESPONSE_2(3,8)<4;4,1> + mov (4) uwDEST_Y(14,1)<4> uwAVS_RESPONSE_2(3,4)<4;4,1> + mov (4) uwDEST_Y(15,1)<4> uwAVS_RESPONSE_2(3,12)<4;4,1> + mov (4) uwDEST_Y(18,1)<4> uwAVS_RESPONSE_2(8,0)<4;4,1> + mov (4) uwDEST_Y(19,1)<4> uwAVS_RESPONSE_2(8,8)<4;4,1> + mov (4) uwDEST_Y(22,1)<4> uwAVS_RESPONSE_2(8,4)<4;4,1> + mov (4) uwDEST_Y(23,1)<4> uwAVS_RESPONSE_2(8,12)<4;4,1> + mov (4) uwDEST_Y(26,1)<4> uwAVS_RESPONSE_2(9,0)<4;4,1> + mov (4) uwDEST_Y(27,1)<4> uwAVS_RESPONSE_2(9,8)<4;4,1> + mov (4) uwDEST_Y(30,1)<4> uwAVS_RESPONSE_2(9,4)<4;4,1> + mov (4) uwDEST_Y(31,1)<4> uwAVS_RESPONSE_2(9,12)<4;4,1> + +// Move second 8x8 words of U to dest GRF + mov (4) uwDEST_Y(2,0)<4> uwAVS_RESPONSE_2(4,0)<4;4,1> + mov (4) uwDEST_Y(3,0)<4> uwAVS_RESPONSE_2(4,8)<4;4,1> + mov (4) uwDEST_Y(6,0)<4> uwAVS_RESPONSE_2(4,4)<4;4,1> + mov (4) uwDEST_Y(7,0)<4> uwAVS_RESPONSE_2(4,12)<4;4,1> + mov (4) uwDEST_Y(10,0)<4> uwAVS_RESPONSE_2(5,0)<4;4,1> + mov (4) uwDEST_Y(11,0)<4> uwAVS_RESPONSE_2(5,8)<4;4,1> + mov (4) uwDEST_Y(14,0)<4> uwAVS_RESPONSE_2(5,4)<4;4,1> + mov (4) uwDEST_Y(15,0)<4> uwAVS_RESPONSE_2(5,12)<4;4,1> + mov (4) uwDEST_Y(18,0)<4> uwAVS_RESPONSE_2(10,0)<4;4,1> + mov (4) uwDEST_Y(19,0)<4> uwAVS_RESPONSE_2(10,8)<4;4,1> + mov (4) uwDEST_Y(22,0)<4> uwAVS_RESPONSE_2(10,4)<4;4,1> + mov (4) uwDEST_Y(23,0)<4> uwAVS_RESPONSE_2(10,12)<4;4,1> + mov (4) uwDEST_Y(26,0)<4> uwAVS_RESPONSE_2(11,0)<4;4,1> + mov (4) uwDEST_Y(27,0)<4> uwAVS_RESPONSE_2(11,8)<4;4,1> + mov (4) uwDEST_Y(30,0)<4> uwAVS_RESPONSE_2(11,4)<4;4,1> + mov (4) uwDEST_Y(31,0)<4> uwAVS_RESPONSE_2(11,12)<4;4,1> + +// Move second 8x8 words of V to dest GRF + mov (4) uwDEST_Y(2,2)<4> uwAVS_RESPONSE_2(0,0)<4;4,1> + mov (4) uwDEST_Y(3,2)<4> uwAVS_RESPONSE_2(0,8)<4;4,1> + mov (4) uwDEST_Y(6,2)<4> uwAVS_RESPONSE_2(0,4)<4;4,1> + mov (4) uwDEST_Y(7,2)<4> uwAVS_RESPONSE_2(0,12)<4;4,1> + mov (4) uwDEST_Y(10,2)<4> uwAVS_RESPONSE_2(1,0)<4;4,1> + mov (4) uwDEST_Y(11,2)<4> uwAVS_RESPONSE_2(1,8)<4;4,1> + mov (4) uwDEST_Y(14,2)<4> uwAVS_RESPONSE_2(1,4)<4;4,1> + mov (4) uwDEST_Y(15,2)<4> uwAVS_RESPONSE_2(1,12)<4;4,1> + mov (4) uwDEST_Y(18,2)<4> uwAVS_RESPONSE_2(6,0)<4;4,1> + mov (4) uwDEST_Y(19,2)<4> uwAVS_RESPONSE_2(6,8)<4;4,1> + mov (4) uwDEST_Y(22,2)<4> uwAVS_RESPONSE_2(6,4)<4;4,1> + mov (4) uwDEST_Y(23,2)<4> uwAVS_RESPONSE_2(6,12)<4;4,1> + mov (4) uwDEST_Y(26,2)<4> uwAVS_RESPONSE_2(7,0)<4;4,1> + mov (4) uwDEST_Y(27,2)<4> uwAVS_RESPONSE_2(7,8)<4;4,1> + mov (4) uwDEST_Y(30,2)<4> uwAVS_RESPONSE_2(7,4)<4;4,1> + mov (4) uwDEST_Y(31,2)<4> uwAVS_RESPONSE_2(7,12)<4;4,1> + +// Move second 8x8 words of A to dest GRF + mov (4) uwDEST_Y(2,3)<4> 0:uw + mov (4) uwDEST_Y(3,3)<4> 0:uw + mov (4) uwDEST_Y(6,3)<4> 0:uw + mov (4) uwDEST_Y(7,3)<4> 0:uw + mov (4) uwDEST_Y(10,3)<4> 0:uw + mov (4) uwDEST_Y(11,3)<4> 0:uw + mov (4) uwDEST_Y(14,3)<4> 0:uw + mov (4) uwDEST_Y(15,3)<4> 0:uw + mov (4) uwDEST_Y(18,3)<4> 0:uw + mov (4) uwDEST_Y(19,3)<4> 0:uw + mov (4) uwDEST_Y(22,3)<4> 0:uw + mov (4) uwDEST_Y(23,3)<4> 0:uw + mov (4) uwDEST_Y(26,3)<4> 0:uw + mov (4) uwDEST_Y(27,3)<4> 0:uw + mov (4) uwDEST_Y(30,3)<4> 0:uw + mov (4) uwDEST_Y(31,3)<4> 0:uw + +/* This section will be used if 16-bit output is needed in planar format -vK + // Move first 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0)<1> uwAVS_RESPONSE(2,0)<8;4,1> + mov (8) uwDEST_Y(1)<1> uwAVS_RESPONSE(2,8)<8;4,1> + mov (8) uwDEST_Y(2)<1> uwAVS_RESPONSE(3,0)<8;4,1> + mov (8) uwDEST_Y(3)<1> uwAVS_RESPONSE(3,8)<8;4,1> + mov (8) uwDEST_Y(4)<1> uwAVS_RESPONSE(8,0)<8;4,1> + mov (8) uwDEST_Y(5)<1> uwAVS_RESPONSE(8,8)<8;4,1> + mov (8) uwDEST_Y(6)<1> uwAVS_RESPONSE(9,0)<8;4,1> + mov (8) uwDEST_Y(7)<1> uwAVS_RESPONSE(9,8)<8;4,1> + + // Move first 8x8 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(0,0)<8;4,1> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(0,8)<8;4,1> + mov (8) uwDEST_V(2)<1> ubAVS_RESPONSE(1,0)<8;4,1> + mov (8) uwDEST_V(3)<1> ubAVS_RESPONSE(1,8)<8;4,1> + mov (8) uwDEST_V(4)<1> ubAVS_RESPONSE(6,0)<8;4,1> + mov (8) uwDEST_V(5)<1> ubAVS_RESPONSE(6,8)<8;4,1> + mov (8) uwDEST_V(6)<1> ubAVS_RESPONSE(7,0)<8;4,1> + mov (8) uwDEST_V(7)<1> ubAVS_RESPONSE(7,8)<8;4,1> + + // Move first 8x8 words of U to dest GRF + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,0)<8;4,1> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(4,8)<8;4,1> + mov (8) uwDEST_U(2)<1> ubAVS_RESPONSE(5,0)<8;4,1> + mov (8) uwDEST_U(3)<1> ubAVS_RESPONSE(5,8)<8;4,1> + mov (8) uwDEST_U(4)<1> ubAVS_RESPONSE(10,0)<8;4,1> + mov (8) uwDEST_U(5)<1> ubAVS_RESPONSE(10,8)<8;4,1> + mov (8) uwDEST_U(6)<1> ubAVS_RESPONSE(11,0)<8;4,1> + mov (8) uwDEST_U(7)<1> ubAVS_RESPONSE(11,8)<8;4,1> + + // Move second 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0,8)<1> uwAVS_RESPONSE_2(2,0)<8;4,1> + mov (8) uwDEST_Y(1,8)<1> uwAVS_RESPONSE_2(2,8)<8;4,1> + mov (8) uwDEST_Y(2,8)<1> uwAVS_RESPONSE_2(3,0)<8;4,1> + mov (8) uwDEST_Y(3,8)<1> uwAVS_RESPONSE_2(3,8)<8;4,1> + mov (8) uwDEST_Y(4,8)<1> uwAVS_RESPONSE_2(8,0)<8;4,1> + mov (8) uwDEST_Y(5,8)<1> uwAVS_RESPONSE_2(8,8)<8;4,1> + mov (8) uwDEST_Y(6,8)<1> uwAVS_RESPONSE_2(9,0)<8;4,1> + mov (8) uwDEST_Y(7,8)<1> uwAVS_RESPONSE_2(9,8)<8;4,1> + + // Move second 8x8 words of V to dest GRF + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE_2(0,0)<8;4,1> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE_2(0,8)<8;4,1> + mov (8) uwDEST_V(2,8)<1> ubAVS_RESPONSE_2(1,0)<8;4,1> + mov (8) uwDEST_V(3,8)<1> ubAVS_RESPONSE_2(1,8)<8;4,1> + mov (8) uwDEST_V(4,8)<1> ubAVS_RESPONSE_2(6,0)<8;4,1> + mov (8) uwDEST_V(5,8)<1> ubAVS_RESPONSE_2(6,8)<8;4,1> + mov (8) uwDEST_V(6,8)<1> ubAVS_RESPONSE_2(7,0)<8;4,1> + mov (8) uwDEST_V(7,8)<1> ubAVS_RESPONSE_2(7,8)<8;4,1> + + // Move second 8x8 words of U to dest GRF + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE_2(4,0)<8;4,1> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE_2(4,8)<8;4,1> + mov (8) uwDEST_U(2,8)<1> ubAVS_RESPONSE_2(5,0)<8;4,1> + mov (8) uwDEST_U(3,8)<1> ubAVS_RESPONSE_2(5,8)<8;4,1> + mov (8) uwDEST_U(4,8)<1> ubAVS_RESPONSE_2(10,0)<8;4,1> + mov (8) uwDEST_U(5,8)<1> ubAVS_RESPONSE_2(10,8)<8;4,1> + mov (8) uwDEST_U(6,8)<1> ubAVS_RESPONSE_2(11,0)<8;4,1> + mov (8) uwDEST_U(7,8)<1> ubAVS_RESPONSE_2(11,8)<8;4,1> +*/ +#else /* OUTPUT_8_BIT */ + // Move first 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0)<1> ubAVS_RESPONSE(2,1)<16;4,2> + mov (8) uwDEST_Y(1)<1> ubAVS_RESPONSE(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2)<1> ubAVS_RESPONSE(3,1)<16;4,2> + mov (8) uwDEST_Y(3)<1> ubAVS_RESPONSE(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_Y(5)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_Y(7)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + + // Move first 8x8 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(0,1)<16;4,2> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(0,8+1)<16;4,2> + mov (8) uwDEST_V(2)<1> ubAVS_RESPONSE(1,1)<16;4,2> + mov (8) uwDEST_V(3)<1> ubAVS_RESPONSE(1,8+1)<16;4,2> + mov (8) uwDEST_V(4)<1> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) uwDEST_V(5)<1> ubAVS_RESPONSE(6,8+1)<16;4,2> + mov (8) uwDEST_V(6)<1> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) uwDEST_V(7)<1> ubAVS_RESPONSE(7,8+1)<16;4,2> + + // Move first 8x8 words of U to dest GRF + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(4,8+1)<16;4,2> + mov (8) uwDEST_U(2)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) uwDEST_U(3)<1> ubAVS_RESPONSE(5,8+1)<16;4,2> + mov (8) uwDEST_U(4)<1> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) uwDEST_U(5)<1> ubAVS_RESPONSE(10,8+1)<16;4,2> + mov (8) uwDEST_U(6)<1> ubAVS_RESPONSE(11,1)<16;4,2> + mov (8) uwDEST_U(7)<1> ubAVS_RESPONSE(11,8+1)<16;4,2> + + // Move second 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0,8)<1> ubAVS_RESPONSE_2(2,1)<16;4,2> + mov (8) uwDEST_Y(1,8)<1> ubAVS_RESPONSE_2(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2,8)<1> ubAVS_RESPONSE_2(3,1)<16;4,2> + mov (8) uwDEST_Y(3,8)<1> ubAVS_RESPONSE_2(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4,8)<1> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) uwDEST_Y(5,8)<1> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6,8)<1> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) uwDEST_Y(7,8)<1> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + + // Move second 8x8 words of V to dest GRF + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE_2(0,1)<16;4,2> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE_2(0,8+1)<16;4,2> + mov (8) uwDEST_V(2,8)<1> ubAVS_RESPONSE_2(1,1)<16;4,2> + mov (8) uwDEST_V(3,8)<1> ubAVS_RESPONSE_2(1,8+1)<16;4,2> + mov (8) uwDEST_V(4,8)<1> ubAVS_RESPONSE_2(6,1)<16;4,2> + mov (8) uwDEST_V(5,8)<1> ubAVS_RESPONSE_2(6,8+1)<16;4,2> + mov (8) uwDEST_V(6,8)<1> ubAVS_RESPONSE_2(7,1)<16;4,2> + mov (8) uwDEST_V(7,8)<1> ubAVS_RESPONSE_2(7,8+1)<16;4,2> + + // Move second 8x8 words of U to dest GRF + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE_2(4,1)<16;4,2> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE_2(4,8+1)<16;4,2> + mov (8) uwDEST_U(2,8)<1> ubAVS_RESPONSE_2(5,1)<16;4,2> + mov (8) uwDEST_U(3,8)<1> ubAVS_RESPONSE_2(5,8+1)<16;4,2> + mov (8) uwDEST_U(4,8)<1> ubAVS_RESPONSE_2(10,1)<16;4,2> + mov (8) uwDEST_U(5,8)<1> ubAVS_RESPONSE_2(10,8+1)<16;4,2> + mov (8) uwDEST_U(6,8)<1> ubAVS_RESPONSE_2(11,1)<16;4,2> + mov (8) uwDEST_U(7,8)<1> ubAVS_RESPONSE_2(11,8+1)<16;4,2> +#endif +//------------------------------------------------------------------------------ + + // Re-define new number of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x4.asm new file mode 100644 index 000000000..12fbe19e9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x4.asm @@ -0,0 +1,107 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_Unpack_8x8.asm ---------- + +// Yoni: In order to optimize unpacking, 3 methods are being checked: +// 1. AVS_ORIGINAL +// 2. AVS_ROUND_TO_8_BITS +// 3. AVS_INDIRECT_ACCESS +// +// Only 1 method should stay in the code + + +//#define AVS_ROUND_TO_8_BITS +//#define AVS_INDIRECT_ACCESS + + + // Move first 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0)<1> ubAVS_RESPONSE(2,1)<16;4,2> + mov (8) uwDEST_Y(1)<1> ubAVS_RESPONSE(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2)<1> ubAVS_RESPONSE(3,1)<16;4,2> + mov (8) uwDEST_Y(3)<1> ubAVS_RESPONSE(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_Y(5)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_Y(7)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + + // Move first 4x8 words of V to dest GRF + mov (4) uwDEST_V(0)<1> ubAVS_RESPONSE(0,1)<16;2,4> + mov (4) uwDEST_V(0,8)<1> ubAVS_RESPONSE(1,1)<16;2,4> + mov (4) uwDEST_V(1)<1> ubAVS_RESPONSE(6,1)<16;2,4> + mov (4) uwDEST_V(1,8)<1> ubAVS_RESPONSE(7,1)<16;2,4> + + // Move first 4x8 words of U to dest GRF + mov (4) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;2,4> + mov (4) uwDEST_U(0,8)<1> ubAVS_RESPONSE(5,1)<16;2,4> + mov (4) uwDEST_U(1)<1> ubAVS_RESPONSE(10,1)<16;2,4> + mov (4) uwDEST_U(1,8)<1> ubAVS_RESPONSE(11,1)<16;2,4> + + // Move second 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0,8)<1> ubAVS_RESPONSE_2(2,1)<16;4,2> + mov (8) uwDEST_Y(1,8)<1> ubAVS_RESPONSE_2(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2,8)<1> ubAVS_RESPONSE_2(3,1)<16;4,2> + mov (8) uwDEST_Y(3,8)<1> ubAVS_RESPONSE_2(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4,8)<1> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) uwDEST_Y(5,8)<1> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6,8)<1> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) uwDEST_Y(7,8)<1> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + + // Move second 4x8 words of V to dest GRF + mov (4) uwDEST_V(0,4)<1> ubAVS_RESPONSE_2(0,1)<16;2,4> + mov (4) uwDEST_V(0,12)<1> ubAVS_RESPONSE_2(1,1)<16;2,4> + mov (4) uwDEST_V(1,4)<1> ubAVS_RESPONSE_2(6,1)<16;2,4> + mov (4) uwDEST_V(1,12)<1> ubAVS_RESPONSE_2(7,1)<16;2,4> + + // Move second 4x8 words of U to dest GRF + mov (4) uwDEST_U(0,4)<1> ubAVS_RESPONSE_2(4,1)<16;2,4> + mov (4) uwDEST_U(0,12)<1> ubAVS_RESPONSE_2(5,1)<16;2,4> + mov (4) uwDEST_U(1,4)<1> ubAVS_RESPONSE_2(10,1)<16;2,4> + mov (4) uwDEST_U(1,12)<1> ubAVS_RESPONSE_2(11,1)<16;2,4> + +//------------------------------------------------------------------------------ + + // Re-define new number of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x8.asm new file mode 100644 index 000000000..50cb94ee2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_AVS_IEF_Unpack_8x8.asm @@ -0,0 +1,123 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_AVS_IEF_Unpack_8x8.asm ---------- + +// Yoni: In order to optimize unpacking, 3 methods are being checked: +// 1. AVS_ORIGINAL +// 2. AVS_ROUND_TO_8_BITS +// 3. AVS_INDIRECT_ACCESS +// +// Only 1 method should stay in the code + + +//#define AVS_ROUND_TO_8_BITS +//#define AVS_INDIRECT_ACCESS + + + // Move first 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0)<1> ubAVS_RESPONSE(2,1)<16;4,2> + mov (8) uwDEST_Y(1)<1> ubAVS_RESPONSE(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2)<1> ubAVS_RESPONSE(3,1)<16;4,2> + mov (8) uwDEST_Y(3)<1> ubAVS_RESPONSE(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_Y(5)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_Y(7)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + + // Move first 4x8 words of V to dest GRF + mov (4) uwDEST_V(0)<1> ubAVS_RESPONSE(0,1)<16;2,4> + mov (4) uwDEST_V(0,8)<1> ubAVS_RESPONSE(0,8+1)<16;2,4> + mov (4) uwDEST_V(1)<1> ubAVS_RESPONSE(1,1)<16;2,4> + mov (4) uwDEST_V(1,8)<1> ubAVS_RESPONSE(1,8+1)<16;2,4> + mov (4) uwDEST_V(2)<1> ubAVS_RESPONSE(6,1)<16;2,4> + mov (4) uwDEST_V(2,8)<1> ubAVS_RESPONSE(6,8+1)<16;2,4> + mov (4) uwDEST_V(3)<1> ubAVS_RESPONSE(7,1)<16;2,4> + mov (4) uwDEST_V(3,8)<1> ubAVS_RESPONSE(7,8+1)<16;2,4> + + // Move first 4x8 words of U to dest GRF + mov (4) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;2,4> + mov (4) uwDEST_U(0,8)<1> ubAVS_RESPONSE(4,8+1)<16;2,4> + mov (4) uwDEST_U(1)<1> ubAVS_RESPONSE(5,1)<16;2,4> + mov (4) uwDEST_U(1,8)<1> ubAVS_RESPONSE(5,8+1)<16;2,4> + mov (4) uwDEST_U(2)<1> ubAVS_RESPONSE(10,1)<16;2,4> + mov (4) uwDEST_U(2,8)<1> ubAVS_RESPONSE(10,8+1)<16;2,4> + mov (4) uwDEST_U(3)<1> ubAVS_RESPONSE(11,1)<16;2,4> + mov (4) uwDEST_U(3,8)<1> ubAVS_RESPONSE(11,8+1)<16;2,4> + + // Move second 8x8 words of Y to dest GRF + mov (8) uwDEST_Y(0,8)<1> ubAVS_RESPONSE_2(2,1)<16;4,2> + mov (8) uwDEST_Y(1,8)<1> ubAVS_RESPONSE_2(2,8+1)<16;4,2> + mov (8) uwDEST_Y(2,8)<1> ubAVS_RESPONSE_2(3,1)<16;4,2> + mov (8) uwDEST_Y(3,8)<1> ubAVS_RESPONSE_2(3,8+1)<16;4,2> + mov (8) uwDEST_Y(4,8)<1> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) uwDEST_Y(5,8)<1> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) uwDEST_Y(6,8)<1> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) uwDEST_Y(7,8)<1> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + + // Move second 4x8 words of V to dest GRF + mov (4) uwDEST_V(0,4)<1> ubAVS_RESPONSE_2(0,1)<16;2,4> + mov (4) uwDEST_V(0,12)<1> ubAVS_RESPONSE_2(0,8+1)<16;2,4> + mov (4) uwDEST_V(1,4)<1> ubAVS_RESPONSE_2(1,1)<16;2,4> + mov (4) uwDEST_V(1,12)<1> ubAVS_RESPONSE_2(1,8+1)<16;2,4> + mov (4) uwDEST_V(2,4)<1> ubAVS_RESPONSE_2(6,1)<16;2,4> + mov (4) uwDEST_V(2,12)<1> ubAVS_RESPONSE_2(6,8+1)<16;2,4> + mov (4) uwDEST_V(3,4)<1> ubAVS_RESPONSE_2(7,1)<16;2,4> + mov (4) uwDEST_V(3,12)<1> ubAVS_RESPONSE_2(7,8+1)<16;2,4> + + // Move second 4x8 words of U to dest GRF + mov (4) uwDEST_U(0,4)<1> ubAVS_RESPONSE_2(4,1)<16;2,4> + mov (4) uwDEST_U(0,12)<1> ubAVS_RESPONSE_2(4,8+1)<16;2,4> + mov (4) uwDEST_U(1,4)<1> ubAVS_RESPONSE_2(5,1)<16;2,4> + mov (4) uwDEST_U(1,12)<1> ubAVS_RESPONSE_2(5,8+1)<16;2,4> + mov (4) uwDEST_U(2,4)<1> ubAVS_RESPONSE_2(10,1)<16;2,4> + mov (4) uwDEST_U(2,12)<1> ubAVS_RESPONSE_2(10,8+1)<16;2,4> + mov (4) uwDEST_U(3,4)<1> ubAVS_RESPONSE_2(11,1)<16;2,4> + mov (4) uwDEST_U(3,12)<1> ubAVS_RESPONSE_2(11,8+1)<16;2,4> + +//------------------------------------------------------------------------------ + + // Re-define new number of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DNDI_ALG.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DNDI_ALG.asm new file mode 100644 index 000000000..57aa36837 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DNDI_ALG.asm @@ -0,0 +1,169 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #ifdef DI_ONLY + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DI // set the number of GRF + #else + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #endif + + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_32+nBLOCK_HEIGHT_4 // DN Block Size for Write is 32x4 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_Command.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + //// move the previous frame Y component to internal planar format + //$for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + //} + //// move the previous frame U,V components to internal planar format + //$for (0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + // mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + //} + //// move the current frame Y component to internal planar format + //$for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + //} + //// move the current frame U,V components to internal planar format + //$for (0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + // mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + //} + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud NODDCHK // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// +#ifdef DI_ONLY +#else + + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Pack and Save the DN Curr Frame for Next Run /////////////// + // check top/bottom field first + cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w + + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub npDN_YUV:uw + //set the save DN position + shl (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR // X origin * 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud NODDCHK // block width and height (8x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + + + (f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + //$for (0,0; :ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 0,2) + // mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,16) // 1st field luma from current frame (line 1,3) + // mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 0,2) + // mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 0,2) + // mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16+1)<16;8,2> // 1st field U from current frame (line 1,3) + // mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16)<16;8,2> // 1st field U from current frame (line 1,3) + //} + $for (0,0; :ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 0,2) + mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,16) // 1st field luma from current frame (line 1,3) + } + + $for (0,0; :ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 0,2) + mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16+1)<16;8,2> // 1st field U from current frame (line 1,3) + } + + $for (0,0; :ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 0,2) + mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16)<16;8,2> // 1st field U from current frame (line 1,3) + } + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + //$for (0,0; :ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0) // 1st field luma from current frame (line 0,2) + // mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 1,3) + // mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,1)<16;8,2> // 1st field U from current frame (line 0,2) + // mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,0)<16;8,2> // 1st field V from current frame (line 0,2) + // mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 1,3) + // mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 1,3) + //} + $for (0,0; :ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0) // 1st field luma from current frame (line 0,2) + mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 1,3) + } + $for (0,0; :ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,1)<16;8,2> // 1st field U from current frame (line 0,2) + mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 1,3) + } + $for (0,0; :ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,0)<16;8,2> // 1st field V from current frame (line 0,2) + mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 1,3) + } + +SAVE_DN_CURR: + $for(0; udDN_YUV(%1)REGION(8,1) + } + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PA_DN_DI+nBI_DESTINATION_YUV:ud +#endif + +// Save Processed frames +#include "DI_Save_PA.asm" + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DN_ALG.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DN_ALG.asm new file mode 100644 index 000000000..68c0d3822 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_DN_ALG.asm @@ -0,0 +1,84 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_DISABLE + +#include "DNDI.inc" + +#undef nY_NUM_OF_ROWS +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block +#undef nUV_NUM_OF_ROWS +#define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + +#undef nSMPL_RESP_LEN +#define nSMPL_RESP_LEN nSMPL_RESP_LEN_DN_PA // Set the Number of GRFs in DNDI response +#undef nDPW_BLOCK_SIZE_DN +#define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_32+nBLOCK_HEIGHT_8 // DN Curr Block Size for Write is 32x8 +#undef nDPW_BLOCK_SIZE_HIST +#define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_2 // HIST Block Size for Write is 4x2 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// +#include "DNDI_COMMAND.asm" + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// +#include "DNDI_Hist_Save.asm" + +////////////////////////////////////// Pack and Save the DN Curr Frame for Next Run /////////////// +add (4) pCF_Y_OFFSET<1>:uw ubDEST_CF_OFFSET<4;4,1>:ub npDN_YUV:w +$for (0; :ub ubRESP(nNODI_LUMA_OFFSET,%1*16)<16;16,1> // copy line of Y +} +$for (0; :ub ubRESP(nNODI_CHROMA_OFFSET,%1*16+1)<16;8,2> // copy line of U + mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nNODI_CHROMA_OFFSET,%1*16)<16;8,2> // copy line of V +} + +shl (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w // X origin * 2 (422 output) +mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w // Y origin +mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (32x8) +mov (8) mMSGHDR_DN<1>:ud rMSGSRC<8;8,1>:ud // message header + +$for(0; udDN_YUV(%1)REGION(8,1) // Move DN Curr to MRF +} +send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PA_DN_NODI+nBI_DESTINATION_YUV:ud + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_Scaling.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_Scaling.asm new file mode 100644 index 000000000..c87f6c0d6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PA_Scaling.asm @@ -0,0 +1,100 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PA_Scaling.asm ---------- +#include "Scaling.inc" + + // Build 16 elements ramp in float32 and normalized it +// mov (8) SAMPLER_RAMP(0)<1> 0x76543210:v +// add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f +mov (4) SAMPLER_RAMP(0)<1> 0x48403000:vf //3, 2, 1, 0 in float vector +mov (4) SAMPLER_RAMP(0,4)<1> 0x5C585450:vf //7, 6, 5, 4 in float vector +add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f + +//Module: PrepareScaleCoord.asm + + // Setup for sampler msg hdr + mov (2) rMSGSRC.0<1>:ud 0:ud { NoDDClr } // Unused fields + mov (1) rMSGSRC.2<1>:ud 0:ud { NoDDChk } // Write and offset + + // Calculate 16 v based on the step Y and vertical origin + mov (16) mfMSGPAYLOAD(2)<1> fSRC_VID_V_ORI<0;1,0>:f + mov (16) SCALE_COORD_Y<1>:f fSRC_VID_V_ORI<0;1,0>:f + + // Calculate 16 u based on the step X and hori origin +// line (16) mfMSGPAYLOAD(0)<1> SCALE_STEP_X<0;1,0>:f SAMPLER_RAMP(0) // Assign to mrf directly + mov (16) acc0:f fSRC_VID_H_ORI<0;1,0>:f { Compr } + mac (16) mfMSGPAYLOAD(0)<1> fVIDEO_STEP_X<0;1,0>:f SAMPLER_RAMP(0) { Compr } + + //Setup the constants for line instruction + mov (1) SCALE_LINE_P255<1>:f 255.0:f { NoDDClr } //{ NoDDClr, NoDDChk } + mov (1) SCALE_LINE_P0_5<1>:f 0.5:f { NoDDChk } + +//------------------------------------------------------------------------------ + +$for (0; :ud // Copy msg header and payload mirrors to MRFs + send (16) SCALE_RESPONSE_YW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_YUV+nBI_CURRENT_SRC_YUV + + // Calculate 16 v for next line + add (16) mfMSGPAYLOAD(2)<1> SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + add (16) SCALE_COORD_Y<1>:f SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + + // Scale back to [0, 255], convert f to ud + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(2) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(2)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(4) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(4)<1> acc0:f { Compr } + + mov (16) DEST_V(%1)<1> SCALE_RESPONSE_YB(0) //possible error due to truncation - vK + mov (16) DEST_Y(%1)<1> SCALE_RESPONSE_YB(2) //possible error due to truncation - vK + mov (16) DEST_U(%1)<1> SCALE_RESPONSE_YB(4) //possible error due to truncation - vK + +} + + #define nSRC_REGION nREGION_1 + +//------------------------------------------------------------------------------ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_16x8.asm new file mode 100644 index 000000000..3c7f6e90e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_16x8.asm @@ -0,0 +1,90 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_16x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y each +// 2 sampler read for 8x8 U and 8x8 V (NV11\P208 input surface) +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 8x8 U and V sampling + // Enable red and blue channels + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_BLUE_CHANNELS:ud + + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_2CH+nSI_SRC_UV+nBI_CURRENT_SRC_UV + // Return U and V in 8 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + + // 2nd 8x8 U and V sampling + // Enable red and blue channels + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_BLUE_CHANNELS:ud + + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_2CH+nSI_SRC_UV+nBI_CURRENT_SRC_UV + // Return U and V in 8 GRFs + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:4:4 internal planar +//------------------------------------------------------------------------------ + #include "PL2_AVS_IEF_Unpack_16x8.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x4.asm new file mode 100644 index 000000000..04361d41d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x4.asm @@ -0,0 +1,88 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_8x4.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y each +// 1 sampler read for 8x8 U and 8x8 V (NV11\NV12 input surface) +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 8x8 U and V sampling + // Enable red and blue channels + //Only 8x4 wil be used + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_BLUE_CHANNELS:ud + + // Calculate Chroma Step Size: + // for H direction: 16 Luma samples are covered by 8 Chroma samples. Thus Chroma_Step_X = 2 * Luma_Step_X + // for V direction: 8 Luma samples are covered by 8 Chroma samples. Thus Chroma_Step_Y = Luma_Step_Y + mul (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f 2.0:f // Step X for chroma + + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_2CH+nSI_SRC_UV+nBI_CURRENT_SRC_UV + // Return U and V in 8 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:2:0 internal planar +//------------------------------------------------------------------------------ + #include "PL2_AVS_IEF_Unpack_8x4.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x8.asm new file mode 100644 index 000000000..a83a35c85 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_8x8.asm @@ -0,0 +1,87 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_8x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y each +// 1 sampler read for 8x8 U and 8x8 V (NV11\NV12 input surface) +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 8x8 U and V sampling + // Enable red and blue channels + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_BLUE_CHANNELS:ud + + // Calculate Chroma Step Size: + // for H direction: 16 Luma samples are covered by 8 Chroma samples. Thus Chroma_Step_X = 2 * Luma_Step_X + // for V direction: 8 Luma samples are covered by 8 Chroma samples. Thus Chroma_Step_Y = Luma_Step_Y + mul (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f 2.0:f // Step X for chroma + + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_2CH+nSI_SRC_UV+nBI_CURRENT_SRC_UV + // Return U and V in 8 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + // Enable green channel only + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud + + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:2:2 internal planar +//------------------------------------------------------------------------------ + #include "PL2_AVS_IEF_Unpack_8x8.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_16x8.asm new file mode 100644 index 000000000..57ab25505 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_16x8.asm @@ -0,0 +1,301 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_Unpack_16x8.asm ---------- + +#ifdef AVS_OUTPUT_16_BIT //Output is packed in AVYU format +// Move first 8x8 words of Y to dest GRF (as packed) + mov (4) uwDEST_Y(0,1)<4> uwAVS_RESPONSE(0,0)<4;4,1> + mov (4) uwDEST_Y(1,1)<4> uwAVS_RESPONSE(0,8)<4;4,1> + mov (4) uwDEST_Y(4,1)<4> uwAVS_RESPONSE(0,4)<4;4,1> + mov (4) uwDEST_Y(5,1)<4> uwAVS_RESPONSE(0,12)<4;4,1> + mov (4) uwDEST_Y(8,1)<4> uwAVS_RESPONSE(1,0)<4;4,1> + mov (4) uwDEST_Y(9,1)<4> uwAVS_RESPONSE(1,8)<4;4,1> + mov (4) uwDEST_Y(12,1)<4> uwAVS_RESPONSE(1,4)<4;4,1> + mov (4) uwDEST_Y(13,1)<4> uwAVS_RESPONSE(1,12)<4;4,1> + mov (4) uwDEST_Y(16,1)<4> uwAVS_RESPONSE(2,0)<4;4,1> + mov (4) uwDEST_Y(17,1)<4> uwAVS_RESPONSE(2,8)<4;4,1> + mov (4) uwDEST_Y(20,1)<4> uwAVS_RESPONSE(2,4)<4;4,1> + mov (4) uwDEST_Y(21,1)<4> uwAVS_RESPONSE(2,12)<4;4,1> + mov (4) uwDEST_Y(24,1)<4> uwAVS_RESPONSE(3,0)<4;4,1> + mov (4) uwDEST_Y(25,1)<4> uwAVS_RESPONSE(3,8)<4;4,1> + mov (4) uwDEST_Y(28,1)<4> uwAVS_RESPONSE(3,4)<4;4,1> + mov (4) uwDEST_Y(29,1)<4> uwAVS_RESPONSE(3,12)<4;4,1> + +// Move first 8x8 words of U to dest GRF (as packed) + mov (4) uwDEST_Y(0,0)<4> uwAVS_RESPONSE(4,0)<4;4,1> + mov (4) uwDEST_Y(1,0)<4> uwAVS_RESPONSE(4,8)<4;4,1> + mov (4) uwDEST_Y(4,0)<4> uwAVS_RESPONSE(4,4)<4;4,1> + mov (4) uwDEST_Y(5,0)<4> uwAVS_RESPONSE(4,12)<4;4,1> + mov (4) uwDEST_Y(8,0)<4> uwAVS_RESPONSE(5,0)<4;4,1> + mov (4) uwDEST_Y(9,0)<4> uwAVS_RESPONSE(5,8)<4;4,1> + mov (4) uwDEST_Y(12,0)<4> uwAVS_RESPONSE(5,4)<4;4,1> + mov (4) uwDEST_Y(13,0)<4> uwAVS_RESPONSE(5,12)<4;4,1> + mov (4) uwDEST_Y(16,0)<4> uwAVS_RESPONSE(8,0)<4;4,1> + mov (4) uwDEST_Y(17,0)<4> uwAVS_RESPONSE(8,8)<4;4,1> + mov (4) uwDEST_Y(20,0)<4> uwAVS_RESPONSE(8,4)<4;4,1> + mov (4) uwDEST_Y(21,0)<4> uwAVS_RESPONSE(8,12)<4;4,1> + mov (4) uwDEST_Y(24,0)<4> uwAVS_RESPONSE(9,0)<4;4,1> + mov (4) uwDEST_Y(25,0)<4> uwAVS_RESPONSE(9,8)<4;4,1> + mov (4) uwDEST_Y(28,0)<4> uwAVS_RESPONSE(9,4)<4;4,1> + mov (4) uwDEST_Y(29,0)<4> uwAVS_RESPONSE(9,12)<4;4,1> + +// Move first 8x8 words of V to dest GRF (as packed) + mov (4) uwDEST_Y(0,2)<4> uwAVS_RESPONSE(6,0)<4;4,1> + mov (4) uwDEST_Y(1,2)<4> uwAVS_RESPONSE(6,8)<4;4,1> + mov (4) uwDEST_Y(4,2)<4> uwAVS_RESPONSE(6,4)<4;4,1> + mov (4) uwDEST_Y(5,2)<4> uwAVS_RESPONSE(6,12)<4;4,1> + mov (4) uwDEST_Y(8,2)<4> uwAVS_RESPONSE(7,0)<4;4,1> + mov (4) uwDEST_Y(9,2)<4> uwAVS_RESPONSE(7,8)<4;4,1> + mov (4) uwDEST_Y(12,2)<4> uwAVS_RESPONSE(7,4)<4;4,1> + mov (4) uwDEST_Y(13,2)<4> uwAVS_RESPONSE(7,12)<4;4,1> + mov (4) uwDEST_Y(16,2)<4> uwAVS_RESPONSE(10,0)<4;4,1> + mov (4) uwDEST_Y(17,2)<4> uwAVS_RESPONSE(10,8)<4;4,1> + mov (4) uwDEST_Y(20,2)<4> uwAVS_RESPONSE(10,4)<4;4,1> + mov (4) uwDEST_Y(21,2)<4> uwAVS_RESPONSE(10,12)<4;4,1> + mov (4) uwDEST_Y(24,2)<4> uwAVS_RESPONSE(11,0)<4;4,1> + mov (4) uwDEST_Y(25,2)<4> uwAVS_RESPONSE(11,8)<4;4,1> + mov (4) uwDEST_Y(28,2)<4> uwAVS_RESPONSE(11,4)<4;4,1> + mov (4) uwDEST_Y(29,2)<4> uwAVS_RESPONSE(11,12)<4;4,1> + +// Move first 8x8 words of A to dest GRF (as packed) + mov (4) uwDEST_Y(0,3)<4> 0:uw + mov (4) uwDEST_Y(1,3)<4> 0:uw + mov (4) uwDEST_Y(4,3)<4> 0:uw + mov (4) uwDEST_Y(5,3)<4> 0:uw + mov (4) uwDEST_Y(8,3)<4> 0:uw + mov (4) uwDEST_Y(9,3)<4> 0:uw + mov (4) uwDEST_Y(12,3)<4> 0:uw + mov (4) uwDEST_Y(13,3)<4> 0:uw + mov (4) uwDEST_Y(16,3)<4> 0:uw + mov (4) uwDEST_Y(17,3)<4> 0:uw + mov (4) uwDEST_Y(20,3)<4> 0:uw + mov (4) uwDEST_Y(21,3)<4> 0:uw + mov (4) uwDEST_Y(24,3)<4> 0:uw + mov (4) uwDEST_Y(25,3)<4> 0:uw + mov (4) uwDEST_Y(28,3)<4> 0:uw + mov (4) uwDEST_Y(29,3)<4> 0:uw + +// Move second 8x8 words of Y to dest GRF + mov (4) uwDEST_Y(2,1)<4> uwAVS_RESPONSE_2(0,0)<4;4,1> + mov (4) uwDEST_Y(3,1)<4> uwAVS_RESPONSE_2(0,8)<4;4,1> + mov (4) uwDEST_Y(6,1)<4> uwAVS_RESPONSE_2(0,4)<4;4,1> + mov (4) uwDEST_Y(7,1)<4> uwAVS_RESPONSE_2(0,12)<4;4,1> + mov (4) uwDEST_Y(10,1)<4> uwAVS_RESPONSE_2(1,0)<4;4,1> + mov (4) uwDEST_Y(11,1)<4> uwAVS_RESPONSE_2(1,8)<4;4,1> + mov (4) uwDEST_Y(14,1)<4> uwAVS_RESPONSE_2(1,4)<4;4,1> + mov (4) uwDEST_Y(15,1)<4> uwAVS_RESPONSE_2(1,12)<4;4,1> + mov (4) uwDEST_Y(18,1)<4> uwAVS_RESPONSE_2(2,0)<4;4,1> + mov (4) uwDEST_Y(19,1)<4> uwAVS_RESPONSE_2(2,8)<4;4,1> + mov (4) uwDEST_Y(22,1)<4> uwAVS_RESPONSE_2(2,4)<4;4,1> + mov (4) uwDEST_Y(23,1)<4> uwAVS_RESPONSE_2(2,12)<4;4,1> + mov (4) uwDEST_Y(26,1)<4> uwAVS_RESPONSE_2(3,0)<4;4,1> + mov (4) uwDEST_Y(27,1)<4> uwAVS_RESPONSE_2(3,8)<4;4,1> + mov (4) uwDEST_Y(30,1)<4> uwAVS_RESPONSE_2(3,4)<4;4,1> + mov (4) uwDEST_Y(31,1)<4> uwAVS_RESPONSE_2(3,12)<4;4,1> + +// Move second 8x8 words of U to dest GRF + mov (4) uwDEST_Y(2,0)<4> uwAVS_RESPONSE_2(4,0)<4;4,1> + mov (4) uwDEST_Y(3,0)<4> uwAVS_RESPONSE_2(4,8)<4;4,1> + mov (4) uwDEST_Y(6,0)<4> uwAVS_RESPONSE_2(4,4)<4;4,1> + mov (4) uwDEST_Y(7,0)<4> uwAVS_RESPONSE_2(4,12)<4;4,1> + mov (4) uwDEST_Y(10,0)<4> uwAVS_RESPONSE_2(5,0)<4;4,1> + mov (4) uwDEST_Y(11,0)<4> uwAVS_RESPONSE_2(5,8)<4;4,1> + mov (4) uwDEST_Y(14,0)<4> uwAVS_RESPONSE_2(5,4)<4;4,1> + mov (4) uwDEST_Y(15,0)<4> uwAVS_RESPONSE_2(5,12)<4;4,1> + mov (4) uwDEST_Y(18,0)<4> uwAVS_RESPONSE_2(8,0)<4;4,1> + mov (4) uwDEST_Y(19,0)<4> uwAVS_RESPONSE_2(8,8)<4;4,1> + mov (4) uwDEST_Y(22,0)<4> uwAVS_RESPONSE_2(8,4)<4;4,1> + mov (4) uwDEST_Y(23,0)<4> uwAVS_RESPONSE_2(8,12)<4;4,1> + mov (4) uwDEST_Y(26,0)<4> uwAVS_RESPONSE_2(9,0)<4;4,1> + mov (4) uwDEST_Y(27,0)<4> uwAVS_RESPONSE_2(9,8)<4;4,1> + mov (4) uwDEST_Y(30,0)<4> uwAVS_RESPONSE_2(9,4)<4;4,1> + mov (4) uwDEST_Y(31,0)<4> uwAVS_RESPONSE_2(9,12)<4;4,1> + +// Move second 8x8 words of V to dest GRF + mov (4) uwDEST_Y(2,2)<4> uwAVS_RESPONSE_2(6,0)<4;4,1> + mov (4) uwDEST_Y(3,2)<4> uwAVS_RESPONSE_2(6,8)<4;4,1> + mov (4) uwDEST_Y(6,2)<4> uwAVS_RESPONSE_2(6,4)<4;4,1> + mov (4) uwDEST_Y(7,2)<4> uwAVS_RESPONSE_2(6,12)<4;4,1> + mov (4) uwDEST_Y(10,2)<4> uwAVS_RESPONSE_2(7,0)<4;4,1> + mov (4) uwDEST_Y(11,2)<4> uwAVS_RESPONSE_2(7,8)<4;4,1> + mov (4) uwDEST_Y(14,2)<4> uwAVS_RESPONSE_2(7,4)<4;4,1> + mov (4) uwDEST_Y(15,2)<4> uwAVS_RESPONSE_2(7,12)<4;4,1> + mov (4) uwDEST_Y(18,2)<4> uwAVS_RESPONSE_2(10,0)<4;4,1> + mov (4) uwDEST_Y(19,2)<4> uwAVS_RESPONSE_2(10,8)<4;4,1> + mov (4) uwDEST_Y(22,2)<4> uwAVS_RESPONSE_2(10,4)<4;4,1> + mov (4) uwDEST_Y(23,2)<4> uwAVS_RESPONSE_2(10,12)<4;4,1> + mov (4) uwDEST_Y(26,2)<4> uwAVS_RESPONSE_2(11,0)<4;4,1> + mov (4) uwDEST_Y(27,2)<4> uwAVS_RESPONSE_2(11,8)<4;4,1> + mov (4) uwDEST_Y(30,2)<4> uwAVS_RESPONSE_2(11,4)<4;4,1> + mov (4) uwDEST_Y(31,2)<4> uwAVS_RESPONSE_2(11,12)<4;4,1> + +// Move second 8x8 words of A to dest GRF + mov (4) uwDEST_Y(2,3)<4> 0:uw + mov (4) uwDEST_Y(3,3)<4> 0:uw + mov (4) uwDEST_Y(6,3)<4> 0:uw + mov (4) uwDEST_Y(7,3)<4> 0:uw + mov (4) uwDEST_Y(10,3)<4> 0:uw + mov (4) uwDEST_Y(11,3)<4> 0:uw + mov (4) uwDEST_Y(14,3)<4> 0:uw + mov (4) uwDEST_Y(15,3)<4> 0:uw + mov (4) uwDEST_Y(18,3)<4> 0:uw + mov (4) uwDEST_Y(19,3)<4> 0:uw + mov (4) uwDEST_Y(22,3)<4> 0:uw + mov (4) uwDEST_Y(23,3)<4> 0:uw + mov (4) uwDEST_Y(26,3)<4> 0:uw + mov (4) uwDEST_Y(27,3)<4> 0:uw + mov (4) uwDEST_Y(30,3)<4> 0:uw + mov (4) uwDEST_Y(31,3)<4> 0:uw + +/* This section will be used if 16-bit output is needed in planar format -vK + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> uwAVS_RESPONSE(%1,0)<8;4,1> + mov (8) uwDEST_Y(%1*2+1)<1> uwAVS_RESPONSE(%1,8)<8;4,1> + } + + // Move 1st 8x8 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0)<1> uwAVS_RESPONSE(4,0)<8;4,1> + mov (8) uwDEST_U(1)<1> uwAVS_RESPONSE(4,8)<8;4,1> + mov (8) uwDEST_U(2)<1> uwAVS_RESPONSE(5,0)<8;4,1> + mov (8) uwDEST_U(3)<1> uwAVS_RESPONSE(5,8)<8;4,1> + mov (8) uwDEST_U(4)<1> uwAVS_RESPONSE(8,0)<8;4,1> + mov (8) uwDEST_U(5)<1> uwAVS_RESPONSE(8,8)<8;4,1> + mov (8) uwDEST_U(6)<1> uwAVS_RESPONSE(9,0)<8;4,1> + mov (8) uwDEST_U(7)<1> uwAVS_RESPONSE(9,8)<8;4,1> + + // Move 1st 8x8 words of V to dest GRF + mov (8) uwDEST_V(0)<1> uwAVS_RESPONSE(6,0)<8;4,1> + mov (8) uwDEST_V(1)<1> uwAVS_RESPONSE(6,8)<8;4,1> + mov (8) uwDEST_V(2)<1> uwAVS_RESPONSE(7,0)<8;4,1> + mov (8) uwDEST_V(3)<1> uwAVS_RESPONSE(7,8)<8;4,1> + mov (8) uwDEST_V(4)<1> uwAVS_RESPONSE(10,0)<8;4,1> + mov (8) uwDEST_V(5)<1> uwAVS_RESPONSE(10,8)<8;4,1> + mov (8) uwDEST_V(6)<1> uwAVS_RESPONSE(11,0)<8;4,1> + mov (8) uwDEST_V(7)<1> uwAVS_RESPONSE(11,8)<8;4,1> + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each GRF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> uwAVS_RESPONSE_2(%1,0)<8;4,1> + mov (8) uwDEST_Y(%1*2+1,8)<1> uwAVS_RESPONSE_2(%1,8)<8;4,1> + } + + // Move 2st 8x8 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0,8)<1> uwAVS_RESPONSE_2(4,0)<8;4,1> + mov (8) uwDEST_U(1,8)<1> uwAVS_RESPONSE_2(4,8)<8;4,1> + mov (8) uwDEST_U(2,8)<1> uwAVS_RESPONSE_2(5,0)<8;4,1> + mov (8) uwDEST_U(3,8)<1> uwAVS_RESPONSE_2(5,8)<8;4,1> + mov (8) uwDEST_U(4,8)<1> uwAVS_RESPONSE_2(8,0)<8;4,1> + mov (8) uwDEST_U(5,8)<1> uwAVS_RESPONSE_2(8,8)<8;4,1> + mov (8) uwDEST_U(6,8)<1> uwAVS_RESPONSE_2(9,0)<8;4,1> + mov (8) uwDEST_U(7,8)<1> uwAVS_RESPONSE_2(9,8)<8;4,1> + + // Move 2st 8x8 words of V to dest GRF + mov (8) uwDEST_V(0,8)<1> uwAVS_RESPONSE_2(6,0)<8;4,1> + mov (8) uwDEST_V(1,8)<1> uwAVS_RESPONSE_2(6,8)<8;4,1> + mov (8) uwDEST_V(2,8)<1> uwAVS_RESPONSE_2(7,0)<8;4,1> + mov (8) uwDEST_V(3,8)<1> uwAVS_RESPONSE_2(7,8)<8;4,1> + mov (8) uwDEST_V(4,8)<1> uwAVS_RESPONSE_2(10,0)<8;4,1> + mov (8) uwDEST_V(5,8)<1> uwAVS_RESPONSE_2(10,8)<8;4,1> + mov (8) uwDEST_V(6,8)<1> uwAVS_RESPONSE_2(11,0)<8;4,1> + mov (8) uwDEST_V(7,8)<1> uwAVS_RESPONSE_2(11,8)<8;4,1> +*/ +#else + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 1st 8x8 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(4,8+1)<16;4,2> + mov (8) uwDEST_U(2)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) uwDEST_U(3)<1> ubAVS_RESPONSE(5,8+1)<16;4,2> + mov (8) uwDEST_U(4)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_U(5)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) uwDEST_U(6)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_U(7)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + + // Move 1st 8x8 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(6,8+1)<16;4,2> + mov (8) uwDEST_V(2)<1> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) uwDEST_V(3)<1> ubAVS_RESPONSE(7,8+1)<16;4,2> + mov (8) uwDEST_V(4)<1> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) uwDEST_V(5)<1> ubAVS_RESPONSE(10,8+1)<16;4,2> + mov (8) uwDEST_V(6)<1> ubAVS_RESPONSE(11,1)<16;4,2> + mov (8) uwDEST_V(7)<1> ubAVS_RESPONSE(11,8+1)<16;4,2> + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each GRF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE_2(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 2st 8x8 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE_2(4,1)<16;4,2> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE_2(4,8+1)<16;4,2> + mov (8) uwDEST_U(2,8)<1> ubAVS_RESPONSE_2(5,1)<16;4,2> + mov (8) uwDEST_U(3,8)<1> ubAVS_RESPONSE_2(5,8+1)<16;4,2> + mov (8) uwDEST_U(4,8)<1> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) uwDEST_U(5,8)<1> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) uwDEST_U(6,8)<1> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) uwDEST_U(7,8)<1> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + + // Move 2st 8x8 words of V to dest GRF + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE_2(6,1)<16;4,2> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE_2(6,8+1)<16;4,2> + mov (8) uwDEST_V(2,8)<1> ubAVS_RESPONSE_2(7,1)<16;4,2> + mov (8) uwDEST_V(3,8)<1> ubAVS_RESPONSE_2(7,8+1)<16;4,2> + mov (8) uwDEST_V(4,8)<1> ubAVS_RESPONSE_2(10,1)<16;4,2> + mov (8) uwDEST_V(5,8)<1> ubAVS_RESPONSE_2(10,8+1)<16;4,2> + mov (8) uwDEST_V(6,8)<1> ubAVS_RESPONSE_2(11,1)<16;4,2> + mov (8) uwDEST_V(7,8)<1> ubAVS_RESPONSE_2(11,8+1)<16;4,2> +#endif + + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x4.asm new file mode 100644 index 000000000..5257fb813 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x4.asm @@ -0,0 +1,75 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_8x4.asm ---------- + + // Move first 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x4 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE(9,1)<16;4,2> + + // Move 8x4 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE(11,1)<16;4,2> + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each GRF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE_2(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1,8+1)<16;4,2> // Copy high byte in a word + } + +//------------------------------------------------------------------------------ + + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 4 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x8.asm new file mode 100644 index 000000000..584fe9494 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_AVS_IEF_Unpack_8x8.asm @@ -0,0 +1,83 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_AVS_IEF_8x8.asm ---------- + + // Move first 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x8 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE(4,8+1)<16;4,2> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE(5,8+1)<16;4,2> + mov (8) uwDEST_U(2)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_U(2,8)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) uwDEST_U(3)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_U(3,8)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + + // Move 8x8 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE(6,8+1)<16;4,2> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE(7,8+1)<16;4,2> + mov (8) uwDEST_V(2)<1> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) uwDEST_V(2,8)<1> ubAVS_RESPONSE(10,8+1)<16;4,2> + mov (8) uwDEST_V(3)<1> ubAVS_RESPONSE(11,1)<16;4,2> + mov (8) uwDEST_V(3,8)<1> ubAVS_RESPONSE(11,8+1)<16;4,2> + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each GRF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE_2(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1,8+1)<16;4,2> // Copy high byte in a word + } + +//------------------------------------------------------------------------------ + + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_Scaling.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_Scaling.asm new file mode 100644 index 000000000..622871688 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL2_Scaling.asm @@ -0,0 +1,101 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL2_Scaling.asm ---------- +#include "Scaling.inc" + + // Build 16 elements ramp in float32 and normalized it +// mov (8) SAMPLER_RAMP(0)<1> 0x76543210:v +// add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f +mov (4) SAMPLER_RAMP(0)<1> 0x48403000:vf //3, 2, 1, 0 in float vector +mov (4) SAMPLER_RAMP(0,4)<1> 0x5C585450:vf //7, 6, 5, 4 in float vector +add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f + +//Module: PrepareScaleCoord.asm + + // Setup for sampler msg hdr + mov (2) rMSGSRC.0<1>:ud 0:ud { NoDDClr } // Unused fields + mov (1) rMSGSRC.2<1>:ud 0:ud { NoDDChk } // Write and offset + + // Calculate 16 v based on the step Y and vertical origin + mov (16) mfMSGPAYLOAD(2)<1> fSRC_VID_V_ORI<0;1,0>:f + mov (16) SCALE_COORD_Y<1>:f fSRC_VID_V_ORI<0;1,0>:f + + // Calculate 16 u based on the step X and hori origin +// line (16) mfMSGPAYLOAD(0)<1> SCALE_STEP_X<0;1,0>:f SAMPLER_RAMP(0) // Assign to mrf directly + mov (16) acc0:f fSRC_VID_H_ORI<0;1,0>:f { Compr } + mac (16) mfMSGPAYLOAD(0)<1> fVIDEO_STEP_X<0;1,0>:f SAMPLER_RAMP(0) { Compr } + + //Setup the constants for line instruction + mov (1) SCALE_LINE_P255<1>:f 255.0:f { NoDDClr } //{ NoDDClr, NoDDChk } + mov (1) SCALE_LINE_P0_5<1>:f 0.5:f { NoDDChk } + +//------------------------------------------------------------------------------ + +$for (0; :ud // Copy msg header and payload mirrors to MRFs + send (16) SCALE_RESPONSE_YW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_Y+nBI_CURRENT_SRC_Y + send (16) SCALE_RESPONSE_UW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_UV+nBI_CURRENT_SRC_UV + + // Calculate 16 v for next line + add (16) mfMSGPAYLOAD(2)<1> SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + add (16) SCALE_COORD_Y<1>:f SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + + // Scale back to [0, 255], convert f to ud + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_UF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_UD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_UF(2) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_UD(2)<1> acc0:f { Compr } + + mov (16) DEST_Y(%1)<1> SCALE_RESPONSE_YB(0) //possible error due to truncation - vK + mov (16) DEST_U(%1)<1> SCALE_RESPONSE_UB(0) //possible error due to truncation - vK + mov (16) DEST_V(%1)<1> SCALE_RESPONSE_UB(2) //possible error due to truncation - vK + +} + + #define nSRC_REGION nREGION_1 + +//------------------------------------------------------------------------------ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_16x8.asm new file mode 100644 index 000000000..2ae387a89 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_16x8.asm @@ -0,0 +1,99 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_16x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y surface +// 2 sampler read for 8x8 U surface +// 2 sampler read for 8x8 V surface +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // 1st 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 1st 8x8 U sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Enable red channel + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_U+nBI_CURRENT_SRC_U + // Return U in 4 GRFs + + // 1st 8x8 V sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Dummy instruction to avoid back-2-back send instructions + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(8)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_V+nBI_CURRENT_SRC_V + // Return V in 4 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 2nd 8x8 U sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Enable red channel + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_U+nBI_CURRENT_SRC_U + // Return U in 4 GRFs + + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Dummy instruction just in order to avoid back-2-back send instructions! + + // 2nd 8x8 V sampling + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(8)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_V+nBI_CURRENT_SRC_V + // Return V in 4 GRFs + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:4:4 internal planar +//------------------------------------------------------------------------------ + #include "PL3_AVS_IEF_Unpack_16x8.asm" + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x4.asm new file mode 100644 index 000000000..ea7475540 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x4.asm @@ -0,0 +1,90 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_8x4.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y surface +// 1 sampler read for 8x8 U surface +// 1 sampler read for 8x8 V surface +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // 1st 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 8x8 U sampling ; Only 8x4 will be used + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Enable red channel + mul (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f 2.0:f // Calculate Step X for chroma + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_U+nBI_CURRENT_SRC_U + // Return U in 4 GRFs + + // 8x8 V sampling ; Only 8x4 will be used + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Dummy instruction just in order to avoid back-2-back send instructions! + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(8)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_V+nBI_CURRENT_SRC_V + // Return V in 4 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f // Restore Step X for luma + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(12)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:2:0 internal planar +//------------------------------------------------------------------------------ + #include "PL3_AVS_IEF_Unpack_8x4.asm" + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x8.asm new file mode 100644 index 000000000..33cc3791b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_8x8.asm @@ -0,0 +1,90 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_8x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 Y surface +// 1 sampler read for 8x8 U surface +// 1 sampler read for 8x8 V surface +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + // 1st 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + + // 8x8 U sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Enable red channel + mul (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f 2.0:f // Calculate Step X for chroma + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(4)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_U+nBI_CURRENT_SRC_U + // Return U in 4 GRFs + + // 8x8 V sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_RED_CHANNEL_ONLY:ud // Dummy instruction just in order to avoid back-2-back send instructions! + mov (16) mAVS_8x8_HDR_UV.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(8)<1> mAVS_8x8_HDR_UV udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_V+nBI_CURRENT_SRC_V + // Return V in 4 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + + // 2nd 8x8 Y sampling + mov (1) rAVS_8x8_HDR.2:ud nAVS_GREEN_CHANNEL_ONLY:ud // Enable green channel + mov (1) rAVS_PAYLOAD.1:f fVIDEO_STEP_X:f // Restore Step X for luma + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(12)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_1CH+nSI_SRC_Y+nBI_CURRENT_SRC_Y + // Return Y in 4 GRFs + +//------------------------------------------------------------------------------ +// Unpacking sampler reads to 4:2:2 internal planar +//------------------------------------------------------------------------------ + #include "PL3_AVS_IEF_Unpack_8x8.asm" + + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_16x8.asm new file mode 100644 index 000000000..950d1be6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_16x8.asm @@ -0,0 +1,270 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_Unpack_16x8.asm ---------- + +#ifdef AVS_OUTPUT_16_BIT //Output is packed in AVYU format +// Move first 8x8 words of Y to dest GRF (as packed) + mov (4) uwDEST_Y(0,1)<4> uwAVS_RESPONSE(0,0)<4;4,1> + mov (4) uwDEST_Y(1,1)<4> uwAVS_RESPONSE(0,8)<4;4,1> + mov (4) uwDEST_Y(4,1)<4> uwAVS_RESPONSE(0,4)<4;4,1> + mov (4) uwDEST_Y(5,1)<4> uwAVS_RESPONSE(0,12)<4;4,1> + mov (4) uwDEST_Y(8,1)<4> uwAVS_RESPONSE(1,0)<4;4,1> + mov (4) uwDEST_Y(9,1)<4> uwAVS_RESPONSE(1,8)<4;4,1> + mov (4) uwDEST_Y(12,1)<4> uwAVS_RESPONSE(1,4)<4;4,1> + mov (4) uwDEST_Y(13,1)<4> uwAVS_RESPONSE(1,12)<4;4,1> + mov (4) uwDEST_Y(16,1)<4> uwAVS_RESPONSE(2,0)<4;4,1> + mov (4) uwDEST_Y(17,1)<4> uwAVS_RESPONSE(2,8)<4;4,1> + mov (4) uwDEST_Y(20,1)<4> uwAVS_RESPONSE(2,4)<4;4,1> + mov (4) uwDEST_Y(21,1)<4> uwAVS_RESPONSE(2,12)<4;4,1> + mov (4) uwDEST_Y(24,1)<4> uwAVS_RESPONSE(3,0)<4;4,1> + mov (4) uwDEST_Y(25,1)<4> uwAVS_RESPONSE(3,8)<4;4,1> + mov (4) uwDEST_Y(28,1)<4> uwAVS_RESPONSE(3,4)<4;4,1> + mov (4) uwDEST_Y(29,1)<4> uwAVS_RESPONSE(3,12)<4;4,1> + +// Move first 8x8 words of U to dest GRF (as packed) + mov (4) uwDEST_Y(0,0)<4> uwAVS_RESPONSE(4,0)<4;4,1> + mov (4) uwDEST_Y(1,0)<4> uwAVS_RESPONSE(4,8)<4;4,1> + mov (4) uwDEST_Y(4,0)<4> uwAVS_RESPONSE(4,4)<4;4,1> + mov (4) uwDEST_Y(5,0)<4> uwAVS_RESPONSE(4,12)<4;4,1> + mov (4) uwDEST_Y(8,0)<4> uwAVS_RESPONSE(5,0)<4;4,1> + mov (4) uwDEST_Y(9,0)<4> uwAVS_RESPONSE(5,8)<4;4,1> + mov (4) uwDEST_Y(12,0)<4> uwAVS_RESPONSE(5,4)<4;4,1> + mov (4) uwDEST_Y(13,0)<4> uwAVS_RESPONSE(5,12)<4;4,1> + mov (4) uwDEST_Y(16,0)<4> uwAVS_RESPONSE(6,0)<4;4,1> + mov (4) uwDEST_Y(17,0)<4> uwAVS_RESPONSE(6,8)<4;4,1> + mov (4) uwDEST_Y(20,0)<4> uwAVS_RESPONSE(6,4)<4;4,1> + mov (4) uwDEST_Y(21,0)<4> uwAVS_RESPONSE(6,12)<4;4,1> + mov (4) uwDEST_Y(24,0)<4> uwAVS_RESPONSE(7,0)<4;4,1> + mov (4) uwDEST_Y(25,0)<4> uwAVS_RESPONSE(7,8)<4;4,1> + mov (4) uwDEST_Y(28,0)<4> uwAVS_RESPONSE(7,4)<4;4,1> + mov (4) uwDEST_Y(29,0)<4> uwAVS_RESPONSE(7,12)<4;4,1> + +// Move first 8x8 words of V to dest GRF (as packed) + mov (4) uwDEST_Y(0,2)<4> uwAVS_RESPONSE(8,0)<4;4,1> + mov (4) uwDEST_Y(1,2)<4> uwAVS_RESPONSE(8,8)<4;4,1> + mov (4) uwDEST_Y(4,2)<4> uwAVS_RESPONSE(8,4)<4;4,1> + mov (4) uwDEST_Y(5,2)<4> uwAVS_RESPONSE(8,12)<4;4,1> + mov (4) uwDEST_Y(8,2)<4> uwAVS_RESPONSE(9,0)<4;4,1> + mov (4) uwDEST_Y(9,2)<4> uwAVS_RESPONSE(9,8)<4;4,1> + mov (4) uwDEST_Y(12,2)<4> uwAVS_RESPONSE(9,4)<4;4,1> + mov (4) uwDEST_Y(13,2)<4> uwAVS_RESPONSE(9,12)<4;4,1> + mov (4) uwDEST_Y(16,2)<4> uwAVS_RESPONSE(10,0)<4;4,1> + mov (4) uwDEST_Y(17,2)<4> uwAVS_RESPONSE(10,8)<4;4,1> + mov (4) uwDEST_Y(20,2)<4> uwAVS_RESPONSE(10,4)<4;4,1> + mov (4) uwDEST_Y(21,2)<4> uwAVS_RESPONSE(10,12)<4;4,1> + mov (4) uwDEST_Y(24,2)<4> uwAVS_RESPONSE(11,0)<4;4,1> + mov (4) uwDEST_Y(25,2)<4> uwAVS_RESPONSE(11,8)<4;4,1> + mov (4) uwDEST_Y(28,2)<4> uwAVS_RESPONSE(11,4)<4;4,1> + mov (4) uwDEST_Y(29,2)<4> uwAVS_RESPONSE(11,12)<4;4,1> + +// Move first 8x8 words of A to dest GRF (as packed) + mov (4) uwDEST_Y(0,3)<4> 0:uw + mov (4) uwDEST_Y(1,3)<4> 0:uw + mov (4) uwDEST_Y(4,3)<4> 0:uw + mov (4) uwDEST_Y(5,3)<4> 0:uw + mov (4) uwDEST_Y(8,3)<4> 0:uw + mov (4) uwDEST_Y(9,3)<4> 0:uw + mov (4) uwDEST_Y(12,3)<4> 0:uw + mov (4) uwDEST_Y(13,3)<4> 0:uw + mov (4) uwDEST_Y(16,3)<4> 0:uw + mov (4) uwDEST_Y(17,3)<4> 0:uw + mov (4) uwDEST_Y(20,3)<4> 0:uw + mov (4) uwDEST_Y(21,3)<4> 0:uw + mov (4) uwDEST_Y(24,3)<4> 0:uw + mov (4) uwDEST_Y(25,3)<4> 0:uw + mov (4) uwDEST_Y(28,3)<4> 0:uw + mov (4) uwDEST_Y(29,3)<4> 0:uw + +// Move second 8x8 words of Y to dest GRF + mov (4) uwDEST_Y(2,1)<4> uwAVS_RESPONSE_2(0,0)<4;4,1> + mov (4) uwDEST_Y(3,1)<4> uwAVS_RESPONSE_2(0,8)<4;4,1> + mov (4) uwDEST_Y(6,1)<4> uwAVS_RESPONSE_2(0,4)<4;4,1> + mov (4) uwDEST_Y(7,1)<4> uwAVS_RESPONSE_2(0,12)<4;4,1> + mov (4) uwDEST_Y(10,1)<4> uwAVS_RESPONSE_2(1,0)<4;4,1> + mov (4) uwDEST_Y(11,1)<4> uwAVS_RESPONSE_2(1,8)<4;4,1> + mov (4) uwDEST_Y(14,1)<4> uwAVS_RESPONSE_2(1,4)<4;4,1> + mov (4) uwDEST_Y(15,1)<4> uwAVS_RESPONSE_2(1,12)<4;4,1> + mov (4) uwDEST_Y(18,1)<4> uwAVS_RESPONSE_2(2,0)<4;4,1> + mov (4) uwDEST_Y(19,1)<4> uwAVS_RESPONSE_2(2,8)<4;4,1> + mov (4) uwDEST_Y(22,1)<4> uwAVS_RESPONSE_2(2,4)<4;4,1> + mov (4) uwDEST_Y(23,1)<4> uwAVS_RESPONSE_2(2,12)<4;4,1> + mov (4) uwDEST_Y(26,1)<4> uwAVS_RESPONSE_2(3,0)<4;4,1> + mov (4) uwDEST_Y(27,1)<4> uwAVS_RESPONSE_2(3,8)<4;4,1> + mov (4) uwDEST_Y(30,1)<4> uwAVS_RESPONSE_2(3,4)<4;4,1> + mov (4) uwDEST_Y(31,1)<4> uwAVS_RESPONSE_2(3,12)<4;4,1> + +// Move second 8x8 words of U to dest GRF + mov (4) uwDEST_Y(2,0)<4> uwAVS_RESPONSE_2(4,0)<4;4,1> + mov (4) uwDEST_Y(3,0)<4> uwAVS_RESPONSE_2(4,8)<4;4,1> + mov (4) uwDEST_Y(6,0)<4> uwAVS_RESPONSE_2(4,4)<4;4,1> + mov (4) uwDEST_Y(7,0)<4> uwAVS_RESPONSE_2(4,12)<4;4,1> + mov (4) uwDEST_Y(10,0)<4> uwAVS_RESPONSE_2(5,0)<4;4,1> + mov (4) uwDEST_Y(11,0)<4> uwAVS_RESPONSE_2(5,8)<4;4,1> + mov (4) uwDEST_Y(14,0)<4> uwAVS_RESPONSE_2(5,4)<4;4,1> + mov (4) uwDEST_Y(15,0)<4> uwAVS_RESPONSE_2(5,12)<4;4,1> + mov (4) uwDEST_Y(18,0)<4> uwAVS_RESPONSE_2(6,0)<4;4,1> + mov (4) uwDEST_Y(19,0)<4> uwAVS_RESPONSE_2(6,8)<4;4,1> + mov (4) uwDEST_Y(22,0)<4> uwAVS_RESPONSE_2(6,4)<4;4,1> + mov (4) uwDEST_Y(23,0)<4> uwAVS_RESPONSE_2(6,12)<4;4,1> + mov (4) uwDEST_Y(26,0)<4> uwAVS_RESPONSE_2(7,0)<4;4,1> + mov (4) uwDEST_Y(27,0)<4> uwAVS_RESPONSE_2(7,8)<4;4,1> + mov (4) uwDEST_Y(30,0)<4> uwAVS_RESPONSE_2(7,4)<4;4,1> + mov (4) uwDEST_Y(31,0)<4> uwAVS_RESPONSE_2(7,12)<4;4,1> + +// Move second 8x8 words of V to dest GRF + mov (4) uwDEST_Y(2,2)<4> uwAVS_RESPONSE_2(8,0)<4;4,1> + mov (4) uwDEST_Y(3,2)<4> uwAVS_RESPONSE_2(8,8)<4;4,1> + mov (4) uwDEST_Y(6,2)<4> uwAVS_RESPONSE_2(8,4)<4;4,1> + mov (4) uwDEST_Y(7,2)<4> uwAVS_RESPONSE_2(8,12)<4;4,1> + mov (4) uwDEST_Y(10,2)<4> uwAVS_RESPONSE_2(9,0)<4;4,1> + mov (4) uwDEST_Y(11,2)<4> uwAVS_RESPONSE_2(9,8)<4;4,1> + mov (4) uwDEST_Y(14,2)<4> uwAVS_RESPONSE_2(9,4)<4;4,1> + mov (4) uwDEST_Y(15,2)<4> uwAVS_RESPONSE_2(9,12)<4;4,1> + mov (4) uwDEST_Y(18,2)<4> uwAVS_RESPONSE_2(10,0)<4;4,1> + mov (4) uwDEST_Y(19,2)<4> uwAVS_RESPONSE_2(10,8)<4;4,1> + mov (4) uwDEST_Y(22,2)<4> uwAVS_RESPONSE_2(10,4)<4;4,1> + mov (4) uwDEST_Y(23,2)<4> uwAVS_RESPONSE_2(10,12)<4;4,1> + mov (4) uwDEST_Y(26,2)<4> uwAVS_RESPONSE_2(11,0)<4;4,1> + mov (4) uwDEST_Y(27,2)<4> uwAVS_RESPONSE_2(11,8)<4;4,1> + mov (4) uwDEST_Y(30,2)<4> uwAVS_RESPONSE_2(11,4)<4;4,1> + mov (4) uwDEST_Y(31,2)<4> uwAVS_RESPONSE_2(11,12)<4;4,1> + +// Move second 8x8 words of A to dest GRF + mov (4) uwDEST_Y(2,3)<4> 0:uw + mov (4) uwDEST_Y(3,3)<4> 0:uw + mov (4) uwDEST_Y(6,3)<4> 0:uw + mov (4) uwDEST_Y(7,3)<4> 0:uw + mov (4) uwDEST_Y(10,3)<4> 0:uw + mov (4) uwDEST_Y(11,3)<4> 0:uw + mov (4) uwDEST_Y(14,3)<4> 0:uw + mov (4) uwDEST_Y(15,3)<4> 0:uw + mov (4) uwDEST_Y(18,3)<4> 0:uw + mov (4) uwDEST_Y(19,3)<4> 0:uw + mov (4) uwDEST_Y(22,3)<4> 0:uw + mov (4) uwDEST_Y(23,3)<4> 0:uw + mov (4) uwDEST_Y(26,3)<4> 0:uw + mov (4) uwDEST_Y(27,3)<4> 0:uw + mov (4) uwDEST_Y(30,3)<4> 0:uw + mov (4) uwDEST_Y(31,3)<4> 0:uw + +/* This section will be used if 16-bit output is needed in planar format -vK + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> uwAVS_RESPONSE(%1)<8;4,1> + mov (8) uwDEST_Y(%1*2+1)<1> uwAVS_RESPONSE(%1,8)<8;4,1> + } + + // Move 8x8 words of U to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_U(%1*2)<1> uwAVS_RESPONSE(%1+4)<8;4,1> + mov (8) uwDEST_U(%1*2+1)<1> uwAVS_RESPONSE(%1+4,8)<8;4,1> + } + + // Move 8x8 words of V to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_V(%1*2)<1> uwAVS_RESPONSE(%1+8)<8;4,1> + mov (8) uwDEST_V(%1*2+1)<1> uwAVS_RESPONSE(%1+8,8)<8;4,1> + } + + // Move 2nd 8x8 words of Y to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> uwAVS_RESPONSE_2(%1)<8;4,1> + mov (8) uwDEST_Y(%1*2+1,8)<1> uwAVS_RESPONSE_2(%1,8)<8;4,1> + } + + // Move 2nd 8x8 words of U to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_U(%1*2,8)<1> uwAVS_RESPONSE_2(%1+4)<8;4,1> + mov (8) uwDEST_U(%1*2+1,8)<1> uwAVS_RESPONSE_2(%1+4,8)<8;4,1> + } + + // Move 2nd 8x8 words of V to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_V(%1*2,8)<1> uwAVS_RESPONSE_2(%1+8)<8;4,1> + mov (8) uwDEST_V(%1*2+1,8)<1> uwAVS_RESPONSE_2(%1+8,8)<8;4,1> + } +*/ +#else /* OUTPUT_8_BIT */ + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x8 words of U to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_U(%1*2)<1> ubAVS_RESPONSE(%1+4,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_U(%1*2+1)<1> ubAVS_RESPONSE(%1+4,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x8 words of V to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_V(%1*2)<1> ubAVS_RESPONSE(%1+8,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_V(%1*2+1)<1> ubAVS_RESPONSE(%1+8,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE_2(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 2nd 8x8 words of U to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_U(%1*2,8)<1> ubAVS_RESPONSE_2(%1+4,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_U(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1+4,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 2nd 8x8 words of V to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_V(%1*2,8)<1> ubAVS_RESPONSE_2(%1+8,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_V(%1*2+1,8)<1> ubAVS_RESPONSE_2(%1+8,8+1)<16;4,2> // Copy high byte in a word + } +#endif +//------------------------------------------------------------------------------ + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x4.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x4.asm new file mode 100644 index 000000000..aeff3afe0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x4.asm @@ -0,0 +1,75 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_Unpack_8x4.asm ---------- + + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x4 words of U to dest GRF (Copy high byte in a word) + mov (8) uwDEST_U(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) uwDEST_U(0,8)<1> ubAVS_RESPONSE(4,9)<16;4,2> + mov (8) uwDEST_U(1)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) uwDEST_U(1,8)<1> ubAVS_RESPONSE(5,9)<16;4,2> + + // Move 8x4 words of V to dest GRF + mov (8) uwDEST_V(0)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) uwDEST_V(0,8)<1> ubAVS_RESPONSE(8,9)<16;4,2> + mov (8) uwDEST_V(1)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) uwDEST_V(1,8)<1> ubAVS_RESPONSE(9,9)<16;4,2> + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE(%1+12,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE(%1+12,8+1)<16;4,2> // Copy high byte in a word + } + +//------------------------------------------------------------------------------ + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 4 + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x8.asm new file mode 100644 index 000000000..e7066f9f3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_AVS_IEF_Unpack_8x8.asm @@ -0,0 +1,74 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_AVS_IEF_Unpack_8x8.asm ---------- + + // Move 1st 8x8 words of Y to dest GRF at lower 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2)<1> ubAVS_RESPONSE(%1,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1)<1> ubAVS_RESPONSE(%1,8+1)<16;4,2> // Copy high byte in a word + } + // Move 8x8 words of U to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_U(%1)<1> ubAVS_RESPONSE(%1+4,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_U(%1,8)<1> ubAVS_RESPONSE(%1+4,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 8x8 words of V to dest GRF + $for(0; <8/2; 1) { + mov (8) uwDEST_V(%1)<1> ubAVS_RESPONSE(%1+8,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_V(%1,8)<1> ubAVS_RESPONSE(%1+8,8+1)<16;4,2> // Copy high byte in a word + } + + // Move 2nd 8x8 words of Y to dest GRF at higher 8 words of each RGF. + $for(0; <8/2; 1) { + mov (8) uwDEST_Y(%1*2,8)<1> ubAVS_RESPONSE(%1+12,1)<16;4,2> // Copy high byte in a word + mov (8) uwDEST_Y(%1*2+1,8)<1> ubAVS_RESPONSE(%1+12,8+1)<16;4,2> // Copy high byte in a word + } + +//------------------------------------------------------------------------------ + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_Scaling.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_Scaling.asm new file mode 100644 index 000000000..a0946cd79 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL3_Scaling.asm @@ -0,0 +1,102 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- PL3_Scaling.asm ---------- +#include "Scaling.inc" + + // Build 16 elements ramp in float32 and normalized it +// mov (8) SAMPLER_RAMP(0)<1> 0x76543210:v +// add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f +mov (4) SAMPLER_RAMP(0)<1> 0x48403000:vf { NoDDClr }//3, 2, 1, 0 in float vector +mov (4) SAMPLER_RAMP(0,4)<1> 0x5C585450:vf { NoDDChk }//7, 6, 5, 4 in float vector +add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f + + +//Module: PrepareScaleCoord.asm + + // Setup for sampler msg hdr + mov (2) rMSGSRC.0<1>:ud 0:ud { NoDDClr } // Unused fields + mov (1) rMSGSRC.2<1>:ud 0:ud { NoDDChk } // Write and offset + + // Calculate 16 v based on the step Y and vertical origin + mov (16) mfMSGPAYLOAD(2)<1> fSRC_VID_V_ORI<0;1,0>:f + mov (16) SCALE_COORD_Y<1>:f fSRC_VID_V_ORI<0;1,0>:f + + // Calculate 16 u based on the step X and hori origin +// line (16) mfMSGPAYLOAD(0)<1> SCALE_STEP_X<0;1,0>:f SAMPLER_RAMP(0) // Assign to mrf directly + mov (16) acc0:f fSRC_VID_H_ORI<0;1,0>:f { Compr } + mac (16) mfMSGPAYLOAD(0)<1> fVIDEO_STEP_X<0;1,0>:f SAMPLER_RAMP(0) { Compr } + + //Setup the constants for line instruction + mov (1) SCALE_LINE_P255<1>:f 255.0:f { NoDDClr } //{ NoDDClr, NoDDChk } + mov (1) SCALE_LINE_P0_5<1>:f 0.5:f { NoDDChk } + +//------------------------------------------------------------------------------ + +$for (0; :ud rMSGSRC<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (16) SCALE_RESPONSE_VW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_V+nBI_CURRENT_SRC_V + send (16) SCALE_RESPONSE_YW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_Y+nBI_CURRENT_SRC_Y + send (16) SCALE_RESPONSE_UW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_U+nBI_CURRENT_SRC_U + + // Calculate 16 v for next line + add (16) mfMSGPAYLOAD(2)<1> SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + add (16) SCALE_COORD_Y<1>:f SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + + // Scale back to [0, 255], convert f to ud + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_VF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_VD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_UF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_UD(0)<1> acc0:f { Compr } + + mov (16) DEST_V(%1)<1> SCALE_RESPONSE_VB(0) //possible error due to truncation - vK + mov (16) DEST_Y(%1)<1> SCALE_RESPONSE_YB(0) //possible error due to truncation - vK + mov (16) DEST_U(%1)<1> SCALE_RESPONSE_UB(0) //possible error due to truncation - vK + +} + + #define nSRC_REGION nREGION_1 + +//------------------------------------------------------------------------------ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG.asm new file mode 100644 index 000000000..b5e91199e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG.asm @@ -0,0 +1,115 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #ifdef DI_ONLY + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DI // set the number of GRF + #else + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #endif + + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // DN Block Size for Write is 16x4 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_Command.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR_NODDCHK // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud NODDCHK // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +#ifdef DI_ONLY +#else + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Save the DN Curr Frame for Next Run //////////////////////// + + //set the save DN parameters + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w NODDCLR // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud NODDCLR_NODDCHK // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + + // check top/bottom field first + cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w + (f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 2nd field luma from current frame (line 0,2) + } + $for (0,0; udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,4)<4;4,1> // 1st field luma from current frame (line 1,3) + } + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0)<4;4,1> // 2nd field luma from current frame (line 0,2) + } + $for (0,0; udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 1st field luma from current frame (line 1,3) + } + +SAVE_DN_CURR: + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_Y:ud +#endif + +// Save Processed frames +#include "DI_Save_PA.asm" + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV11.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV11.asm new file mode 100644 index 000000000..e69ed1d89 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV11.asm @@ -0,0 +1,133 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #undef nY_NUM_OF_ROWS + #define nY_NUM_OF_ROWS 8 // Number of Y rows per block (4 rows for each frame) + #undef nUV_NUM_OF_ROWS + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // DN Block Size for Write is 16x4 + #undef nDPR_BLOCK_SIZE_UV + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_4 // DN Block Size for UV Write/Read is 8x4 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_Command.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + // move the previous frame Y component to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + // move the previous frame U,V components to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + // move the current frame Y component to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + // move the current frame U,V components to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Save the DN Curr Frame for Next Run //////////////////////// + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub npDN_YUV:w + // check top/bottom field first + cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w + (f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,4)<4;4,1> // 1st field luma from current frame (line 1,3) + } + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 1st field luma from current frame (line 1,3) + } +SAVE_DN_CURR: + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_Y:ud + + +/////////////////////////////P208 UV Copy 422///////////////////////////////////////////////////// + //Read UV through DATAPORT + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin + asr (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (16x2) + mov (8) mudMSGHDR_DN<1> rMSGSRC<8;8,1>:ud + send (8) udBOT_U_IO(0)<1> mMSGHDR_DN udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nRESLEN_1+nBI_CURRENT_SRC_UV:ud + + //Write UV through DATAPORT + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + asr (1) rMSGSRC.0<1>:d rMSGSRC.0<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // block width and height (16x2) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + mov (8) mudMSGHDR_DN(1)<1> udBOT_U_IO(0)<8;8,1> + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nMSGLEN_1+nBI_DESTINATION_UV:ud \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV12.asm new file mode 100644 index 000000000..94b5674ae --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_NV12.asm @@ -0,0 +1,137 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #undef nY_NUM_OF_ROWS + #define nY_NUM_OF_ROWS 8 // Number of Y rows per block (4 rows for each frame) + #undef nUV_NUM_OF_ROWS + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // DN Block Size for Write is 16x4 + #undef nDPR_BLOCK_SIZE_UV + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_16+nBLOCK_HEIGHT_2 // DN Block Size for UV Write/Read is 16x2 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_COMMAND.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + // move the previous frame Y component to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + // move the previous frame U,V components to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + // move the current frame Y component to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + // move the current frame U,V components to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Save the DN Curr Frame for Next Run //////////////////////// + // previous frame + $for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_Y:ud + + //Write UV through DATAPORT + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // block width and height (16x2) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + + mov (8) mubMSGHDR_DN(1, 0)<2> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET, 1)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 1)<2> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET, 16)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 16)<2> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET+1, 1)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 17)<2> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET+1, 16)<16 ;8,2> + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nMSGLEN_1+nBI_DESTINATION_UV:ud + + // current frame + $for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_1_Y:ud + + //Write UV through DATAPORT + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + asr (1) rMSGSRC.1<1>:d rMSGSRC.1<0;1,0>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // block width and height (16x2) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + + mov (8) mubMSGHDR_DN(1, 0)<2> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET, 1)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 1)<2> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET, 16)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 16)<2> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+1, 1)<16 ;8,2> + mov (8) mubMSGHDR_DN(1, 17)<2> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+1, 16)<16 ;8,2> + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nMSGLEN_1+nBI_DESTINATION_1_UV:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_P208.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_P208.asm new file mode 100644 index 000000000..13776385b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_P208.asm @@ -0,0 +1,131 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #undef nY_NUM_OF_ROWS + #define nY_NUM_OF_ROWS 8 // Number of Y rows per block (4 rows for each frame) + #undef nUV_NUM_OF_ROWS + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // DN Block Size for Write is 16x4 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_Command.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + // move the previous frame Y component to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + // move the previous frame U,V components to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + // move the current frame Y component to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + // move the current frame U,V components to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Save the DN Curr Frame for Next Run //////////////////////// + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub npDN_YUV:w + // check top/bottom field first + cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w + (f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,4)<4;4,1> // 1st field luma from current frame (line 1,3) + } + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 1st field luma from current frame (line 1,3) + } +SAVE_DN_CURR: + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_Y:ud + + +/////////////////////////////P208 UV Copy 422///////////////////////////////////////////////////// + //Read UV through DATAPORT + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // Y Block width and height (16x4) (U/V block size is the same) + mov (8) mudMSGHDR_DN<1> rMSGSRC<8;8,1>:ud + send (8) udBOT_U_IO(0)<1> mMSGHDR_DN udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nRESLEN_2+nBI_CURRENT_SRC_UV:ud + + //Write UV through DATAPORT + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + mov (8) mudMSGHDR_DN(1)<1> udBOT_U_IO(0)<8;8,1> + mov (8) mudMSGHDR_DN(2)<1> udBOT_U_IO(1)<8;8,1> + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_UV:ud + \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_PL3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_PL3.asm new file mode 100644 index 000000000..e371575b9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DNDI_ALG_UVCopy_PL3.asm @@ -0,0 +1,136 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_ENABLE + + #include "DNDI.inc" + + #undef nY_NUM_OF_ROWS + #define nY_NUM_OF_ROWS 8 // Number of Y rows per block (4 rows for each frame) + #undef nUV_NUM_OF_ROWS + #define nUV_NUM_OF_ROWS 8 // Number of U/V rows per block + + #undef nSMPL_RESP_LEN + #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF + #undef nDPW_BLOCK_SIZE_HIST + #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 + #undef nDPW_BLOCK_SIZE_DN + #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_4 // DN Block Size for Write is 16x4 + #undef nDPR_BLOCK_SIZE_UV + #define nDPR_BLOCK_SIZE_UV nBLOCK_WIDTH_8+nBLOCK_HEIGHT_2 // DN Block Size for UV Write/Read is 8x2 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// + #include "DNDI_Command.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// + // move the previous frame Y component to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) + } + // move the previous frame U,V components to internal planar format + $for (0; ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + // move the current frame Y component to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) + } + // move the current frame U,V components to internal planar format + $for (0; ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels + mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels + } + +////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// + // Write STMM to memory + shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w // X origin / 2 + mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w // Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud // block width and height (8x4) + mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header + mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF + send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// + #include "DI_Hist_Save.asm" + +////////////////////////////////////// Save the DN Curr Frame for Next Run //////////////////////// + add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub npDN_YUV:w + // check top/bottom field first + cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w + (f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,4)<4;4,1> // 1st field luma from current frame (line 1,3) + } + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + $for (0,0; udRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0)<4;4,1> // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN(1,%1*4+4)<1> udRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*4)<4;4,1> // 1st field luma from current frame (line 1,3) + } +SAVE_DN_CURR: + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud // block width and height (16x4) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PL_DN_DI+nBI_DESTINATION_Y:ud + + +/////////////////////////////IMC3 UV Copy 422///////////////////////////////////////////////////// + //Read UV through DATAPORT + add (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w wSRC_H_ORI_OFFSET<2;2,1>:w // Source Y Block origin + asr (2) rMSGSRC.0<1>:d rMSGSRC.0<2;2,1>:d 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // U/V block width and height (8x2) + mov (8) mudMSGHDR_DN<1> rMSGSRC<8;8,1>:ud + send (4) udBOT_U_IO(0)<1> mMSGHDR_DN udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nRESLEN_1+nBI_CURRENT_SRC_U:ud + send (4) udBOT_V_IO(0)<1> mMSGHDR_DN udDUMMY_NULL nDATAPORT_READ nDPMR_MSGDSC+nRESLEN_1+nBI_CURRENT_SRC_V:ud + + //Write UV through DATAPORT + mov (2) rMSGSRC.0<1>:ud wORIX<2;2,1>:w // X origin and Y origin + asr (2) rMSGSRC.0<1>:d wORIX<2;2,1>:w 1:w // U/V block origin should be half of Y's + mov (1) rMSGSRC.2<1>:ud nDPR_BLOCK_SIZE_UV:ud // block width and height (8x2) + mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud + mov (4) mudMSGHDR_DN(1)<1> udBOT_U_IO(0)<4;4,1> + send (4) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nMSGLEN_1+nBI_DESTINATION_U:ud + mov (4) mudMSGHDR_DN(1)<1> udBOT_V_IO(0)<4;4,1> + send (4) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nMSGLEN_1+nBI_DESTINATION_V:ud \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DN_ALG.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DN_ALG.asm new file mode 100644 index 000000000..2df3ce254 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/PL_DN_ALG.asm @@ -0,0 +1,65 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#define DI_DISABLE + +#include "DNDI.inc" + +#undef nY_NUM_OF_ROWS +#define nY_NUM_OF_ROWS 8 // Number of Y rows per block + +#undef nSMPL_RESP_LEN +#define nSMPL_RESP_LEN nSMPL_RESP_LEN_DN_PL // Set the Number of GRFs in DNDI response +#undef nDPW_BLOCK_SIZE_DN +#define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_16+nBLOCK_HEIGHT_8 // DN Curr Block Size for Write is 16x8 +#undef nDPW_BLOCK_SIZE_HIST +#define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_2 // HIST Block Size for Write is 4x2 + +////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// +#include "DNDI_COMMAND.asm" + +////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// +$for (0; ubRESP(nNODI_LUMA_OFFSET,%1*16)<16;16,1> // copy line of Y +} + +////////////////////////////////////// Save the History Data for Next Run ///////////////////////// +#include "DNDI_Hist_Save.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_16x8.asm new file mode 100644 index 000000000..2d799dc8a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_16x8.asm @@ -0,0 +1,63 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- RGB_AVS_IEF_16x8.asm ---------- + +#include "AVS_IEF.inc" + +//------------------------------------------------------------------------------ +// 2 sampler reads for 8x8 ARGB packed +//------------------------------------------------------------------------------ + + // 1st 8x8 setup + #include "AVS_SetupFirstBlock.asm" + + mov (1) rAVS_8x8_HDR.2:ud nAVS_ALL_CHANNELS:ud // Enable ARGB channels + mov (16) mAVS_8x8_HDR.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE(0)<1> mAVS_8x8_HDR udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_4CH+nSI_SRC_RGB+nBI_CURRENT_SRC_YUV + // Return ARGB in 16 GRFs + + // 2nd 8x8 setup + #include "AVS_SetupSecondBlock.asm" + mov (16) mAVS_8x8_HDR_2.0:ud rAVS_8x8_HDR.0<8;8,1>:ud // Copy msg header and payload mirrors to MRFs + send (1) uwAVS_RESPONSE_2(0)<1> mAVS_8x8_HDR_2 udDUMMY_NULL nSMPL_ENGINE nAVS_MSG_DSC_4CH+nSI_SRC_RGB+nBI_CURRENT_SRC_YUV + // Return ARGB in 16 GRFs + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unpack_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unpack_16x8.asm new file mode 100644 index 000000000..f40bc61c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unpack_16x8.asm @@ -0,0 +1,281 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- RGB_AVS_IEF_Unpack_16x8.asm ---------- +#include "AVS_IEF.inc" + +#ifdef AVS_OUTPUT_16_BIT +// Move first 8x8 words of B to dest GRF (as packed) + mov (4) uwDEST_Y(0,2)<4> uwAVS_RESPONSE(4,0)<4;4,1> + mov (4) uwDEST_Y(1,2)<4> uwAVS_RESPONSE(4,8)<4;4,1> + mov (4) uwDEST_Y(4,2)<4> uwAVS_RESPONSE(4,4)<4;4,1> + mov (4) uwDEST_Y(5,2)<4> uwAVS_RESPONSE(4,12)<4;4,1> + mov (4) uwDEST_Y(8,2)<4> uwAVS_RESPONSE(5,0)<4;4,1> + mov (4) uwDEST_Y(9,2)<4> uwAVS_RESPONSE(5,8)<4;4,1> + mov (4) uwDEST_Y(12,2)<4> uwAVS_RESPONSE(5,4)<4;4,1> + mov (4) uwDEST_Y(13,2)<4> uwAVS_RESPONSE(5,12)<4;4,1> + mov (4) uwDEST_Y(16,2)<4> uwAVS_RESPONSE(12,0)<4;4,1> + mov (4) uwDEST_Y(17,2)<4> uwAVS_RESPONSE(12,8)<4;4,1> + mov (4) uwDEST_Y(20,2)<4> uwAVS_RESPONSE(12,4)<4;4,1> + mov (4) uwDEST_Y(21,2)<4> uwAVS_RESPONSE(12,12)<4;4,1> + mov (4) uwDEST_Y(24,2)<4> uwAVS_RESPONSE(13,0)<4;4,1> + mov (4) uwDEST_Y(25,2)<4> uwAVS_RESPONSE(13,8)<4;4,1> + mov (4) uwDEST_Y(28,2)<4> uwAVS_RESPONSE(13,4)<4;4,1> + mov (4) uwDEST_Y(29,2)<4> uwAVS_RESPONSE(13,12)<4;4,1> + +// Move first 8x8 words of G to dest GRF (as packed) + mov (4) uwDEST_Y(0,1)<4> uwAVS_RESPONSE(2,0)<4;4,1> + mov (4) uwDEST_Y(1,1)<4> uwAVS_RESPONSE(2,8)<4;4,1> + mov (4) uwDEST_Y(4,1)<4> uwAVS_RESPONSE(2,4)<4;4,1> + mov (4) uwDEST_Y(5,1)<4> uwAVS_RESPONSE(2,12)<4;4,1> + mov (4) uwDEST_Y(8,1)<4> uwAVS_RESPONSE(3,0)<4;4,1> + mov (4) uwDEST_Y(9,1)<4> uwAVS_RESPONSE(3,8)<4;4,1> + mov (4) uwDEST_Y(12,1)<4> uwAVS_RESPONSE(3,4)<4;4,1> + mov (4) uwDEST_Y(13,1)<4> uwAVS_RESPONSE(3,12)<4;4,1> + mov (4) uwDEST_Y(16,1)<4> uwAVS_RESPONSE(10,0)<4;4,1> + mov (4) uwDEST_Y(17,1)<4> uwAVS_RESPONSE(10,8)<4;4,1> + mov (4) uwDEST_Y(20,1)<4> uwAVS_RESPONSE(10,4)<4;4,1> + mov (4) uwDEST_Y(21,1)<4> uwAVS_RESPONSE(10,12)<4;4,1> + mov (4) uwDEST_Y(24,1)<4> uwAVS_RESPONSE(11,0)<4;4,1> + mov (4) uwDEST_Y(25,1)<4> uwAVS_RESPONSE(11,8)<4;4,1> + mov (4) uwDEST_Y(28,1)<4> uwAVS_RESPONSE(11,4)<4;4,1> + mov (4) uwDEST_Y(29,1)<4> uwAVS_RESPONSE(11,12)<4;4,1> + +// Move first 8x8 words of R to dest GRF (as packed) + mov (4) uwDEST_Y(0,0)<4> uwAVS_RESPONSE(0,0)<4;4,1> + mov (4) uwDEST_Y(1,0)<4> uwAVS_RESPONSE(0,8)<4;4,1> + mov (4) uwDEST_Y(4,0)<4> uwAVS_RESPONSE(0,4)<4;4,1> + mov (4) uwDEST_Y(5,0)<4> uwAVS_RESPONSE(0,12)<4;4,1> + mov (4) uwDEST_Y(8,0)<4> uwAVS_RESPONSE(1,0)<4;4,1> + mov (4) uwDEST_Y(9,0)<4> uwAVS_RESPONSE(1,8)<4;4,1> + mov (4) uwDEST_Y(12,0)<4> uwAVS_RESPONSE(1,4)<4;4,1> + mov (4) uwDEST_Y(13,0)<4> uwAVS_RESPONSE(1,12)<4;4,1> + mov (4) uwDEST_Y(16,0)<4> uwAVS_RESPONSE(8,0)<4;4,1> + mov (4) uwDEST_Y(17,0)<4> uwAVS_RESPONSE(8,8)<4;4,1> + mov (4) uwDEST_Y(20,0)<4> uwAVS_RESPONSE(8,4)<4;4,1> + mov (4) uwDEST_Y(21,0)<4> uwAVS_RESPONSE(8,12)<4;4,1> + mov (4) uwDEST_Y(24,0)<4> uwAVS_RESPONSE(9,0)<4;4,1> + mov (4) uwDEST_Y(25,0)<4> uwAVS_RESPONSE(9,8)<4;4,1> + mov (4) uwDEST_Y(28,0)<4> uwAVS_RESPONSE(9,4)<4;4,1> + mov (4) uwDEST_Y(29,0)<4> uwAVS_RESPONSE(9,12)<4;4,1> + +// Move first 8x8 words of A to dest GRF (as packed) + mov (4) uwDEST_Y(0,3)<4> uwAVS_RESPONSE(6,0)<4;4,1> + mov (4) uwDEST_Y(1,3)<4> uwAVS_RESPONSE(6,8)<4;4,1> + mov (4) uwDEST_Y(4,3)<4> uwAVS_RESPONSE(6,4)<4;4,1> + mov (4) uwDEST_Y(5,3)<4> uwAVS_RESPONSE(6,12)<4;4,1> + mov (4) uwDEST_Y(8,3)<4> uwAVS_RESPONSE(7,0)<4;4,1> + mov (4) uwDEST_Y(9,3)<4> uwAVS_RESPONSE(7,8)<4;4,1> + mov (4) uwDEST_Y(12,3)<4> uwAVS_RESPONSE(7,4)<4;4,1> + mov (4) uwDEST_Y(13,3)<4> uwAVS_RESPONSE(7,12)<4;4,1> + mov (4) uwDEST_Y(16,3)<4> uwAVS_RESPONSE(14,0)<4;4,1> + mov (4) uwDEST_Y(17,3)<4> uwAVS_RESPONSE(14,8)<4;4,1> + mov (4) uwDEST_Y(20,3)<4> uwAVS_RESPONSE(14,4)<4;4,1> + mov (4) uwDEST_Y(21,3)<4> uwAVS_RESPONSE(14,12)<4;4,1> + mov (4) uwDEST_Y(24,3)<4> uwAVS_RESPONSE(15,0)<4;4,1> + mov (4) uwDEST_Y(25,3)<4> uwAVS_RESPONSE(15,8)<4;4,1> + mov (4) uwDEST_Y(28,3)<4> uwAVS_RESPONSE(15,4)<4;4,1> + mov (4) uwDEST_Y(29,3)<4> uwAVS_RESPONSE(15,12)<4;4,1> + +// Move second 8x8 words of B to dest GRF + mov (4) uwDEST_Y(2,2)<4> uwAVS_RESPONSE_2(4,0)<4;4,1> + mov (4) uwDEST_Y(3,2)<4> uwAVS_RESPONSE_2(4,8)<4;4,1> + mov (4) uwDEST_Y(6,2)<4> uwAVS_RESPONSE_2(4,4)<4;4,1> + mov (4) uwDEST_Y(7,2)<4> uwAVS_RESPONSE_2(4,12)<4;4,1> + mov (4) uwDEST_Y(10,2)<4> uwAVS_RESPONSE_2(5,0)<4;4,1> + mov (4) uwDEST_Y(11,2)<4> uwAVS_RESPONSE_2(5,8)<4;4,1> + mov (4) uwDEST_Y(14,2)<4> uwAVS_RESPONSE_2(5,4)<4;4,1> + mov (4) uwDEST_Y(15,2)<4> uwAVS_RESPONSE_2(5,12)<4;4,1> + mov (4) uwDEST_Y(18,2)<4> uwAVS_RESPONSE_2(12,0)<4;4,1> + mov (4) uwDEST_Y(19,2)<4> uwAVS_RESPONSE_2(12,8)<4;4,1> + mov (4) uwDEST_Y(22,2)<4> uwAVS_RESPONSE_2(12,4)<4;4,1> + mov (4) uwDEST_Y(23,2)<4> uwAVS_RESPONSE_2(12,12)<4;4,1> + mov (4) uwDEST_Y(26,2)<4> uwAVS_RESPONSE_2(13,0)<4;4,1> + mov (4) uwDEST_Y(27,2)<4> uwAVS_RESPONSE_2(13,8)<4;4,1> + mov (4) uwDEST_Y(30,2)<4> uwAVS_RESPONSE_2(13,4)<4;4,1> + mov (4) uwDEST_Y(31,2)<4> uwAVS_RESPONSE_2(13,12)<4;4,1> + +// Move second 8x8 words of G to dest GRF + mov (4) uwDEST_Y(2,1)<4> uwAVS_RESPONSE_2(2,0)<4;4,1> + mov (4) uwDEST_Y(3,1)<4> uwAVS_RESPONSE_2(2,8)<4;4,1> + mov (4) uwDEST_Y(6,1)<4> uwAVS_RESPONSE_2(2,4)<4;4,1> + mov (4) uwDEST_Y(7,1)<4> uwAVS_RESPONSE_2(2,12)<4;4,1> + mov (4) uwDEST_Y(10,1)<4> uwAVS_RESPONSE_2(3,0)<4;4,1> + mov (4) uwDEST_Y(11,1)<4> uwAVS_RESPONSE_2(3,8)<4;4,1> + mov (4) uwDEST_Y(14,1)<4> uwAVS_RESPONSE_2(3,4)<4;4,1> + mov (4) uwDEST_Y(15,1)<4> uwAVS_RESPONSE_2(3,12)<4;4,1> + mov (4) uwDEST_Y(18,1)<4> uwAVS_RESPONSE_2(10,0)<4;4,1> + mov (4) uwDEST_Y(19,1)<4> uwAVS_RESPONSE_2(10,8)<4;4,1> + mov (4) uwDEST_Y(22,1)<4> uwAVS_RESPONSE_2(10,4)<4;4,1> + mov (4) uwDEST_Y(23,1)<4> uwAVS_RESPONSE_2(10,12)<4;4,1> + mov (4) uwDEST_Y(26,1)<4> uwAVS_RESPONSE_2(11,0)<4;4,1> + mov (4) uwDEST_Y(27,1)<4> uwAVS_RESPONSE_2(11,8)<4;4,1> + mov (4) uwDEST_Y(30,1)<4> uwAVS_RESPONSE_2(11,4)<4;4,1> + mov (4) uwDEST_Y(31,1)<4> uwAVS_RESPONSE_2(11,12)<4;4,1> + +// Move second 8x8 words of R to dest GRF + mov (4) uwDEST_Y(2,0)<4> uwAVS_RESPONSE_2(0,0)<4;4,1> + mov (4) uwDEST_Y(3,0)<4> uwAVS_RESPONSE_2(0,8)<4;4,1> + mov (4) uwDEST_Y(6,0)<4> uwAVS_RESPONSE_2(0,4)<4;4,1> + mov (4) uwDEST_Y(7,0)<4> uwAVS_RESPONSE_2(0,12)<4;4,1> + mov (4) uwDEST_Y(10,0)<4> uwAVS_RESPONSE_2(1,0)<4;4,1> + mov (4) uwDEST_Y(11,0)<4> uwAVS_RESPONSE_2(1,8)<4;4,1> + mov (4) uwDEST_Y(14,0)<4> uwAVS_RESPONSE_2(1,4)<4;4,1> + mov (4) uwDEST_Y(15,0)<4> uwAVS_RESPONSE_2(1,12)<4;4,1> + mov (4) uwDEST_Y(18,0)<4> uwAVS_RESPONSE_2(8,0)<4;4,1> + mov (4) uwDEST_Y(19,0)<4> uwAVS_RESPONSE_2(8,8)<4;4,1> + mov (4) uwDEST_Y(22,0)<4> uwAVS_RESPONSE_2(8,4)<4;4,1> + mov (4) uwDEST_Y(23,0)<4> uwAVS_RESPONSE_2(8,12)<4;4,1> + mov (4) uwDEST_Y(26,0)<4> uwAVS_RESPONSE_2(9,0)<4;4,1> + mov (4) uwDEST_Y(27,0)<4> uwAVS_RESPONSE_2(9,8)<4;4,1> + mov (4) uwDEST_Y(30,0)<4> uwAVS_RESPONSE_2(9,4)<4;4,1> + mov (4) uwDEST_Y(31,0)<4> uwAVS_RESPONSE_2(9,12)<4;4,1> + +// Move second 8x8 words of A to dest GRF + mov (4) uwDEST_Y(2,3)<4> uwAVS_RESPONSE_2(6,0)<4;4,1> + mov (4) uwDEST_Y(3,3)<4> uwAVS_RESPONSE_2(6,8)<4;4,1> + mov (4) uwDEST_Y(6,3)<4> uwAVS_RESPONSE_2(6,4)<4;4,1> + mov (4) uwDEST_Y(7,3)<4> uwAVS_RESPONSE_2(6,12)<4;4,1> + mov (4) uwDEST_Y(10,3)<4> uwAVS_RESPONSE_2(7,0)<4;4,1> + mov (4) uwDEST_Y(11,3)<4> uwAVS_RESPONSE_2(7,8)<4;4,1> + mov (4) uwDEST_Y(14,3)<4> uwAVS_RESPONSE_2(7,4)<4;4,1> + mov (4) uwDEST_Y(15,3)<4> uwAVS_RESPONSE_2(7,12)<4;4,1> + mov (4) uwDEST_Y(18,3)<4> uwAVS_RESPONSE_2(14,0)<4;4,1> + mov (4) uwDEST_Y(19,3)<4> uwAVS_RESPONSE_2(14,8)<4;4,1> + mov (4) uwDEST_Y(22,3)<4> uwAVS_RESPONSE_2(14,4)<4;4,1> + mov (4) uwDEST_Y(23,3)<4> uwAVS_RESPONSE_2(14,12)<4;4,1> + mov (4) uwDEST_Y(26,3)<4> uwAVS_RESPONSE_2(15,0)<4;4,1> + mov (4) uwDEST_Y(27,3)<4> uwAVS_RESPONSE_2(15,8)<4;4,1> + mov (4) uwDEST_Y(30,3)<4> uwAVS_RESPONSE_2(15,4)<4;4,1> + mov (4) uwDEST_Y(31,3)<4> uwAVS_RESPONSE_2(15,12)<4;4,1> + +#else /* OUTPUT_8_BIT */ +// Move first 8x8 words of B to dest GRF + mov (8) ubDEST_Y(0,2)<4> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) ubDEST_Y(2,2)<4> ubAVS_RESPONSE(4,8+1)<16;4,2> + mov (8) ubDEST_Y(4,2)<4> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) ubDEST_Y(6,2)<4> ubAVS_RESPONSE(5,8+1)<16;4,2> + mov (8) ubDEST_Y(8,2)<4> ubAVS_RESPONSE(12,1)<16;4,2> + mov (8) ubDEST_Y(10,2)<4> ubAVS_RESPONSE(12,8+1)<16;4,2> + mov (8) ubDEST_Y(12,2)<4> ubAVS_RESPONSE(13,1)<16;4,2> + mov (8) ubDEST_Y(14,2)<4> ubAVS_RESPONSE(13,8+1)<16;4,2> + +// Move first 8x8 words of G to dest GRF + mov (8) ubDEST_Y(0,1)<4> ubAVS_RESPONSE(2,1)<16;4,2> + mov (8) ubDEST_Y(2,1)<4> ubAVS_RESPONSE(2,8+1)<16;4,2> + mov (8) ubDEST_Y(4,1)<4> ubAVS_RESPONSE(3,1)<16;4,2> + mov (8) ubDEST_Y(6,1)<4> ubAVS_RESPONSE(3,8+1)<16;4,2> + mov (8) ubDEST_Y(8,1)<4> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) ubDEST_Y(10,1)<4> ubAVS_RESPONSE(10,8+1)<16;4,2> + mov (8) ubDEST_Y(12,1)<4> ubAVS_RESPONSE(11,1)<16;4,2> + mov (8) ubDEST_Y(14,1)<4> ubAVS_RESPONSE(11,8+1)<16;4,2> + +// Move first 8x8 words of R to dest GRF + mov (8) ubDEST_Y(0,0)<4> ubAVS_RESPONSE(0,1)<16;4,2> + mov (8) ubDEST_Y(2,0)<4> ubAVS_RESPONSE(0,8+1)<16;4,2> + mov (8) ubDEST_Y(4,0)<4> ubAVS_RESPONSE(1,1)<16;4,2> + mov (8) ubDEST_Y(6,0)<4> ubAVS_RESPONSE(1,8+1)<16;4,2> + mov (8) ubDEST_Y(8,0)<4> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) ubDEST_Y(10,0)<4> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) ubDEST_Y(12,0)<4> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) ubDEST_Y(14,0)<4> ubAVS_RESPONSE(9,8+1)<16;4,2> + +// Move first 8x8 words of A to dest GRF + mov (8) ubDEST_Y(0,3)<4> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) ubDEST_Y(2,3)<4> ubAVS_RESPONSE(6,8+1)<16;4,2> + mov (8) ubDEST_Y(4,3)<4> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) ubDEST_Y(6,3)<4> ubAVS_RESPONSE(7,8+1)<16;4,2> + mov (8) ubDEST_Y(8,3)<4> ubAVS_RESPONSE(14,1)<16;4,2> + mov (8) ubDEST_Y(10,3)<4> ubAVS_RESPONSE(14,8+1)<16;4,2> + mov (8) ubDEST_Y(12,3)<4> ubAVS_RESPONSE(15,1)<16;4,2> + mov (8) ubDEST_Y(14,3)<4> ubAVS_RESPONSE(15,8+1)<16;4,2> + +// Move second 8x8 words of B to dest GRF + mov (8) ubDEST_Y(1,2)<4> ubAVS_RESPONSE_2(4,1)<16;4,2> + mov (8) ubDEST_Y(3,2)<4> ubAVS_RESPONSE_2(4,8+1)<16;4,2> + mov (8) ubDEST_Y(5,2)<4> ubAVS_RESPONSE_2(5,1)<16;4,2> + mov (8) ubDEST_Y(7,2)<4> ubAVS_RESPONSE_2(5,8+1)<16;4,2> + mov (8) ubDEST_Y(9,2)<4> ubAVS_RESPONSE_2(12,1)<16;4,2> + mov (8) ubDEST_Y(11,2)<4> ubAVS_RESPONSE_2(12,8+1)<16;4,2> + mov (8) ubDEST_Y(13,2)<4> ubAVS_RESPONSE_2(13,1)<16;4,2> + mov (8) ubDEST_Y(15,2)<4> ubAVS_RESPONSE_2(13,8+1)<16;4,2> + +// Move second 8x8 words of G to dest GRF + mov (8) ubDEST_Y(1,1)<4> ubAVS_RESPONSE_2(2,1)<16;4,2> + mov (8) ubDEST_Y(3,1)<4> ubAVS_RESPONSE_2(2,8+1)<16;4,2> + mov (8) ubDEST_Y(5,1)<4> ubAVS_RESPONSE_2(3,1)<16;4,2> + mov (8) ubDEST_Y(7,1)<4> ubAVS_RESPONSE_2(3,8+1)<16;4,2> + mov (8) ubDEST_Y(9,1)<4> ubAVS_RESPONSE_2(10,1)<16;4,2> + mov (8) ubDEST_Y(11,1)<4> ubAVS_RESPONSE_2(10,8+1)<16;4,2> + mov (8) ubDEST_Y(13,1)<4> ubAVS_RESPONSE_2(11,1)<16;4,2> + mov (8) ubDEST_Y(15,1)<4> ubAVS_RESPONSE_2(11,8+1)<16;4,2> + +// Move second 8x8 words of R to dest GRF + mov (8) ubDEST_Y(1,0)<4> ubAVS_RESPONSE_2(0,1)<16;4,2> + mov (8) ubDEST_Y(3,0)<4> ubAVS_RESPONSE_2(0,8+1)<16;4,2> + mov (8) ubDEST_Y(5,0)<4> ubAVS_RESPONSE_2(1,1)<16;4,2> + mov (8) ubDEST_Y(7,0)<4> ubAVS_RESPONSE_2(1,8+1)<16;4,2> + mov (8) ubDEST_Y(9,0)<4> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) ubDEST_Y(11,0)<4> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) ubDEST_Y(13,0)<4> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) ubDEST_Y(15,0)<4> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + +// Move second 8x8 words of A to dest GRF + mov (8) ubDEST_Y(1,3)<4> ubAVS_RESPONSE_2(6,1)<16;4,2> + mov (8) ubDEST_Y(3,3)<4> ubAVS_RESPONSE_2(6,8+1)<16;4,2> + mov (8) ubDEST_Y(5,3)<4> ubAVS_RESPONSE_2(7,1)<16;4,2> + mov (8) ubDEST_Y(7,3)<4> ubAVS_RESPONSE_2(7,8+1)<16;4,2> + mov (8) ubDEST_Y(9,3)<4> ubAVS_RESPONSE_2(14,1)<16;4,2> + mov (8) ubDEST_Y(11,3)<4> ubAVS_RESPONSE_2(14,8+1)<16;4,2> + mov (8) ubDEST_Y(13,3)<4> ubAVS_RESPONSE_2(15,1)<16;4,2> + mov (8) ubDEST_Y(15,3)<4> ubAVS_RESPONSE_2(15,8+1)<16;4,2> +#endif +//------------------------------------------------------------------------------ + + // Set to write bottom region to memory + #define SRC_REGION REGION_2 + + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unscramble_16x8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unscramble_16x8.asm new file mode 100644 index 000000000..0730c0731 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_AVS_IEF_Unscramble_16x8.asm @@ -0,0 +1,290 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- RGB_AVS_IEF_Unpack_16x8.asm ---------- +#include "AVS_IEF.inc" + +.declare DEST_B Base=REG(r,10) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_G Base=REG(r,18) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_R Base=REG(r,26) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_A Base=REG(r,34) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw + + +#ifdef AVS_OUTPUT_16_BIT +//This portion will need to be changed if unpacking is required for Y416 kernels (in case of blending etc) - vK + +//// Move first 8x8 words of B to dest GRF (as packed) +// mov (4) uwDEST_Y(0,2)<4> uwAVS_RESPONSE(4,0)<4;4,1> +// mov (4) uwDEST_Y(1,2)<4> uwAVS_RESPONSE(4,8)<4;4,1> +// mov (4) uwDEST_Y(4,2)<4> uwAVS_RESPONSE(4,4)<4;4,1> +// mov (4) uwDEST_Y(5,2)<4> uwAVS_RESPONSE(4,12)<4;4,1> +// mov (4) uwDEST_Y(8,2)<4> uwAVS_RESPONSE(5,0)<4;4,1> +// mov (4) uwDEST_Y(9,2)<4> uwAVS_RESPONSE(5,8)<4;4,1> +// mov (4) uwDEST_Y(12,2)<4> uwAVS_RESPONSE(5,4)<4;4,1> +// mov (4) uwDEST_Y(13,2)<4> uwAVS_RESPONSE(5,12)<4;4,1> +// mov (4) uwDEST_Y(16,2)<4> uwAVS_RESPONSE(12,0)<4;4,1> +// mov (4) uwDEST_Y(17,2)<4> uwAVS_RESPONSE(12,8)<4;4,1> +// mov (4) uwDEST_Y(20,2)<4> uwAVS_RESPONSE(12,4)<4;4,1> +// mov (4) uwDEST_Y(21,2)<4> uwAVS_RESPONSE(12,12)<4;4,1> +// mov (4) uwDEST_Y(24,2)<4> uwAVS_RESPONSE(13,0)<4;4,1> +// mov (4) uwDEST_Y(25,2)<4> uwAVS_RESPONSE(13,8)<4;4,1> +// mov (4) uwDEST_Y(28,2)<4> uwAVS_RESPONSE(13,4)<4;4,1> +// mov (4) uwDEST_Y(29,2)<4> uwAVS_RESPONSE(13,12)<4;4,1> +// +//// Move first 8x8 words of G to dest GRF (as packed) +// mov (4) uwDEST_Y(0,1)<4> uwAVS_RESPONSE(2,0)<4;4,1> +// mov (4) uwDEST_Y(1,1)<4> uwAVS_RESPONSE(2,8)<4;4,1> +// mov (4) uwDEST_Y(4,1)<4> uwAVS_RESPONSE(2,4)<4;4,1> +// mov (4) uwDEST_Y(5,1)<4> uwAVS_RESPONSE(2,12)<4;4,1> +// mov (4) uwDEST_Y(8,1)<4> uwAVS_RESPONSE(3,0)<4;4,1> +// mov (4) uwDEST_Y(9,1)<4> uwAVS_RESPONSE(3,8)<4;4,1> +// mov (4) uwDEST_Y(12,1)<4> uwAVS_RESPONSE(3,4)<4;4,1> +// mov (4) uwDEST_Y(13,1)<4> uwAVS_RESPONSE(3,12)<4;4,1> +// mov (4) uwDEST_Y(16,1)<4> uwAVS_RESPONSE(10,0)<4;4,1> +// mov (4) uwDEST_Y(17,1)<4> uwAVS_RESPONSE(10,8)<4;4,1> +// mov (4) uwDEST_Y(20,1)<4> uwAVS_RESPONSE(10,4)<4;4,1> +// mov (4) uwDEST_Y(21,1)<4> uwAVS_RESPONSE(10,12)<4;4,1> +// mov (4) uwDEST_Y(24,1)<4> uwAVS_RESPONSE(11,0)<4;4,1> +// mov (4) uwDEST_Y(25,1)<4> uwAVS_RESPONSE(11,8)<4;4,1> +// mov (4) uwDEST_Y(28,1)<4> uwAVS_RESPONSE(11,4)<4;4,1> +// mov (4) uwDEST_Y(29,1)<4> uwAVS_RESPONSE(11,12)<4;4,1> +// +//// Move first 8x8 words of R to dest GRF (as packed) +// mov (4) uwDEST_Y(0,0)<4> uwAVS_RESPONSE(0,0)<4;4,1> +// mov (4) uwDEST_Y(1,0)<4> uwAVS_RESPONSE(0,8)<4;4,1> +// mov (4) uwDEST_Y(4,0)<4> uwAVS_RESPONSE(0,4)<4;4,1> +// mov (4) uwDEST_Y(5,0)<4> uwAVS_RESPONSE(0,12)<4;4,1> +// mov (4) uwDEST_Y(8,0)<4> uwAVS_RESPONSE(1,0)<4;4,1> +// mov (4) uwDEST_Y(9,0)<4> uwAVS_RESPONSE(1,8)<4;4,1> +// mov (4) uwDEST_Y(12,0)<4> uwAVS_RESPONSE(1,4)<4;4,1> +// mov (4) uwDEST_Y(13,0)<4> uwAVS_RESPONSE(1,12)<4;4,1> +// mov (4) uwDEST_Y(16,0)<4> uwAVS_RESPONSE(8,0)<4;4,1> +// mov (4) uwDEST_Y(17,0)<4> uwAVS_RESPONSE(8,8)<4;4,1> +// mov (4) uwDEST_Y(20,0)<4> uwAVS_RESPONSE(8,4)<4;4,1> +// mov (4) uwDEST_Y(21,0)<4> uwAVS_RESPONSE(8,12)<4;4,1> +// mov (4) uwDEST_Y(24,0)<4> uwAVS_RESPONSE(9,0)<4;4,1> +// mov (4) uwDEST_Y(25,0)<4> uwAVS_RESPONSE(9,8)<4;4,1> +// mov (4) uwDEST_Y(28,0)<4> uwAVS_RESPONSE(9,4)<4;4,1> +// mov (4) uwDEST_Y(29,0)<4> uwAVS_RESPONSE(9,12)<4;4,1> +// +//// Move first 8x8 words of A to dest GRF (as packed) +// mov (4) uwDEST_Y(0,3)<4> uwAVS_RESPONSE(6,0)<4;4,1> +// mov (4) uwDEST_Y(1,3)<4> uwAVS_RESPONSE(6,8)<4;4,1> +// mov (4) uwDEST_Y(4,3)<4> uwAVS_RESPONSE(6,4)<4;4,1> +// mov (4) uwDEST_Y(5,3)<4> uwAVS_RESPONSE(6,12)<4;4,1> +// mov (4) uwDEST_Y(8,3)<4> uwAVS_RESPONSE(7,0)<4;4,1> +// mov (4) uwDEST_Y(9,3)<4> uwAVS_RESPONSE(7,8)<4;4,1> +// mov (4) uwDEST_Y(12,3)<4> uwAVS_RESPONSE(7,4)<4;4,1> +// mov (4) uwDEST_Y(13,3)<4> uwAVS_RESPONSE(7,12)<4;4,1> +// mov (4) uwDEST_Y(16,3)<4> uwAVS_RESPONSE(14,0)<4;4,1> +// mov (4) uwDEST_Y(17,3)<4> uwAVS_RESPONSE(14,8)<4;4,1> +// mov (4) uwDEST_Y(20,3)<4> uwAVS_RESPONSE(14,4)<4;4,1> +// mov (4) uwDEST_Y(21,3)<4> uwAVS_RESPONSE(14,12)<4;4,1> +// mov (4) uwDEST_Y(24,3)<4> uwAVS_RESPONSE(15,0)<4;4,1> +// mov (4) uwDEST_Y(25,3)<4> uwAVS_RESPONSE(15,8)<4;4,1> +// mov (4) uwDEST_Y(28,3)<4> uwAVS_RESPONSE(15,4)<4;4,1> +// mov (4) uwDEST_Y(29,3)<4> uwAVS_RESPONSE(15,12)<4;4,1> +// +//// Move second 8x8 words of B to dest GRF +// mov (4) uwDEST_Y(2,2)<4> uwAVS_RESPONSE_2(4,0)<4;4,1> +// mov (4) uwDEST_Y(3,2)<4> uwAVS_RESPONSE_2(4,8)<4;4,1> +// mov (4) uwDEST_Y(6,2)<4> uwAVS_RESPONSE_2(4,4)<4;4,1> +// mov (4) uwDEST_Y(7,2)<4> uwAVS_RESPONSE_2(4,12)<4;4,1> +// mov (4) uwDEST_Y(10,2)<4> uwAVS_RESPONSE_2(5,0)<4;4,1> +// mov (4) uwDEST_Y(11,2)<4> uwAVS_RESPONSE_2(5,8)<4;4,1> +// mov (4) uwDEST_Y(14,2)<4> uwAVS_RESPONSE_2(5,4)<4;4,1> +// mov (4) uwDEST_Y(15,2)<4> uwAVS_RESPONSE_2(5,12)<4;4,1> +// mov (4) uwDEST_Y(18,2)<4> uwAVS_RESPONSE_2(12,0)<4;4,1> +// mov (4) uwDEST_Y(19,2)<4> uwAVS_RESPONSE_2(12,8)<4;4,1> +// mov (4) uwDEST_Y(22,2)<4> uwAVS_RESPONSE_2(12,4)<4;4,1> +// mov (4) uwDEST_Y(23,2)<4> uwAVS_RESPONSE_2(12,12)<4;4,1> +// mov (4) uwDEST_Y(26,2)<4> uwAVS_RESPONSE_2(13,0)<4;4,1> +// mov (4) uwDEST_Y(27,2)<4> uwAVS_RESPONSE_2(13,8)<4;4,1> +// mov (4) uwDEST_Y(30,2)<4> uwAVS_RESPONSE_2(13,4)<4;4,1> +// mov (4) uwDEST_Y(31,2)<4> uwAVS_RESPONSE_2(13,12)<4;4,1> +// +//// Move second 8x8 words of G to dest GRF +// mov (4) uwDEST_Y(2,1)<4> uwAVS_RESPONSE_2(2,0)<4;4,1> +// mov (4) uwDEST_Y(3,1)<4> uwAVS_RESPONSE_2(2,8)<4;4,1> +// mov (4) uwDEST_Y(6,1)<4> uwAVS_RESPONSE_2(2,4)<4;4,1> +// mov (4) uwDEST_Y(7,1)<4> uwAVS_RESPONSE_2(2,12)<4;4,1> +// mov (4) uwDEST_Y(10,1)<4> uwAVS_RESPONSE_2(3,0)<4;4,1> +// mov (4) uwDEST_Y(11,1)<4> uwAVS_RESPONSE_2(3,8)<4;4,1> +// mov (4) uwDEST_Y(14,1)<4> uwAVS_RESPONSE_2(3,4)<4;4,1> +// mov (4) uwDEST_Y(15,1)<4> uwAVS_RESPONSE_2(3,12)<4;4,1> +// mov (4) uwDEST_Y(18,1)<4> uwAVS_RESPONSE_2(10,0)<4;4,1> +// mov (4) uwDEST_Y(19,1)<4> uwAVS_RESPONSE_2(10,8)<4;4,1> +// mov (4) uwDEST_Y(22,1)<4> uwAVS_RESPONSE_2(10,4)<4;4,1> +// mov (4) uwDEST_Y(23,1)<4> uwAVS_RESPONSE_2(10,12)<4;4,1> +// mov (4) uwDEST_Y(26,1)<4> uwAVS_RESPONSE_2(11,0)<4;4,1> +// mov (4) uwDEST_Y(27,1)<4> uwAVS_RESPONSE_2(11,8)<4;4,1> +// mov (4) uwDEST_Y(30,1)<4> uwAVS_RESPONSE_2(11,4)<4;4,1> +// mov (4) uwDEST_Y(31,1)<4> uwAVS_RESPONSE_2(11,12)<4;4,1> +// +//// Move second 8x8 words of R to dest GRF +// mov (4) uwDEST_Y(2,0)<4> uwAVS_RESPONSE_2(0,0)<4;4,1> +// mov (4) uwDEST_Y(3,0)<4> uwAVS_RESPONSE_2(0,8)<4;4,1> +// mov (4) uwDEST_Y(6,0)<4> uwAVS_RESPONSE_2(0,4)<4;4,1> +// mov (4) uwDEST_Y(7,0)<4> uwAVS_RESPONSE_2(0,12)<4;4,1> +// mov (4) uwDEST_Y(10,0)<4> uwAVS_RESPONSE_2(1,0)<4;4,1> +// mov (4) uwDEST_Y(11,0)<4> uwAVS_RESPONSE_2(1,8)<4;4,1> +// mov (4) uwDEST_Y(14,0)<4> uwAVS_RESPONSE_2(1,4)<4;4,1> +// mov (4) uwDEST_Y(15,0)<4> uwAVS_RESPONSE_2(1,12)<4;4,1> +// mov (4) uwDEST_Y(18,0)<4> uwAVS_RESPONSE_2(8,0)<4;4,1> +// mov (4) uwDEST_Y(19,0)<4> uwAVS_RESPONSE_2(8,8)<4;4,1> +// mov (4) uwDEST_Y(22,0)<4> uwAVS_RESPONSE_2(8,4)<4;4,1> +// mov (4) uwDEST_Y(23,0)<4> uwAVS_RESPONSE_2(8,12)<4;4,1> +// mov (4) uwDEST_Y(26,0)<4> uwAVS_RESPONSE_2(9,0)<4;4,1> +// mov (4) uwDEST_Y(27,0)<4> uwAVS_RESPONSE_2(9,8)<4;4,1> +// mov (4) uwDEST_Y(30,0)<4> uwAVS_RESPONSE_2(9,4)<4;4,1> +// mov (4) uwDEST_Y(31,0)<4> uwAVS_RESPONSE_2(9,12)<4;4,1> +// +//// Move second 8x8 words of A to dest GRF +// mov (4) uwDEST_Y(2,3)<4> uwAVS_RESPONSE_2(6,0)<4;4,1> +// mov (4) uwDEST_Y(3,3)<4> uwAVS_RESPONSE_2(6,8)<4;4,1> +// mov (4) uwDEST_Y(6,3)<4> uwAVS_RESPONSE_2(6,4)<4;4,1> +// mov (4) uwDEST_Y(7,3)<4> uwAVS_RESPONSE_2(6,12)<4;4,1> +// mov (4) uwDEST_Y(10,3)<4> uwAVS_RESPONSE_2(7,0)<4;4,1> +// mov (4) uwDEST_Y(11,3)<4> uwAVS_RESPONSE_2(7,8)<4;4,1> +// mov (4) uwDEST_Y(14,3)<4> uwAVS_RESPONSE_2(7,4)<4;4,1> +// mov (4) uwDEST_Y(15,3)<4> uwAVS_RESPONSE_2(7,12)<4;4,1> +// mov (4) uwDEST_Y(18,3)<4> uwAVS_RESPONSE_2(14,0)<4;4,1> +// mov (4) uwDEST_Y(19,3)<4> uwAVS_RESPONSE_2(14,8)<4;4,1> +// mov (4) uwDEST_Y(22,3)<4> uwAVS_RESPONSE_2(14,4)<4;4,1> +// mov (4) uwDEST_Y(23,3)<4> uwAVS_RESPONSE_2(14,12)<4;4,1> +// mov (4) uwDEST_Y(26,3)<4> uwAVS_RESPONSE_2(15,0)<4;4,1> +// mov (4) uwDEST_Y(27,3)<4> uwAVS_RESPONSE_2(15,8)<4;4,1> +// mov (4) uwDEST_Y(30,3)<4> uwAVS_RESPONSE_2(15,4)<4;4,1> +// mov (4) uwDEST_Y(31,3)<4> uwAVS_RESPONSE_2(15,12)<4;4,1> + +#else /* OUTPUT_8_BIT */ + +// Move first 8x8 words of B to dest GRF + mov (8) DEST_B(0)<1> ubAVS_RESPONSE(4,1)<16;4,2> + mov (8) DEST_B(1)<1> ubAVS_RESPONSE(4,8+1)<16;4,2> + mov (8) DEST_B(2)<1> ubAVS_RESPONSE(5,1)<16;4,2> + mov (8) DEST_B(3)<1> ubAVS_RESPONSE(5,8+1)<16;4,2> + mov (8) DEST_B(4)<1> ubAVS_RESPONSE(12,1)<16;4,2> + mov (8) DEST_B(5)<1> ubAVS_RESPONSE(12,8+1)<16;4,2> + mov (8) DEST_B(6)<1> ubAVS_RESPONSE(13,1)<16;4,2> + mov (8) DEST_B(7)<1> ubAVS_RESPONSE(13,8+1)<16;4,2> + +// Move first 8x8 words of G to dest GRF + mov (8) DEST_G(0)<1> ubAVS_RESPONSE(2,1)<16;4,2> + mov (8) DEST_G(1)<1> ubAVS_RESPONSE(2,8+1)<16;4,2> + mov (8) DEST_G(2)<1> ubAVS_RESPONSE(3,1)<16;4,2> + mov (8) DEST_G(3)<1> ubAVS_RESPONSE(3,8+1)<16;4,2> + mov (8) DEST_G(4)<1> ubAVS_RESPONSE(10,1)<16;4,2> + mov (8) DEST_G(5)<1> ubAVS_RESPONSE(10,8+1)<16;4,2> + mov (8) DEST_G(6)<1> ubAVS_RESPONSE(11,1)<16;4,2> + mov (8) DEST_G(7)<1> ubAVS_RESPONSE(11,8+1)<16;4,2> + +// Move first 8x8 words of R to dest GRF + mov (8) DEST_R(0)<1> ubAVS_RESPONSE(0,1)<16;4,2> + mov (8) DEST_R(1)<1> ubAVS_RESPONSE(0,8+1)<16;4,2> + mov (8) DEST_R(2)<1> ubAVS_RESPONSE(1,1)<16;4,2> + mov (8) DEST_R(3)<1> ubAVS_RESPONSE(1,8+1)<16;4,2> + mov (8) DEST_R(4)<1> ubAVS_RESPONSE(8,1)<16;4,2> + mov (8) DEST_R(5)<1> ubAVS_RESPONSE(8,8+1)<16;4,2> + mov (8) DEST_R(6)<1> ubAVS_RESPONSE(9,1)<16;4,2> + mov (8) DEST_R(7)<1> ubAVS_RESPONSE(9,8+1)<16;4,2> + +// Move first 8x8 words of A to dest GRF + mov (8) DEST_A(0)<1> ubAVS_RESPONSE(6,1)<16;4,2> + mov (8) DEST_A(1)<1> ubAVS_RESPONSE(6,8+1)<16;4,2> + mov (8) DEST_A(2)<1> ubAVS_RESPONSE(7,1)<16;4,2> + mov (8) DEST_A(3)<1> ubAVS_RESPONSE(7,8+1)<16;4,2> + mov (8) DEST_A(4)<1> ubAVS_RESPONSE(14,1)<16;4,2> + mov (8) DEST_A(5)<1> ubAVS_RESPONSE(14,8+1)<16;4,2> + mov (8) DEST_A(6)<1> ubAVS_RESPONSE(15,1)<16;4,2> + mov (8) DEST_A(7)<1> ubAVS_RESPONSE(15,8+1)<16;4,2> + +// Move second 8x8 words of B to dest GRF + mov (8) DEST_B(0,8)<1> ubAVS_RESPONSE_2(4,1)<16;4,2> + mov (8) DEST_B(1,8)<1> ubAVS_RESPONSE_2(4,8+1)<16;4,2> + mov (8) DEST_B(2,8)<1> ubAVS_RESPONSE_2(5,1)<16;4,2> + mov (8) DEST_B(3,8)<1> ubAVS_RESPONSE_2(5,8+1)<16;4,2> + mov (8) DEST_B(4,8)<1> ubAVS_RESPONSE_2(12,1)<16;4,2> + mov (8) DEST_B(5,8)<1> ubAVS_RESPONSE_2(12,8+1)<16;4,2> + mov (8) DEST_B(6,8)<1> ubAVS_RESPONSE_2(13,1)<16;4,2> + mov (8) DEST_B(7,8)<1> ubAVS_RESPONSE_2(13,8+1)<16;4,2> + +// Move second 8x8 words of G to dest GRF + mov (8) DEST_G(0,8)<1> ubAVS_RESPONSE_2(2,1)<16;4,2> + mov (8) DEST_G(1,8)<1> ubAVS_RESPONSE_2(2,8+1)<16;4,2> + mov (8) DEST_G(2,8)<1> ubAVS_RESPONSE_2(3,1)<16;4,2> + mov (8) DEST_G(3,8)<1> ubAVS_RESPONSE_2(3,8+1)<16;4,2> + mov (8) DEST_G(4,8)<1> ubAVS_RESPONSE_2(10,1)<16;4,2> + mov (8) DEST_G(5,8)<1> ubAVS_RESPONSE_2(10,8+1)<16;4,2> + mov (8) DEST_G(6,8)<1> ubAVS_RESPONSE_2(11,1)<16;4,2> + mov (8) DEST_G(7,8)<1> ubAVS_RESPONSE_2(11,8+1)<16;4,2> + +// Move second 8x8 words of R to dest GRF + mov (8) DEST_R(0,8)<1> ubAVS_RESPONSE_2(0,1)<16;4,2> + mov (8) DEST_R(1,8)<1> ubAVS_RESPONSE_2(0,8+1)<16;4,2> + mov (8) DEST_R(2,8)<1> ubAVS_RESPONSE_2(1,1)<16;4,2> + mov (8) DEST_R(3,8)<1> ubAVS_RESPONSE_2(1,8+1)<16;4,2> + mov (8) DEST_R(4,8)<1> ubAVS_RESPONSE_2(8,1)<16;4,2> + mov (8) DEST_R(5,8)<1> ubAVS_RESPONSE_2(8,8+1)<16;4,2> + mov (8) DEST_R(6,8)<1> ubAVS_RESPONSE_2(9,1)<16;4,2> + mov (8) DEST_R(7,8)<1> ubAVS_RESPONSE_2(9,8+1)<16;4,2> + +// Move second 8x8 words of A to dest GRF + mov (8) DEST_A(0,8)<1> ubAVS_RESPONSE_2(6,1)<16;4,2> + mov (8) DEST_A(1,8)<1> ubAVS_RESPONSE_2(6,8+1)<16;4,2> + mov (8) DEST_A(2,8)<1> ubAVS_RESPONSE_2(7,1)<16;4,2> + mov (8) DEST_A(3,8)<1> ubAVS_RESPONSE_2(7,8+1)<16;4,2> + mov (8) DEST_A(4,8)<1> ubAVS_RESPONSE_2(14,1)<16;4,2> + mov (8) DEST_A(5,8)<1> ubAVS_RESPONSE_2(14,8+1)<16;4,2> + mov (8) DEST_A(6,8)<1> ubAVS_RESPONSE_2(15,1)<16;4,2> + mov (8) DEST_A(7,8)<1> ubAVS_RESPONSE_2(15,8+1)<16;4,2> +#endif +//------------------------------------------------------------------------------ + + // Set to write bottom region to memory + #define SRC_REGION REGION_1 + + // Re-define new # of lines + #undef nUV_NUM_OF_ROWS + #undef nY_NUM_OF_ROWS + + #define nY_NUM_OF_ROWS 8 + #define nUV_NUM_OF_ROWS 8 + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_Scaling.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_Scaling.asm new file mode 100644 index 000000000..95f66586e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/RGB_Scaling.asm @@ -0,0 +1,102 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//---------- RGB_Scaling.asm ---------- +#include "Scaling.inc" + + // Build 16 elements ramp in float32 and normalized it +// mov (8) SAMPLER_RAMP(0)<1> 0x76543210:v +// add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f +mov (4) SAMPLER_RAMP(0)<1> 0x48403000:vf //3, 2, 1, 0 in float vector +mov (4) SAMPLER_RAMP(0,4)<1> 0x5C585450:vf //7, 6, 5, 4 in float vector +add (8) SAMPLER_RAMP(1)<1> SAMPLER_RAMP(0) 8.0:f + +//Module: PrepareScaleCoord.asm + + // Setup for sampler msg hdr + mov (2) rMSGSRC.0<1>:ud 0:ud { NoDDClr } // Unused fields + mov (1) rMSGSRC.2<1>:ud 0:ud { NoDDChk } // Write and offset + + // Calculate 16 v based on the step Y and vertical origin + mov (16) mfMSGPAYLOAD(2)<1> fSRC_VID_V_ORI<0;1,0>:f + mov (16) SCALE_COORD_Y<1>:f fSRC_VID_V_ORI<0;1,0>:f + + // Calculate 16 u based on the step X and hori origin +// line (16) mfMSGPAYLOAD(0)<1> SCALE_STEP_X<0;1,0>:f SAMPLER_RAMP(0) // Assign to mrf directly + mov (16) acc0:f fSRC_VID_H_ORI<0;1,0>:f { Compr } + mac (16) mfMSGPAYLOAD(0)<1> fVIDEO_STEP_X<0;1,0>:f SAMPLER_RAMP(0) { Compr } + + //Setup the constants for line instruction + mov (1) SCALE_LINE_P255<1>:f 255.0:f { NoDDClr } //{ NoDDClr, NoDDChk } + mov (1) SCALE_LINE_P0_5<1>:f 0.5:f { NoDDChk } + + +//------------------------------------------------------------------------------ + +$for (0; :ud // Copy msg header and payload mirrors to MRFs + send (16) SCALE_RESPONSE_YW(0)<1> MSGHDR_SCALE udDUMMY_NULL nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_RGB+nBI_CURRENT_SRC_RGB + + // Calculate 16 v for next line + add (16) mfMSGPAYLOAD(2)<1> SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + add (16) SCALE_COORD_Y<1>:f SCALE_COORD_Y<8;8,1>:f fVIDEO_STEP_Y<0;1,0>:f // Assign to mrf directly + + // Scale back to [0, 255], convert f to ud + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(0) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(0)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(2) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(2)<1> acc0:f { Compr } + + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(4) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(4)<1> acc0:f { Compr } + +//#if defined(SAVE_ARGB) //Only needed if Alpha value is written to the destination + line (16) acc0:f SCALE_LINE_P255<0;1,0>:f SCALE_RESPONSE_YF(6) { Compr } // Process B, V + mov (16) SCALE_RESPONSE_YD(6)<1> acc0:f { Compr } +//#endif + + mov (16) DEST_R(%1)<1> SCALE_RESPONSE_YB(0) //possible error due to truncation - vK + mov (16) DEST_G(%1)<1> SCALE_RESPONSE_YB(2) //possible error due to truncation - vK + mov (16) DEST_B(%1)<1> SCALE_RESPONSE_YB(4) //possible error due to truncation - vK + mov (16) DEST_A(%1)<1> SCALE_RESPONSE_YB(6) //possible error due to truncation - vK +} diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/Scaling.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/Scaling.inc new file mode 100644 index 000000000..9bd07a2ba --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Core_Kernels/Scaling.inc @@ -0,0 +1,105 @@ +/* + * All Video Processing kernels + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// File name: Scaling.inc + +#ifndef _SCALING_INC_ +#define _SCALING_INC_ + +// Local variables---------------------------------------------------------------------------------- +#define MSGHDR_SCALE m1 // Message Payload Header (Uses m2, m3, m4, m5 implicitly) + +//-------------------------------------------------------------------------------------------------- +//r10.0 thru r33.0; Primary surface read from sampler (16x8) +#define DEST_Y uwTOP_Y +#define DEST_U uwTOP_U +#define DEST_V uwTOP_V + +//r10.0 thru r41.0 +.declare DEST_B Base=REG(r,10) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_G Base=REG(r,18) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_R Base=REG(r,26) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw +.declare DEST_A Base=REG(r,34) ElementSize=2 SrcRegion=REGION(8,1) DstRegion=<1> Type=uw + +//r56.0 thru r79.0 +.declare SCALE_RESPONSE_YF Base=REG(r,nBOT_Y) ElementSize=4 SrcRegion=REGION(8,1) Type=f +.declare SCALE_RESPONSE_UF Base=REG(r,nBOT_U) ElementSize=4 SrcRegion=REGION(8,1) Type=f +.declare SCALE_RESPONSE_VF Base=REG(r,nBOT_V) ElementSize=4 SrcRegion=REGION(8,1) Type=f + +.declare SCALE_RESPONSE_YW Base=REG(r,nBOT_Y) ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare SCALE_RESPONSE_UW Base=REG(r,nBOT_U) ElementSize=2 SrcRegion=REGION(16,1) Type=uw +.declare SCALE_RESPONSE_VW Base=REG(r,nBOT_V) ElementSize=2 SrcRegion=REGION(16,1) Type=uw + +.declare SCALE_RESPONSE_YD Base=REG(r,nBOT_Y) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare SCALE_RESPONSE_UD Base=REG(r,nBOT_U) ElementSize=4 SrcRegion=REGION(8,1) Type=ud +.declare SCALE_RESPONSE_VD Base=REG(r,nBOT_V) ElementSize=4 SrcRegion=REGION(8,1) Type=ud + +.declare SCALE_RESPONSE_YB Base=REG(r,nBOT_Y) ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare SCALE_RESPONSE_UB Base=REG(r,nBOT_U) ElementSize=1 SrcRegion=REGION(8,4) Type=ub +.declare SCALE_RESPONSE_VB Base=REG(r,nBOT_V) ElementSize=1 SrcRegion=REGION(8,4) Type=ub + +.declare SAMPLER_RAMP Base=REG(r,42) ElementSize=4 SrcRegion=<8;8,1> Type=f // 2 GRFs, 16 elements + +//#define SCALE_STEP_X REG2(r,43,0) +//#define SCALE_COORD_X REG2(r,43,3) + +#define SCALE_LINE_P255 REG2(r,43,4) // = 255.0 Used in 'line' inst to multiply 255, add 0.5, and round to int. +#define SCALE_LINE_P0_5 REG2(r,43,7) // = 0.5 + +//r44.0 thru r45.0 +#define SCALE_COORD_Y REG(r,44) //2GRF + + +// Send Message [DevILK] Message Descriptor +// MBZ MsgL=5 MsgR=8 H MBZ SIMD MsgType SmplrIndx BindTab +// 000 0 101 0 1000 1 0 10 0000 0000 00000000 +// 0 A 8 A 0 0 0 0 +// MsgL=1+2*2(u,v)=5 MsgR=8 +#define SMPLR_MSG_DSC 0x0A8A0000 // ILK Sampler Message Descriptor + +// Re-define new number of lines +#undef nY_NUM_OF_ROWS +#undef nUV_NUM_OF_ROWS + +#define nY_NUM_OF_ROWS 8 +#define nUV_NUM_OF_ROWS 8 + + +#endif //_SCALING_INC_ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.am new file mode 100644 index 000000000..cb47880c5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.am @@ -0,0 +1,232 @@ + +INTEL_G4I = + +INTEL_G4A = null.g4a +INTEL_G4B = null.g4b +INTEL_G4B_GEN5 = null.g4b.gen5 +INTEL_G6A = null.g6a +INTEL_G6B = null.g6b + +INTEL_PP_G4B_GEN5 = \ + nv12_avs_nv12.g4b.gen5 \ + nv12_dn_nv12.g4b.gen5 \ + nv12_dndi_nv12.g4b.gen5 \ + nv12_load_save_nv12.g4b.gen5 \ + nv12_load_save_pa.g4b.gen5 \ + nv12_load_save_pl3.g4b.gen5 \ + nv12_load_save_rgbx.g4b.gen5 \ + nv12_scaling_nv12.g4b.gen5 \ + pa_load_save_pa.g4b.gen5 \ + pa_load_save_nv12.g4b.gen5 \ + pa_load_save_pl3.g4b.gen5 \ + pl3_load_save_nv12.g4b.gen5 \ + pl3_load_save_pa.g4b.gen5 \ + pl3_load_save_pl3.g4b.gen5 \ + rgbx_load_save_nv12.g4b.gen5 \ + $(NULL) + +INTEL_PP_G6B = \ + nv12_avs_nv12.g6b \ + nv12_dn_nv12.g6b \ + nv12_dndi_nv12.g6b \ + nv12_load_save_nv12.g6b \ + nv12_load_save_pa.g6b \ + nv12_load_save_pl3.g6b \ + nv12_load_save_rgbx.g6b \ + nv12_scaling_nv12.g6b \ + pa_load_save_pa.g6b \ + pa_load_save_nv12.g6b \ + pa_load_save_pl3.g6b \ + pl3_load_save_nv12.g6b \ + pl3_load_save_pl3.g6b \ + pl3_load_save_pa.g6b \ + rgbx_load_save_nv12.g6b \ + $(NULL) + +INTEL_PP_ASM = \ + nv12_avs_nv12.asm \ + nv12_dn_nv12.asm \ + nv12_dndi_nv12.asm \ + nv12_load_save_nv12.asm \ + nv12_load_save_pa.asm \ + nv12_load_save_pl3.asm \ + nv12_load_save_rgbx.asm \ + nv12_scaling_nv12.asm \ + pa_load_save_pa.asm \ + pa_load_save_nv12.asm \ + pa_load_save_pl3.asm \ + pl3_load_save_nv12.asm \ + pl3_load_save_pl3.asm \ + pl3_load_save_pa.asm \ + rgbx_load_save_nv12.asm \ + $(NULL) + +INTEL_PP_ASM += \ + Common/AYUV_Load_16x8.asm \ + Common/IMC3_Load_8x4.asm \ + Common/IMC3_Load_8x5.asm \ + Common/IMC3_Load_9x5.asm \ + Common/Init_All_Regs.asm \ + Common/Multiple_Loop.asm \ + Common/Multiple_Loop_Head.asm \ + Common/NV11_Load_4x8.asm \ + Common/NV11_Load_5x8.asm \ + Common/NV12_Load_8x4.asm \ + Common/NV12_Load_8x5.asm \ + Common/NV12_Load_9x5.asm \ + Common/P208_Load_8x8.asm \ + Common/P208_Load_9x8.asm \ + Common/PA_Load_8x8.asm \ + Common/PA_Load_9x8.asm \ + Common/PL16x8_PL8x4.asm \ + Common/PL16x8_PL8x8.asm \ + Common/PL4x8_Save_NV11.asm \ + Common/PL5x8_PL16x8.asm \ + Common/PL5x8_PL8x8.asm \ + Common/PL8x4_Save_IMC3.asm \ + Common/PL8x4_Save_NV12.asm \ + Common/PL8x5_PL8x8.asm \ + Common/PL8x8_PL8x4.asm \ + Common/PL8x8_Save_P208.asm \ + Common/PL8x8_Save_PA.asm \ + Common/PL9x5_PL16x8.asm \ + Common/PL9x8_PL16x8.asm \ + Common/RGB16x8_Save_RGB.asm \ + Common/RGB16x8_Save_RGB16.asm \ + Common/RGB16x8_Save_Y416.asm \ + Common/RGB_Pack.asm \ + Common/RGBX_Load_16x8.asm \ + Common/RGBX_to_YUV_Coef.asm \ + Common/RGBX_Save_YUV_Fix.asm \ + Common/RGBX_Save_YUV_Float.asm \ + Common/YUV_to_RGBX_Coef.asm \ + Common/YUVX_Save_RGBX_Fix.asm \ + Common/YUVX_Save_RGBX_Float.asm \ + Common/SetupVPKernel.asm \ + Common/readSampler16x1.asm \ + Core_Kernels/AVS_SetupFirstBlock.asm \ + Core_Kernels/AVS_SetupSecondBlock.asm \ + Core_Kernels/DI_Hist_Save.asm \ + Core_Kernels/DI_SAVE_PA.asm \ + Core_Kernels/DNDI_COMMAND.asm \ + Core_Kernels/DNDI_Hist_Save.asm \ + Core_Kernels/PA_AVS_IEF_16x8.asm \ + Core_Kernels/PA_AVS_IEF_8x4.asm \ + Core_Kernels/PA_AVS_IEF_8x8.asm \ + Core_Kernels/PA_AVS_IEF_Sample.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PA_DNDI_ALG.asm \ + Core_Kernels/PA_DN_ALG.asm \ + Core_Kernels/PA_Scaling.asm \ + Core_Kernels/PL2_AVS_IEF_16x8.asm \ + Core_Kernels/PL2_AVS_IEF_8x4.asm \ + Core_Kernels/PL2_AVS_IEF_8x8.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PL2_Scaling.asm \ + Core_Kernels/PL3_AVS_IEF_16x8.asm \ + Core_Kernels/PL3_AVS_IEF_8x4.asm \ + Core_Kernels/PL3_AVS_IEF_8x8.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PL3_Scaling.asm \ + Core_Kernels/PL_DNDI_ALG.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_NV11.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_NV12.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_P208.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_PL3.asm \ + Core_Kernels/PL_DN_ALG.asm \ + Core_Kernels/RGB_AVS_IEF_16x8.asm \ + Core_Kernels/RGB_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/RGB_AVS_IEF_Unscramble_16x8.asm \ + Core_Kernels/RGB_Scaling.asm \ + $(NULL) + +INTEL_PP_INC = \ + Common/AYUV_Load_16x8.inc \ + Common/Expansion.inc \ + Common/PA_Load.inc \ + Common/PL2_Load.inc \ + Common/PL3_Load.inc \ + Common/PL4x8_Save_NV11.inc \ + Common/PL8x4_Save_IMC3.inc \ + Common/PL8x4_Save_NV12.inc \ + Common/PL8x8_PL8x4.inc \ + Common/PL8x8_Save_P208.inc \ + Common/PL8x8_Save_PA.inc \ + Common/RGB16x8_Save_RGB.inc \ + Common/RGB16x8_Save_RGB16.inc \ + Common/RGB16x8_Save_Y416.inc \ + Common/RGBX_Load_16x8.inc \ + Common/common.inc \ + Common/undefall.inc \ + Core_Kernels/AVS_IEF.inc \ + Core_Kernels/DI.inc \ + Core_Kernels/DNDI.inc \ + Core_Kernels/Scaling.inc + $(NULL) + +INTEL_PP_GEN5_ASM = $(INTEL_PP_G4B_GEN5:%.g4b.gen5=%.g5s) +INTEL_PP_GEN6_ASM = $(INTEL_PP_G6B:%.g6b=%.g6s) + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_PP_G4B_GEN5) +TARGETS += $(INTEL_PP_G6B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g4a .g4b .g4b.gen5 .g6a .g6b .g5s .g6s .asm + +if HAVE_GEN4ASM +.g4a.g4b: + $(AM_V_GEN)m4 $*.g4a > $*.g4m && \ + $(AM_V_GEN)$(GEN4ASM) -o $@ $*.g4m && \ + $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@.gen5 $*.g4m && \ + rm $*.g4m + +.g6a.g6b: + $(AM_V_GEN)m4 $< > $*.g6m && \ + $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $*.g6m && \ + rm $*.g6m + +$(INTEL_G4B): $(INTEL_G4I) + +$(INTEL_PP_GEN5_ASM): $(INTEL_PP_ASM) +.asm.g5s: + $(AM_V_GEN)cpp -D DEV_ILK -I $(srcdir)/Common/ -I $(srcdir)/Core_Kernels $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g5s.g4b.gen5: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 5 $< + +$(INTEL_PP_GEN6_ASM): $(INTEL_PP_ASM) +.asm.g6s: + $(AM_V_GEN)cpp -D GT -I $(srcdir)/Common/ -I $(srcdir)/Core_Kernels $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g6s.g6b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 6 $< +endif + +CLEANFILES = $(INTEL_PP_GEN5_ASM) $(INTEL_PP_GEN6_ASM) + +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_G6B) \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G4B_GEN5) \ + $(INTEL_PP_G6B) \ + $(INTEL_PP_INC) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.in new file mode 100644 index 000000000..1150bdc3e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/Makefile.in @@ -0,0 +1,631 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_PP_G4B_GEN5) $(INTEL_PP_G6B) +subdir = src/shaders/post_processing/gen5_6 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_G4I = +INTEL_G4A = null.g4a +INTEL_G4B = null.g4b +INTEL_G4B_GEN5 = null.g4b.gen5 +INTEL_G6A = null.g6a +INTEL_G6B = null.g6b +INTEL_PP_G4B_GEN5 = \ + nv12_avs_nv12.g4b.gen5 \ + nv12_dn_nv12.g4b.gen5 \ + nv12_dndi_nv12.g4b.gen5 \ + nv12_load_save_nv12.g4b.gen5 \ + nv12_load_save_pa.g4b.gen5 \ + nv12_load_save_pl3.g4b.gen5 \ + nv12_load_save_rgbx.g4b.gen5 \ + nv12_scaling_nv12.g4b.gen5 \ + pa_load_save_pa.g4b.gen5 \ + pa_load_save_nv12.g4b.gen5 \ + pa_load_save_pl3.g4b.gen5 \ + pl3_load_save_nv12.g4b.gen5 \ + pl3_load_save_pa.g4b.gen5 \ + pl3_load_save_pl3.g4b.gen5 \ + rgbx_load_save_nv12.g4b.gen5 \ + $(NULL) + +INTEL_PP_G6B = \ + nv12_avs_nv12.g6b \ + nv12_dn_nv12.g6b \ + nv12_dndi_nv12.g6b \ + nv12_load_save_nv12.g6b \ + nv12_load_save_pa.g6b \ + nv12_load_save_pl3.g6b \ + nv12_load_save_rgbx.g6b \ + nv12_scaling_nv12.g6b \ + pa_load_save_pa.g6b \ + pa_load_save_nv12.g6b \ + pa_load_save_pl3.g6b \ + pl3_load_save_nv12.g6b \ + pl3_load_save_pl3.g6b \ + pl3_load_save_pa.g6b \ + rgbx_load_save_nv12.g6b \ + $(NULL) + +INTEL_PP_ASM = nv12_avs_nv12.asm nv12_dn_nv12.asm nv12_dndi_nv12.asm \ + nv12_load_save_nv12.asm nv12_load_save_pa.asm \ + nv12_load_save_pl3.asm nv12_load_save_rgbx.asm \ + nv12_scaling_nv12.asm pa_load_save_pa.asm \ + pa_load_save_nv12.asm pa_load_save_pl3.asm \ + pl3_load_save_nv12.asm pl3_load_save_pl3.asm \ + pl3_load_save_pa.asm rgbx_load_save_nv12.asm $(NULL) \ + Common/AYUV_Load_16x8.asm Common/IMC3_Load_8x4.asm \ + Common/IMC3_Load_8x5.asm Common/IMC3_Load_9x5.asm \ + Common/Init_All_Regs.asm Common/Multiple_Loop.asm \ + Common/Multiple_Loop_Head.asm Common/NV11_Load_4x8.asm \ + Common/NV11_Load_5x8.asm Common/NV12_Load_8x4.asm \ + Common/NV12_Load_8x5.asm Common/NV12_Load_9x5.asm \ + Common/P208_Load_8x8.asm Common/P208_Load_9x8.asm \ + Common/PA_Load_8x8.asm Common/PA_Load_9x8.asm \ + Common/PL16x8_PL8x4.asm Common/PL16x8_PL8x8.asm \ + Common/PL4x8_Save_NV11.asm Common/PL5x8_PL16x8.asm \ + Common/PL5x8_PL8x8.asm Common/PL8x4_Save_IMC3.asm \ + Common/PL8x4_Save_NV12.asm Common/PL8x5_PL8x8.asm \ + Common/PL8x8_PL8x4.asm Common/PL8x8_Save_P208.asm \ + Common/PL8x8_Save_PA.asm Common/PL9x5_PL16x8.asm \ + Common/PL9x8_PL16x8.asm Common/RGB16x8_Save_RGB.asm \ + Common/RGB16x8_Save_RGB16.asm Common/RGB16x8_Save_Y416.asm \ + Common/RGB_Pack.asm Common/RGBX_Load_16x8.asm \ + Common/RGBX_to_YUV_Coef.asm Common/RGBX_Save_YUV_Fix.asm \ + Common/RGBX_Save_YUV_Float.asm Common/YUV_to_RGBX_Coef.asm \ + Common/YUVX_Save_RGBX_Fix.asm Common/YUVX_Save_RGBX_Float.asm \ + Common/SetupVPKernel.asm Common/readSampler16x1.asm \ + Core_Kernels/AVS_SetupFirstBlock.asm \ + Core_Kernels/AVS_SetupSecondBlock.asm \ + Core_Kernels/DI_Hist_Save.asm Core_Kernels/DI_SAVE_PA.asm \ + Core_Kernels/DNDI_COMMAND.asm Core_Kernels/DNDI_Hist_Save.asm \ + Core_Kernels/PA_AVS_IEF_16x8.asm \ + Core_Kernels/PA_AVS_IEF_8x4.asm \ + Core_Kernels/PA_AVS_IEF_8x8.asm \ + Core_Kernels/PA_AVS_IEF_Sample.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PA_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PA_DNDI_ALG.asm Core_Kernels/PA_DN_ALG.asm \ + Core_Kernels/PA_Scaling.asm Core_Kernels/PL2_AVS_IEF_16x8.asm \ + Core_Kernels/PL2_AVS_IEF_8x4.asm \ + Core_Kernels/PL2_AVS_IEF_8x8.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PL2_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PL2_Scaling.asm Core_Kernels/PL3_AVS_IEF_16x8.asm \ + Core_Kernels/PL3_AVS_IEF_8x4.asm \ + Core_Kernels/PL3_AVS_IEF_8x8.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_8x4.asm \ + Core_Kernels/PL3_AVS_IEF_Unpack_8x8.asm \ + Core_Kernels/PL3_Scaling.asm Core_Kernels/PL_DNDI_ALG.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_NV11.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_NV12.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_P208.asm \ + Core_Kernels/PL_DNDI_ALG_UVCopy_PL3.asm \ + Core_Kernels/PL_DN_ALG.asm Core_Kernels/RGB_AVS_IEF_16x8.asm \ + Core_Kernels/RGB_AVS_IEF_Unpack_16x8.asm \ + Core_Kernels/RGB_AVS_IEF_Unscramble_16x8.asm \ + Core_Kernels/RGB_Scaling.asm $(NULL) +INTEL_PP_INC = \ + Common/AYUV_Load_16x8.inc \ + Common/Expansion.inc \ + Common/PA_Load.inc \ + Common/PL2_Load.inc \ + Common/PL3_Load.inc \ + Common/PL4x8_Save_NV11.inc \ + Common/PL8x4_Save_IMC3.inc \ + Common/PL8x4_Save_NV12.inc \ + Common/PL8x8_PL8x4.inc \ + Common/PL8x8_Save_P208.inc \ + Common/PL8x8_Save_PA.inc \ + Common/RGB16x8_Save_RGB.inc \ + Common/RGB16x8_Save_RGB16.inc \ + Common/RGB16x8_Save_Y416.inc \ + Common/RGBX_Load_16x8.inc \ + Common/common.inc \ + Common/undefall.inc \ + Core_Kernels/AVS_IEF.inc \ + Core_Kernels/DI.inc \ + Core_Kernels/DNDI.inc \ + Core_Kernels/Scaling.inc + +INTEL_PP_GEN5_ASM = $(INTEL_PP_G4B_GEN5:%.g4b.gen5=%.g5s) +INTEL_PP_GEN6_ASM = $(INTEL_PP_G6B:%.g6b=%.g6s) +TARGETS = $(am__append_1) +SUFFIXES = .g4a .g4b .g4b.gen5 .g6a .g6b .g5s .g6s .asm +CLEANFILES = $(INTEL_PP_GEN5_ASM) $(INTEL_PP_GEN6_ASM) +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_G6B) \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G4B_GEN5) \ + $(INTEL_PP_G6B) \ + $(INTEL_PP_INC) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g4a .g4b .g4b.gen5 .g6a .g6b .g5s .g6s .asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/gen5_6/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/gen5_6/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + $(NULL) + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@.g4a.g4b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 $*.g4a > $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -o $@ $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@.gen5 $*.g4m && \ +@HAVE_GEN4ASM_TRUE@ rm $*.g4m + +@HAVE_GEN4ASM_TRUE@.g6a.g6b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 $< > $*.g6m && \ +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $*.g6m && \ +@HAVE_GEN4ASM_TRUE@ rm $*.g6m + +@HAVE_GEN4ASM_TRUE@$(INTEL_G4B): $(INTEL_G4I) + +@HAVE_GEN4ASM_TRUE@$(INTEL_PP_GEN5_ASM): $(INTEL_PP_ASM) +@HAVE_GEN4ASM_TRUE@.asm.g5s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -D DEV_ILK -I $(srcdir)/Common/ -I $(srcdir)/Core_Kernels $< > _pp0.$@; \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ +@HAVE_GEN4ASM_TRUE@ rm _pp0.$@ +@HAVE_GEN4ASM_TRUE@.g5s.g4b.gen5: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 5 $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_PP_GEN6_ASM): $(INTEL_PP_ASM) +@HAVE_GEN4ASM_TRUE@.asm.g6s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -D GT -I $(srcdir)/Common/ -I $(srcdir)/Core_Kernels $< > _pp0.$@; \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ +@HAVE_GEN4ASM_TRUE@ rm _pp0.$@ +@HAVE_GEN4ASM_TRUE@.g6s.g6b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 6 $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4a new file mode 100644 index 000000000..cde124a35 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4a @@ -0,0 +1,3 @@ +/* Just for test */ + +send(16) 0 acc0<1>UW g0<8,8,1>UW thread_spawner(0, 0, 0) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b new file mode 100644 index 000000000..d8f28e7d6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b @@ -0,0 +1 @@ + { 0x00800031, 0x24001d28, 0x008d0000, 0x87100000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b.gen5 new file mode 100644 index 000000000..2bd0ba6cb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g4b.gen5 @@ -0,0 +1 @@ + { 0x00800031, 0x24001d28, 0x748d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g6b new file mode 100644 index 000000000..e52415c49 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/null.g6b @@ -0,0 +1 @@ + { 0x07800031, 0x24001cc8, 0x00000000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.asm new file mode 100644 index 000000000..6e0e1b314 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.asm @@ -0,0 +1,20 @@ +// Module name: NV12_AVS_NV12 +.kernel NV12_AVS_NV12 +.code + +#define INC_SCALING + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PL2_AVS_IEF_16x8.asm" +#include "PL16x8_PL8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_avs_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g4b.gen5 new file mode 100644 index 000000000..7573a663b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g4b.gen5 @@ -0,0 +1,174 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x01000005, 0x20002d2c, 0x00000088, 0x80008000 }, + { 0x00010001, 0x20c003fd, 0x00000000, 0x00000000 }, + { 0x00000001, 0x212003bd, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x212403bd, 0x000000bc, 0x00000000 }, + { 0x00000001, 0x213403bd, 0x00000038, 0x00000000 }, + { 0x00200001, 0x612803bd, 0x004500a4, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000d000 }, + { 0x00802001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x00000031, 0x25401c09, 0x208d0000, 0x044bb401 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000a000 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x25c01c09, 0x208d0000, 0x048bb802 }, + { 0x00000001, 0x240803bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x000000bc, 0x41000000 }, + { 0x00000048, 0x21287fbd, 0x000000c0, 0x41e00000 }, + { 0x00000001, 0x240403bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x21247fbd, 0x000000c0, 0x41000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000d000 }, + { 0x00802001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x00000031, 0x27401c09, 0x208d0000, 0x044bb401 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000a000 }, + { 0x00802001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x27c01c09, 0x208d0000, 0x048bb802 }, + { 0x00600001, 0x21400229, 0x00aa0541, 0x00000000 }, + { 0x00600001, 0x21600229, 0x00aa0549, 0x00000000 }, + { 0x00600001, 0x21800229, 0x00aa0561, 0x00000000 }, + { 0x00600001, 0x21a00229, 0x00aa0569, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x00aa0581, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x00aa0589, 0x00000000 }, + { 0x00600001, 0x22000229, 0x00aa05a1, 0x00000000 }, + { 0x00600001, 0x22200229, 0x00aa05a9, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00aa05c1, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00aa05c9, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00aa05e1, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00aa05e9, 0x00000000 }, + { 0x00600001, 0x22c00229, 0x00aa0641, 0x00000000 }, + { 0x00600001, 0x22e00229, 0x00aa0649, 0x00000000 }, + { 0x00600001, 0x23000229, 0x00aa0661, 0x00000000 }, + { 0x00600001, 0x23200229, 0x00aa0669, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00aa0601, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00aa0609, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00aa0621, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00aa0629, 0x00000000 }, + { 0x00600001, 0x23c00229, 0x00aa0681, 0x00000000 }, + { 0x00600001, 0x23e00229, 0x00aa0689, 0x00000000 }, + { 0x00600001, 0x24000229, 0x00aa06a1, 0x00000000 }, + { 0x00600001, 0x24200229, 0x00aa06a9, 0x00000000 }, + { 0x00600001, 0x21500229, 0x00aa0741, 0x00000000 }, + { 0x00600001, 0x21700229, 0x00aa0749, 0x00000000 }, + { 0x00600001, 0x21900229, 0x00aa0761, 0x00000000 }, + { 0x00600001, 0x21b00229, 0x00aa0769, 0x00000000 }, + { 0x00600001, 0x21d00229, 0x00aa0781, 0x00000000 }, + { 0x00600001, 0x21f00229, 0x00aa0789, 0x00000000 }, + { 0x00600001, 0x22100229, 0x00aa07a1, 0x00000000 }, + { 0x00600001, 0x22300229, 0x00aa07a9, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00aa07c1, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00aa07c9, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00aa07e1, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00aa07e9, 0x00000000 }, + { 0x00600001, 0x22d00229, 0x00aa0841, 0x00000000 }, + { 0x00600001, 0x22f00229, 0x00aa0849, 0x00000000 }, + { 0x00600001, 0x23100229, 0x00aa0861, 0x00000000 }, + { 0x00600001, 0x23300229, 0x00aa0869, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00aa0801, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00aa0809, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00aa0821, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00aa0829, 0x00000000 }, + { 0x00600001, 0x23d00229, 0x00aa0881, 0x00000000 }, + { 0x00600001, 0x23f00229, 0x00aa0889, 0x00000000 }, + { 0x00600001, 0x24100229, 0x00aa08a1, 0x00000000 }, + { 0x00600001, 0x24300229, 0x00aa08a9, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00000041, 0x24407fbd, 0x000000bc, 0x41800000 }, + { 0x00000040, 0x20a477bd, 0x00000440, 0x000000a4 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffec6 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000001, 0x20a403bd, 0x00000094, 0x00000000 }, + { 0x00000041, 0x24407fbd, 0x00000038, 0x41000000 }, + { 0x00000040, 0x20a877bd, 0x00000440, 0x000000a8 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffeba }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g6b new file mode 100644 index 000000000..3bfdef609 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_avs_nv12.g6b @@ -0,0 +1,247 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x01000005, 0x20002d2c, 0x00000088, 0x80008000 }, + { 0x00010001, 0x20c003fd, 0x00000000, 0x00000000 }, + { 0x00000001, 0x212003bd, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x212403bd, 0x000000bc, 0x00000000 }, + { 0x00000001, 0x213403bd, 0x00000038, 0x00000000 }, + { 0x00200001, 0x612803bd, 0x004500a4, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000d000 }, + { 0x00800001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x25401cc9, 0x00000000, 0x044bb401 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000a000 }, + { 0x00800001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x25c01cc9, 0x00000040, 0x048bb802 }, + { 0x00000001, 0x240803bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x000000bc, 0x41000000 }, + { 0x00000048, 0x21287fbd, 0x000000c0, 0x41e00000 }, + { 0x00000001, 0x240403bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x21247fbd, 0x000000c0, 0x41000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000d000 }, + { 0x00800001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x27401cc9, 0x00000000, 0x044bb401 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0000a000 }, + { 0x00800001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02000031, 0x27c01cc9, 0x00000040, 0x048bb802 }, + { 0x00600001, 0x21400229, 0x00aa0541, 0x00000000 }, + { 0x00600001, 0x21600229, 0x00aa0549, 0x00000000 }, + { 0x00600001, 0x21800229, 0x00aa0561, 0x00000000 }, + { 0x00600001, 0x21a00229, 0x00aa0569, 0x00000000 }, + { 0x00600001, 0x21c00229, 0x00aa0581, 0x00000000 }, + { 0x00600001, 0x21e00229, 0x00aa0589, 0x00000000 }, + { 0x00600001, 0x22000229, 0x00aa05a1, 0x00000000 }, + { 0x00600001, 0x22200229, 0x00aa05a9, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00aa05c1, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00aa05c9, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00aa05e1, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00aa05e9, 0x00000000 }, + { 0x00600001, 0x22c00229, 0x00aa0641, 0x00000000 }, + { 0x00600001, 0x22e00229, 0x00aa0649, 0x00000000 }, + { 0x00600001, 0x23000229, 0x00aa0661, 0x00000000 }, + { 0x00600001, 0x23200229, 0x00aa0669, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00aa0601, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00aa0609, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00aa0621, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00aa0629, 0x00000000 }, + { 0x00600001, 0x23c00229, 0x00aa0681, 0x00000000 }, + { 0x00600001, 0x23e00229, 0x00aa0689, 0x00000000 }, + { 0x00600001, 0x24000229, 0x00aa06a1, 0x00000000 }, + { 0x00600001, 0x24200229, 0x00aa06a9, 0x00000000 }, + { 0x00600001, 0x21500229, 0x00aa0741, 0x00000000 }, + { 0x00600001, 0x21700229, 0x00aa0749, 0x00000000 }, + { 0x00600001, 0x21900229, 0x00aa0761, 0x00000000 }, + { 0x00600001, 0x21b00229, 0x00aa0769, 0x00000000 }, + { 0x00600001, 0x21d00229, 0x00aa0781, 0x00000000 }, + { 0x00600001, 0x21f00229, 0x00aa0789, 0x00000000 }, + { 0x00600001, 0x22100229, 0x00aa07a1, 0x00000000 }, + { 0x00600001, 0x22300229, 0x00aa07a9, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00aa07c1, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00aa07c9, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00aa07e1, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00aa07e9, 0x00000000 }, + { 0x00600001, 0x22d00229, 0x00aa0841, 0x00000000 }, + { 0x00600001, 0x22f00229, 0x00aa0849, 0x00000000 }, + { 0x00600001, 0x23100229, 0x00aa0861, 0x00000000 }, + { 0x00600001, 0x23300229, 0x00aa0869, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00aa0801, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00aa0809, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00aa0821, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00aa0829, 0x00000000 }, + { 0x00600001, 0x23d00229, 0x00aa0881, 0x00000000 }, + { 0x00600001, 0x23f00229, 0x00aa0889, 0x00000000 }, + { 0x00600001, 0x24100229, 0x00aa08a1, 0x00000000 }, + { 0x00600001, 0x24300229, 0x00aa08a9, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00000041, 0x24407fbd, 0x000000bc, 0x41800000 }, + { 0x00000040, 0x20a477bd, 0x00000440, 0x000000a4 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffec6 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000001, 0x20a403bd, 0x00000094, 0x00000000 }, + { 0x00000041, 0x24407fbd, 0x00000038, 0x41000000 }, + { 0x00000040, 0x20a877bd, 0x00000440, 0x000000a8 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffeba }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.asm new file mode 100644 index 000000000..690d4c985 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.asm @@ -0,0 +1,26 @@ +// Module name: NV12_DN_NV12 +.kernel NV12_DN_NV12 +.code + +#define INC_DN + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" + +#define LOAD_UV_ONLY +#include "NV12_Load_8x4.asm" +#undef LOAD_UV_ONLY + +#include "PL_DN_ALG.asm" + +#include "PL8x4_Save_NV12.asm" + +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_dn_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g4b.gen5 new file mode 100644 index 000000000..619f1e63a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g4b.gen5 @@ -0,0 +1,117 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0228a002 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x204801aa, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x205801aa, 0x000000a2, 0x00000000 }, + { 0x01600031, 0x24400c01, 0x208d0000, 0x045b8004 }, + { 0x00800001, 0x21400229, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10470, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10480, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10490, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b104a0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00b104b0, 0x00000000 }, + { 0x00200008, 0x21003da1, 0x004500a0, 0x00020002 }, + { 0x00000040, 0x21002421, 0x00000100, 0x00000034 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00010003 }, + { 0x00600001, 0x21a00022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x21c00022, 0x004504c0, 0x00000000 }, + { 0x0d600031, 0x20000c04, 0x508d0000, 0x04082014 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff32 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff2c }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g6b new file mode 100644 index 000000000..f68daa609 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dn_nv12.g6b @@ -0,0 +1,190 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02298002 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x204801aa, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x205801aa, 0x000000a2, 0x00000000 }, + { 0x02600031, 0x24400cc1, 0x00000020, 0x045b8004 }, + { 0x00800001, 0x21400229, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10470, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10480, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10490, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b104a0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00b104b0, 0x00000000 }, + { 0x00200008, 0x21003da1, 0x004500a0, 0x00020002 }, + { 0x00000040, 0x21002421, 0x00000100, 0x00000034 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00010003 }, + { 0x00600001, 0x21a00022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x21c00022, 0x004504c0, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x000001a0, 0x04094014 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff32 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff2c }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.asm new file mode 100644 index 000000000..3ea9cea74 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.asm @@ -0,0 +1,18 @@ +// Module name: NV12_DNDI_NV12 +.kernel NV12_DNDI_NV12 +.code + +#define INC_DNDI + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PL_DNDI_ALG_UVCopy_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_dndi_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g4b.gen5 new file mode 100644 index 000000000..4563d2077 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g4b.gen5 @@ -0,0 +1,97 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x204801aa, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x205801aa, 0x000000a2, 0x00000000 }, + { 0x01600031, 0x24400c01, 0x208d0000, 0x04cb8004 }, + { 0x00800001, 0x21400229, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10470, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00ae0481, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00ae0491, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00ae0490, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00ae04a1, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00ae04b1, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00ae04b0, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b104d0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00b104f0, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00ae0501, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00ae0500, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00ae0511, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00ae0510, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00ae0521, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00ae0520, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00ae0531, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00ae0530, 0x00000000 }, + { 0x00000008, 0x21003da1, 0x000000a0, 0x00010001 }, + { 0x00000001, 0x210401a1, 0x000000a2, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x21600022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x21800022, 0x008d0540, 0x00000000 }, + { 0x0b600031, 0x20000c04, 0x508d0000, 0x04082014 }, + { 0x00200008, 0x21003da1, 0x004500a0, 0x00020002 }, + { 0x00000040, 0x21002421, 0x00000100, 0x00000034 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00000003 }, + { 0x00600001, 0x21a00022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x21c00022, 0x00000560, 0x00000000 }, + { 0x0d600031, 0x20000c04, 0x508d0000, 0x04082014 }, + { 0x00800001, 0x20400232, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b10470, 0x00000000 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082007 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x40400232, 0x00ae0481, 0x00000000 }, + { 0x00600001, 0x40410232, 0x00ae0490, 0x00000000 }, + { 0x00600001, 0x40500232, 0x00ae04a1, 0x00000000 }, + { 0x00600001, 0x40510232, 0x00ae04b0, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082008 }, + { 0x00800001, 0x20400232, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b104d0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b104f0, 0x00000000 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0608200a }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x40400232, 0x00ae0501, 0x00000000 }, + { 0x00600001, 0x40410232, 0x00ae0510, 0x00000000 }, + { 0x00600001, 0x40500232, 0x00ae0521, 0x00000000 }, + { 0x00600001, 0x40510232, 0x00ae0530, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0408200b }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff5a }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff54 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g6b new file mode 100644 index 000000000..8d6ebe390 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_dndi_nv12.g6b @@ -0,0 +1,170 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x204801aa, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x205801aa, 0x000000a2, 0x00000000 }, + { 0x02600031, 0x24400cc1, 0x00000020, 0x04cb8004 }, + { 0x00800001, 0x21400229, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10470, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00ae0481, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00ae0480, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00ae0491, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00ae0490, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00ae04a1, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00ae04a0, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00ae04b1, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00ae04b0, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b104d0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00b104f0, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00ae0501, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00ae0500, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00ae0511, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00ae0510, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00ae0521, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00ae0520, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00ae0531, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00ae0530, 0x00000000 }, + { 0x00000008, 0x21003da1, 0x000000a0, 0x00010001 }, + { 0x00000001, 0x210401a1, 0x000000a2, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x21600022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x21800022, 0x008d0540, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000160, 0x04094014 }, + { 0x00200008, 0x21003da1, 0x004500a0, 0x00020002 }, + { 0x00000040, 0x21002421, 0x00000100, 0x00000034 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00000003 }, + { 0x00600001, 0x21a00022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x21c00022, 0x00000560, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x000001a0, 0x04094014 }, + { 0x00800001, 0x20400232, 0x00b10440, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b10450, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b10460, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b10470, 0x00000000 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094007 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x40400232, 0x00ae0481, 0x00000000 }, + { 0x00600001, 0x40410232, 0x00ae0490, 0x00000000 }, + { 0x00600001, 0x40500232, 0x00ae04a1, 0x00000000 }, + { 0x00600001, 0x40510232, 0x00ae04b0, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094008 }, + { 0x00800001, 0x20400232, 0x00b104c0, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00b104d0, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00b104e0, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00b104f0, 0x00000000 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0609400a }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0001000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x40400232, 0x00ae0501, 0x00000000 }, + { 0x00600001, 0x40410232, 0x00ae0510, 0x00000000 }, + { 0x00600001, 0x40500232, 0x00ae0521, 0x00000000 }, + { 0x00600001, 0x40510232, 0x00ae0530, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0409400b }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff5a }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff54 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.asm new file mode 100644 index 000000000..f234f83bd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.asm @@ -0,0 +1,17 @@ +// Module name: NV12_LOAD_SAVE_NV12 +.kernel NV12_LOAD_SAVE_NV12 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "NV12_Load_8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_load_save_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g4b.gen5 new file mode 100644 index 000000000..e169464f6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g4b.gen5 @@ -0,0 +1,110 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0228a002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff40 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff3a }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g6b new file mode 100644 index 000000000..9b69967ea --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_nv12.g6b @@ -0,0 +1,183 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02298002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff40 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff3a }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.asm new file mode 100644 index 000000000..3fa4494fc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.asm @@ -0,0 +1,18 @@ +// Module name: NV12_LOAD_SAVE_pl1 +.kernel NV12_LOAD_SAVE_PL1 // what's usage of it? just a name? +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "NV12_Load_8x5.asm" +#include "PL8x5_PL8x8.asm" +#include "PL8x8_Save_PA.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_load_save_pl1.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g4b.gen5 new file mode 100644 index 000000000..9fae14566 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g4b.gen5 @@ -0,0 +1,121 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0004000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0238a002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00ae0840, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00ae0841, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00ae0820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00ae0821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00ae0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00ae0801, 0x00000000 }, + { 0x80600042, 0x22b02529, 0x008d0270, 0x008d0280 }, + { 0x80600042, 0x23b02529, 0x008d0370, 0x008d0380 }, + { 0x00600001, 0x22a00129, 0x008d0270, 0x00000000 }, + { 0x80600042, 0x22902529, 0x008d0260, 0x008d0270 }, + { 0x00600001, 0x23a00129, 0x008d0370, 0x00000000 }, + { 0x80600042, 0x23902529, 0x008d0360, 0x008d0370 }, + { 0x00600001, 0x22800129, 0x008d0260, 0x00000000 }, + { 0x80600042, 0x22702529, 0x008d0250, 0x008d0260 }, + { 0x00600001, 0x23800129, 0x008d0360, 0x00000000 }, + { 0x80600042, 0x23702529, 0x008d0350, 0x008d0360 }, + { 0x00600001, 0x22600129, 0x008d0250, 0x00000000 }, + { 0x80600042, 0x22502529, 0x008d0240, 0x008d0250 }, + { 0x00600001, 0x23600129, 0x008d0350, 0x00000000 }, + { 0x80600042, 0x23502529, 0x008d0340, 0x008d0350 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x01600031, 0x21400c01, 0x408d0000, 0x0288a007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x12082007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff2a }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff24 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g6b new file mode 100644 index 000000000..53af4e487 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pa.g6b @@ -0,0 +1,194 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0004000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02398002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00ae0840, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00ae0841, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00ae0820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00ae0821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00ae0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00ae0801, 0x00000000 }, + { 0x80600042, 0x22b02529, 0x008d0270, 0x008d0280 }, + { 0x80600042, 0x23b02529, 0x008d0370, 0x008d0380 }, + { 0x00600001, 0x22a00129, 0x008d0270, 0x00000000 }, + { 0x80600042, 0x22902529, 0x008d0260, 0x008d0270 }, + { 0x00600001, 0x23a00129, 0x008d0370, 0x00000000 }, + { 0x80600042, 0x23902529, 0x008d0360, 0x008d0370 }, + { 0x00600001, 0x22800129, 0x008d0260, 0x00000000 }, + { 0x80600042, 0x22702529, 0x008d0250, 0x008d0260 }, + { 0x00600001, 0x23800129, 0x008d0360, 0x00000000 }, + { 0x80600042, 0x23702529, 0x008d0350, 0x008d0360 }, + { 0x00600001, 0x22600129, 0x008d0250, 0x00000000 }, + { 0x80600042, 0x22502529, 0x008d0240, 0x008d0250 }, + { 0x00600001, 0x23600129, 0x008d0350, 0x00000000 }, + { 0x80600042, 0x23502529, 0x008d0340, 0x008d0350 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x04600031, 0x21400cc1, 0x00000020, 0x02898007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x12094007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff2a }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff24 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.asm new file mode 100644 index 000000000..9fa44a12f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.asm @@ -0,0 +1,17 @@ +// Module name: NV12_LOAD_SAVE_PL3 +.kernel NV12_LOAD_SAVE_PL3 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "NV12_Load_8x4.asm" +#include "PL8x4_Save_IMC3.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_load_save_pl3.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g4b.gen5 new file mode 100644 index 000000000..86d5dc745 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g4b.gen5 @@ -0,0 +1,109 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0228a002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0218a008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x29000c01, 0x408d0000, 0x0218a009 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff42 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff3c }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g6b new file mode 100644 index 000000000..85a37f9b5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_pl3.g6b @@ -0,0 +1,182 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02298002 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00d20820, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00d20821, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00d20800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00d20801, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02198008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000020, 0x02198009 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff42 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff3c }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.asm new file mode 100644 index 000000000..72cd96b92 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.asm @@ -0,0 +1,25 @@ +// Module name: NV12_LOAD_SAVE_RGBX +.kernel NV12_LOAD_SAVE_RGBX +.code +#define FIX_POINT_CONVERSION +// #define FLOAT_POINT_CONVERSION + +#include "SetupVPKernel.asm" +#include "YUV_to_RGBX_Coef.asm" +#include "Multiple_Loop_Head.asm" +#include "NV12_Load_8x4.asm" +#ifdef FIX_POINT_CONVERSION + #include "YUVX_Save_RGBX_Fix.asm" +#else + #include "YUVX_Save_RGBX_Float.asm" +#endif +#include "RGB16x8_Save_RGB.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_load_save_rgbx.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g4b.gen5 new file mode 100644 index 000000000..25b21bce8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g4b.gen5 @@ -0,0 +1,721 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x02000005, 0x20000c24, 0x02000028, 0xff000000 }, + { 0x00110001, 0x24400061, 0x02000000, 0x0000012a }, + { 0x00110001, 0x24440061, 0x02000000, 0x00000199 }, + { 0x00010001, 0x24500061, 0x02000000, 0x0000012a }, + { 0x00010001, 0x24540061, 0x02000000, 0x00000199 }, + { 0x00000001, 0x24480061, 0x00000000, 0xff9c012a }, + { 0x00000001, 0x244c0061, 0x00000000, 0x0000ff30 }, + { 0x00110001, 0x24500061, 0x02000000, 0x0204012a }, + { 0x00110001, 0x24540061, 0x02000000, 0x00000000 }, + { 0x00010001, 0x24400061, 0x02000000, 0x0204012a }, + { 0x00010001, 0x24440061, 0x02000000, 0x00000000 }, + { 0x8060000c, 0x24403dad, 0x000d0440, 0x00010001 }, + { 0x8040000c, 0x24503dad, 0x00090450, 0x00010001 }, + { 0x00000001, 0x24580061, 0x00000000, 0x008080f0 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0228a002 }, + { 0x00600001, 0x63000231, 0x000d0770, 0x00000000 }, + { 0x00600001, 0x63200231, 0x000d0778, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x63010231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x63210231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x63020231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x63220231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62c00231, 0x000d0760, 0x00000000 }, + { 0x00600001, 0x62e00231, 0x000d0768, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x62c10231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62e10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62c20231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62e20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62800231, 0x000d0750, 0x00000000 }, + { 0x00600001, 0x62a00231, 0x000d0758, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x62810231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62a10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62820231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62a20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62400231, 0x000d0740, 0x00000000 }, + { 0x00600001, 0x62600231, 0x000d0748, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x62410231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62610231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62420231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62620231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62000231, 0x000d0730, 0x00000000 }, + { 0x00600001, 0x62200231, 0x000d0738, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x62010231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62210231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62020231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62220231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61c00231, 0x000d0720, 0x00000000 }, + { 0x00600001, 0x61e00231, 0x000d0728, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x61c10231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61e10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61c20231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61e20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61800231, 0x000d0710, 0x00000000 }, + { 0x00600001, 0x61a00231, 0x000d0718, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x61810231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61a10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61820231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61a20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61400231, 0x000d0700, 0x00000000 }, + { 0x00600001, 0x61600231, 0x000d0708, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x61410231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61610231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61420231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61620231, 0x000e0691, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110140, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110150, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110160, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110170, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61400231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61600231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61410231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61610231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61420231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61620231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110180, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110190, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001101a0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001101b0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61800231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61a00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61810231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61a10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61820231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61a20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x001101c0, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x001101d0, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001101e0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001101f0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61c00231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61e00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61c10231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61e10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61c20231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61e20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110200, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110210, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110220, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110230, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62000231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62200231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62010231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62210231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62020231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62220231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110240, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110250, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110260, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110270, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62400231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62600231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62410231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62610231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62420231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62620231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110280, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110290, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001102a0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001102b0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62800231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62a00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62810231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62a10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62820231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62a20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x001102c0, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x001102d0, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001102e0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001102f0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62c00231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62e00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62c10231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62e10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62c20231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62e20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110300, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110310, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110320, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110330, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x63000231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x63200231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x63010231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x63210231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x63020231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x63220231, 0x000d0468, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00020002 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000006, 0x24000c20, 0x000000b8, 0xff00ff00 }, + { 0x01000010, 0x20000c04, 0x00000400, 0xffffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00710001, 0x21400021, 0x028d0700, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00710001, 0x21800021, 0x028d0720, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00710001, 0x21c00021, 0x028d0740, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00710001, 0x22000021, 0x028d0760, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00710001, 0x22400021, 0x028d0780, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00710001, 0x22800021, 0x028d07a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00710001, 0x22c00021, 0x028d07c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00710001, 0x23000021, 0x028d07e0, 0x00000000 }, + { 0x00000006, 0x24000c20, 0x000000b8, 0xff0000ff }, + { 0x01000010, 0x20000c04, 0x00000400, 0xffffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000040, 0x20201ca6, 0x00000100, 0x00000020 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610008, 0x24402d29, 0x000000b8, 0x00080008 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00710001, 0x21600021, 0x028d0700, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00710001, 0x21a00021, 0x028d0720, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00710001, 0x21e00021, 0x028d0740, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00710001, 0x22200021, 0x028d0760, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00710001, 0x22600021, 0x028d0780, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00710001, 0x22a00021, 0x028d07a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00710001, 0x22e00021, 0x028d07c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00710001, 0x23200021, 0x028d07e0, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d0280, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d02c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d0300, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x12082007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000040, 0x20201ca6, 0x00000100, 0x00000020 }, + { 0x00600001, 0x20400022, 0x008d0160, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0220, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0260, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d02a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d02e0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d0320, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x12082007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffa96 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffa90 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g6b new file mode 100644 index 000000000..c97d64d1c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_load_save_rgbx.g6b @@ -0,0 +1,794 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x02000005, 0x20000c24, 0x02000028, 0xff000000 }, + { 0x00110001, 0x24400061, 0x02000000, 0x0000012a }, + { 0x00110001, 0x24440061, 0x02000000, 0x00000199 }, + { 0x00010001, 0x24500061, 0x02000000, 0x0000012a }, + { 0x00010001, 0x24540061, 0x02000000, 0x00000199 }, + { 0x00000001, 0x24480061, 0x00000000, 0xff9c012a }, + { 0x00000001, 0x244c0061, 0x00000000, 0x0000ff30 }, + { 0x00110001, 0x24500061, 0x02000000, 0x0204012a }, + { 0x00110001, 0x24540061, 0x02000000, 0x00000000 }, + { 0x00010001, 0x24400061, 0x02000000, 0x0204012a }, + { 0x00010001, 0x24440061, 0x02000000, 0x00000000 }, + { 0x8060000c, 0x24403dad, 0x000d0440, 0x00010001 }, + { 0x8040000c, 0x24503dad, 0x00090450, 0x00010001 }, + { 0x00000001, 0x24580061, 0x00000000, 0x008080f0 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02298002 }, + { 0x00600001, 0x63000231, 0x000d0770, 0x00000000 }, + { 0x00600001, 0x63200231, 0x000d0778, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x63010231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x63210231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x63020231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x63220231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62c00231, 0x000d0760, 0x00000000 }, + { 0x00600001, 0x62e00231, 0x000d0768, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0830, 0x00000000 }, + { 0x00600001, 0x62c10231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62e10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62c20231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62e20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62800231, 0x000d0750, 0x00000000 }, + { 0x00600001, 0x62a00231, 0x000d0758, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x62810231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62a10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62820231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62a20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62400231, 0x000d0740, 0x00000000 }, + { 0x00600001, 0x62600231, 0x000d0748, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0820, 0x00000000 }, + { 0x00600001, 0x62410231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62610231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62420231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62620231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x62000231, 0x000d0730, 0x00000000 }, + { 0x00600001, 0x62200231, 0x000d0738, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x62010231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x62210231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x62020231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x62220231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61c00231, 0x000d0720, 0x00000000 }, + { 0x00600001, 0x61e00231, 0x000d0728, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0810, 0x00000000 }, + { 0x00600001, 0x61c10231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61e10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61c20231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61e20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61800231, 0x000d0710, 0x00000000 }, + { 0x00600001, 0x61a00231, 0x000d0718, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x61810231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61a10231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61820231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61a20231, 0x000e0691, 0x00000000 }, + { 0x00600001, 0x61400231, 0x000d0700, 0x00000000 }, + { 0x00600001, 0x61600231, 0x000d0708, 0x00000000 }, + { 0x00600001, 0x46800129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x46820129, 0x000d0800, 0x00000000 }, + { 0x00600001, 0x61410231, 0x000e0680, 0x00000000 }, + { 0x00600001, 0x61610231, 0x000e0690, 0x00000000 }, + { 0x00600001, 0x61420231, 0x000e0681, 0x00000000 }, + { 0x00600001, 0x61620231, 0x000e0691, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110140, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110150, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110160, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110170, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61400231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61600231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61410231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61610231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61420231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61620231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110180, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110190, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001101a0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001101b0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61800231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61a00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61810231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61a10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61820231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61a20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x001101c0, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x001101d0, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001101e0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001101f0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x61c00231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x61e00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x61c10231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x61e10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x61c20231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x61e20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110200, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110210, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110220, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110230, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62000231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62200231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62010231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62210231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62020231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62220231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110240, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110250, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110260, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110270, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62400231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62600231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62410231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62610231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62420231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62620231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110280, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110290, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001102a0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001102b0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62800231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62a00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62810231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62a10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62820231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62a20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x001102c0, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x001102d0, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x001102e0, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x001102f0, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x62c00231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x62e00231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x62c10231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x62e10231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x62c20231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x62e20231, 0x000d0468, 0x00000000 }, + { 0x00800040, 0x2580562d, 0x00110300, 0x00090458 }, + { 0x00800040, 0x25c0562d, 0x00110310, 0x00090458 }, + { 0x00800040, 0x2600562d, 0x00110320, 0x00090458 }, + { 0x00800040, 0x2640562d, 0x00110330, 0x00090458 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090440 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090440 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090440 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090440 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24600231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090448 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090448 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090448 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090448 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24800231, 0x00120541, 0x00000000 }, + { 0x80800041, 0x24c035ad, 0x00110580, 0x00090450 }, + { 0x80800041, 0x24e035ad, 0x001105c0, 0x00090450 }, + { 0x80800041, 0x250035ad, 0x00110600, 0x00090450 }, + { 0x80800041, 0x252035ad, 0x00110640, 0x00090450 }, + { 0x80400040, 0x64c035a9, 0x000b04c0, 0x000b04c2 }, + { 0x80400040, 0x64e035a9, 0x000b04e0, 0x000b04e2 }, + { 0x80400040, 0x650035a9, 0x000b0500, 0x000b0502 }, + { 0x80400040, 0x652035a9, 0x000b0520, 0x000b0522 }, + { 0x80400040, 0x64c03529, 0x000b04c0, 0x000b04c4 }, + { 0x80400040, 0x64e03529, 0x000b04e0, 0x000b04e4 }, + { 0x80400040, 0x65003529, 0x000b0500, 0x000b0504 }, + { 0x80400040, 0x65203529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x80800040, 0x25402d29, 0x00110540, 0x00800080 }, + { 0x80800009, 0x25403d29, 0x00110540, 0x00010001 }, + { 0x00800001, 0x24a00231, 0x00120541, 0x00000000 }, + { 0x00600001, 0x63000231, 0x000d04a0, 0x00000000 }, + { 0x00600001, 0x63200231, 0x000d04a8, 0x00000000 }, + { 0x00600001, 0x63010231, 0x000d0480, 0x00000000 }, + { 0x00600001, 0x63210231, 0x000d0488, 0x00000000 }, + { 0x00600001, 0x63020231, 0x000d0460, 0x00000000 }, + { 0x00600001, 0x63220231, 0x000d0468, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00020002 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000062 }, + { 0x00000006, 0x24000c20, 0x000000b8, 0xff00ff00 }, + { 0x01000010, 0x20000c04, 0x00000400, 0xffffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00710001, 0x21400021, 0x028d0700, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00710001, 0x21800021, 0x028d0720, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00710001, 0x21c00021, 0x028d0740, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00710001, 0x22000021, 0x028d0760, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00710001, 0x22400021, 0x028d0780, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00710001, 0x22800021, 0x028d07a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00710001, 0x22c00021, 0x028d07c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00710001, 0x23000021, 0x028d07e0, 0x00000000 }, + { 0x00000006, 0x24000c20, 0x000000b8, 0xff0000ff }, + { 0x01000010, 0x20000c04, 0x00000400, 0xffffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00000040, 0x20201ca6, 0x00000100, 0x00000020 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610008, 0x24402d29, 0x000000b8, 0x00080008 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00710001, 0x21600021, 0x028d0700, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00710001, 0x21a00021, 0x028d0720, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00710001, 0x21e00021, 0x028d0740, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00710001, 0x22200021, 0x028d0760, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00710001, 0x22600021, 0x028d0780, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00710001, 0x22a00021, 0x028d07a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00710001, 0x22e00021, 0x028d07c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00710001, 0x23200021, 0x028d07e0, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d0280, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d02c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d0300, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x12094007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000040, 0x20201ca6, 0x00000100, 0x00000020 }, + { 0x00600001, 0x20400022, 0x008d0160, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0220, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0260, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d02a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d02e0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d0320, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x12094007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffa96 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffa90 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.asm new file mode 100644 index 000000000..d93d87955 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.asm @@ -0,0 +1,20 @@ +// Module name: NV12_SCALING_NV12 +.kernel NV12_SCALING_NV12 +.code + +#define INC_SCALING + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PL2_Scaling.asm" +#include "PL16x8_PL8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_scaling_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g4b.gen5 new file mode 100644 index 000000000..11da70ec4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g4b.gen5 @@ -0,0 +1,226 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00400001, 0x254002fd, 0x00000000, 0x48403000 }, + { 0x00400001, 0x255002fd, 0x00000000, 0x5c585450 }, + { 0x00600040, 0x25607fbd, 0x008d0540, 0x41000000 }, + { 0x00200401, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x00000000 }, + { 0x00802001, 0x208003be, 0x000000a8, 0x00000000 }, + { 0x00802001, 0x258003bd, 0x000000a8, 0x00000000 }, + { 0x00802001, 0x240003bc, 0x000000a4, 0x00000000 }, + { 0x00802048, 0x204077be, 0x000000bc, 0x008d0540 }, + { 0x00000401, 0x257003fd, 0x00000000, 0x437f0000 }, + { 0x00000801, 0x257c03fd, 0x00000000, 0x3f000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22a00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23a00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22c00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23c00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22e00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23e00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x23000229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x24000229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01800031, 0x27001c09, 0x208d0000, 0x0a8a0101 }, + { 0x01800031, 0x28001c09, 0x208d0000, 0x0a8a0202 }, + { 0x00802040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00802040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00802001, 0x27000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00802001, 0x28000381, 0x00b10400, 0x00000000 }, + { 0x00802059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00802001, 0x28400381, 0x00b10400, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x23200229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00000041, 0x24407fbd, 0x000000bc, 0x41800000 }, + { 0x00000040, 0x20a477bd, 0x00000440, 0x000000a4 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffe5e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000001, 0x20a403bd, 0x00000094, 0x00000000 }, + { 0x00000041, 0x24407fbd, 0x00000038, 0x41000000 }, + { 0x00000040, 0x20a877bd, 0x00000440, 0x000000a8 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffe52 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g6b new file mode 100644 index 000000000..ffaf8ef76 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/nv12_scaling_nv12.g6b @@ -0,0 +1,299 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00400001, 0x254002fd, 0x00000000, 0x48403000 }, + { 0x00400001, 0x255002fd, 0x00000000, 0x5c585450 }, + { 0x00600040, 0x25607fbd, 0x008d0540, 0x41000000 }, + { 0x00200401, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x208003be, 0x000000a8, 0x00000000 }, + { 0x00800001, 0x258003bd, 0x000000a8, 0x00000000 }, + { 0x00800001, 0x240003bc, 0x000000a4, 0x00000000 }, + { 0x00800048, 0x204077be, 0x000000bc, 0x008d0540 }, + { 0x00000401, 0x257003fd, 0x00000000, 0x437f0000 }, + { 0x00000801, 0x257c03fd, 0x00000000, 0x3f000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22a00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23a00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22c00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23c00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x22e00229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x23e00229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x23000229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x24000229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x02800031, 0x27001cc9, 0x00000020, 0x0a8a0101 }, + { 0x02800031, 0x28001cc9, 0x00000020, 0x0a8a0202 }, + { 0x00800040, 0x208077be, 0x008d0580, 0x00000038 }, + { 0x00800040, 0x258077bd, 0x008d0580, 0x00000038 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0700 }, + { 0x00800001, 0x27000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0800 }, + { 0x00800001, 0x28000381, 0x008d0400, 0x00000000 }, + { 0x00800059, 0x240077bc, 0x00000570, 0x008d0840 }, + { 0x00800001, 0x28400381, 0x008d0400, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00cf0700, 0x00000000 }, + { 0x00800001, 0x23200229, 0x00cf0800, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00cf0840, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00000041, 0x24407fbd, 0x000000bc, 0x41800000 }, + { 0x00000040, 0x20a477bd, 0x00000440, 0x000000a4 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffe5e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000001, 0x20a403bd, 0x00000094, 0x00000000 }, + { 0x00000041, 0x24407fbd, 0x00000038, 0x41000000 }, + { 0x00000040, 0x20a877bd, 0x00000440, 0x000000a8 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffe52 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.asm new file mode 100644 index 000000000..bd68a92ea --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.asm @@ -0,0 +1,18 @@ +// Module name: PA_LOAD_SAVE_NV12 +.kernel PA_LOAD_SAVE_NV12 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PA_Load_8x8.asm" +#include "PL8x8_PL8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of nv12_load_save_pl1.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g4b.gen5 new file mode 100644 index 000000000..14d883e90 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g4b.gen5 @@ -0,0 +1,124 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00600001, 0x42500231, 0x00ae0260, 0x00000000 }, + { 0x00800001, 0x42600231, 0x00ce0280, 0x00000000 }, + { 0x00600001, 0x43500231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0x43600231, 0x00ce0380, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff24 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff1e }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g6b new file mode 100644 index 000000000..eba4ef5dc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_nv12.g6b @@ -0,0 +1,197 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00600001, 0x42500231, 0x00ae0260, 0x00000000 }, + { 0x00800001, 0x42600231, 0x00ce0280, 0x00000000 }, + { 0x00600001, 0x43500231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0x43600231, 0x00ce0380, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff24 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff1e }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm new file mode 100644 index 000000000..72c2a8ad8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm @@ -0,0 +1,17 @@ +// Module name: PA_LOAD_SAVE_PA +.kernel PA_LOAD_SAVE_PA +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PA_Load_8x8.asm" +#include "PL8x8_Save_PA.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pa_load_save_pa.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g4b.gen5 new file mode 100644 index 000000000..a75c75a12 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g4b.gen5 @@ -0,0 +1,115 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x01600031, 0x21400c01, 0x408d0000, 0x0288a007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x12082007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff36 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff30 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g6b new file mode 100644 index 000000000..5d9fe48fa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pa.g6b @@ -0,0 +1,188 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x04600031, 0x21400cc1, 0x00000020, 0x02898007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x12094007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff36 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff30 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.asm new file mode 100644 index 000000000..9a79ac10b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.asm @@ -0,0 +1,18 @@ +// Module name: PA_LOAD_SAVE_PL3 +.kernel PA_LOAD_SAVE_PL3 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PA_Load_8x8.asm" +#include "PL8x8_PL8x4.asm" +#include "PL8x4_Save_IMC3.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pa_load_save_pl3.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g4b.gen5 new file mode 100644 index 000000000..6f79a69ac --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g4b.gen5 @@ -0,0 +1,127 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00600001, 0x42500231, 0x00ae0260, 0x00000000 }, + { 0x00800001, 0x42600231, 0x00ce0280, 0x00000000 }, + { 0x00600001, 0x43500231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0x43600231, 0x00ce0380, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0218a008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x29000c01, 0x408d0000, 0x0218a009 }, + { 0x00800001, 0x28600229, 0x008d0830, 0x00000000 }, + { 0x00800001, 0x29600229, 0x008d0930, 0x00000000 }, + { 0x00800001, 0x28400229, 0x008d0820, 0x00000000 }, + { 0x00800001, 0x29400229, 0x008d0920, 0x00000000 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff1e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff18 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g6b new file mode 100644 index 000000000..7bcc5ca7b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pa_load_save_pl3.g6b @@ -0,0 +1,200 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000009, 0x21003da5, 0x00000100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898001 }, + { 0x00400040, 0x22083e28, 0x00690024, 0x07000700 }, + { 0x00800001, 0x21400229, 0x00d29000, 0x00000000 }, + { 0x00600001, 0x22400229, 0x00cf9400, 0x00000000 }, + { 0x00600001, 0x23400229, 0x00cf9800, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00d29020, 0x00000000 }, + { 0x00600001, 0x22500229, 0x00cf9420, 0x00000000 }, + { 0x00600001, 0x23500229, 0x00cf9820, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00d29040, 0x00000000 }, + { 0x00600001, 0x22600229, 0x00cf9440, 0x00000000 }, + { 0x00600001, 0x23600229, 0x00cf9840, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00d29060, 0x00000000 }, + { 0x00600001, 0x22700229, 0x00cf9460, 0x00000000 }, + { 0x00600001, 0x23700229, 0x00cf9860, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00d29080, 0x00000000 }, + { 0x00600001, 0x22800229, 0x00cf9480, 0x00000000 }, + { 0x00600001, 0x23800229, 0x00cf9880, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00d290a0, 0x00000000 }, + { 0x00600001, 0x22900229, 0x00cf94a0, 0x00000000 }, + { 0x00600001, 0x23900229, 0x00cf98a0, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00d290c0, 0x00000000 }, + { 0x00600001, 0x22a00229, 0x00cf94c0, 0x00000000 }, + { 0x00600001, 0x23a00229, 0x00cf98c0, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00d290e0, 0x00000000 }, + { 0x00600001, 0x22b00229, 0x00cf94e0, 0x00000000 }, + { 0x00600001, 0x23b00229, 0x00cf98e0, 0x00000000 }, + { 0x00600001, 0x42500231, 0x00ae0260, 0x00000000 }, + { 0x00800001, 0x42600231, 0x00ce0280, 0x00000000 }, + { 0x00600001, 0x43500231, 0x00ae0360, 0x00000000 }, + { 0x00800001, 0x43600231, 0x00ce0380, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000005a }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02198008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000020, 0x02198009 }, + { 0x00800001, 0x28600229, 0x008d0830, 0x00000000 }, + { 0x00800001, 0x29600229, 0x008d0930, 0x00000000 }, + { 0x00800001, 0x28400229, 0x008d0820, 0x00000000 }, + { 0x00800001, 0x29400229, 0x008d0920, 0x00000000 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff1e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff18 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.asm new file mode 100644 index 000000000..cd1b5fea5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.asm @@ -0,0 +1,17 @@ +// Module name: PL3_LOAD_SAVE_NV12 +.kernel PL3_LOAD_SAVE_NV12 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "IMC3_Load_8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pl3_load_save_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g4b.gen5 new file mode 100644 index 000000000..182be7c4b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g4b.gen5 @@ -0,0 +1,112 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0218a002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x29000c01, 0x408d0000, 0x0218a003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff3c }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff36 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g6b new file mode 100644 index 000000000..a1ab71a63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_nv12.g6b @@ -0,0 +1,185 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02198002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000040, 0x02198003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff3c }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff36 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.asm new file mode 100644 index 000000000..11efe0ad6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.asm @@ -0,0 +1,18 @@ +// Module name: PL3_LOAD_SAVE_pa +.kernel PL3_LOAD_SAVE_PA // what's usage of it? just a name? +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "IMC3_Load_8x5.asm" +#include "PL8x5_PL8x8.asm" +#include "PL8x8_Save_PA.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pl3_load_save_pa.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g4b.gen5 new file mode 100644 index 000000000..dbac5a712 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g4b.gen5 @@ -0,0 +1,123 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00040007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0228a002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x29000c01, 0x408d0000, 0x0228a003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x008d0820, 0x00000000 }, + { 0x00800001, 0x23800229, 0x008d0920, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x80600042, 0x22b02529, 0x008d0270, 0x008d0280 }, + { 0x80600042, 0x23b02529, 0x008d0370, 0x008d0380 }, + { 0x00600001, 0x22a00129, 0x008d0270, 0x00000000 }, + { 0x80600042, 0x22902529, 0x008d0260, 0x008d0270 }, + { 0x00600001, 0x23a00129, 0x008d0370, 0x00000000 }, + { 0x80600042, 0x23902529, 0x008d0360, 0x008d0370 }, + { 0x00600001, 0x22800129, 0x008d0260, 0x00000000 }, + { 0x80600042, 0x22702529, 0x008d0250, 0x008d0260 }, + { 0x00600001, 0x23800129, 0x008d0360, 0x00000000 }, + { 0x80600042, 0x23702529, 0x008d0350, 0x008d0360 }, + { 0x00600001, 0x22600129, 0x008d0250, 0x00000000 }, + { 0x80600042, 0x22502529, 0x008d0240, 0x008d0250 }, + { 0x00600001, 0x23600129, 0x008d0350, 0x00000000 }, + { 0x80600042, 0x23502529, 0x008d0340, 0x008d0350 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x01600031, 0x21400c01, 0x408d0000, 0x0288a007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x12082007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff26 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff20 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g6b new file mode 100644 index 000000000..3af6f3f43 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pa.g6b @@ -0,0 +1,196 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00040007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02298002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000040, 0x02298003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22800229, 0x008d0820, 0x00000000 }, + { 0x00800001, 0x23800229, 0x008d0920, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x80600042, 0x22b02529, 0x008d0270, 0x008d0280 }, + { 0x80600042, 0x23b02529, 0x008d0370, 0x008d0380 }, + { 0x00600001, 0x22a00129, 0x008d0270, 0x00000000 }, + { 0x80600042, 0x22902529, 0x008d0260, 0x008d0270 }, + { 0x00600001, 0x23a00129, 0x008d0370, 0x00000000 }, + { 0x80600042, 0x23902529, 0x008d0360, 0x008d0370 }, + { 0x00600001, 0x22800129, 0x008d0260, 0x00000000 }, + { 0x80600042, 0x22702529, 0x008d0250, 0x008d0260 }, + { 0x00600001, 0x23800129, 0x008d0360, 0x00000000 }, + { 0x80600042, 0x23702529, 0x008d0350, 0x008d0360 }, + { 0x00600001, 0x22600129, 0x008d0250, 0x00000000 }, + { 0x80600042, 0x22502529, 0x008d0240, 0x008d0250 }, + { 0x00600001, 0x23600129, 0x008d0350, 0x00000000 }, + { 0x80600042, 0x23502529, 0x008d0340, 0x008d0350 }, + { 0x00400040, 0x22083e28, 0x00690028, 0x07000700 }, + { 0x00800001, 0xd0000231, 0x00d20140, 0x00000000 }, + { 0x00800001, 0xd0200231, 0x00d20160, 0x00000000 }, + { 0x00800001, 0xd0400231, 0x00d20180, 0x00000000 }, + { 0x00800001, 0xd0600231, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0xd0800231, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0xd0a00231, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0xd0c00231, 0x00d20200, 0x00000000 }, + { 0x00800001, 0xd0e00231, 0x00d20220, 0x00000000 }, + { 0x00600001, 0xf4000231, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0xf8000231, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0xf4200231, 0x00ae0250, 0x00000000 }, + { 0x00600001, 0xf8200231, 0x00ae0350, 0x00000000 }, + { 0x00600001, 0xf4400231, 0x00ae0260, 0x00000000 }, + { 0x00600001, 0xf8400231, 0x00ae0360, 0x00000000 }, + { 0x00600001, 0xf4600231, 0x00ae0270, 0x00000000 }, + { 0x00600001, 0xf8600231, 0x00ae0370, 0x00000000 }, + { 0x00600001, 0xf4800231, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0xf8800231, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0xf4a00231, 0x00ae0290, 0x00000000 }, + { 0x00600001, 0xf8a00231, 0x00ae0390, 0x00000000 }, + { 0x00600001, 0xf4c00231, 0x00ae02a0, 0x00000000 }, + { 0x00600001, 0xf8c00231, 0x00ae03a0, 0x00000000 }, + { 0x00600001, 0xf4e00231, 0x00ae02b0, 0x00000000 }, + { 0x00600001, 0xf8e00231, 0x00ae03b0, 0x00000000 }, + { 0x00000409, 0x21003da5, 0x000000a0, 0x00010001 }, + { 0x00000c01, 0x210401a5, 0x000000a2, 0x00000000 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x04600031, 0x21400cc1, 0x00000020, 0x02898007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x27000129, 0x02b10140, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x27200129, 0x02b10160, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x27400129, 0x02b10180, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x27600129, 0x02b101a0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x27800129, 0x02b101c0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x27a00129, 0x02b101e0, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x27c00129, 0x02b10200, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x27e00129, 0x02b10220, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0700, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d0720, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x20a00022, 0x008d0760, 0x00000000 }, + { 0x00600001, 0x20c00022, 0x008d0780, 0x00000000 }, + { 0x00600001, 0x20e00022, 0x008d07a0, 0x00000000 }, + { 0x00600001, 0x21000022, 0x008d07c0, 0x00000000 }, + { 0x00600001, 0x21200022, 0x008d07e0, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x12094007 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff26 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff20 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.asm new file mode 100644 index 000000000..f2e940600 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.asm @@ -0,0 +1,17 @@ +// Module name: PL3_LOAD_SAVE_pl3 +.kernel PL3_LOAD_SAVE_PL3 +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "IMC3_Load_8x4.asm" +#include "PL8x4_Save_IMC3.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pl3_load_save_pl3.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g4b.gen5 new file mode 100644 index 000000000..9a90bccd2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g4b.gen5 @@ -0,0 +1,111 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x28000c01, 0x408d0000, 0x0218a002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x02600031, 0x29000c01, 0x408d0000, 0x0218a003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0218a008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x29000c01, 0x408d0000, 0x0218a009 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x04082009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff3e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff38 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g6b new file mode 100644 index 000000000..797fc886b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/pl3_load_save_pl3.g6b @@ -0,0 +1,184 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498001 }, + { 0x0020000c, 0x21003ca5, 0x00450100, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20400022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000040, 0x02198002 }, + { 0x00600001, 0x20600022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000040, 0x02198003 }, + { 0x00800001, 0x22200229, 0x00b10770, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00b10760, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00b10750, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00b10740, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00b10730, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00b10720, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00b10710, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00b10700, 0x00000000 }, + { 0x00800001, 0x22600229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x23600229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x22400229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x23400229, 0x008d0900, 0x00000000 }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000052 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02198008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x29000cc1, 0x00000020, 0x02198009 }, + { 0x00800001, 0x28200229, 0x008d0810, 0x00000000 }, + { 0x00800001, 0x29200229, 0x008d0910, 0x00000000 }, + { 0x00800001, 0x28000229, 0x008d0800, 0x00000000 }, + { 0x00800001, 0x29000229, 0x008d0900, 0x00000000 }, + { 0x00000001, 0x26000228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x000000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x00910001, 0x22400231, 0x028d0800, 0x00000000 }, + { 0x00910001, 0x23400231, 0x028d0900, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x00910001, 0x22500231, 0x028d0810, 0x00000000 }, + { 0x00910001, 0x23500231, 0x028d0910, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x00910001, 0x22600231, 0x028d0820, 0x00000000 }, + { 0x00910001, 0x23600231, 0x028d0920, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x00910001, 0x22700231, 0x028d0830, 0x00000000 }, + { 0x00910001, 0x23700231, 0x028d0930, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x0020000c, 0x21003da5, 0x004500a0, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x00030007 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20260, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094008 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x04094009 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xffffff3e }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xffffff38 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.asm new file mode 100644 index 000000000..4922cc7db --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.asm @@ -0,0 +1,26 @@ +// Module name: RGBX_LOAD_SAVE_NV12 +.kernel RGBX_LOAD_SAVE_NV12 +.code +#define FIX_POINT_CONVERSION +// #define FLOAT_POINT_CONVERSION + +#include "SetupVPKernel.asm" +#include "RGBX_to_YUV_Coef.asm" +#include "Multiple_Loop_Head.asm" +#include "RGBX_Load_16x8.asm" +#ifdef FIX_POINT_CONVERSION + #include "RGBX_Save_YUV_Fix.asm" +#else + #include "RGBX_Save_YUV_Float.asm" +#endif +#include "PL16x8_PL8x4.asm" +#include "PL8x4_Save_NV12.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of rgbx_load_save_nv12.asm diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g4b.gen5 new file mode 100644 index 000000000..b57ea4dbb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g4b.gen5 @@ -0,0 +1,570 @@ + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x02000005, 0x20000c24, 0x02000024, 0xff000000 }, + { 0x00110001, 0x24400061, 0x02000000, 0x00428119 }, + { 0x00010001, 0x24400061, 0x02000000, 0x00198142 }, + { 0x00110001, 0x24440061, 0x02000000, 0x00dab670 }, + { 0x00010001, 0x24440061, 0x02000000, 0x0070b6da }, + { 0x00110001, 0x24480061, 0x02000000, 0x0070a2ee }, + { 0x00010001, 0x24480061, 0x02000000, 0x00eea270 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000409, 0x21003da5, 0x00000100, 0x00020002 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0288a001 }, + { 0x00000040, 0x21003ca5, 0x00000100, 0x00200020 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0288a001 }, + { 0x00000001, 0x22000060, 0x00000000, 0x08000700 }, + { 0x00800041, 0x24c04629, 0x00118000, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118010, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118400, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118410, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118000, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118010, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118400, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118410, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118000, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118010, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118400, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118410, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118020, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118030, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118420, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118430, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118020, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118030, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118420, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118430, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118020, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118030, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118420, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118430, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118040, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118050, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118440, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118450, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118040, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118050, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118440, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118450, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118040, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118050, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118440, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118450, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118060, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118070, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118460, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118470, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118060, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118070, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118460, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118470, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118060, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118070, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118460, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118470, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118080, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118090, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118480, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118490, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118080, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118090, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118480, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118490, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118080, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118090, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118480, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118490, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180a0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180b0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184a0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184b0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180a0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180b0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184a0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184b0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180a0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180b0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184a0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184b0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180c0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180d0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184c0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184d0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180c0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180d0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184c0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184d0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180c0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180d0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184c0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184d0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x24000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180e0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180f0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184e0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184f0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180e0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180f0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184e0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184f0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23200229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180e0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180f0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184e0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184f0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00110540, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x01600031, 0x27000c01, 0x408d0000, 0x0248a007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x01600031, 0x28000c01, 0x408d0000, 0x0228a008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x0a082007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x01600031, 0x20000c04, 0x508d0000, 0x06082008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffbb6 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbb0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x0f000031, 0x20000c04, 0x708d0000, 0x82000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g6b new file mode 100644 index 000000000..1e9570cc3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen5_6/rgbx_load_save_nv12.g6b @@ -0,0 +1,643 @@ + { 0x00600001, 0x20e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x25e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x26e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x27e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29a00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x29e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21000021, 0x008d0000, 0x00000000 }, + { 0x02000005, 0x20000c24, 0x02000024, 0xff000000 }, + { 0x00110001, 0x24400061, 0x02000000, 0x00428119 }, + { 0x00010001, 0x24400061, 0x02000000, 0x00198142 }, + { 0x00110001, 0x24440061, 0x02000000, 0x00dab670 }, + { 0x00010001, 0x24440061, 0x02000000, 0x0070b6da }, + { 0x00110001, 0x24480061, 0x02000000, 0x0070a2ee }, + { 0x00010001, 0x24480061, 0x02000000, 0x00eea270 }, + { 0x00000441, 0x20842e2d, 0x000000b7, 0x00100010 }, + { 0x00000c01, 0x2086022d, 0x000000bb, 0x00000000 }, + { 0x00000801, 0x208a01ad, 0x000000a0, 0x00000000 }, + { 0x00200001, 0x209403bd, 0x006600a4, 0x00000000 }, + { 0x00000040, 0x208435ad, 0x00000084, 0x000000a0 }, + { 0x00200040, 0x210035a5, 0x004500a0, 0x00450074 }, + { 0x00000409, 0x21003da5, 0x00000100, 0x00020002 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0007001f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02898001 }, + { 0x00000040, 0x21003ca5, 0x00000100, 0x00200020 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02898001 }, + { 0x00000001, 0x22000060, 0x00000000, 0x08000700 }, + { 0x00800041, 0x24c04629, 0x00118000, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118010, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118400, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118410, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118000, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118010, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118400, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118410, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118000, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118010, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118400, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118410, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23400229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118020, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118030, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118420, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118430, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118020, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118030, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118420, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118430, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118020, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118030, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118420, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118430, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23600229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118040, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118050, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118440, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118450, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118040, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118050, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118440, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118450, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118040, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118050, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118440, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118450, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23800229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118060, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118070, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118460, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118470, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118060, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118070, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118460, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118470, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118060, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118070, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118460, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118470, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23a00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x00118080, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x00118090, 0x00090440 }, + { 0x00800041, 0x25004629, 0x00118480, 0x00090440 }, + { 0x00800041, 0x25204629, 0x00118490, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118080, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x00118090, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x00118480, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x00118490, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x00118080, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x00118090, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x00118480, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x00118490, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23c00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180a0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180b0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184a0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184b0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x21e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180a0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180b0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184a0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184b0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180a0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180b0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184a0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184b0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23e00229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180c0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180d0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184c0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184d0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180c0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180d0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184c0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184d0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180c0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180d0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184c0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184d0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x24000229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c04629, 0x001180e0, 0x00090440 }, + { 0x00800041, 0x24e04629, 0x001180f0, 0x00090440 }, + { 0x00800041, 0x25004629, 0x001184e0, 0x00090440 }, + { 0x00800041, 0x25204629, 0x001184f0, 0x00090440 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c02529, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e02529, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x65002529, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x65202529, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x25400129, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x25480129, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x25500129, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x25580129, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402d29, 0x00110540, 0x10801080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x22200229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180e0, 0x00090444 }, + { 0x00800041, 0x24e0562d, 0x001180f0, 0x00090444 }, + { 0x00800041, 0x2500562d, 0x001184e0, 0x00090444 }, + { 0x00800041, 0x2520562d, 0x001184f0, 0x00090444 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x23200229, 0x00110540, 0x00000000 }, + { 0x00800041, 0x24c0562d, 0x001180e0, 0x00090448 }, + { 0x00800041, 0x24e0562d, 0x001180f0, 0x00090448 }, + { 0x00800041, 0x2500562d, 0x001184e0, 0x00090448 }, + { 0x00800041, 0x2520562d, 0x001184f0, 0x00090448 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c2 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e2 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0502 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0522 }, + { 0x00400040, 0x64c035ad, 0x000b04c0, 0x000b04c4 }, + { 0x00400040, 0x64e035ad, 0x000b04e0, 0x000b04e4 }, + { 0x00400040, 0x650035ad, 0x000b0500, 0x000b0504 }, + { 0x00400040, 0x652035ad, 0x000b0520, 0x000b0524 }, + { 0x00400001, 0x254001ad, 0x000b04c0, 0x00000000 }, + { 0x00400001, 0x254801ad, 0x000b04e0, 0x00000000 }, + { 0x00400001, 0x255001ad, 0x000b0500, 0x00000000 }, + { 0x00400001, 0x255801ad, 0x000b0520, 0x00000000 }, + { 0x00800040, 0x25402da9, 0x00110540, 0x80808080 }, + { 0x00800001, 0x25400231, 0x00120541, 0x00000000 }, + { 0x00800001, 0x24200229, 0x00110540, 0x00000000 }, + { 0x00600001, 0x22400129, 0x00ae0240, 0x00000000 }, + { 0x00600001, 0x23400129, 0x00ae0340, 0x00000000 }, + { 0x00600001, 0x22500129, 0x00ae0280, 0x00000000 }, + { 0x00600001, 0x23500129, 0x00ae0380, 0x00000000 }, + { 0x00600001, 0x22600129, 0x00ae02c0, 0x00000000 }, + { 0x00600001, 0x23600129, 0x00ae03c0, 0x00000000 }, + { 0x00600001, 0x22700129, 0x00ae0300, 0x00000000 }, + { 0x00600001, 0x23700129, 0x00ae0400, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00200001, 0x202001a6, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x20280062, 0x00000000, 0x0007000f }, + { 0x00000005, 0x24000c20, 0x000000b8, 0x00ffffff }, + { 0x04000010, 0x20000c04, 0x00000400, 0x00ffffff }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000056 }, + { 0x04600031, 0x27000cc1, 0x00000020, 0x02498007 }, + { 0x0000040c, 0x21043da1, 0x000000a2, 0x00010001 }, + { 0x00000801, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x04600031, 0x28000cc1, 0x00000020, 0x02298008 }, + { 0x00200001, 0x210001a1, 0x004500a0, 0x00000000 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0007000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00000001, 0x26020228, 0x000000ba, 0x00000000 }, + { 0x00610001, 0x24400129, 0x020000b8, 0x00000000 }, + { 0x00710001, 0x24400169, 0x02000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00040001 }, + { 0x00000001, 0x24640061, 0x00000000, 0x00400010 }, + { 0x00000001, 0x24680061, 0x00000000, 0x04000100 }, + { 0x00000001, 0x246c0061, 0x00000000, 0x40001000 }, + { 0x00000001, 0x26020128, 0x00000440, 0x00000000 }, + { 0x00910001, 0x41400231, 0x02b10700, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000440, 0x008d0460 }, + { 0x00710001, 0x42400231, 0x02ae0800, 0x00000000 }, + { 0x00710001, 0x43400231, 0x02ae0801, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000442, 0x00000000 }, + { 0x00910001, 0x41600231, 0x02b10710, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000444, 0x00000000 }, + { 0x00910001, 0x41800231, 0x02b10720, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000444, 0x008d0460 }, + { 0x00710001, 0x42500231, 0x02ae0810, 0x00000000 }, + { 0x00710001, 0x43500231, 0x02ae0811, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000446, 0x00000000 }, + { 0x00910001, 0x41a00231, 0x02b10730, 0x00000000 }, + { 0x00000001, 0x26020128, 0x00000448, 0x00000000 }, + { 0x00910001, 0x41c00231, 0x02b10740, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x02000448, 0x008d0460 }, + { 0x00710001, 0x42600231, 0x02ae0820, 0x00000000 }, + { 0x00710001, 0x43600231, 0x02ae0821, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044a, 0x00000000 }, + { 0x00910001, 0x41e00231, 0x02b10750, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044c, 0x00000000 }, + { 0x00910001, 0x42000231, 0x02b10760, 0x00000000 }, + { 0x02600005, 0x2000252c, 0x0200044c, 0x008d0460 }, + { 0x00710001, 0x42700231, 0x02ae0830, 0x00000000 }, + { 0x00710001, 0x43700231, 0x02ae0831, 0x00000000 }, + { 0x00000001, 0x26020128, 0x0000044e, 0x00000000 }, + { 0x00910001, 0x42200231, 0x02b10770, 0x00000000 }, + { 0x00800001, 0x20400232, 0x00d20140, 0x00000000 }, + { 0x00800001, 0x20500232, 0x00d20160, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00d20180, 0x00000000 }, + { 0x00800001, 0x20700232, 0x00d201a0, 0x00000000 }, + { 0x00800001, 0x20800232, 0x00d201c0, 0x00000000 }, + { 0x00800001, 0x20900232, 0x00d201e0, 0x00000000 }, + { 0x00800001, 0x20a00232, 0x00d20200, 0x00000000 }, + { 0x00800001, 0x20b00232, 0x00d20220, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x0a094007 }, + { 0x00200001, 0x210001a5, 0x004500a0, 0x00000000 }, + { 0x0000000c, 0x21043ca5, 0x00000104, 0x00010001 }, + { 0x00000001, 0x21080061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x20200022, 0x008d0100, 0x00000000 }, + { 0x00800001, 0x40400232, 0x00d20240, 0x00000000 }, + { 0x00800001, 0x40410232, 0x00d20340, 0x00000000 }, + { 0x00800001, 0x40600232, 0x00d20260, 0x00000000 }, + { 0x00800001, 0x40610232, 0x00d20360, 0x00000000 }, + { 0x05600031, 0x20000cc4, 0x00000020, 0x06094008 }, + { 0x01000040, 0x20863dad, 0x00000086, 0xffffffff }, + { 0x00000040, 0x20a03dad, 0x000000a0, 0x00100010 }, + { 0x05000010, 0x200035ac, 0x020000a0, 0x00000084 }, + { 0x00010220, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x20b80129, 0x000000c8, 0x00000000 }, + { 0x01000010, 0x20003dac, 0x00000086, 0x00010001 }, + { 0x00010001, 0x20b80129, 0x000000c4, 0x00000000 }, + { 0x00010001, 0x20ba0231, 0x000000c6, 0x00000000 }, + { 0x00010220, 0x34001c00, 0x02001400, 0xfffffbb6 }, + { 0x00000001, 0x20a001ad, 0x0000008a, 0x00000000 }, + { 0x00000040, 0x20a23dad, 0x000000a2, 0x00080008 }, + { 0x00000220, 0x34001c00, 0x00001400, 0xfffffbb0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, + { 0x00600001, 0x21e00022, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001cc4, 0x000001e0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Core.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Core.g4a new file mode 100644 index 000000000..0c2391f12 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Core.g4a @@ -0,0 +1,331 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 22 // Total instruction count +// 1 // Total kernel count + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// End of common.inc + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_NV12_16x4.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_NV12_16x4.g4a new file mode 100644 index 000000000..6c910ba9b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_NV12_16x4.g4a @@ -0,0 +1,301 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 20 // Total instruction count +// 1 // Total kernel count + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// End of common.inc + +// FileName: DI_Save_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in NV12 format + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + +mov (2) r27.0<1>:d r9.0<2;2,1>:w { NoDDClr } +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDChk } // Block width and height (16x4) + +//Bottom field Y + mov (8) mudMSGHDR_DI_OUT1(1)<1> udDNDI_RESP(0,0) + mov (8) mudMSGHDR_DI_OUT1(2)<1> udDNDI_RESP(0,8) +// Top field Y + mov (8) mudMSGHDR_DI_OUT2(1)<1> udDNDI_RESP(4,0) + mov (8) mudMSGHDR_DI_OUT2(2)<1> udDNDI_RESP(4,8) + +//copy message desrcptor to the message header +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +//Change origin to U/V block +asr (1) r27.1<1>:d r27.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's +mov (1) r27.2<1>:ud 0x1000F:ud { NoDDChk } // Block width and height (16x2) + +// Bottom field U/V +mov (16) r21.0<2>:ub ubDNDI_RESP(2, 1)<32;8,2> { NoDDClr } +mov (16) r21.1<2>:ub ubDNDI_RESP(2, 0)<32;8,2> { NoDDChk } + +// Top field U/V +mov (16) r26.0<2>:ub ubDNDI_RESP(6, 1)<32;8,2> { NoDDClr } +mov (16) r26.1<2>:ub ubDNDI_RESP(6, 0)<32;8,2> { NoDDChk } + +//copy message desrcptor to the message header +mov (8) r21<1>:ud r27<8;8,1>:ud +mov (8) r26<1>:ud r27<8;8,1>:ud + +//Send out Y component on previous frame to surface +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +//Send out Y component on current frame to surface +send (8) null<1>:d r23.0 0x5 0x60A801E:ud +//Send out U/V component on previous frame to surface +send (8) null<1>:d r21 0x5 0x40A801C:ud +//Send out U/V component on current frame to surface +send (8) null<1>:d r26 0x5 0x40A801F:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_PA_16x4.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_PA_16x4.g4a new file mode 100644 index 000000000..efcc8acb9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/DI_Save_PA_16x4.g4a @@ -0,0 +1,311 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 33 // Total instruction count +// 1 // Total kernel count + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// End of common.inc + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/EOT.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/EOT.g4a new file mode 100644 index 000000000..2c5bb4481 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/EOT.g4a @@ -0,0 +1,188 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 2 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.am new file mode 100644 index 000000000..d76f7db5e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.am @@ -0,0 +1,108 @@ +INTEL_PP_G7B = \ + avs.g7b \ + dndi.g7b \ + nv12_dn_nv12.g7b \ + pa_to_pl2.g7b \ + pa_to_pl3.g7b \ + pa_to_pa.g7b \ + pl2_to_pa.g7b \ + pl2_to_pl2.g7b \ + pl2_to_pl3.g7b \ + pl2_to_rgbx.g7b \ + pl3_to_pa.g7b \ + pl3_to_pl2.g7b \ + pl3_to_pl3.g7b \ + rgbx_to_nv12.g7b \ + $(NULL) + +INTEL_PP_G4A = \ + DI_Core.g4a \ + DI_Save_NV12_16x4.g4a \ + DI_Save_PA_16x4.g4a \ + EOT.g4a \ + NV12_DI_NV12.g4a \ + NV12_DNDI_422CP.g4a \ + NV12_DNDI_PA.g4a \ + NV12_DNUV_NV12.g4a \ + NV12_DN_422CP.g4a \ + NV12_DN_NV12.g4a \ + PA_AVS_Buf_0.g4a \ + PA_AVS_Buf_1.g4a \ + PA_AVS_Buf_2.g4a \ + PA_AVS_Buf_3.g4a \ + PA_DI_422CP.g4a \ + PA_DI_PA.g4a \ + PA_DNDI_422CP.g4a \ + PA_DNDI_PA.g4a \ + PA_DNUV_PA.g4a \ + PA_DN_422CP.g4a \ + PA_DN_PA.g4a \ + PL2_AVS_Buf_0.g4a \ + PL2_AVS_Buf_1.g4a \ + PL2_AVS_Buf_2.g4a \ + PL2_AVS_Buf_3.g4a \ + PL3_AVS_Buf_0.g4a \ + PL3_AVS_Buf_1.g4a \ + PL3_AVS_Buf_2.g4a \ + PL3_AVS_Buf_3.g4a \ + PL3_DNDI_422CP.g4a \ + PL3_DNDI_PA.g4a \ + PL3_DNUV_PL3.g4a \ + PL3_DN_422CP.g4a \ + PL3_DN_PL3.g4a \ + PL_DI_422CP.g4a \ + PL_DI_PA.g4a \ + RGB_to_YUV.g4a \ + Save_AVS_PA.g4a \ + Save_AVS_PL3.g4a \ + Save_AVS_NV12.g4a \ + Save_AVS_RGB.g4a \ + Save_AVS_RGBX.g4a \ + Set_AVS_Buf_0123_BGRA.g4a \ + Set_AVS_Buf_0123_PL2.g4a \ + Set_AVS_Buf_0123_PL3.g4a \ + Set_AVS_Buf_0123_VUYA.g4a \ + Set_AVS_Buf_0123_VYUA.g4a \ + Set_Layer_0.g4a \ + VP_Setup.g4a \ + YUV_to_RGB.g4a \ + $(NULL) + +INTEL_PP_ASM = $(INTEL_PP_G7B:%.g7b=%.asm) +INTEL_PP_GEN7_ASM = $(INTEL_PP_G7B:%.g7b=%.g7s) + +INTEL_PP_G75B = $(INTEL_PP_G7B:%.g7b=%.g75b) + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_PP_G7B) $(INTEL_PP_G75B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g7b .g7s .asm + +if HAVE_GEN4ASM +$(INTEL_PP_GEN7_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G4A) +.asm.g7s: + $(AM_V_GEN)cpp $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g7s.g7b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 7 $< + +.g7s.g75b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 7.5 $< +endif + +CLEANFILES = $(INTEL_PP_GEN7_ASM) + +EXTRA_DIST = \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G4A) \ + $(INTEL_PP_G75B) \ + $(INTEL_PP_G7B) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.in new file mode 100644 index 000000000..18adc3132 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Makefile.in @@ -0,0 +1,552 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_PP_G7B) $(INTEL_PP_G75B) +subdir = src/shaders/post_processing/gen7 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_PP_G7B = \ + avs.g7b \ + dndi.g7b \ + nv12_dn_nv12.g7b \ + pa_to_pl2.g7b \ + pa_to_pl3.g7b \ + pa_to_pa.g7b \ + pl2_to_pa.g7b \ + pl2_to_pl2.g7b \ + pl2_to_pl3.g7b \ + pl2_to_rgbx.g7b \ + pl3_to_pa.g7b \ + pl3_to_pl2.g7b \ + pl3_to_pl3.g7b \ + rgbx_to_nv12.g7b \ + $(NULL) + +INTEL_PP_G4A = \ + DI_Core.g4a \ + DI_Save_NV12_16x4.g4a \ + DI_Save_PA_16x4.g4a \ + EOT.g4a \ + NV12_DI_NV12.g4a \ + NV12_DNDI_422CP.g4a \ + NV12_DNDI_PA.g4a \ + NV12_DNUV_NV12.g4a \ + NV12_DN_422CP.g4a \ + NV12_DN_NV12.g4a \ + PA_AVS_Buf_0.g4a \ + PA_AVS_Buf_1.g4a \ + PA_AVS_Buf_2.g4a \ + PA_AVS_Buf_3.g4a \ + PA_DI_422CP.g4a \ + PA_DI_PA.g4a \ + PA_DNDI_422CP.g4a \ + PA_DNDI_PA.g4a \ + PA_DNUV_PA.g4a \ + PA_DN_422CP.g4a \ + PA_DN_PA.g4a \ + PL2_AVS_Buf_0.g4a \ + PL2_AVS_Buf_1.g4a \ + PL2_AVS_Buf_2.g4a \ + PL2_AVS_Buf_3.g4a \ + PL3_AVS_Buf_0.g4a \ + PL3_AVS_Buf_1.g4a \ + PL3_AVS_Buf_2.g4a \ + PL3_AVS_Buf_3.g4a \ + PL3_DNDI_422CP.g4a \ + PL3_DNDI_PA.g4a \ + PL3_DNUV_PL3.g4a \ + PL3_DN_422CP.g4a \ + PL3_DN_PL3.g4a \ + PL_DI_422CP.g4a \ + PL_DI_PA.g4a \ + RGB_to_YUV.g4a \ + Save_AVS_PA.g4a \ + Save_AVS_PL3.g4a \ + Save_AVS_NV12.g4a \ + Save_AVS_RGB.g4a \ + Save_AVS_RGBX.g4a \ + Set_AVS_Buf_0123_BGRA.g4a \ + Set_AVS_Buf_0123_PL2.g4a \ + Set_AVS_Buf_0123_PL3.g4a \ + Set_AVS_Buf_0123_VUYA.g4a \ + Set_AVS_Buf_0123_VYUA.g4a \ + Set_Layer_0.g4a \ + VP_Setup.g4a \ + YUV_to_RGB.g4a \ + $(NULL) + +INTEL_PP_ASM = $(INTEL_PP_G7B:%.g7b=%.asm) +INTEL_PP_GEN7_ASM = $(INTEL_PP_G7B:%.g7b=%.g7s) +INTEL_PP_G75B = $(INTEL_PP_G7B:%.g7b=%.g75b) +TARGETS = $(am__append_1) +SUFFIXES = .g7b .g7s .asm +CLEANFILES = $(INTEL_PP_GEN7_ASM) +EXTRA_DIST = \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G4A) \ + $(INTEL_PP_G75B) \ + $(INTEL_PP_G7B) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g7b .g7s .asm .g75b +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/gen7/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/gen7/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_PP_GEN7_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G4A) +@HAVE_GEN4ASM_TRUE@.asm.g7s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp $< > _pp0.$@; \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ +@HAVE_GEN4ASM_TRUE@ rm _pp0.$@ +@HAVE_GEN4ASM_TRUE@.g7s.g7b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 7 $< + +@HAVE_GEN4ASM_TRUE@.g7s.g75b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 7.5 $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DI_NV12.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DI_NV12.g4a new file mode 100644 index 000000000..e646cf1cb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DI_NV12.g4a @@ -0,0 +1,414 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 57 // Total instruction count +// 1 // Total kernel count + +.kernel NV12_DI_NV12 +.code + + + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DI_Save_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +// add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r28.0<1>:ud r0.0<8;8,1>:ud +mov (1) r28.0<1>:d r9.0<0;1,0>:w { NoDDClr } // H. block origin need to be doubled +mov (1) r28.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r28.2<1>:ud 0x3000F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r28<8;8,1>:ud +mov (8) r23.0<1>:ud r28<8;8,1>:ud + +//Bottom field Y +mov (8) mudMSGHDR_DI_OUT1(1)<1> udDNDI_RESP(0,0) +mov (8) mudMSGHDR_DI_OUT1(2)<1> udDNDI_RESP(0,8) +// Top field Y +mov (8) mudMSGHDR_DI_OUT2(1)<1> udDNDI_RESP(4,0) +mov (8) mudMSGHDR_DI_OUT2(2)<1> udDNDI_RESP(4,8) + +//Change origin to U/V block +asr (1) r28.1<1>:d r28.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's +mov (1) r28.2<1>:ud 0x1000F:ud { NoDDChk } // Block width and height (16x2) + +// Bottom field U/V +mov (16) r22.0<2>:ub ubDNDI_RESP(2, 1)<32;8,2> { NoDDClr } +mov (16) r22.1<2>:ub ubDNDI_RESP(2, 0)<32;8,2> { NoDDChk } + +// Top field U/V +mov (16) r27.0<2>:ub ubDNDI_RESP(6, 1)<32;8,2> { NoDDClr } +mov (16) r27.1<2>:ub ubDNDI_RESP(6, 0)<32;8,2> { NoDDChk } + +//copy message desrcptor to the message header +mov (8) r21<1>:ud r28<8;8,1>:ud +mov (8) r26<1>:ud r28<8;8,1>:ud + +//Send out Y component on previous frame to surface +send (8) null<1>:d r18 0x5 0x60A801B:ud +//Send out Y component on current frame to surface +send (8) null<1>:d r23 0x5 0x60A801E:ud +//Send out U/V component on previous frame to surface +send (8) null<1>:d r21 0x5 0x40A801C:ud +//Send out U/V component on current frame to surface +send (8) null<1>:d r26 0x5 0x40A801F:ud + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_422CP.g4a new file mode 100644 index 000000000..b877ee9e5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_422CP.g4a @@ -0,0 +1,579 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 116 // Total instruction count +// 1 // Total kernel count + +.kernel NV12_DNDI_422CP +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4BE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Load_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (1) r27.1<1>:d r27.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x1000F:ud { NoDDChk } // U/V block width and height (8x4) + mov (8) mudMSGHDR_UVCOPY(0)<1> r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2190001:ud + + + +// FileName: DN_Save_Y_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of Y channel of DN output for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +mov (2) mdMSGHDR_DN_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3000F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(4,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(5,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(4,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(5,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x60A8018:ud + + + +// FileName: DI_Save_422CP_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in 422 format to Color Pipe (IECP) + + +.declare mubMSGHDR_DI_OUT1_1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT1_2 Base=r21.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_1 Base=r24.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_2 Base=r27.0 ElementSize=1 Type=ub + + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:ud r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:ud r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDClr, NoDDChk } // Block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) r27.3<1>:ud r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r24.0<1>:ud r27<8;8,1>:ud + + +// Pack 2nd field Y; First 8x4 block + mov (8) mubMSGHDR_DI_OUT1_1(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; First 8x4 block + mov (4) mubMSGHDR_DI_OUT1_1(1,1)<4> ubDNDI_RESP(2,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,17)<4> ubDNDI_RESP(2,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(1,3)<4> ubDNDI_RESP(2,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,19)<4> ubDNDI_RESP(2,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,1)<4> ubDNDI_RESP(2,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,17)<4> ubDNDI_RESP(2,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(2,3)<4> ubDNDI_RESP(2,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,19)<4> ubDNDI_RESP(2,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + + +// Pack 2nd field Y; Second 8x4 block +mov (8) r21.0<1>:ud r18.0<8;8,1>:ud +add (1) r21.0<1>:ud r21.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT1_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; Second 8x4 block + mov (4) mubMSGHDR_DI_OUT1_2(1,1)<4> ubDNDI_RESP(2,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,17)<4> ubDNDI_RESP(2,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(1,3)<4> ubDNDI_RESP(2,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,19)<4> ubDNDI_RESP(2,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,1)<4> ubDNDI_RESP(2,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,17)<4> ubDNDI_RESP(2,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(2,3)<4> ubDNDI_RESP(2,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,19)<4> ubDNDI_RESP(2,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +send (8) null<1>:d r21.0 0x5 0x60A801B:ud + +// Pack 1st field Y; 1st 8x4 block + mov (8) mubMSGHDR_DI_OUT2_1(1)<2> ubDNDI_RESP(4,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(1,16)<2> ubDNDI_RESP(4,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2)<2> ubDNDI_RESP(4,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2,16)<2> ubDNDI_RESP(4,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U,V; 1st 8x4 block + mov (4) mubMSGHDR_DI_OUT2_1(1,1)<4> ubDNDI_RESP(6,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,17)<4> ubDNDI_RESP(6,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(1,3)<4> ubDNDI_RESP(6,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,19)<4> ubDNDI_RESP(6,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,1)<4> ubDNDI_RESP(6,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,17)<4> ubDNDI_RESP(6,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(2,3)<4> ubDNDI_RESP(6,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,19)<4> ubDNDI_RESP(6,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Pack 1st field Y; 2nd 8x4 block +mov (8) r27.0<1>:ud r24.0<8;8,1>:ud +add (1) r27.0<1>:ud r27.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT2_2(1)<2> ubDNDI_RESP(4,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(1,16)<2> ubDNDI_RESP(4,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2)<2> ubDNDI_RESP(4,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2,16)<2> ubDNDI_RESP(4,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U, V; 2nd 8x4 block + mov (4) mubMSGHDR_DI_OUT2_2(1,1)<4> ubDNDI_RESP(6,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,17)<4> ubDNDI_RESP(6,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(1,3)<4> ubDNDI_RESP(6,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,19)<4> ubDNDI_RESP(6,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,1)<4> ubDNDI_RESP(6,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,17)<4> ubDNDI_RESP(6,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(2,3)<4> ubDNDI_RESP(6,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,19)<4> ubDNDI_RESP(6,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r24.0 0x5 0x60A801E:ud +send (8) null<1>:d r27.0 0x5 0x60A801E:ud + + + +// FileName: DN_Save_UV_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Save_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + +//Reuse the header from Load component + + mov (8) mudMSGHDR_UVCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + send (8) null<1>:d r36 0x5 0x40A8019:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_PA.g4a new file mode 100644 index 000000000..43bf7e072 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNDI_PA.g4a @@ -0,0 +1,517 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 86 // Total instruction count +// 1 // Total kernel count + +.kernel NV12_DNDI_PA +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4BE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Load_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (1) r27.1<1>:d r27.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x1000F:ud { NoDDChk } // U/V block width and height (8x4) + mov (8) mudMSGHDR_UVCOPY(0)<1> r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2190001:ud + + + +// FileName: DN_Save_Y_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of Y channel of DN output for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +mov (2) mdMSGHDR_DN_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3000F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(4,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(5,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(4,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(5,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x60A8018:ud + + + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud + + + +// FileName: DN_Save_UV_NV12_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Save_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + +//Reuse the header from Load component + + mov (8) mudMSGHDR_UVCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + send (8) null<1>:d r36 0x5 0x40A8019:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNUV_NV12.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNUV_NV12.g4a new file mode 100644 index 000000000..73124c104 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DNUV_NV12.g4a @@ -0,0 +1,2513 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 1153 // Total instruction count +// 1 // Total kernel count + + +.kernel NV12_DNUV_NV12 +.code + + + +//Module : DN_UV_Setup +//Author : Tatiya, Rupesh +//Description : Initial Set-up for DN_UV + + + + +// Module name : ChromaDenoise.inc +// Author : Tatiya, Rupesh + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================================================== +//Interface for serpent mode Chroma Denoise, added by Le +//====================================================== +//r1 + + +//noise history thresholds (low and high) + + +//temporal difference thresholds (high and low) + + +//noise history thresholds (low and high) +//#define ubNoiseHistMaxHigh r1.22 +//#define ubNoiseHistMaxLow r1.23 +//#define ubNoiseHistDeltaHigh r1.24 +//#define ubNoiseHistDeltaLow r1.25 + +//Gaussian thresholds + + +//temporal difference thresholds (default) + + +//r2 +//history thresholds (default) + + +//denoise factor (0-63) + + +//====================== Binding table (Explicit To DNUV)========================================= +//Used by DN_UV kernels + + + //Pointer to Current Frame UV + + +//r1-r6 + //CURBE GRFs used as TEMP : Used for max computation and storing max temporarily. : r1-r6 + + + .declare ubCURBE_TEMP Base=r1.0 ElementSize=1 Type=ub + .declare uwCURBE_TEMP Base=r1.0 ElementSize=2 Type=uw + .declare wCURBE_TEMP Base=r1.0 ElementSize=2 Type=w + .declare fCURBE_TEMP Base=r1.0 ElementSize=4 Type=f + .declare udCURBE_TEMP Base=r1.0 ElementSize=4 Type=ud + .declare uwMAX_ABS_DIFF Base=r5.0 ElementSize=2 Type=uw + + //r1 + + + //r3 + + + //r4 + +//r7 + //All of the following has to defined in Same GRF for optimal performance. + + +//r8-24 + //Previous Frame UV + + .declare udPREV_UV Base=r8.0 ElementSize=4 Type=ud + .declare ubPREV_UV Base=r8.0 ElementSize=1 Type=ub + + +//r25-48 + //TEMP Space for any Usage. + + +//========================================================================= +//Definations and declarations for serpent mode Chroma Denoise, added by Le +//========================================================================= + + + .declare udGNE_UV Base=r24.0 ElementSize=4 Type=ud + .declare fGNE_UV Base=r24.0 ElementSize=4 Type=f + .declare ubGNE_UV Base=r24.0 ElementSize=1 Type=ub + + .declare udMSGHDR_BNE_SERP Base=r25.0 ElementSize=4 Type=ud + .declare udMSGSRC_BNE_SERP Base=r26.0 ElementSize=4 Type=ud + + + .declare ubDN_UV_Thresholds Base=r26.0 ElementSize=1 Type=ub + .declare ubDN_UV_Thresholds_Temp Base=r27.0 ElementSize=1 Type=ub + .declare udDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=ud + .declare udDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=ud + .declare fDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=f + .declare fDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=f + + +//==================================================================================== + + + //TEMP23: To hold V data for PL3 surfaces + .declare udCURR_V_TEMP Base=r25.0 ElementSize=4 Type=ud + .declare ubCURR_V_TEMP Base=r25.0 ElementSize=1 Type=ub + + //GRFs to calculate Median: r25-r42 + .declare ubMEDIAN_TEMP Base=r25.0 ElementSize=1 Type=ub + + //18 GRFs to hold difference : r25-r42 + .declare wDIFF Base=r25.0 ElementSize=2 Type=w + .declare uwDIFF Base=r25.0 ElementSize=2 Type=uw + + //Temporal Diff + .declare wDIFF_TEMPORAL Base=r25.0 ElementSize=2 Type=w + .declare ubDIFF_TEMPORAL Base=r25.0 ElementSize=1 Type=ub + + //4 GRFs to hold Sobel Value : r43-46 + .declare wSOBEL_X Base=r43.0 ElementSize=2 Type=w + .declare uwSOBEL Base=r43.0 ElementSize=2 Type=uw + + + //2 GRFs to hold SOAD temporarily: r47-48 + .declare uwSOAD Base=r47.0 ElementSize=2 Type=uw + + //Temp GRFs to hold extra YUYV pixels: r43-r48 + .declare ubTEMP5 Base=r43.0 ElementSize=1 Type=ub + + //Temp GRFs in Median Calculation: r47-r48 + .declare ubTEMP1 Base=r47.0 ElementSize=1 Type=ub + + .declare uwTEMP0 Base=r48.0 ElementSize=2 Type=uw + .declare ubTEMP0 Base=r48.0 ElementSize=1 Type=ub + + //Temp Space to store Median : r49-50 + + .declare ubMEDIAN Base=r49.0 ElementSize=1 Type=ub + +//r49 + + +//r50 + //Message Source + + +//r51 + //DN_UV History Surface + + .declare udHIST_UV Base=r51.0 ElementSize=4 Type=ud + .declare ubHIST_UV Base=r51.0 ElementSize=1 Type=ub + +//r52 - r91 + //r52 + //Current Frame UV + + + .declare udCURR_UV Base=r52.0 ElementSize=4 Type=ud + .declare ubCURR_UV Base=r52.0 ElementSize=1 Type=ub + + //r54 + //CURBE COPY + + + //r55 + + + .declare uwSOAD_MIN_8x4 Base=r56.0 ElementSize=2 Type=uw + + //r61 + + + //r62 + + + //History Surface Temp Origin + + + //r63 + //Current Frame Y Temp Origin + + + //BNE Surface Origin + + + //r70 + + .declare uwDIFF_TEMPORAL_SUM4x4 Base=r70.0 ElementSize=2 Type=uw //4 GRFs + + //r74-91 : For Saving Dest UV (PL2/PL3) + + + .declare ubMSGPAYLOAD_UV0 Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_U Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_UV1 Base=r84.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_V Base=r84.0 ElementSize=1 Type=ub + + //r90 + + .declare uwDIFF_TEMPORAL_SUM4x4_FINAL Base=r90.0 ElementSize=2 Type=uw //2 GRFs + +//r92-127 + //Current Frame Y + + + //r92 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_0 Base=r92 ElementSize=2 Type=uw + //r101 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_1 Base=r101 ElementSize=2 Type=uw + //r110 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_2 Base=r110 ElementSize=2 Type=uw + //r119 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_3 Base=r119 ElementSize=2 Type=uw + + .declare udCURR_Y0 Base=r93.0 ElementSize=4 Type=ud + .declare ubCURR_Y0 Base=r93.0 ElementSize=1 Type=ub + .declare udCURR_Y1 Base=r102.0 ElementSize=4 Type=ud + .declare ubCURR_Y1 Base=r102.0 ElementSize=1 Type=ub + .declare udCURR_Y2 Base=r111.0 ElementSize=4 Type=ud + .declare ubCURR_Y2 Base=r111.0 ElementSize=1 Type=ub + .declare udCURR_Y3 Base=r120.0 ElementSize=4 Type=ud + .declare ubCURR_Y3 Base=r120.0 ElementSize=1 Type=ub + + //r92: To hold U data for PL3 surfaces + .declare udCURR_U_TEMP Base=r92.0 ElementSize=4 Type=ud + .declare ubCURR_U_TEMP Base=r92.0 ElementSize=1 Type=ub + + //r112: To hold U data for PL3 surfaces + .declare udPREV_U_TEMP Base=r112.0 ElementSize=4 Type=ud + .declare ubPREV_U_TEMP Base=r112.0 ElementSize=1 Type=ub + + //r120: To hold U data for PL3 surfaces + .declare udPREV_V_TEMP Base=r120.0 ElementSize=4 Type=ud + .declare ubPREV_V_TEMP Base=r120.0 ElementSize=1 Type=ub + + + // Initialize message source with r0. + mov (8) r50.0<1>:ud r0.0<8;8,1>:ud + mov (8) r92.0<1>:ud r0.0<8;8,1>:ud + mov (8) r101.0<1>:ud r0.0<8;8,1>:ud + mov (8) r110.0<1>:ud r0.0<8;8,1>:ud + mov (8) r119.0<1>:ud r0.0<8;8,1>:ud + + + +//Module Name : DN_UV_PL2_Load_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame UV data for PL2 input. + + + +//Module name : DN_UV_Load_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame (UV only). +// We need 4 extra rows (2 per field) and 2 extra pixel (1 each side) for both U and V each. +// The processing size is 16x16 U and V each. So we need : U size - 18x20, V size - 18x20, UV size - 36x20, YUYV size - 72x20. + + + + +//36x20 interleaved UV block is partitioned as follows: +// <------ 18 --------> <--------18 -------> +// ----------------------------------------- +// | 20x8 A !| 20x8 D ! +// | (overlapped) !| (overlapped) ! +// |-------------------!|------------------! +// | 20x8 B !| 20x8 E ! +// | (overlapped) !| (overlapped) ! +// |-------------------!|------------------! +// | 20x4 C !| 20x4 F ! +// | (overlapped) !| (overlapped) ! +// ----------------------------------------- +// +// Cordinates: (x-2, y-2), (x+14, y-2), (x-2, y+6), (x+14, y+6), (x-2, y+14), (x+14, y+14) + + //UV surface origin: (ORIX, ORIY/2) + add (2) r9.4<1>:w r9.0<2;2,1>:w r4.4<2;2,1>:w { AccWrEn } // Source Block origin + shr (1) r9.5<1>:w acc0.5<0;1,0>:w 1:w + mov (2) acc0.0<1>:d r9.4<2;2,1>:w + + //A + add (2) r50.0<1>:d acc0.0<2;2,1>:d -2:d { AccWrEn } + mov (1) r50.2<1>:ud 0x70013:ud + send (8) udCURR_UV(0)<1> r50 0x4 0x2890004:ud + + //B + add (1) r50.1<1>:d acc0.1<0;1,0>:d 8:d + send (8) udCURR_UV(8)<1> r50 0x4 0x2890004:ud + + //C + add (1) r50.1<1>:d acc0.1<0;1,0>:d 16:d + mov (1) r50.2<1>:ud 0x30013:ud + send (8) udCURR_UV(16)<1> r50 0x4 0x2490004:ud + + //D + add (1) r50.0<1>:d acc0.0<0;1,0>:d 16:d { AccWrEn } + mov (1) r50.1<1>:d acc0.1<0;1,0>:d + mov (1) r50.2<1>:ud 0x70013:ud + send (8) udCURR_UV(20)<1> r50 0x4 0x2890004:ud + + //E + add (1) r50.1<1>:d acc0.1<0;1,0>:d 8:d + send (8) udCURR_UV(28)<1> r50 0x4 0x2890004:ud + + //F + add (1) r50.1<1>:d acc0.1<0;1,0>:d 16:d + mov (1) r50.2<1>:ud 0x30013:ud + send (8) udCURR_UV(36)<1> r50 0x4 0x2490004:ud + + //History Origin, Current Y origin and BNE surface origin - all are in inline GRF. Use , . -rT. + + //Calculate Origin For History Surface: (ORIX/4, ORIY/8) + mov (16) acc0.0<1>:w r9.0<0;2,1>:w + shr (1) r9.2<1>:w acc0.2<0;1,0>:w 2:w + shr (1) r9.3<1>:w acc0.3<0;1,0>:w 3:w + + //Calculate Origin For BNE Surface: (ORIX/8, ORIY/16) + shr (1) r9.6<1>:w acc0.6<0;1,0>:w 3:w + shr (1) r9.7<1>:w acc0.7<0;1,0>:w 4:w + + + +//Module Name : DN_UV_PL2_Load_Prev_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Pevious Frame UV data for PL2 input. + + + +//Module Name : DN_UV_Load_Prev_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Prev Frame (UV only). U size - 16x16, V size - 16x16, UV size - 32x16, YUYV size - 64x16. + + + + + mov (2) r50.0<1>:d r9.4<2;2,1>:w { AccWrEn } // Source lock origin + mov (1) r50.2<1>:ud 0xF000F:ud // U/V block width and height (16x16) + send (8) udPREV_UV(0)<1> r50 0x4 0x2890001:ud + + add (1) r50.0<1>:ud acc0.0<0;1,0>:d 16:w // Add 16 to X origin + send (8) udPREV_UV(8)<1> r50 0x4 0x2890001:ud + + + //TODO - See if History loading can be combined with Prev Frame Load. - rT + + +//Module name : DN_UV_Load_Hist_UV +//Author : Tatiya, Rupesh +//Description : Load DN History for UV denoise. 4x4 for each U & V. + + + + + mov (2) r50.0<1>:d r9.2<2;2,1>:w + mov (1) r50.2<1>:ud 0x30007:ud + send (8) udHIST_UV(0)<1> r50 0x4 0x2190022:ud + + + +//Module Name : DN_UV_420_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Load Curr Frame Y data for 420 Input + + + +//Module Name : DN_UV_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Loads Y of Current frame. + + + + + //For 16x16 U and 16x16 V for 420, we need to read 32x32 Y. + + mov (8) acc0.0<1>:ud r0.0<8;8,1>:ud + mov (1) acc0.2<1>:ud 0xF000F:ud + add (2) acc0.0<1>:ud r9.0<2;2,1>:w r4.4<2;2,1>:w + + mov (8) r92.0<1>:ud acc0.0<8;8,1>:ud + + mov (8) r101.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r110.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r119.0<1>:ud acc0.0<8;8,1>:ud + + add (1) r101.1<1>:d acc0.1<0;1,0>:d 16:d + + add (1) r110.0<1>:d acc0.0<0;1,0>:d 16:d + + add (2) r119.0<1>:d acc0.0<2;2,1>:d 16:d + + send (8) udCURR_Y0(0)<1> r92 0x4 0x2890003:ud + send (8) udCURR_Y1(0)<1> r101 0x4 0x2890003:ud + send (8) udCURR_Y2(0)<1> r110 0x4 0x2890003:ud + send (8) udCURR_Y3(0)<1> r119 0x4 0x2890003:ud + + + +//Module Name : DN_UV_Noise_Detection_UV +//Author : Tatiya, Rupesh +//Description : Performs noise detection on 16x16 U and 16x16 V each. + + + +//Module Name : DN_UV_Move_CURBE_Inline_UV.asm +//Author : Tatiya, Rupesh + + + + + //Mov CURBE data to another space - so that it can be used as Temp Space --> r1 - r6 + mov (4) r54.28<1>:ub r2.28<4;4,1>:ub //Dest. YUY2 offset + mov (2) r54.5<1>:ud r4.0<4;2,2>:ud //Src YUY2 offset and Origin offset + mov (4) r55.28<1>:ub r1.0<4;4,1>:ub + + mov (8) r61.20<1>:ub r1.4<8;8,1>:ub + mov (4) r61.28<1>:ub r1.12<4;4,1>:ub + + //Move Inline Data to another space - so that it can be used as Temp Space --> r7 + mov (4) r62.10<1>:w r9.0<4;4,1>:w + mov (4) r63.10<1>:w r9.4<4;4,1>:w + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 1664:uw + mov (1) a0.1:uw 1816:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1792:uw + mov (1) a0.1:uw 1820:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1920:uw + mov (1) a0.1:uw 1848:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2048:uw + mov (1) a0.1:uw 1852:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 2304:uw + mov (1) a0.1:uw 1880:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2432:uw + mov (1) a0.1:uw 1884:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2560:uw + mov (1) a0.1:uw 1912:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2688:uw + mov (1) a0.1:uw 1916:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + +//Module : DN_UV_Noise_Reduction_UV +//Author : Tatiya, Rupesh +//Description : Performs Noise Reduction on 16x16 U and 16x16 V. +//Tasks : 1. Update weight history +// 2. Find if it block is motion block +// 3. Compute Denoised Pixel. + + + + +//History is 1+1 byte every 4x4 U and 4x4 V. + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.22<0;2,1>:ub + + mov (16) uwCURBE_TEMP(0)<1> 0:w + mov (16) uwCURBE_TEMP(1)<1> 0:w + + //Compute diff betn curr and prev. - First 16 lines + // 8 lines here + add (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> -ubPREV_UV(0,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> -ubPREV_UV(0,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> -ubPREV_UV(0,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> -ubPREV_UV(0,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> -ubPREV_UV(0,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> -ubPREV_UV(0,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> -ubPREV_UV(0,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> -ubPREV_UV(0,112)<16;16,1> //Diff UV interleaved + + //Update WT HIST + (-f0.0) shr (16) uwCURBE_TEMP(0)<1> ubHIST_UV(0,0)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(2)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.22<0;2,1>:ub + + //Compute diff betn curr and prev. - First 16 lines + // 8 more lines here + add (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> -ubPREV_UV(0,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> -ubPREV_UV(0,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> -ubPREV_UV(0,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> -ubPREV_UV(0,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> -ubPREV_UV(0,192)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> -ubPREV_UV(0,208)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> -ubPREV_UV(0,224)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> -ubPREV_UV(0,240)<16;16,1> //Diff UV interleaved + + (-f0.0) shr (16) uwCURBE_TEMP(1)<1> ubHIST_UV(0,16)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(3)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov(16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> + + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(0)<16;16,1> (abs)wDIFF_TEMPORAL(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(2)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(3)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(4)<16;16,1> (abs)wDIFF_TEMPORAL(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(6)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(7)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(8)<16;16,1> (abs)wDIFF_TEMPORAL(9)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(10)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(11)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(12)<16;16,1> (abs)wDIFF_TEMPORAL(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(14)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(15)<16;16,1> + +//Compute diff betn curr and prev. - Second 16 lines +//13 lines. + add (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> -ubPREV_UV(8,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> -ubPREV_UV(8,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> -ubPREV_UV(8,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> -ubPREV_UV(8,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> -ubPREV_UV(8,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> -ubPREV_UV(8,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> -ubPREV_UV(8,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> -ubPREV_UV(8,112)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> -ubPREV_UV(8,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> -ubPREV_UV(8,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> -ubPREV_UV(8,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> -ubPREV_UV(8,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> -ubPREV_UV(8,192)<16;16,1> //Diff UV interleaved + +//3 more lines + add (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> -ubPREV_UV(8,208)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> -ubPREV_UV(8,224)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> -ubPREV_UV(8,240)<16;16,1> //Diff UV interleaved + + //16x4 to 8x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(16)<16;16,1> (abs)wDIFF_TEMPORAL(17)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(18)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(19)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(20)<16;16,1> (abs)wDIFF_TEMPORAL(21)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(22)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(23)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(24)<16;16,1> (abs)wDIFF_TEMPORAL(25)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(26)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(27)<16;16,1> + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(28)<16;16,1> (abs)wCURBE_TEMP(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(5)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(6)<16;16,1> + + //Find if block is motion block - First 16 lines + cmp.g.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - First 16 lines + (-f0.0) mov (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(2)<16;16,1> + + //Actual DN - First 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(2,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(2,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(2,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,0)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,8)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(0)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(0)<1> wDIFF_TEMPORAL(0)<16;16,1> ubCURR_UV(2,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(3,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(3,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(3,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,16)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,24)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(1)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(1)<1> wDIFF_TEMPORAL(1)<16;16,1> ubCURR_UV(3,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(4,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(4,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(4,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,32)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,40)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(2)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(2)<1> wDIFF_TEMPORAL(2)<16;16,1> ubCURR_UV(4,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(5,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(5,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(5,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,48)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,56)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(3)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(3)<1> wDIFF_TEMPORAL(3)<16;16,1> ubCURR_UV(5,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(6,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(6,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(6,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,64)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,72)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(4)<1> wDIFF_TEMPORAL(4)<16;16,1> ubCURR_UV(6,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(7,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(7,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(7,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,80)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,88)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(5)<1> wDIFF_TEMPORAL(5)<16;16,1> ubCURR_UV(7,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(8,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(8,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(8,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,96)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,104)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(6)<1> wDIFF_TEMPORAL(6)<16;16,1> ubCURR_UV(8,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(9,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(9,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(9,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,112)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,120)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(7)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(7)<1> wDIFF_TEMPORAL(7)<16;16,1> ubCURR_UV(9,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(10,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(10,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(10,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,128)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,136)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(8)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(8)<1> wDIFF_TEMPORAL(8)<16;16,1> ubCURR_UV(10,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(11,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(11,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(11,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,144)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,152)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(9)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(9)<1> wDIFF_TEMPORAL(9)<16;16,1> ubCURR_UV(11,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(12,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(12,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(12,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,160)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,168)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(10)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(10)<1> wDIFF_TEMPORAL(10)<16;16,1> ubCURR_UV(12,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(13,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(13,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(13,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,176)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,184)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(11)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(11)<1> wDIFF_TEMPORAL(11)<16;16,1> ubCURR_UV(13,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(14,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(14,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(14,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,192)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,200)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(12)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(12)<1> wDIFF_TEMPORAL(12)<16;16,1> ubCURR_UV(14,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(15,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(15,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(15,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,208)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,216)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(13)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(13)<1> wDIFF_TEMPORAL(13)<16;16,1> ubCURR_UV(15,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(16,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(16,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(16,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,224)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,232)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(14)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(14)<1> wDIFF_TEMPORAL(14)<16;16,1> ubCURR_UV(16,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(17,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(17,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(17,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,240)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,248)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(15)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(15)<1> wDIFF_TEMPORAL(15)<16;16,1> ubCURR_UV(17,2)<16;16,1> + + + //16x4 to 8x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //Find if block is motion block - Second 16 lines + cmp.g.f1.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - Second 16 lines + (-f1.0) mov (16) uwCURBE_TEMP(1)<1> uwCURBE_TEMP(3)<16;16,1> + + //Actual DN - Second 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(22,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(22,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(22,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,0)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,8)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(16)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(16)<1> wDIFF_TEMPORAL(16)<16;16,1> ubCURR_UV(22,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(23,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(23,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(23,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,16)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,24)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(17)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(17)<1> wDIFF_TEMPORAL(17)<16;16,1> ubCURR_UV(23,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(24,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(24,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(24,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,32)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,40)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(18)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(18)<1> wDIFF_TEMPORAL(18)<16;16,1> ubCURR_UV(24,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(25,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(25,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(25,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,48)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,56)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(19)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(19)<1> wDIFF_TEMPORAL(19)<16;16,1> ubCURR_UV(25,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(26,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(26,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(26,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,64)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,72)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(20)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(20)<1> wDIFF_TEMPORAL(20)<16;16,1> ubCURR_UV(26,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(27,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(27,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(27,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,80)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,88)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(21)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(21)<1> wDIFF_TEMPORAL(21)<16;16,1> ubCURR_UV(27,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(28,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(28,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(28,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,96)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,104)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(22)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(22)<1> wDIFF_TEMPORAL(22)<16;16,1> ubCURR_UV(28,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(29,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(29,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(29,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,112)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,120)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(23)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(23)<1> wDIFF_TEMPORAL(23)<16;16,1> ubCURR_UV(29,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(30,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(30,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(30,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,128)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,136)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(24)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(24)<1> wDIFF_TEMPORAL(24)<16;16,1> ubCURR_UV(30,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(31,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(31,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(31,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,144)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,152)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(25)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(25)<1> wDIFF_TEMPORAL(25)<16;16,1> ubCURR_UV(31,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(32,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(32,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(32,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,160)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,168)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(26)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(26)<1> wDIFF_TEMPORAL(26)<16;16,1> ubCURR_UV(32,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(33,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(33,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(33,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,176)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,184)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(27)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(27)<1> wDIFF_TEMPORAL(27)<16;16,1> ubCURR_UV(33,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(34,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(34,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(34,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,192)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,200)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(28)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(28)<1> wDIFF_TEMPORAL(28)<16;16,1> ubCURR_UV(34,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(35,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(35,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(35,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,208)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,216)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(4)<1> wCURBE_TEMP(4)<16;16,1> ubCURR_UV(35,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(36,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(36,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(36,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,224)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,232)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(5)<1> wCURBE_TEMP(5)<16;16,1> ubCURR_UV(36,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(37,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(37,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(37,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,240)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,248)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(6)<1> wCURBE_TEMP(6)<16;16,1> ubCURR_UV(37,2)<16;16,1> + + //Pack Weight History WORD -> BYTE + mov (16) ubCURBE_TEMP(3,0)<1> ubCURBE_TEMP(0)<32;16,2> + mov (16) ubCURBE_TEMP(3,16)<1> ubCURBE_TEMP(1)<32;16,2> + + + +//Module Name : DN_UV_Compute_BNE_UV +//Author : Tatiya, Rupesh +//Description : Computes minimum SOAD for each 16x4 block. + + cmp.l.f0.0 (8) null:w uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + (f0.0)sel (8) uwCURBE_TEMP(1,0)<1> uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + + mov (8) ubCURBE_TEMP(1)<1> ubCURBE_TEMP(1)<16;8,2> + + + +//Module Name : DN_UV_PL2_Pack_Denoised_UV +//Name : Tatiya, Rupesh +//Description : Pack UV denoised data based on PL2 input. + + + +//Module Name : DN_UV_Pack_Denoised_UV +//Name : Tatiya, Rupesh +//Description : Pack UV denoised data based on PL2/PL3/PA. + + +//First 16 lines. + mov (16) ubMSGPAYLOAD_UV0(0,0)<1> ubDIFF_TEMPORAL(0)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(0,16)<1> ubDIFF_TEMPORAL(1)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(1,0)<1> ubDIFF_TEMPORAL(2)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(1,16)<1> ubDIFF_TEMPORAL(3)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(2,0)<1> ubDIFF_TEMPORAL(4)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(2,16)<1> ubDIFF_TEMPORAL(5)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(3,0)<1> ubDIFF_TEMPORAL(6)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(3,16)<1> ubDIFF_TEMPORAL(7)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(4,0)<1> ubDIFF_TEMPORAL(8)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(4,16)<1> ubDIFF_TEMPORAL(9)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(5,0)<1> ubDIFF_TEMPORAL(10)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(5,16)<1> ubDIFF_TEMPORAL(11)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(6,0)<1> ubDIFF_TEMPORAL(12)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(6,16)<1> ubDIFF_TEMPORAL(13)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(7,0)<1> ubDIFF_TEMPORAL(14)<32;16,2> + mov (16) ubMSGPAYLOAD_UV0(7,16)<1> ubDIFF_TEMPORAL(15)<32;16,2> + +//Second 16 lines. +//12 lines first + mov (16) ubMSGPAYLOAD_UV1(0,0)<1> ubDIFF_TEMPORAL(16)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(0,16)<1> ubDIFF_TEMPORAL(17)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(1,0)<1> ubDIFF_TEMPORAL(18)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(1,16)<1> ubDIFF_TEMPORAL(19)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(2,0)<1> ubDIFF_TEMPORAL(20)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(2,16)<1> ubDIFF_TEMPORAL(21)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(3,0)<1> ubDIFF_TEMPORAL(22)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(3,16)<1> ubDIFF_TEMPORAL(23)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(4,0)<1> ubDIFF_TEMPORAL(24)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(4,16)<1> ubDIFF_TEMPORAL(25)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(5,0)<1> ubDIFF_TEMPORAL(26)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(5,16)<1> ubDIFF_TEMPORAL(27)<32;16,2> + + //3 lines next + mov (16) ubMSGPAYLOAD_UV1(6,0)<1> ubDIFF_TEMPORAL(28)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(6,16)<1> ubCURBE_TEMP(4)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(7,0)<1> ubCURBE_TEMP(5)<32;16,2> + mov (16) ubMSGPAYLOAD_UV1(7,16)<1> ubCURBE_TEMP(6)<32;16,2> + + + +//Module Name : DN_UV_420_Save_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Save Curr Frame Y data for 420 Input + + + +//Module Name : DN_UV_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Saves Y or YUY2 of Current frame. + + + + + mov (8) acc0.0<1>:ud r0.0<8;8,1>:ud + mov (2) acc0.0<1>:d r62.10<2;2,1>:w + + mov (1) acc0.2<1>:d 0xF000F:ud + + mov (8) r92.0<1>:ud acc0.0<8;8,1>:ud + + mov (8) r101.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r110.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r119.0<1>:ud acc0.0<8;8,1>:ud + + add (1) r101.1<1>:d acc0.1<0;1,0>:d 16:d + + add (1) r110.0<1>:d acc0.0<0;1,0>:d 16:d + + add (2) r119.0<1>:d acc0.0<2;2,1>:d 16:d + + send (8) null<1>:d r92 0x5 0x120A8018:ud + send (8) null<1>:d r101 0x5 0x120A8018:ud + send (8) null<1>:d r110 0x5 0x120A8018:ud + send (8) null<1>:d r119 0x5 0x120A8018:ud + + + //TODO - See if History saving can be combined with Curr Frame Save. - rT + + +//Module Name : DN_UV_Save_Hist_UV +//Author : Tatiya, Rupesh +//Description : Saves DN history for UV data. + + mov (8) r3.0<1>:ud r0.0<8;8,1>:ud + mov (2) r3.0<1>:d r62.12<2;2,1>:w + mov (1) r3.2<1>:d 0x30007:ud + + send (8) null<1>:d r3 0x5 0x40A8021:ud + + + +//Module Name : DN_UV_Save_BNE_UV +//Author : Tatiya, Rupesh +//Description : Saves BNE values for 16x16 U and 16x16 V. + + mov (8) r1.0<1>:ud r0.0<8;8,1>:ud + mov (2) r1.0<1>:d r63.12<2;2,1>:w + mov (1) r1.2<1>:d 0x10003:ud + + send (8) null<1>:d r1 0x5 0x40A8023:ud + + + +//Module Name : DN_UV_PL2_Save_Curr_Frame_UV +//Author : Tatiya, Rupesh + + + +//Module name : DN_UV_Save_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Saves Current Frame (UV only). + + + + + mov (8) r74<1>:ud r0.0<8;8,1>:ud + mov (8) r83<1>:ud r0.0<8;8,1>:ud + + mov (1) r74.0<1>:d r62.10<0;1,0>:w + shr (1) r74.1<1>:d r62.11<0;1,0>:w 1:w + mov (1) r74.2<1>:d 0xF000F:ud + + add (1) r83.0<1>:d r62.10<0;1,0>:w 16:d + shr (1) r83.1<1>:d r62.11<0;1,0>:w 1:w + mov (1) r83.2<1>:d 0xF000F:ud + + send (8) null<1>:d r74 0x5 0x120A8019:ud + send (8) null<1>:d r83 0x5 0x120A8019:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + + //All sub-routines here + + +// Module Name : Noise_Detection +// Author : Tatiya, Rupesh +// Description : Performs noise detection on 32 pixels of U (8x4) and 32 pixels of V (8x4). + +DN_UV_NOISE_DETECTION_UV: + +// Find Field Block Median +// +// Purpose : Find the median value of the nine pixels in the same field +// which are centered at current pixel. +// +// Works on 9 pixels centered at the current pixel +// NOTE: pixels are within same field. +// v4 - current pixel +// +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 + +// Algorithm to find median modifies the data. +// Copy the data needed to calculate median so the original source data stays intact. +// + +//TODO - Change Interleaved implementation to separated one if - , does not work on predication. - rT + +//Delete Later - rT +//mov (1) pCUR_UV:uw 52*32:uw + +// v0 +mov (16) ubMEDIAN_TEMP(0,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(0,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw +// v0 +mov (16) ubMEDIAN_TEMP(9,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(9,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// MedianSwap +// +// MedianSwap(inOutLeft, inOutRight) +// { +// if (inOutLeft > inOutRight) +// { +// temp = inOutLeft +// inOutLeft = inOutRight +// inOutRight = temp +// } +// } + +// MedianSwap(v1, v2) - U +// MedianSwap(v4, v5) - U +// MedianSwap(v1, v2) - V +// MedianSwap(v4, v5) - V + +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(1,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(1,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(1,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(1,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(3,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(6,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(3,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(6,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(3,0)<2> ubMEDIAN_TEMP(4,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(3,1)<2> ubMEDIAN_TEMP(4,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(4,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(3,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(3,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(3,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(3,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(5,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(5,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(5,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(5,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(5,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(5,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(6,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(6,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(2,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(2,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(6,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(6,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(10,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(10,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(10,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(10,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(12,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(15,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(12,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(15,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(12,0)<2> ubMEDIAN_TEMP(13,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(12,1)<2> ubMEDIAN_TEMP(13,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(13,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(12,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(12,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(12,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(12,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(14,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(14,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(14,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(14,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(14,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(14,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(15,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(15,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(11,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(11,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(15,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(15,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + +// Sobel Value calculation for the current pixel v4 +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 +// +// Gx = -v0 - 2*v3 - v6 + v2 + 2*v5 + v8 +// Gy = v0 + 2*v1 + v2 - v6 - 2*v7 - v8 +// +// Sobel = (|Gx| + |Gy|) >> 3 + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw -128:uw + +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(0)<1> r[a0.0,68]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(1)<1> r[a0.0,100]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(2)<1> r[a0.0,132]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(3)<1> r[a0.0,164]<16;16,1>:ub 2:w + +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,2]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,130]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(0)<16;16,1> + +shr (16) uwSOBEL(0)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,34]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,162]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(1)<16;16,1> + +shr (16) uwSOBEL(1)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,66]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,194]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(2)<16;16,1> + +shr (16) uwSOBEL(2)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,98]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,226]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(3)<16;16,1> + +shr (16) uwSOBEL(3)<1> acc0.0<16;16,1>:uw 3:uw + +//Mov Median in CURBE_TEMP to free up temp space. +mov (16) ubMEDIAN(0,0)<1> ubMEDIAN_TEMP(4,0)<16;16,1> +mov (16) ubMEDIAN(0,16)<1> ubMEDIAN_TEMP(4,16)<16;16,1> +mov (16) ubMEDIAN(0,32)<1> ubMEDIAN_TEMP(13,0)<16;16,1> +mov (16) ubMEDIAN(0,48)<1> ubMEDIAN_TEMP(13,16)<16;16,1> + +// Find: +// absDiff = abs(ubCurY - ubMedian) +// Find the difference between pixel and median value. + +//Median is interleaved. So difference is also interleaved. + +//------------------------------------------------------------------------------------------ +//Process 16 U and 16 V pixels here and rest later. +// first row - v0,v1,v2 +add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +// first row - v0,v1,v2 +add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//First 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max-block_min) < m_LocalDiffThreshold)) +// if (sigma_mb_min > sigma) +// sigma_mb_min = sigma; + +//NOTE: block_min is always zero as median is one of the value in 3x3 block. So no need o calculate it. +// So just do - +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max) < m_LocalDiffThreshold) && ( sigma < sigma_mb_min)) +// sigma_mb_min = sigma; + +//We are processing 32 bytes of U and 32 bytes of V - each of size 8x4. +//Compare first 8 bytes with max possible (255). +//Start above condition from second 8 bytes. + +//TODO - Change Later - rT +// mov (1) pCUR_MIN_SOAD_8x4:uw 1752:uw //r54.24:ub + +//First row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(0)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> 255:uw +(f0.0) sel (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> 255:uw + +//Second row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(1)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//Second 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//Third row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(2)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> + +//Fourth row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(3)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + + cmp.l.f0.0 (8) null:uw uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> +(f0.0) sel (8) uwSOBEL(0)<1> uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> + + cmp.l.f0.0 (4) null:uw uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> +(f0.0) sel (4) uwSOBEL(0)<1> uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> + + cmp.l.f0.0 (2) null:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> +(f0.0) sel (2) r[a0.1,0]<1>:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> + + + + + + +// End of common.inc + +mov (1) ip:ud r9.7<0;1,0>:d + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_422CP.g4a new file mode 100644 index 000000000..91b38648a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_422CP.g4a @@ -0,0 +1,561 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 113 // Total instruction count +// 1 // Total kernel count + +.kernel NV12_DN_422CP +.code + + + +// FileName: DN_PL_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for planar format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x45E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_NV12_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Load_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + +//CHANGE : Read extra UV data to convert to 422. -rT +//we are reading extra data in ALL cases irrespective of whether upsampling is reqd or not later on, to keep things simple. + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (1) r27.1<1>:d r27.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x4000F:ud { NoDDChk } // U/V block width and height (8x5) + mov (8) mudMSGHDR_UVCOPY(0)<1> r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2390001:ud + + //Update Header for Save + mov (1) mudMSGHDR_UVCOPY(0,2)<1> 0x3000F:ud // U/V block width and height (8x4) + + + +// FileName: DN_Save_Y_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of Y channel of DN output for reference + + +mov (8) mudDN_Y_OUT(0,0)<1> r0<8;8,1>:ud // message header +mov (2) mudDN_Y_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin +mov (1) mudDN_Y_OUT(0,2)<1> 0x7000F:ud { NoDDChk } // block width and height (16x8) + +//send out data through data port +send (8) null<1>:d mudDN_Y_OUT 0x5 0xA0A8018:ud + + + +// FileName: DN_Save_UV_NV12_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Save_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + +//Reuse the header from Load component +//Header is modified at the end of load - to be usable for save. + + mov (8) mudMSGHDR_UVCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + mov (8) mudMSGHDR_UVCOPY(2)<1> udDNDI_UV_RESP(1)<8;8,1> + send (8) null<1>:d r36 0x5 0x60A8019:ud + + + +// FileName: DN_Upsample_UV_NV12_16x8.asm +// Author: Tatiya, Rupesh +// Description: Upconvert 420 UV to 422 + + + +// FileName: UVCopy_Upsample_UV_16x8.asm +// Author: Tatiya, Rupesh +// Description: Convert 42X UV to 422 - to be used for IECP. + + + avg.sat (16) uwDNDI_UVCOPY_TEMP(0) ubDNDI_UV_RESP(0,0)<16;16,1> ubDNDI_UV_RESP(0,0)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(1) ubDNDI_UV_RESP(0,0)<16;16,1> ubDNDI_UV_RESP(0,16)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(2) ubDNDI_UV_RESP(0,16)<16;16,1> ubDNDI_UV_RESP(0,16)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(3) ubDNDI_UV_RESP(0,16)<16;16,1> ubDNDI_UV_RESP(0,32)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(4) ubDNDI_UV_RESP(0,32)<16;16,1> ubDNDI_UV_RESP(0,32)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(5) ubDNDI_UV_RESP(0,32)<16;16,1> ubDNDI_UV_RESP(0,48)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(6) ubDNDI_UV_RESP(0,48)<16;16,1> ubDNDI_UV_RESP(0,48)<16;16,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(7) ubDNDI_UV_RESP(0,48)<16;16,1> ubDNDI_UV_RESP(0,64)<16;16,1> + + mov (16) ubDNDI_RESP(5,1)<2> ubDNDI_UVCOPY_TEMP(0,0)<32;8,4> { NoDDClr } //Copy U data + mov (16) ubDNDI_RESP(5,0)<2> ubDNDI_UVCOPY_TEMP(0,2)<32;8,4> { NoDDChk } //Copy V data + mov (16) ubDNDI_RESP(5,33)<2> ubDNDI_UVCOPY_TEMP(2,0)<32;8,4> { NoDDClr } //Copy U data + mov (16) ubDNDI_RESP(5,32)<2> ubDNDI_UVCOPY_TEMP(2,2)<32;8,4> { NoDDChk } //Copy V data + mov (16) ubDNDI_RESP(5,65)<2> ubDNDI_UVCOPY_TEMP(4,0)<32;8,4> { NoDDClr } //Copy U data + mov (16) ubDNDI_RESP(5,64)<2> ubDNDI_UVCOPY_TEMP(4,2)<32;8,4> { NoDDChk } //Copy V data + mov (16) ubDNDI_RESP(5,97)<2> ubDNDI_UVCOPY_TEMP(6,0)<32;8,4> { NoDDClr } //Copy U data + mov (16) ubDNDI_RESP(5,96)<2> ubDNDI_UVCOPY_TEMP(6,2)<32;8,4> { NoDDChk } //Copy V data + + + +// FileName: DN_Save_422CP_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of DN output to the color pipe in 4-2-2 format + + +.declare mubMSGHDR_DN_OUT_2 Base=r36.0 ElementSize=1 Type=ub + + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x7000F:ud { NoDDClr, NoDDChk } // block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) mudMSGHDR_DN_OUT(0,3)<1> r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +// First 8 x 8 Block + mov (8) mubMSGHDR_DN_OUT(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3)<2> ubDNDI_RESP(0,64)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3,16)<2> ubDNDI_RESP(0,80)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4)<2> ubDNDI_RESP(0,96)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4,16)<2> ubDNDI_RESP(0,112)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,1)<4> ubDNDI_RESP(5,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,17)<4> ubDNDI_RESP(5,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,3)<4> ubDNDI_RESP(5,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,19)<4> ubDNDI_RESP(5,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,1)<4> ubDNDI_RESP(5,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,17)<4> ubDNDI_RESP(5,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(2,3)<4> ubDNDI_RESP(5,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,19)<4> ubDNDI_RESP(5,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,1)<4> ubDNDI_RESP(5,65)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,17)<4> ubDNDI_RESP(5,81)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(3,3)<4> ubDNDI_RESP(5,64)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,19)<4> ubDNDI_RESP(5,80)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,1)<4> ubDNDI_RESP(5,97)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,17)<4> ubDNDI_RESP(5,113)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(4,3)<4> ubDNDI_RESP(5,96)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,19)<4> ubDNDI_RESP(5,112)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Second 8 x 8 Block +mov (8) r36.0<1>:ud r31.0<8;8,1>:ud +add (1) r36.0<1>:ud r36.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DN_OUT_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3)<2> ubDNDI_RESP(0,72)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3,16)<2> ubDNDI_RESP(0,88)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4)<2> ubDNDI_RESP(0,104)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4,16)<2> ubDNDI_RESP(0,120)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,1)<4> ubDNDI_RESP(5,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,17)<4> ubDNDI_RESP(5,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,3)<4> ubDNDI_RESP(5,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,19)<4> ubDNDI_RESP(5,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,1)<4> ubDNDI_RESP(5,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,17)<4> ubDNDI_RESP(5,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(2,3)<4> ubDNDI_RESP(5,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,19)<4> ubDNDI_RESP(5,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,1)<4> ubDNDI_RESP(5,73)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,17)<4> ubDNDI_RESP(5,89)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(3,3)<4> ubDNDI_RESP(5,72)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,19)<4> ubDNDI_RESP(5,88)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,1)<4> ubDNDI_RESP(5,105)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,17)<4> ubDNDI_RESP(5,121)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(4,3)<4> ubDNDI_RESP(5,104)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,19)<4> ubDNDI_RESP(5,120)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +//send out data through data port +send (8) null<1>:d r31.0 0x5 0xA0A801B:ud +send (8) null<1>:d r36.0 0x5 0xA0A801B:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_NV12.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_NV12.g4a new file mode 100644 index 000000000..546866f7f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/NV12_DN_NV12.g4a @@ -0,0 +1,442 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 40 // Total instruction count +// 1 // Total kernel count + +.kernel NV12_DN_NV12 +.code + + + +// FileName: DN_PL_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for planar format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x45E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_NV12_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Load_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + +//CHANGE : Read extra UV data to convert to 422. -rT +//we are reading extra data in ALL cases irrespective of whether upsampling is reqd or not later on, to keep things simple. + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (1) r27.1<1>:d r27.1<0;1,0>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x4000F:ud { NoDDChk } // U/V block width and height (8x5) + mov (8) mudMSGHDR_UVCOPY(0)<1> r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2390001:ud + + //Update Header for Save + mov (1) mudMSGHDR_UVCOPY(0,2)<1> 0x3000F:ud // U/V block width and height (8x4) + + + +// FileName: DN_Save_Y_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of Y channel of DN output for reference + + +mov (8) mudDN_Y_OUT(0,0)<1> r0<8;8,1>:ud // message header +mov (2) mudDN_Y_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin +mov (1) mudDN_Y_OUT(0,2)<1> 0x7000F:ud { NoDDChk } // block width and height (16x8) + +//send out data through data port +send (8) null<1>:d mudDN_Y_OUT 0x5 0xA0A8018:ud + + + +// FileName: DN_Save_UV_NV12_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Save_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + +//Reuse the header from Load component +//Header is modified at the end of load - to be usable for save. + + mov (8) mudMSGHDR_UVCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + mov (8) mudMSGHDR_UVCOPY(2)<1> udDNDI_UV_RESP(1)<8;8,1> + send (8) null<1>:d r36 0x5 0x60A8019:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_0.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_0.g4a new file mode 100644 index 000000000..6668336ac --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_0.g4a @@ -0,0 +1,561 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 39 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PA_AVS_Buf_0.asm +// Author: Vivek Kumar +// Description: Loads 8x8 AVS/IEF Packed data into Buffer 0 + + + +// FileName : PA_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF Packed data into Buffer N + +//On IVB, for AVS module - set buffer pointers offset according to AVS Layout. +//Change it to Sample Unorm layout in Shuffle modules. + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_0_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x50EB400:ud //msg desc + + mov (1) r16.2:ud 0x00000000:ud // Enable ARGB channels + + + //OPT: rAVS_PAYLOAD.1 and .7 --> use NODDCLR, NODDCHK -rT + mov (1) r25.7<1>:ud r9.7:ud { NoDDClr } + mov (1) r25.1<1>:ud r9.12:uw { NoDDChk } + + + // set the vertical block number + + + mov (8) r17.0:ud r25.0<8;8,1>:ud + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_AVS_WA_DONE_L0_0_ + + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + + +GEN7_AVS_WA_DONE_L0_0_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns packed data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_1.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_1.g4a new file mode 100644 index 000000000..fecd53851 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_1.g4a @@ -0,0 +1,553 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 37 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PA_AVS_Buf_1.asm +// Author: Vivek Kumar +// Description: Loads 8x8 AVS/IEF Packed data into Buffer 1 + + + +// FileName : PA_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF Packed data into Buffer N + +//On IVB, for AVS module - set buffer pointers offset according to AVS Layout. +//Change it to Sample Unorm layout in Shuffle modules. + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_1_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x50EB400:ud //msg desc + + mov (1) r16.2:ud 0x00000000:ud // Enable ARGB channels + + + // set the vertical block number + + add (1) r25.1<1>:ud r9.12:uw 1:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_AVS_WA_DONE_L0_1_ + + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + + +GEN7_AVS_WA_DONE_L0_1_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns packed data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_1_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_2.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_2.g4a new file mode 100644 index 000000000..494b26b13 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_2.g4a @@ -0,0 +1,554 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 37 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PA_AVS_Buf_2.asm +// Author: Vivek Kumar +// Description: Loads 8x8 AVS/IEF Packed data into Buffer 2 + + + +// FileName : PA_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF Packed data into Buffer N + +//On IVB, for AVS module - set buffer pointers offset according to AVS Layout. +//Change it to Sample Unorm layout in Shuffle modules. + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_2_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x50EB400:ud //msg desc + + mov (1) r16.2:ud 0x00000000:ud // Enable ARGB channels + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 2:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_AVS_WA_DONE_L0_2_ + + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + + +GEN7_AVS_WA_DONE_L0_2_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns packed data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_2_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_3.g4a new file mode 100644 index 000000000..14d201f22 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_AVS_Buf_3.g4a @@ -0,0 +1,554 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 37 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PA_AVS_Buf_3.asm +// Author: Vivek Kumar +// Description: Loads 8x8 AVS/IEF Packed data into Buffer 3 + + + +// FileName : PA_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF Packed data into Buffer N + +//On IVB, for AVS module - set buffer pointers offset according to AVS Layout. +//Change it to Sample Unorm layout in Shuffle modules. + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_3_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x50EB400:ud //msg desc + + mov (1) r16.2:ud 0x00000000:ud // Enable ARGB channels + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 3:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_AVS_WA_DONE_L0_3_ + + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + + +GEN7_AVS_WA_DONE_L0_3_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns packed data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_3_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_422CP.g4a new file mode 100644 index 000000000..04dc2abce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_422CP.g4a @@ -0,0 +1,483 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 87 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DI_422CP +.code + + + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DI_Save_422CP_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in 422 format to Color Pipe (IECP) + + +.declare mubMSGHDR_DI_OUT1_1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT1_2 Base=r21.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_1 Base=r24.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_2 Base=r27.0 ElementSize=1 Type=ub + + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:ud r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:ud r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDClr, NoDDChk } // Block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) r27.3<1>:ud r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r24.0<1>:ud r27<8;8,1>:ud + + +// Pack 2nd field Y; First 8x4 block + mov (8) mubMSGHDR_DI_OUT1_1(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; First 8x4 block + mov (4) mubMSGHDR_DI_OUT1_1(1,1)<4> ubDNDI_RESP(2,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,17)<4> ubDNDI_RESP(2,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(1,3)<4> ubDNDI_RESP(2,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,19)<4> ubDNDI_RESP(2,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,1)<4> ubDNDI_RESP(2,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,17)<4> ubDNDI_RESP(2,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(2,3)<4> ubDNDI_RESP(2,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,19)<4> ubDNDI_RESP(2,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + + +// Pack 2nd field Y; Second 8x4 block +mov (8) r21.0<1>:ud r18.0<8;8,1>:ud +add (1) r21.0<1>:ud r21.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT1_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; Second 8x4 block + mov (4) mubMSGHDR_DI_OUT1_2(1,1)<4> ubDNDI_RESP(2,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,17)<4> ubDNDI_RESP(2,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(1,3)<4> ubDNDI_RESP(2,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,19)<4> ubDNDI_RESP(2,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,1)<4> ubDNDI_RESP(2,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,17)<4> ubDNDI_RESP(2,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(2,3)<4> ubDNDI_RESP(2,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,19)<4> ubDNDI_RESP(2,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +send (8) null<1>:d r21.0 0x5 0x60A801B:ud + +// Pack 1st field Y; 1st 8x4 block + mov (8) mubMSGHDR_DI_OUT2_1(1)<2> ubDNDI_RESP(4,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(1,16)<2> ubDNDI_RESP(4,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2)<2> ubDNDI_RESP(4,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2,16)<2> ubDNDI_RESP(4,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U,V; 1st 8x4 block + mov (4) mubMSGHDR_DI_OUT2_1(1,1)<4> ubDNDI_RESP(6,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,17)<4> ubDNDI_RESP(6,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(1,3)<4> ubDNDI_RESP(6,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,19)<4> ubDNDI_RESP(6,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,1)<4> ubDNDI_RESP(6,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,17)<4> ubDNDI_RESP(6,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(2,3)<4> ubDNDI_RESP(6,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,19)<4> ubDNDI_RESP(6,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Pack 1st field Y; 2nd 8x4 block +mov (8) r27.0<1>:ud r24.0<8;8,1>:ud +add (1) r27.0<1>:ud r27.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT2_2(1)<2> ubDNDI_RESP(4,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(1,16)<2> ubDNDI_RESP(4,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2)<2> ubDNDI_RESP(4,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2,16)<2> ubDNDI_RESP(4,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U, V; 2nd 8x4 block + mov (4) mubMSGHDR_DI_OUT2_2(1,1)<4> ubDNDI_RESP(6,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,17)<4> ubDNDI_RESP(6,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(1,3)<4> ubDNDI_RESP(6,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,19)<4> ubDNDI_RESP(6,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,1)<4> ubDNDI_RESP(6,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,17)<4> ubDNDI_RESP(6,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(2,3)<4> ubDNDI_RESP(6,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,19)<4> ubDNDI_RESP(6,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r24.0 0x5 0x60A801E:ud +send (8) null<1>:d r27.0 0x5 0x60A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_PA.g4a new file mode 100644 index 000000000..d26966599 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DI_PA.g4a @@ -0,0 +1,421 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 57 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DI_PA +.code + + + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_422CP.g4a new file mode 100644 index 000000000..84e2c3020 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_422CP.g4a @@ -0,0 +1,559 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 127 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DNDI_422CP +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4CE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of DN output in Packed format for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +add (4) a0.4<1>:uw r4.0<4;4,1>:ub 1024:w // Initial Y,U,V offset in YUV422 block; it starts at m14 + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3001F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + mov (16) r[a0.4, 0]<2>:ub ubDNDI_RESP(10,0) { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (16) r[a0.4, 32]<2>:ub ubDNDI_RESP(4,16) { NoDDClr } // 1st field luma from current frame (line 1,3) + mov (16) r[a0.4, 64]<2>:ub ubDNDI_RESP(10,16) { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (16) r[a0.4, 96]<2>:ub ubDNDI_RESP(5,16) { NoDDClr } // 1st field luma from current frame (line 1,3) + mov (8) r[a0.5, 0]<4>:ub ubDNDI_RESP(11,1)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 0,2) + mov (8) r[a0.5, 32]<4>:ub ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.5, 64]<4>:ub ubDNDI_RESP(11,17)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 0,2) + mov (8) r[a0.5, 96]<4>:ub ubDNDI_RESP(7,17)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.6, 0]<4>:ub ubDNDI_RESP(11,0)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 0,2) + mov (8) r[a0.6, 32]<4>:ub ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.6, 64]<4>:ub ubDNDI_RESP(11,16)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 0,2) + mov (8) r[a0.6, 96]<4>:ub ubDNDI_RESP(7,16)<16;8,2> { NoDDChk } // 1st field U from current frame (line 1,3) +jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (16) r[a0.4, 0]<2>:ub ubDNDI_RESP(4,0) { NoDDClr } // 1st field luma from current frame (line 0,2) + mov (16) r[a0.4, 32]<2>:ub ubDNDI_RESP(10,0) { NoDDClr } // 2nd field luma from current frame (line 1,3) + mov (16) r[a0.4, 64]<2>:ub ubDNDI_RESP(5,0) { NoDDClr } // 1st field luma from current frame (line 0,2) + mov (16) r[a0.4, 96]<2>:ub ubDNDI_RESP(10,16) { NoDDClr } // 2nd field luma from current frame (line 1,3) + mov (8) r[a0.5, 0]<4>:ub ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 0,2) + mov (8) r[a0.5, 32]<4>:ub ubDNDI_RESP(11,1)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 1,3) + mov (8) r[a0.5, 64]<4>:ub ubDNDI_RESP(7,1)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 0,2) + mov (8) r[a0.5, 96]<4>:ub ubDNDI_RESP(11,17)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 1,3) + mov (8) r[a0.6, 0]<4>:ub ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } // 1st field V from current frame (line 0,2) + mov (8) r[a0.6, 32]<4>:ub ubDNDI_RESP(11,0)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 1,3) + mov (8) r[a0.6, 64]<4>:ub ubDNDI_RESP(7,0)<16;8,2> { NoDDChk } // 1st field V from current frame (line 0,2) + mov (8) r[a0.6, 96]<4>:ub ubDNDI_RESP(11,16)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0xA0A8018:ud + + + +// FileName: DI_Save_422CP_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in 422 format to Color Pipe (IECP) + + +.declare mubMSGHDR_DI_OUT1_1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT1_2 Base=r21.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_1 Base=r24.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_2 Base=r27.0 ElementSize=1 Type=ub + + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:ud r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:ud r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDClr, NoDDChk } // Block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) r27.3<1>:ud r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r24.0<1>:ud r27<8;8,1>:ud + + +// Pack 2nd field Y; First 8x4 block + mov (8) mubMSGHDR_DI_OUT1_1(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; First 8x4 block + mov (4) mubMSGHDR_DI_OUT1_1(1,1)<4> ubDNDI_RESP(2,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,17)<4> ubDNDI_RESP(2,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(1,3)<4> ubDNDI_RESP(2,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,19)<4> ubDNDI_RESP(2,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,1)<4> ubDNDI_RESP(2,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,17)<4> ubDNDI_RESP(2,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(2,3)<4> ubDNDI_RESP(2,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,19)<4> ubDNDI_RESP(2,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + + +// Pack 2nd field Y; Second 8x4 block +mov (8) r21.0<1>:ud r18.0<8;8,1>:ud +add (1) r21.0<1>:ud r21.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT1_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; Second 8x4 block + mov (4) mubMSGHDR_DI_OUT1_2(1,1)<4> ubDNDI_RESP(2,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,17)<4> ubDNDI_RESP(2,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(1,3)<4> ubDNDI_RESP(2,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,19)<4> ubDNDI_RESP(2,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,1)<4> ubDNDI_RESP(2,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,17)<4> ubDNDI_RESP(2,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(2,3)<4> ubDNDI_RESP(2,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,19)<4> ubDNDI_RESP(2,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +send (8) null<1>:d r21.0 0x5 0x60A801B:ud + +// Pack 1st field Y; 1st 8x4 block + mov (8) mubMSGHDR_DI_OUT2_1(1)<2> ubDNDI_RESP(4,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(1,16)<2> ubDNDI_RESP(4,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2)<2> ubDNDI_RESP(4,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2,16)<2> ubDNDI_RESP(4,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U,V; 1st 8x4 block + mov (4) mubMSGHDR_DI_OUT2_1(1,1)<4> ubDNDI_RESP(6,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,17)<4> ubDNDI_RESP(6,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(1,3)<4> ubDNDI_RESP(6,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,19)<4> ubDNDI_RESP(6,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,1)<4> ubDNDI_RESP(6,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,17)<4> ubDNDI_RESP(6,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(2,3)<4> ubDNDI_RESP(6,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,19)<4> ubDNDI_RESP(6,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Pack 1st field Y; 2nd 8x4 block +mov (8) r27.0<1>:ud r24.0<8;8,1>:ud +add (1) r27.0<1>:ud r27.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT2_2(1)<2> ubDNDI_RESP(4,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(1,16)<2> ubDNDI_RESP(4,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2)<2> ubDNDI_RESP(4,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2,16)<2> ubDNDI_RESP(4,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U, V; 2nd 8x4 block + mov (4) mubMSGHDR_DI_OUT2_2(1,1)<4> ubDNDI_RESP(6,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,17)<4> ubDNDI_RESP(6,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(1,3)<4> ubDNDI_RESP(6,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,19)<4> ubDNDI_RESP(6,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,1)<4> ubDNDI_RESP(6,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,17)<4> ubDNDI_RESP(6,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(2,3)<4> ubDNDI_RESP(6,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,19)<4> ubDNDI_RESP(6,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r24.0 0x5 0x60A801E:ud +send (8) null<1>:d r27.0 0x5 0x60A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_PA.g4a new file mode 100644 index 000000000..a737bdb39 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNDI_PA.g4a @@ -0,0 +1,497 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 97 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DNDI_PA +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4CE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of DN output in Packed format for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +add (4) a0.4<1>:uw r4.0<4;4,1>:ub 1024:w // Initial Y,U,V offset in YUV422 block; it starts at m14 + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3001F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + mov (16) r[a0.4, 0]<2>:ub ubDNDI_RESP(10,0) { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (16) r[a0.4, 32]<2>:ub ubDNDI_RESP(4,16) { NoDDClr } // 1st field luma from current frame (line 1,3) + mov (16) r[a0.4, 64]<2>:ub ubDNDI_RESP(10,16) { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (16) r[a0.4, 96]<2>:ub ubDNDI_RESP(5,16) { NoDDClr } // 1st field luma from current frame (line 1,3) + mov (8) r[a0.5, 0]<4>:ub ubDNDI_RESP(11,1)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 0,2) + mov (8) r[a0.5, 32]<4>:ub ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.5, 64]<4>:ub ubDNDI_RESP(11,17)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 0,2) + mov (8) r[a0.5, 96]<4>:ub ubDNDI_RESP(7,17)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.6, 0]<4>:ub ubDNDI_RESP(11,0)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 0,2) + mov (8) r[a0.6, 32]<4>:ub ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } // 1st field U from current frame (line 1,3) + mov (8) r[a0.6, 64]<4>:ub ubDNDI_RESP(11,16)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 0,2) + mov (8) r[a0.6, 96]<4>:ub ubDNDI_RESP(7,16)<16;8,2> { NoDDChk } // 1st field U from current frame (line 1,3) +jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (16) r[a0.4, 0]<2>:ub ubDNDI_RESP(4,0) { NoDDClr } // 1st field luma from current frame (line 0,2) + mov (16) r[a0.4, 32]<2>:ub ubDNDI_RESP(10,0) { NoDDClr } // 2nd field luma from current frame (line 1,3) + mov (16) r[a0.4, 64]<2>:ub ubDNDI_RESP(5,0) { NoDDClr } // 1st field luma from current frame (line 0,2) + mov (16) r[a0.4, 96]<2>:ub ubDNDI_RESP(10,16) { NoDDClr } // 2nd field luma from current frame (line 1,3) + mov (8) r[a0.5, 0]<4>:ub ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 0,2) + mov (8) r[a0.5, 32]<4>:ub ubDNDI_RESP(11,1)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 1,3) + mov (8) r[a0.5, 64]<4>:ub ubDNDI_RESP(7,1)<16;8,2> { NoDDClr, NoDDChk } // 1st field U from current frame (line 0,2) + mov (8) r[a0.5, 96]<4>:ub ubDNDI_RESP(11,17)<16;8,2> { NoDDClr, NoDDChk } // 2nd field U from current frame (line 1,3) + mov (8) r[a0.6, 0]<4>:ub ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } // 1st field V from current frame (line 0,2) + mov (8) r[a0.6, 32]<4>:ub ubDNDI_RESP(11,0)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 1,3) + mov (8) r[a0.6, 64]<4>:ub ubDNDI_RESP(7,0)<16;8,2> { NoDDChk } // 1st field V from current frame (line 0,2) + mov (8) r[a0.6, 96]<4>:ub ubDNDI_RESP(11,16)<16;8,2> { NoDDChk } // 2nd field V from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0xA0A8018:ud + + + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNUV_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNUV_PA.g4a new file mode 100644 index 000000000..68502b48b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DNUV_PA.g4a @@ -0,0 +1,2726 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 1319 // Total instruction count +// 1 // Total kernel count + + +.kernel YUY2_DNUV_YUY2 +.code + + + +//Module : DN_UV_Setup +//Author : Tatiya, Rupesh +//Description : Initial Set-up for DN_UV + + + + +// Module name : ChromaDenoise.inc +// Author : Tatiya, Rupesh + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================================================== +//Interface for serpent mode Chroma Denoise, added by Le +//====================================================== +//r1 + + +//noise history thresholds (low and high) + + +//temporal difference thresholds (high and low) + + +//noise history thresholds (low and high) +//#define ubNoiseHistMaxHigh r1.22 +//#define ubNoiseHistMaxLow r1.23 +//#define ubNoiseHistDeltaHigh r1.24 +//#define ubNoiseHistDeltaLow r1.25 + +//Gaussian thresholds + + +//temporal difference thresholds (default) + + +//r2 +//history thresholds (default) + + +//denoise factor (0-63) + + +//====================== Binding table (Explicit To DNUV)========================================= +//Used by DN_UV kernels + + + //Pointer to Current Frame UV + + +//r1-r6 + //CURBE GRFs used as TEMP : Used for max computation and storing max temporarily. : r1-r6 + + + .declare ubCURBE_TEMP Base=r1.0 ElementSize=1 Type=ub + .declare uwCURBE_TEMP Base=r1.0 ElementSize=2 Type=uw + .declare wCURBE_TEMP Base=r1.0 ElementSize=2 Type=w + .declare fCURBE_TEMP Base=r1.0 ElementSize=4 Type=f + .declare udCURBE_TEMP Base=r1.0 ElementSize=4 Type=ud + .declare uwMAX_ABS_DIFF Base=r5.0 ElementSize=2 Type=uw + + //r1 + + + //r3 + + + //r4 + +//r7 + //All of the following has to defined in Same GRF for optimal performance. + + +//r8-24 + //Previous Frame UV + + .declare udPREV_UV Base=r8.0 ElementSize=4 Type=ud + .declare ubPREV_UV Base=r8.0 ElementSize=1 Type=ub + + +//r25-48 + //TEMP Space for any Usage. + + +//========================================================================= +//Definations and declarations for serpent mode Chroma Denoise, added by Le +//========================================================================= + + + .declare udGNE_UV Base=r24.0 ElementSize=4 Type=ud + .declare fGNE_UV Base=r24.0 ElementSize=4 Type=f + .declare ubGNE_UV Base=r24.0 ElementSize=1 Type=ub + + .declare udMSGHDR_BNE_SERP Base=r25.0 ElementSize=4 Type=ud + .declare udMSGSRC_BNE_SERP Base=r26.0 ElementSize=4 Type=ud + + + .declare ubDN_UV_Thresholds Base=r26.0 ElementSize=1 Type=ub + .declare ubDN_UV_Thresholds_Temp Base=r27.0 ElementSize=1 Type=ub + .declare udDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=ud + .declare udDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=ud + .declare fDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=f + .declare fDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=f + + +//==================================================================================== + + + //TEMP23: To hold V data for PL3 surfaces + .declare udCURR_V_TEMP Base=r25.0 ElementSize=4 Type=ud + .declare ubCURR_V_TEMP Base=r25.0 ElementSize=1 Type=ub + + //GRFs to calculate Median: r25-r42 + .declare ubMEDIAN_TEMP Base=r25.0 ElementSize=1 Type=ub + + //18 GRFs to hold difference : r25-r42 + .declare wDIFF Base=r25.0 ElementSize=2 Type=w + .declare uwDIFF Base=r25.0 ElementSize=2 Type=uw + + //Temporal Diff + .declare wDIFF_TEMPORAL Base=r25.0 ElementSize=2 Type=w + .declare ubDIFF_TEMPORAL Base=r25.0 ElementSize=1 Type=ub + + //4 GRFs to hold Sobel Value : r43-46 + .declare wSOBEL_X Base=r43.0 ElementSize=2 Type=w + .declare uwSOBEL Base=r43.0 ElementSize=2 Type=uw + + + //2 GRFs to hold SOAD temporarily: r47-48 + .declare uwSOAD Base=r47.0 ElementSize=2 Type=uw + + //Temp GRFs to hold extra YUYV pixels: r43-r48 + .declare ubTEMP5 Base=r43.0 ElementSize=1 Type=ub + + //Temp GRFs in Median Calculation: r47-r48 + .declare ubTEMP1 Base=r47.0 ElementSize=1 Type=ub + + .declare uwTEMP0 Base=r48.0 ElementSize=2 Type=uw + .declare ubTEMP0 Base=r48.0 ElementSize=1 Type=ub + + //Temp Space to store Median : r49-50 + + .declare ubMEDIAN Base=r49.0 ElementSize=1 Type=ub + +//r49 + + +//r50 + //Message Source + + +//r51 + //DN_UV History Surface + + .declare udHIST_UV Base=r51.0 ElementSize=4 Type=ud + .declare ubHIST_UV Base=r51.0 ElementSize=1 Type=ub + +//r52 - r91 + //r52 + //Current Frame UV + + + .declare udCURR_UV Base=r52.0 ElementSize=4 Type=ud + .declare ubCURR_UV Base=r52.0 ElementSize=1 Type=ub + + //r54 + //CURBE COPY + + + //r55 + + + .declare uwSOAD_MIN_8x4 Base=r56.0 ElementSize=2 Type=uw + + //r61 + + + //r62 + + + //History Surface Temp Origin + + + //r63 + //Current Frame Y Temp Origin + + + //BNE Surface Origin + + + //r70 + + .declare uwDIFF_TEMPORAL_SUM4x4 Base=r70.0 ElementSize=2 Type=uw //4 GRFs + + //r74-91 : For Saving Dest UV (PL2/PL3) + + + .declare ubMSGPAYLOAD_UV0 Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_U Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_UV1 Base=r84.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_V Base=r84.0 ElementSize=1 Type=ub + + //r90 + + .declare uwDIFF_TEMPORAL_SUM4x4_FINAL Base=r90.0 ElementSize=2 Type=uw //2 GRFs + +//r92-127 + //Current Frame Y + + + //r92 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_0 Base=r92 ElementSize=2 Type=uw + //r101 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_1 Base=r101 ElementSize=2 Type=uw + //r110 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_2 Base=r110 ElementSize=2 Type=uw + //r119 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_3 Base=r119 ElementSize=2 Type=uw + + .declare udCURR_Y0 Base=r93.0 ElementSize=4 Type=ud + .declare ubCURR_Y0 Base=r93.0 ElementSize=1 Type=ub + .declare udCURR_Y1 Base=r102.0 ElementSize=4 Type=ud + .declare ubCURR_Y1 Base=r102.0 ElementSize=1 Type=ub + .declare udCURR_Y2 Base=r111.0 ElementSize=4 Type=ud + .declare ubCURR_Y2 Base=r111.0 ElementSize=1 Type=ub + .declare udCURR_Y3 Base=r120.0 ElementSize=4 Type=ud + .declare ubCURR_Y3 Base=r120.0 ElementSize=1 Type=ub + + //r92: To hold U data for PL3 surfaces + .declare udCURR_U_TEMP Base=r92.0 ElementSize=4 Type=ud + .declare ubCURR_U_TEMP Base=r92.0 ElementSize=1 Type=ub + + //r112: To hold U data for PL3 surfaces + .declare udPREV_U_TEMP Base=r112.0 ElementSize=4 Type=ud + .declare ubPREV_U_TEMP Base=r112.0 ElementSize=1 Type=ub + + //r120: To hold U data for PL3 surfaces + .declare udPREV_V_TEMP Base=r120.0 ElementSize=4 Type=ud + .declare ubPREV_V_TEMP Base=r120.0 ElementSize=1 Type=ub + + + // Initialize message source with r0. + mov (8) r50.0<1>:ud r0.0<8;8,1>:ud + mov (8) r92.0<1>:ud r0.0<8;8,1>:ud + mov (8) r101.0<1>:ud r0.0<8;8,1>:ud + mov (8) r110.0<1>:ud r0.0<8;8,1>:ud + mov (8) r119.0<1>:ud r0.0<8;8,1>:ud + + + +//Module Name : DN_UV_YUY2_Load_Curr_Frame_YUV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame YUV data for YUY2 input. + + + +//Module name : DN_UV_Load_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame (UV only). +// We need 4 extra rows (2 per field) and 2 extra pixel (1 each side) for both U and V each. +// The processing size is 16x16 U and V each. So we need : U size - 18x20, V size - 18x20, UV size - 36x20, YUYV size - 72x20. + + + + +//72x20 interleaved YUYV block is partitioned as follows: +// <------ 36 --------> <--------36 -------> +// ------------------------------------------ +// | | 32x2 B1 | 32x2 B2 | | +// | 4 |--------------------------------| 4 | +// | x | | | x | +// |20 | 32x8 A1 | 32x8 A3 | 20| +// | |---------------|----------------| | +// | C1| 32x8 A2 | 32x8 A4 | C2| +// | | | | | +// | |--------------------------------| | +// | | 32x2 B3 | 32x2 B4 | | +// ------------------------------------------ +// +// Cordinates: (x, y), (x, y+8), (x+32, y), (x+32, y+8), (x-4, y-2), (x+64, y-2),(x, y-2), (x+32, y-2), (x, y+16), (x+32, y+16) + + //UV surface origin: (2xORIX, ORIY) + add (2) r9.4<1>:w r9.0<2;2,1>:w r4.4<2;2,1>:w { AccWrEn } // Source Block origin + shl (1) r9.4<1>:w acc0.4<0;1,0>:w 1:w + + //A1 + mov (2) r92.0<1>:d r9.4<2;2,1>:w { AccWrEn } // Source Block origin + mov (1) r92.2<1>:ud 0x7001F:ud + send (8) udCURR_Y0(0)<1> r92 0x4 0x2890003:ud + + //A2 + mov (1) r101.0<1>:d acc0.0<0;1,0>:d + add (1) r101.1<1>:d acc0.1<0;1,0>:d 8:d + mov (1) r101.2<1>:ud 0x7001F:ud + send (8) udCURR_Y1(0)<1> r101 0x4 0x2890003:ud + + //B1 + mov (1) r50.0<1>:d acc0.0<0;1,0>:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x1001F:ud + send (8) udCURR_UV(0)<1> r50 0x4 0x2290003:ud + + //B3 + mov (1) r50.0<1>:d acc0.0<0;1,0>:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d 16:d + send (8) udCURR_UV(18)<1> r50 0x4 0x2290003:ud + + //C1 + add (1) r50.0<1>:d acc0.0<0;1,0>:d -4:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x130003:ud + send (8) ubTEMP5(0)<1> r50 0x4 0x2390003:ud + + //A3 + add (1) r110.0<1>:d acc0.0<0;1,0>:d 32:d + mov (1) r110.1<1>:d acc0.1<0;1,0>:d + mov (1) r110.2<1>:ud 0x7001F:ud + send (8) udCURR_Y2(0)<1> r110 0x4 0x2890003:ud + + //A4 + add (1) r119.0<1>:d acc0.0<0;1,0>:d 32:d + add (1) r119.1<1>:d acc0.1<0;1,0>:d 8:d + mov (1) r119.2<1>:ud 0x7001F:ud + send (8) udCURR_Y3(0)<1> r119 0x4 0x2890003:ud + + //B2 + add (1) r50.0<1>:d acc0.0<0;1,0>:d 32:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x1001F:ud + send (8) udCURR_UV(20)<1> r50 0x4 0x2290003:ud + + //B4 + add (1) r50.0<1>:d acc0.0<0;1,0>:d 32:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d 16:d + send (8) udCURR_UV(38)<1> r50 0x4 0x2290003:ud + + //C2 + add (1) r50.0<1>:d acc0.0<0;1,0>:d 64:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x130003:ud + send (8) ubTEMP5(3)<1> r50 0x4 0x2390003:ud + + //History Origin, Current Y origin and BNE surface origin - all are in inline GRF. Use , . -rT. + + //Calculate Origin For History Surface: (ORIX/4, ORIY/4) + shr (2) r9.2<1>:w r9.0<2;2,1>:w 2:w + + //Calculate Origin For BNE Surface: (ORIX/8, ORIY/8) + shr (2) r9.6<1>:w r9.0<2;2,1>:w 3:w + + + +//Module Name : DN_UV_YUY2_Load_Prev_Frame_YUV.asm +//Author : Tatiya, Rupesh +//Description : Loads Pevious Frame YUV data for YUY2 input. + + + +//Module Name : DN_UV_Load_Prev_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Prev Frame (UV only). U size - 16x16, V size - 16x16, UV size - 32x16, YUYV size - 64x16. + + + + + mov (2) r50.0<1>:d r9.4<2;2,1>:w { AccWrEn } // Source lock origin + mov (1) r50.2<1>:ud 0x7001F:ud // U/V block width and height (16x16) + send (8) udPREV_UV(0)<1> r50 0x4 0x2890000:ud + + add (1) r50.1<1>:ud acc0.1<0;1,0>:d 8:w // Add 16 to X origin + send (8) udPREV_UV(8)<1> r50 0x4 0x2890000:ud + + add (1) r50.0<1>:ud acc0.0<0;1,0>:d 32:w + mov (1) r50.1<1>:ud acc0.1<0;1,0>:d + send (8) udPREV_UV(16)<1> r50 0x4 0x2890000:ud + + add (1) r50.1<1>:ud acc0.0<0;1,0>:d 8:w + send (8) udPREV_UV(24)<1> r50 0x4 0x2890000:ud + + + //TODO - See if History loading can be combined with Prev Frame Load. - rT + + +//Module name : DN_UV_Load_Hist_UV +//Author : Tatiya, Rupesh +//Description : Load DN History for UV denoise. 4x4 for each U & V. + + + + + mov (2) r50.0<1>:d r9.2<2;2,1>:w + mov (1) r50.2<1>:ud 0x30007:ud + send (8) udHIST_UV(0)<1> r50 0x4 0x2190022:ud + + + +//Module Name: DN_UV_YUY2_Extract_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description: Extract UV data from current YUY2 frame. + +//72x20 interleaved YUYV block is partitioned as follows: +// <------ 36 --------> <--------36 -------> +// ------------------------------------------ +// | | 32x2 B1 | 32x2 B2 | | +// | 4 |--------------------------------| 4 | +// | x | | | x | +// |20 | 32x8 A1 | 32x8 A3 | 20| +// | |---------------|----------------| | +// | C1| 32x8 A2 | 32x8 A4 | C2| +// | | | | | +// | |--------------------------------| | +// | | 32x2 B3 | 32x2 B4 | | +// ------------------------------------------ + + // Set SRC pointers according to Input packing i.e. YUYV, YVYU, UYVY, VYUY + add (1) a0.0<1>:uw r4.1<0;1,0>:ub 2976:w //A1 + add (1) a0.1<1>:uw r4.1<0;1,0>:ub 3264:w //A2 + add (1) a0.2<1>:uw r4.1<0;1,0>:ub 3552:w //A3 + add (1) a0.3<1>:uw r4.1<0;1,0>:ub 3840:w //A4 + add (1) a0.4<1>:uw r4.1<0;1,0>:ub 1664:w //B1 + add (1) a0.5<1>:uw r4.1<0;1,0>:ub 2240:w //B3B2 + add (1) a0.6<1>:uw r4.1<0;1,0>:ub 2880:w //B4 + add (1) a0.7<1>:uw r4.1<0;1,0>:ub 1376:w //C1C2 + + //Left 20x20 UV : 16x16 UV (Original)+4 extra rows(2 per field on top/bottom)+4 extra pixels(2 on left/right) + + //A1 + mov (16) ubCURR_UV(2,2)<1> r[a0.0, 0]<32;16,2> + mov (16) ubCURR_UV(3,2)<1> r[a0.0, 32]<32;16,2> + mov (16) ubCURR_UV(4,2)<1> r[a0.0, 64]<32;16,2> + mov (16) ubCURR_UV(5,2)<1> r[a0.0, 96]<32;16,2> + mov (16) ubCURR_UV(6,2)<1> r[a0.0, 128]<32;16,2> + mov (16) ubCURR_UV(7,2)<1> r[a0.0, 160]<32;16,2> + mov (16) ubCURR_UV(8,2)<1> r[a0.0, 192]<32;16,2> + mov (16) ubCURR_UV(9,2)<1> r[a0.0, 224]<32;16,2> + + //A2 + mov (16) ubCURR_UV(10,2)<1> r[a0.1, 0]<32;16,2> + mov (16) ubCURR_UV(11,2)<1> r[a0.1, 32]<32;16,2> + mov (16) ubCURR_UV(12,2)<1> r[a0.1, 64]<32;16,2> + mov (16) ubCURR_UV(13,2)<1> r[a0.1, 96]<32;16,2> + mov (16) ubCURR_UV(14,2)<1> r[a0.1, 128]<32;16,2> + mov (16) ubCURR_UV(15,2)<1> r[a0.1, 160]<32;16,2> + mov (16) ubCURR_UV(16,2)<1> r[a0.1, 192]<32;16,2> + mov (16) ubCURR_UV(17,2)<1> r[a0.1, 224]<32;16,2> + + //B1 + mov (16) ubCURR_UV(0,2)<1> r[a0.4, 0]<32;16,2> + mov (16) ubCURR_UV(1,2)<1> r[a0.4, 32]<32;16,2> + + //B3 + mov (16) ubCURR_UV(18,2)<1> r[a0.5, 0]<32;16,2> + mov (16) ubCURR_UV(19,2)<1> r[a0.5, 32]<32;16,2> + + //TODO - Find a way to reduce this 40 SIMD2 instructions - rT + //C1 + mov (2) ubCURR_UV(0,0)<1> r[a0.7, 0]<4;2,2> + mov (2) ubCURR_UV(1,0)<1> r[a0.7, 4]<4;2,2> + mov (2) ubCURR_UV(2,0)<1> r[a0.7, 8]<4;2,2> + mov (2) ubCURR_UV(3,0)<1> r[a0.7, 12]<4;2,2> + mov (2) ubCURR_UV(4,0)<1> r[a0.7, 16]<4;2,2> + mov (2) ubCURR_UV(5,0)<1> r[a0.7, 20]<4;2,2> + mov (2) ubCURR_UV(6,0)<1> r[a0.7, 24]<4;2,2> + mov (2) ubCURR_UV(7,0)<1> r[a0.7, 28]<4;2,2> + mov (2) ubCURR_UV(8,0)<1> r[a0.7, 32]<4;2,2> + mov (2) ubCURR_UV(9,0)<1> r[a0.7, 36]<4;2,2> + mov (2) ubCURR_UV(10,0)<1> r[a0.7, 40]<4;2,2> + mov (2) ubCURR_UV(11,0)<1> r[a0.7, 44]<4;2,2> + mov (2) ubCURR_UV(12,0)<1> r[a0.7, 48]<4;2,2> + mov (2) ubCURR_UV(13,0)<1> r[a0.7, 52]<4;2,2> + mov (2) ubCURR_UV(14,0)<1> r[a0.7, 56]<4;2,2> + mov (2) ubCURR_UV(15,0)<1> r[a0.7, 60]<4;2,2> + mov (2) ubCURR_UV(16,0)<1> r[a0.7, 64]<4;2,2> + mov (2) ubCURR_UV(17,0)<1> r[a0.7, 68]<4;2,2> + mov (2) ubCURR_UV(18,0)<1> r[a0.7, 72]<4;2,2> + mov (2) ubCURR_UV(19,0)<1> r[a0.7, 76]<4;2,2> + + //2 right bytes from B2 - 2 rows + mov (2) ubCURR_UV(0,18)<1> r[a0.5, 64]<4;2,2> + mov (2) ubCURR_UV(1,18)<1> r[a0.5, 96]<4;2,2> + + //2 right bytes from A3 - 8 rows + mov (2) ubCURR_UV(2,18)<1> r[a0.2, 0]<4;2,2> + mov (2) ubCURR_UV(3,18)<1> r[a0.2, 32]<4;2,2> + mov (2) ubCURR_UV(4,18)<1> r[a0.2, 64]<4;2,2> + mov (2) ubCURR_UV(5,18)<1> r[a0.2, 96]<4;2,2> + mov (2) ubCURR_UV(6,18)<1> r[a0.2, 128]<4;2,2> + mov (2) ubCURR_UV(7,18)<1> r[a0.2, 160]<4;2,2> + mov (2) ubCURR_UV(8,18)<1> r[a0.2, 192]<4;2,2> + mov (2) ubCURR_UV(9,18)<1> r[a0.2, 224]<4;2,2> + + //2 right bytes from A4 - 8 rows + mov (2) ubCURR_UV(10,18)<1> r[a0.3, 0]<4;2,2> + mov (2) ubCURR_UV(11,18)<1> r[a0.3, 32]<4;2,2> + mov (2) ubCURR_UV(12,18)<1> r[a0.3, 64]<4;2,2> + mov (2) ubCURR_UV(13,18)<1> r[a0.3, 96]<4;2,2> + mov (2) ubCURR_UV(14,18)<1> r[a0.3, 128]<4;2,2> + mov (2) ubCURR_UV(15,18)<1> r[a0.3, 160]<4;2,2> + mov (2) ubCURR_UV(16,18)<1> r[a0.3, 192]<4;2,2> + mov (2) ubCURR_UV(17,18)<1> r[a0.3, 224]<4;2,2> + + //2 right bytes from B4 - 2 rows + mov (2) ubCURR_UV(18,18)<1> r[a0.6, 0]<4;2,2> + mov (2) ubCURR_UV(19,18)<1> r[a0.6, 32]<4;2,2> + + //Right 20x20 UV : 16x16 UV (Original)+4 extra rows(2 per field on top/bottom)+4 extra pixels(2 on left/right) + + //A3 + mov (16) ubCURR_UV(22,2)<1> r[a0.2, 0]<32;16,2> + mov (16) ubCURR_UV(23,2)<1> r[a0.2, 32]<32;16,2> + mov (16) ubCURR_UV(24,2)<1> r[a0.2, 64]<32;16,2> + mov (16) ubCURR_UV(25,2)<1> r[a0.2, 96]<32;16,2> + mov (16) ubCURR_UV(26,2)<1> r[a0.2, 128]<32;16,2> + mov (16) ubCURR_UV(27,2)<1> r[a0.2, 160]<32;16,2> + mov (16) ubCURR_UV(28,2)<1> r[a0.2, 192]<32;16,2> + mov (16) ubCURR_UV(29,2)<1> r[a0.2, 224]<32;16,2> + + //A4 + mov (16) ubCURR_UV(30,2)<1> r[a0.3, 0]<32;16,2> + mov (16) ubCURR_UV(31,2)<1> r[a0.3, 32]<32;16,2> + mov (16) ubCURR_UV(32,2)<1> r[a0.3, 64]<32;16,2> + mov (16) ubCURR_UV(33,2)<1> r[a0.3, 96]<32;16,2> + mov (16) ubCURR_UV(34,2)<1> r[a0.3, 128]<32;16,2> + mov (16) ubCURR_UV(35,2)<1> r[a0.3, 160]<32;16,2> + mov (16) ubCURR_UV(36,2)<1> r[a0.3, 192]<32;16,2> + mov (16) ubCURR_UV(37,2)<1> r[a0.3, 224]<32;16,2> + + //B2 + mov (16) ubCURR_UV(20,2)<1> r[a0.5, 64]<32;16,2> + mov (16) ubCURR_UV(21,2)<1> r[a0.5, 96]<32;16,2> + + //B4 + mov (16) ubCURR_UV(38,2)<1> r[a0.6, 0]<32;16,2> + mov (16) ubCURR_UV(39,2)<1> r[a0.6, 32]<32;16,2> + + //TODO - Find a way to reduce this 40 SIMD2 instructions - rT + //C2 + mov (2) ubCURR_UV(20,18)<1> r[a0.7, 96]<4;2,2> + mov (2) ubCURR_UV(21,18)<1> r[a0.7, 100]<4;2,2> + mov (2) ubCURR_UV(22,18)<1> r[a0.7, 104]<4;2,2> + mov (2) ubCURR_UV(23,18)<1> r[a0.7, 108]<4;2,2> + mov (2) ubCURR_UV(24,18)<1> r[a0.7, 112]<4;2,2> + mov (2) ubCURR_UV(25,18)<1> r[a0.7, 116]<4;2,2> + mov (2) ubCURR_UV(26,18)<1> r[a0.7, 120]<4;2,2> + mov (2) ubCURR_UV(27,18)<1> r[a0.7, 124]<4;2,2> + mov (2) ubCURR_UV(28,18)<1> r[a0.7, 128]<4;2,2> + mov (2) ubCURR_UV(29,18)<1> r[a0.7, 132]<4;2,2> + mov (2) ubCURR_UV(30,18)<1> r[a0.7, 136]<4;2,2> + mov (2) ubCURR_UV(31,18)<1> r[a0.7, 140]<4;2,2> + mov (2) ubCURR_UV(32,18)<1> r[a0.7, 144]<4;2,2> + mov (2) ubCURR_UV(33,18)<1> r[a0.7, 148]<4;2,2> + mov (2) ubCURR_UV(34,18)<1> r[a0.7, 152]<4;2,2> + mov (2) ubCURR_UV(35,18)<1> r[a0.7, 156]<4;2,2> + mov (2) ubCURR_UV(36,18)<1> r[a0.7, 160]<4;2,2> + mov (2) ubCURR_UV(37,18)<1> r[a0.7, 164]<4;2,2> + mov (2) ubCURR_UV(38,18)<1> r[a0.7, 168]<4;2,2> + mov (2) ubCURR_UV(39,18)<1> r[a0.7, 172]<4;2,2> + + //2 left bytes from B1 - 2 rows + mov (2) ubCURR_UV(20,0)<1> r[a0.4, 28]<4;2,2> + mov (2) ubCURR_UV(21,0)<1> r[a0.4, 60]<4;2,2> + + //2 left bytes from A1 - 8 rows + mov (2) ubCURR_UV(22,0)<1> r[a0.0, 28]<4;2,2> + mov (2) ubCURR_UV(23,0)<1> r[a0.0, 60]<4;2,2> + mov (2) ubCURR_UV(24,0)<1> r[a0.0, 92]<4;2,2> + mov (2) ubCURR_UV(25,0)<1> r[a0.0, 124]<4;2,2> + mov (2) ubCURR_UV(26,0)<1> r[a0.0, 156]<4;2,2> + mov (2) ubCURR_UV(27,0)<1> r[a0.0, 188]<4;2,2> + mov (2) ubCURR_UV(28,0)<1> r[a0.0, 220]<4;2,2> + mov (2) ubCURR_UV(29,0)<1> r[a0.0, 252]<4;2,2> + + //2 left bytes from A2 - 8 rows + mov (2) ubCURR_UV(30,0)<1> r[a0.1, 28]<4;2,2> + mov (2) ubCURR_UV(31,0)<1> r[a0.1, 60]<4;2,2> + mov (2) ubCURR_UV(32,0)<1> r[a0.1, 92]<4;2,2> + mov (2) ubCURR_UV(33,0)<1> r[a0.1, 124]<4;2,2> + mov (2) ubCURR_UV(34,0)<1> r[a0.1, 156]<4;2,2> + mov (2) ubCURR_UV(35,0)<1> r[a0.1, 188]<4;2,2> + mov (2) ubCURR_UV(36,0)<1> r[a0.1, 220]<4;2,2> + mov (2) ubCURR_UV(37,0)<1> r[a0.1, 252]<4;2,2> + + //2 left bytes from B3 - 2 rows + mov (2) ubCURR_UV(38,0)<1> r[a0.5, 28]<4;2,2> + mov (2) ubCURR_UV(39,0)<1> r[a0.5, 60]<4;2,2> + + + +// Module Name : DN_UV_YUY2_Extract_Prev_Frame_UV +// Author : Tatiya, Rupesh +// Description : Extract UV from previous frame YUY2. + + // Set SRC pointers according to Input packing i.e. YUYV, YVYU, UYVY, VYUY + add (1) a0.0<1>:uw r4.1<0;1,0>:ub 256:w + add (1) a0.1<1>:uw r4.1<0;1,0>:ub 768:w + + mov (16) ubPREV_UV(0,0)<1> r[a0.0, 0]<32;16,2>:ub + mov (16) ubPREV_UV(0,16)<1> r[a0.0, 32]<32;16,2>:ub + mov (16) ubPREV_UV(1,0)<1> r[a0.0, 64]<32;16,2>:ub + mov (16) ubPREV_UV(1,16)<1> r[a0.0, 96]<32;16,2>:ub + mov (16) ubPREV_UV(2,0)<1> r[a0.0, 128]<32;16,2>:ub + mov (16) ubPREV_UV(2,16)<1> r[a0.0, 160]<32;16,2>:ub + mov (16) ubPREV_UV(3,0)<1> r[a0.0, 192]<32;16,2>:ub + mov (16) ubPREV_UV(3,16)<1> r[a0.0, 224]<32;16,2>:ub + mov (16) ubPREV_UV(4,0)<1> r[a0.0, 256]<32;16,2>:ub + mov (16) ubPREV_UV(4,16)<1> r[a0.0, 288]<32;16,2>:ub + mov (16) ubPREV_UV(5,0)<1> r[a0.0, 320]<32;16,2>:ub + mov (16) ubPREV_UV(5,16)<1> r[a0.0, 352]<32;16,2>:ub + mov (16) ubPREV_UV(6,0)<1> r[a0.0, 384]<32;16,2>:ub + mov (16) ubPREV_UV(6,16)<1> r[a0.0, 416]<32;16,2>:ub + mov (16) ubPREV_UV(7,0)<1> r[a0.0, 448]<32;16,2>:ub + mov (16) ubPREV_UV(7,16)<1> r[a0.0, 480]<32;16,2>:ub + + mov (16) ubPREV_UV(8,0)<1> r[a0.1, 0]<32;16,2>:ub + mov (16) ubPREV_UV(8,16)<1> r[a0.1, 32]<32;16,2>:ub + mov (16) ubPREV_UV(9,0)<1> r[a0.1, 64]<32;16,2>:ub + mov (16) ubPREV_UV(9,16)<1> r[a0.1, 96]<32;16,2>:ub + mov (16) ubPREV_UV(10,0)<1> r[a0.1, 128]<32;16,2>:ub + mov (16) ubPREV_UV(10,16)<1> r[a0.1, 160]<32;16,2>:ub + mov (16) ubPREV_UV(11,0)<1> r[a0.1, 192]<32;16,2>:ub + mov (16) ubPREV_UV(11,16)<1> r[a0.1, 224]<32;16,2>:ub + mov (16) ubPREV_UV(12,0)<1> r[a0.1, 256]<32;16,2>:ub + mov (16) ubPREV_UV(12,16)<1> r[a0.1, 288]<32;16,2>:ub + mov (16) ubPREV_UV(13,0)<1> r[a0.1, 320]<32;16,2>:ub + mov (16) ubPREV_UV(13,16)<1> r[a0.1, 352]<32;16,2>:ub + mov (16) ubPREV_UV(14,0)<1> r[a0.1, 384]<32;16,2>:ub + mov (16) ubPREV_UV(14,16)<1> r[a0.1, 416]<32;16,2>:ub + mov (16) ubPREV_UV(15,0)<1> r[a0.1, 448]<32;16,2>:ub + mov (16) ubPREV_UV(15,16)<1> r[a0.1, 480]<32;16,2>:ub + + + +//Module Name : DN_UV_Noise_Detection_UV +//Author : Tatiya, Rupesh +//Description : Performs noise detection on 16x16 U and 16x16 V each. + + + +//Module Name : DN_UV_Move_CURBE_Inline_UV.asm +//Author : Tatiya, Rupesh + + + + + //Mov CURBE data to another space - so that it can be used as Temp Space --> r1 - r6 + mov (4) r54.28<1>:ub r2.28<4;4,1>:ub //Dest. YUY2 offset + mov (2) r54.5<1>:ud r4.0<4;2,2>:ud //Src YUY2 offset and Origin offset + mov (4) r55.28<1>:ub r1.0<4;4,1>:ub + + mov (8) r61.20<1>:ub r1.4<8;8,1>:ub + mov (4) r61.28<1>:ub r1.12<4;4,1>:ub + + //Move Inline Data to another space - so that it can be used as Temp Space --> r7 + mov (4) r62.10<1>:w r9.0<4;4,1>:w + mov (4) r63.10<1>:w r9.4<4;4,1>:w + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 1664:uw + mov (1) a0.1:uw 1816:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1792:uw + mov (1) a0.1:uw 1820:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1920:uw + mov (1) a0.1:uw 1848:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2048:uw + mov (1) a0.1:uw 1852:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 2304:uw + mov (1) a0.1:uw 1880:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2432:uw + mov (1) a0.1:uw 1884:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2560:uw + mov (1) a0.1:uw 1912:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2688:uw + mov (1) a0.1:uw 1916:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + +//Module : DN_UV_Noise_Reduction_UV +//Author : Tatiya, Rupesh +//Description : Performs Noise Reduction on 16x16 U and 16x16 V. +//Tasks : 1. Update weight history +// 2. Find if it block is motion block +// 3. Compute Denoised Pixel. + + + + +//History is 1+1 byte every 4x4 U and 4x4 V. + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.22<0;2,1>:ub + + mov (16) uwCURBE_TEMP(0)<1> 0:w + mov (16) uwCURBE_TEMP(1)<1> 0:w + + //Compute diff betn curr and prev. - First 16 lines + // 8 lines here + add (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> -ubPREV_UV(0,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> -ubPREV_UV(0,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> -ubPREV_UV(0,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> -ubPREV_UV(0,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> -ubPREV_UV(0,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> -ubPREV_UV(0,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> -ubPREV_UV(0,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> -ubPREV_UV(0,112)<16;16,1> //Diff UV interleaved + + //Update WT HIST + (-f0.0) shr (16) uwCURBE_TEMP(0)<1> ubHIST_UV(0,0)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(2)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.22<0;2,1>:ub + + //Compute diff betn curr and prev. - First 16 lines + // 8 more lines here + add (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> -ubPREV_UV(0,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> -ubPREV_UV(0,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> -ubPREV_UV(0,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> -ubPREV_UV(0,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> -ubPREV_UV(0,192)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> -ubPREV_UV(0,208)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> -ubPREV_UV(0,224)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> -ubPREV_UV(0,240)<16;16,1> //Diff UV interleaved + + (-f0.0) shr (16) uwCURBE_TEMP(1)<1> ubHIST_UV(0,16)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(3)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov(16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> + + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(0)<16;16,1> (abs)wDIFF_TEMPORAL(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(2)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(3)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(4)<16;16,1> (abs)wDIFF_TEMPORAL(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(6)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(7)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(8)<16;16,1> (abs)wDIFF_TEMPORAL(9)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(10)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(11)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(12)<16;16,1> (abs)wDIFF_TEMPORAL(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(14)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(15)<16;16,1> + +//Compute diff betn curr and prev. - Second 16 lines +//13 lines. + add (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> -ubPREV_UV(8,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> -ubPREV_UV(8,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> -ubPREV_UV(8,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> -ubPREV_UV(8,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> -ubPREV_UV(8,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> -ubPREV_UV(8,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> -ubPREV_UV(8,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> -ubPREV_UV(8,112)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> -ubPREV_UV(8,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> -ubPREV_UV(8,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> -ubPREV_UV(8,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> -ubPREV_UV(8,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> -ubPREV_UV(8,192)<16;16,1> //Diff UV interleaved + +//3 more lines + add (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> -ubPREV_UV(8,208)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> -ubPREV_UV(8,224)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> -ubPREV_UV(8,240)<16;16,1> //Diff UV interleaved + + //16x4 to 8x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(16)<16;16,1> (abs)wDIFF_TEMPORAL(17)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(18)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(19)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(20)<16;16,1> (abs)wDIFF_TEMPORAL(21)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(22)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(23)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(24)<16;16,1> (abs)wDIFF_TEMPORAL(25)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(26)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(27)<16;16,1> + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(28)<16;16,1> (abs)wCURBE_TEMP(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(5)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(6)<16;16,1> + + //Find if block is motion block - First 16 lines + cmp.g.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - First 16 lines + (-f0.0) mov (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(2)<16;16,1> + + //Actual DN - First 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(2,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(2,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(2,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,0)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,8)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(0)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(0)<1> wDIFF_TEMPORAL(0)<16;16,1> ubCURR_UV(2,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(3,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(3,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(3,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,16)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,24)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(1)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(1)<1> wDIFF_TEMPORAL(1)<16;16,1> ubCURR_UV(3,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(4,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(4,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(4,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,32)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,40)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(2)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(2)<1> wDIFF_TEMPORAL(2)<16;16,1> ubCURR_UV(4,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(5,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(5,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(5,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,48)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,56)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(3)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(3)<1> wDIFF_TEMPORAL(3)<16;16,1> ubCURR_UV(5,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(6,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(6,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(6,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,64)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,72)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(4)<1> wDIFF_TEMPORAL(4)<16;16,1> ubCURR_UV(6,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(7,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(7,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(7,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,80)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,88)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(5)<1> wDIFF_TEMPORAL(5)<16;16,1> ubCURR_UV(7,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(8,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(8,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(8,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,96)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,104)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(6)<1> wDIFF_TEMPORAL(6)<16;16,1> ubCURR_UV(8,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(9,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(9,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(9,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,112)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,120)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(7)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(7)<1> wDIFF_TEMPORAL(7)<16;16,1> ubCURR_UV(9,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(10,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(10,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(10,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,128)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,136)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(8)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(8)<1> wDIFF_TEMPORAL(8)<16;16,1> ubCURR_UV(10,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(11,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(11,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(11,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,144)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,152)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(9)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(9)<1> wDIFF_TEMPORAL(9)<16;16,1> ubCURR_UV(11,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(12,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(12,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(12,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,160)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,168)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(10)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(10)<1> wDIFF_TEMPORAL(10)<16;16,1> ubCURR_UV(12,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(13,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(13,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(13,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,176)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,184)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(11)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(11)<1> wDIFF_TEMPORAL(11)<16;16,1> ubCURR_UV(13,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(14,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(14,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(14,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,192)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,200)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(12)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(12)<1> wDIFF_TEMPORAL(12)<16;16,1> ubCURR_UV(14,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(15,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(15,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(15,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,208)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,216)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(13)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(13)<1> wDIFF_TEMPORAL(13)<16;16,1> ubCURR_UV(15,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(16,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(16,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(16,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,224)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,232)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(14)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(14)<1> wDIFF_TEMPORAL(14)<16;16,1> ubCURR_UV(16,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(17,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(17,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(17,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,240)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,248)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(15)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(15)<1> wDIFF_TEMPORAL(15)<16;16,1> ubCURR_UV(17,2)<16;16,1> + + + //16x4 to 8x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //Find if block is motion block - Second 16 lines + cmp.g.f1.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - Second 16 lines + (-f1.0) mov (16) uwCURBE_TEMP(1)<1> uwCURBE_TEMP(3)<16;16,1> + + //Actual DN - Second 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(22,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(22,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(22,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,0)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,8)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(16)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(16)<1> wDIFF_TEMPORAL(16)<16;16,1> ubCURR_UV(22,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(23,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(23,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(23,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,16)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,24)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(17)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(17)<1> wDIFF_TEMPORAL(17)<16;16,1> ubCURR_UV(23,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(24,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(24,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(24,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,32)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,40)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(18)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(18)<1> wDIFF_TEMPORAL(18)<16;16,1> ubCURR_UV(24,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(25,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(25,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(25,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,48)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,56)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(19)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(19)<1> wDIFF_TEMPORAL(19)<16;16,1> ubCURR_UV(25,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(26,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(26,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(26,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,64)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,72)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(20)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(20)<1> wDIFF_TEMPORAL(20)<16;16,1> ubCURR_UV(26,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(27,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(27,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(27,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,80)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,88)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(21)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(21)<1> wDIFF_TEMPORAL(21)<16;16,1> ubCURR_UV(27,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(28,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(28,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(28,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,96)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,104)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(22)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(22)<1> wDIFF_TEMPORAL(22)<16;16,1> ubCURR_UV(28,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(29,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(29,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(29,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,112)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,120)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(23)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(23)<1> wDIFF_TEMPORAL(23)<16;16,1> ubCURR_UV(29,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(30,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(30,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(30,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,128)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,136)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(24)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(24)<1> wDIFF_TEMPORAL(24)<16;16,1> ubCURR_UV(30,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(31,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(31,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(31,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,144)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,152)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(25)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(25)<1> wDIFF_TEMPORAL(25)<16;16,1> ubCURR_UV(31,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(32,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(32,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(32,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,160)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,168)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(26)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(26)<1> wDIFF_TEMPORAL(26)<16;16,1> ubCURR_UV(32,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(33,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(33,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(33,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,176)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,184)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(27)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(27)<1> wDIFF_TEMPORAL(27)<16;16,1> ubCURR_UV(33,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(34,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(34,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(34,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,192)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,200)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(28)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(28)<1> wDIFF_TEMPORAL(28)<16;16,1> ubCURR_UV(34,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(35,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(35,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(35,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,208)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,216)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(4)<1> wCURBE_TEMP(4)<16;16,1> ubCURR_UV(35,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(36,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(36,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(36,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,224)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,232)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(5)<1> wCURBE_TEMP(5)<16;16,1> ubCURR_UV(36,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(37,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(37,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(37,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,240)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,248)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(6)<1> wCURBE_TEMP(6)<16;16,1> ubCURR_UV(37,2)<16;16,1> + + //Pack Weight History WORD -> BYTE + mov (16) ubCURBE_TEMP(3,0)<1> ubCURBE_TEMP(0)<32;16,2> + mov (16) ubCURBE_TEMP(3,16)<1> ubCURBE_TEMP(1)<32;16,2> + + + +//Module Name : DN_UV_Compute_BNE_UV +//Author : Tatiya, Rupesh +//Description : Computes minimum SOAD for each 16x4 block. + + cmp.l.f0.0 (8) null:w uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + (f0.0)sel (8) uwCURBE_TEMP(1,0)<1> uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + + mov (8) ubCURBE_TEMP(1)<1> ubCURBE_TEMP(1)<16;8,2> + + + +//Module Name : DN_UV_YUY2_Pack_Denoised_UV +//Name : Tatiya, Rupesh +//Description : Pack UV denoised data based on YUY2 input. + + + +//Module Name : DN_UV_Pack_Denoised_UV +//Name : Tatiya, Rupesh +//Description : Pack UV denoised data based on PL2/PL3/PA. + + + add (1) a0.0<1>:uw r54.21<0;1,0>:ub 2976:w + add (1) a0.1<1>:uw r54.21<0;1,0>:ub 3264:w + add (1) a0.2<1>:uw r54.21<0;1,0>:ub 3552:w + add (1) a0.3<1>:uw r54.21<0;1,0>:ub 3840:w + +//First 8 lines. + mov (16) r[a0.0, 0]<2>:ub ubDIFF_TEMPORAL(0)<32;16,2> + mov (16) r[a0.0, 32]<2>:ub ubDIFF_TEMPORAL(1)<32;16,2> + mov (16) r[a0.0, 64]<2>:ub ubDIFF_TEMPORAL(2)<32;16,2> + mov (16) r[a0.0, 96]<2>:ub ubDIFF_TEMPORAL(3)<32;16,2> + mov (16) r[a0.0, 128]<2>:ub ubDIFF_TEMPORAL(4)<32;16,2> + mov (16) r[a0.0, 160]<2>:ub ubDIFF_TEMPORAL(5)<32;16,2> + mov (16) r[a0.0, 192]<2>:ub ubDIFF_TEMPORAL(6)<32;16,2> + mov (16) r[a0.0, 224]<2>:ub ubDIFF_TEMPORAL(7)<32;16,2> + +//Second 8 lines + mov (16) r[a0.1, 0]<2>:ub ubDIFF_TEMPORAL(8)<32;16,2> + mov (16) r[a0.1, 32]<2>:ub ubDIFF_TEMPORAL(9)<32;16,2> + mov (16) r[a0.1, 64]<2>:ub ubDIFF_TEMPORAL(10)<32;16,2> + mov (16) r[a0.1, 96]<2>:ub ubDIFF_TEMPORAL(11)<32;16,2> + mov (16) r[a0.1, 128]<2>:ub ubDIFF_TEMPORAL(12)<32;16,2> + mov (16) r[a0.1, 160]<2>:ub ubDIFF_TEMPORAL(13)<32;16,2> + mov (16) r[a0.1, 192]<2>:ub ubDIFF_TEMPORAL(14)<32;16,2> + mov (16) r[a0.1, 224]<2>:ub ubDIFF_TEMPORAL(15)<32;16,2> + +//Third 8 lines + mov (16) r[a0.2, 0]<2>:ub ubDIFF_TEMPORAL(16)<32;16,2> + mov (16) r[a0.2, 32]<2>:ub ubDIFF_TEMPORAL(17)<32;16,2> + mov (16) r[a0.2, 64]<2>:ub ubDIFF_TEMPORAL(18)<32;16,2> + mov (16) r[a0.2, 96]<2>:ub ubDIFF_TEMPORAL(19)<32;16,2> + mov (16) r[a0.2, 128]<2>:ub ubDIFF_TEMPORAL(20)<32;16,2> + mov (16) r[a0.2, 160]<2>:ub ubDIFF_TEMPORAL(21)<32;16,2> + mov (16) r[a0.2, 192]<2>:ub ubDIFF_TEMPORAL(22)<32;16,2> + mov (16) r[a0.2, 224]<2>:ub ubDIFF_TEMPORAL(23)<32;16,2> + +//Fourth 8 lines +//5 lines first + mov (16) r[a0.3, 0]<2>:ub ubDIFF_TEMPORAL(24)<32;16,2> + mov (16) r[a0.3, 32]<2>:ub ubDIFF_TEMPORAL(25)<32;16,2> + mov (16) r[a0.3, 64]<2>:ub ubDIFF_TEMPORAL(26)<32;16,2> + mov (16) r[a0.3, 96]<2>:ub ubDIFF_TEMPORAL(27)<32;16,2> + mov (16) r[a0.3, 128]<2>:ub ubDIFF_TEMPORAL(28)<32;16,2> + +//3 more lines + mov (16) r[a0.3, 160]<2>:ub ubCURBE_TEMP(4)<32;16,2> + mov (16) r[a0.3, 192]<2>:ub ubCURBE_TEMP(5)<32;16,2> + mov (16) r[a0.3, 224]<2>:ub ubCURBE_TEMP(6)<32;16,2> + + + //TODO - See if History saving can be combined with Curr Frame Save. - rT + + +//Module Name : DN_UV_Save_Hist_UV +//Author : Tatiya, Rupesh +//Description : Saves DN history for UV data. + + mov (8) r3.0<1>:ud r0.0<8;8,1>:ud + mov (2) r3.0<1>:d r62.12<2;2,1>:w + mov (1) r3.2<1>:d 0x30007:ud + + send (8) null<1>:d r3 0x5 0x40A8021:ud + + + +//Module Name : DN_UV_Save_BNE_UV +//Author : Tatiya, Rupesh +//Description : Saves BNE values for 16x16 U and 16x16 V. + + mov (8) r1.0<1>:ud r0.0<8;8,1>:ud + mov (2) r1.0<1>:d r63.12<2;2,1>:w + mov (1) r1.2<1>:d 0x10003:ud + + send (8) null<1>:d r1 0x5 0x40A8023:ud + + + +//Module Name : DN_UV_YUY2_Save_Curr_Frame_YUV +//Author : Tatiya, Rupesh + + + +//Module Name : DN_UV_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Saves Y or YUY2 of Current frame. + + + + + mov (8) acc0.0<1>:ud r0.0<8;8,1>:ud + shl (1) r62.10<1>:w r62.10<0;1,0>:w 1:w + mov (1) acc0.0<1>:d r62.10<0;1,0>:w + mov (1) acc0.1<1>:d r62.11<0;1,0>:w + + mov (1) acc0.2<1>:d 0x7001F:ud + + mov (8) r92.0<1>:ud acc0.0<8;8,1>:ud + + mov (8) r101.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r110.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r119.0<1>:ud acc0.0<8;8,1>:ud + + add (1) r101.1<1>:d acc0.1<0;1,0>:d 8:d + + add (1) r110.0<1>:d acc0.0<0;1,0>:d 32:d + + add (1) r119.0<1>:d acc0.0<0;1,0>:d 32:d + add (1) r119.1<1>:d acc0.1<0;1,0>:d 8:d + + send (8) null<1>:d r92 0x5 0x120A8018:ud + send (8) null<1>:d r101 0x5 0x120A8018:ud + send (8) null<1>:d r110 0x5 0x120A8018:ud + send (8) null<1>:d r119 0x5 0x120A8018:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + + //All sub-routines here + + +// Module Name : Noise_Detection +// Author : Tatiya, Rupesh +// Description : Performs noise detection on 32 pixels of U (8x4) and 32 pixels of V (8x4). + +DN_UV_NOISE_DETECTION_UV: + +// Find Field Block Median +// +// Purpose : Find the median value of the nine pixels in the same field +// which are centered at current pixel. +// +// Works on 9 pixels centered at the current pixel +// NOTE: pixels are within same field. +// v4 - current pixel +// +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 + +// Algorithm to find median modifies the data. +// Copy the data needed to calculate median so the original source data stays intact. +// + +//TODO - Change Interleaved implementation to separated one if - , does not work on predication. - rT + +//Delete Later - rT +//mov (1) pCUR_UV:uw 52*32:uw + +// v0 +mov (16) ubMEDIAN_TEMP(0,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(0,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw +// v0 +mov (16) ubMEDIAN_TEMP(9,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(9,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// MedianSwap +// +// MedianSwap(inOutLeft, inOutRight) +// { +// if (inOutLeft > inOutRight) +// { +// temp = inOutLeft +// inOutLeft = inOutRight +// inOutRight = temp +// } +// } + +// MedianSwap(v1, v2) - U +// MedianSwap(v4, v5) - U +// MedianSwap(v1, v2) - V +// MedianSwap(v4, v5) - V + +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(1,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(1,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(1,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(1,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(3,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(6,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(3,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(6,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(3,0)<2> ubMEDIAN_TEMP(4,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(3,1)<2> ubMEDIAN_TEMP(4,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(4,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(3,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(3,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(3,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(3,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(5,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(5,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(5,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(5,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(5,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(5,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(6,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(6,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(2,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(2,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(6,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(6,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(10,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(10,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(10,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(10,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(12,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(15,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(12,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(15,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(12,0)<2> ubMEDIAN_TEMP(13,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(12,1)<2> ubMEDIAN_TEMP(13,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(13,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(12,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(12,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(12,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(12,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(14,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(14,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(14,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(14,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(14,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(14,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(15,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(15,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(11,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(11,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(15,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(15,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + +// Sobel Value calculation for the current pixel v4 +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 +// +// Gx = -v0 - 2*v3 - v6 + v2 + 2*v5 + v8 +// Gy = v0 + 2*v1 + v2 - v6 - 2*v7 - v8 +// +// Sobel = (|Gx| + |Gy|) >> 3 + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw -128:uw + +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(0)<1> r[a0.0,68]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(1)<1> r[a0.0,100]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(2)<1> r[a0.0,132]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(3)<1> r[a0.0,164]<16;16,1>:ub 2:w + +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,2]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,130]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(0)<16;16,1> + +shr (16) uwSOBEL(0)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,34]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,162]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(1)<16;16,1> + +shr (16) uwSOBEL(1)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,66]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,194]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(2)<16;16,1> + +shr (16) uwSOBEL(2)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,98]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,226]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(3)<16;16,1> + +shr (16) uwSOBEL(3)<1> acc0.0<16;16,1>:uw 3:uw + +//Mov Median in CURBE_TEMP to free up temp space. +mov (16) ubMEDIAN(0,0)<1> ubMEDIAN_TEMP(4,0)<16;16,1> +mov (16) ubMEDIAN(0,16)<1> ubMEDIAN_TEMP(4,16)<16;16,1> +mov (16) ubMEDIAN(0,32)<1> ubMEDIAN_TEMP(13,0)<16;16,1> +mov (16) ubMEDIAN(0,48)<1> ubMEDIAN_TEMP(13,16)<16;16,1> + +// Find: +// absDiff = abs(ubCurY - ubMedian) +// Find the difference between pixel and median value. + +//Median is interleaved. So difference is also interleaved. + +//------------------------------------------------------------------------------------------ +//Process 16 U and 16 V pixels here and rest later. +// first row - v0,v1,v2 +add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +// first row - v0,v1,v2 +add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//First 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max-block_min) < m_LocalDiffThreshold)) +// if (sigma_mb_min > sigma) +// sigma_mb_min = sigma; + +//NOTE: block_min is always zero as median is one of the value in 3x3 block. So no need o calculate it. +// So just do - +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max) < m_LocalDiffThreshold) && ( sigma < sigma_mb_min)) +// sigma_mb_min = sigma; + +//We are processing 32 bytes of U and 32 bytes of V - each of size 8x4. +//Compare first 8 bytes with max possible (255). +//Start above condition from second 8 bytes. + +//TODO - Change Later - rT +// mov (1) pCUR_MIN_SOAD_8x4:uw 1752:uw //r54.24:ub + +//First row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(0)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> 255:uw +(f0.0) sel (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> 255:uw + +//Second row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(1)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//Second 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//Third row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(2)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> + +//Fourth row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(3)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + + cmp.l.f0.0 (8) null:uw uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> +(f0.0) sel (8) uwSOBEL(0)<1> uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> + + cmp.l.f0.0 (4) null:uw uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> +(f0.0) sel (4) uwSOBEL(0)<1> uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> + + cmp.l.f0.0 (2) null:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> +(f0.0) sel (2) r[a0.1,0]<1>:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> + + + + + + +// End of common.inc + +mov (1) ip:ud r9.7<0;1,0>:d + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_422CP.g4a new file mode 100644 index 000000000..d83f8aa49 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_422CP.g4a @@ -0,0 +1,513 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 114 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DN_422CP +.code + + + +// FileName: DN_PA_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for Packed format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x49E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Save_PA.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of DN output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 1024:w // Initial Y,U,V offset in YUV422 block; it starts at m14 + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x7001F:ud { NoDDChk } // block width and height (32x8) + + mov (16) r[a0.4,0]<2>:ub ubDNDI_RESP(0,0)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,32]<2>:ub ubDNDI_RESP(0,16)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,64]<2>:ub ubDNDI_RESP(0,32)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,96]<2>:ub ubDNDI_RESP(0,48)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,128]<2>:ub ubDNDI_RESP(0,64)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,160]<2>:ub ubDNDI_RESP(0,80)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,192]<2>:ub ubDNDI_RESP(0,96)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,224]<2>:ub ubDNDI_RESP(0,112)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) r[a0.5,0]<4>:ub ubDNDI_RESP(5,1)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,0]<4>:ub ubDNDI_RESP(5,0)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,32]<4>:ub ubDNDI_RESP(5,17)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,32]<4>:ub ubDNDI_RESP(5,16)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,64]<4>:ub ubDNDI_RESP(5,33)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,64]<4>:ub ubDNDI_RESP(5,32)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,96]<4>:ub ubDNDI_RESP(5,49)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,96]<4>:ub ubDNDI_RESP(5,48)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,128]<4>:ub ubDNDI_RESP(5,65)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,128]<4>:ub ubDNDI_RESP(5,64)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,160]<4>:ub ubDNDI_RESP(5,81)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,160]<4>:ub ubDNDI_RESP(5,80)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,192]<4>:ub ubDNDI_RESP(5,97)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,192]<4>:ub ubDNDI_RESP(5,96)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,224]<4>:ub ubDNDI_RESP(5,113)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,224]<4>:ub ubDNDI_RESP(5,112)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x120A8018:ud + + + +// FileName: DN_Save_422CP_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of DN output to the color pipe in 4-2-2 format + + +.declare mubMSGHDR_DN_OUT_2 Base=r36.0 ElementSize=1 Type=ub + + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x7000F:ud { NoDDClr, NoDDChk } // block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) mudMSGHDR_DN_OUT(0,3)<1> r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +// First 8 x 8 Block + mov (8) mubMSGHDR_DN_OUT(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3)<2> ubDNDI_RESP(0,64)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3,16)<2> ubDNDI_RESP(0,80)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4)<2> ubDNDI_RESP(0,96)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4,16)<2> ubDNDI_RESP(0,112)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,1)<4> ubDNDI_RESP(5,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,17)<4> ubDNDI_RESP(5,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,3)<4> ubDNDI_RESP(5,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,19)<4> ubDNDI_RESP(5,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,1)<4> ubDNDI_RESP(5,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,17)<4> ubDNDI_RESP(5,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(2,3)<4> ubDNDI_RESP(5,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,19)<4> ubDNDI_RESP(5,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,1)<4> ubDNDI_RESP(5,65)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,17)<4> ubDNDI_RESP(5,81)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(3,3)<4> ubDNDI_RESP(5,64)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,19)<4> ubDNDI_RESP(5,80)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,1)<4> ubDNDI_RESP(5,97)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,17)<4> ubDNDI_RESP(5,113)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(4,3)<4> ubDNDI_RESP(5,96)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,19)<4> ubDNDI_RESP(5,112)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Second 8 x 8 Block +mov (8) r36.0<1>:ud r31.0<8;8,1>:ud +add (1) r36.0<1>:ud r36.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DN_OUT_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3)<2> ubDNDI_RESP(0,72)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3,16)<2> ubDNDI_RESP(0,88)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4)<2> ubDNDI_RESP(0,104)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4,16)<2> ubDNDI_RESP(0,120)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,1)<4> ubDNDI_RESP(5,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,17)<4> ubDNDI_RESP(5,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,3)<4> ubDNDI_RESP(5,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,19)<4> ubDNDI_RESP(5,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,1)<4> ubDNDI_RESP(5,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,17)<4> ubDNDI_RESP(5,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(2,3)<4> ubDNDI_RESP(5,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,19)<4> ubDNDI_RESP(5,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,1)<4> ubDNDI_RESP(5,73)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,17)<4> ubDNDI_RESP(5,89)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(3,3)<4> ubDNDI_RESP(5,72)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,19)<4> ubDNDI_RESP(5,88)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,1)<4> ubDNDI_RESP(5,105)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,17)<4> ubDNDI_RESP(5,121)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(4,3)<4> ubDNDI_RESP(5,104)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,19)<4> ubDNDI_RESP(5,120)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +//send out data through data port +send (8) null<1>:d r31.0 0x5 0xA0A801B:ud +send (8) null<1>:d r36.0 0x5 0xA0A801B:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_PA.g4a new file mode 100644 index 000000000..d2cb53f60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PA_DN_PA.g4a @@ -0,0 +1,425 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 57 // Total instruction count +// 1 // Total kernel count + +.kernel PA_DN_PA +.code + + + +// FileName: DN_PA_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for Packed format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x49E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Save_PA.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of DN output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 1024:w // Initial Y,U,V offset in YUV422 block; it starts at m14 + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x7001F:ud { NoDDChk } // block width and height (32x8) + + mov (16) r[a0.4,0]<2>:ub ubDNDI_RESP(0,0)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,32]<2>:ub ubDNDI_RESP(0,16)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,64]<2>:ub ubDNDI_RESP(0,32)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,96]<2>:ub ubDNDI_RESP(0,48)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,128]<2>:ub ubDNDI_RESP(0,64)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,160]<2>:ub ubDNDI_RESP(0,80)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,192]<2>:ub ubDNDI_RESP(0,96)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (16) r[a0.4,224]<2>:ub ubDNDI_RESP(0,112)<16;16,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) r[a0.5,0]<4>:ub ubDNDI_RESP(5,1)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,0]<4>:ub ubDNDI_RESP(5,0)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,32]<4>:ub ubDNDI_RESP(5,17)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,32]<4>:ub ubDNDI_RESP(5,16)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,64]<4>:ub ubDNDI_RESP(5,33)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,64]<4>:ub ubDNDI_RESP(5,32)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,96]<4>:ub ubDNDI_RESP(5,49)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,96]<4>:ub ubDNDI_RESP(5,48)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,128]<4>:ub ubDNDI_RESP(5,65)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,128]<4>:ub ubDNDI_RESP(5,64)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,160]<4>:ub ubDNDI_RESP(5,81)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,160]<4>:ub ubDNDI_RESP(5,80)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,192]<4>:ub ubDNDI_RESP(5,97)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,192]<4>:ub ubDNDI_RESP(5,96)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (8) r[a0.5,224]<4>:ub ubDNDI_RESP(5,113)<16;8,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (8) r[a0.6,224]<4>:ub ubDNDI_RESP(5,112)<16;8,2> { NoDDChk } // copy line of V directly to memory as optimization + +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x120A8018:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_0.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_0.g4a new file mode 100644 index 000000000..3a4df29db --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_0.g4a @@ -0,0 +1,564 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_0_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + mov (1) r25.7<1>:ud r9.7:ud { NoDDClr } + mov (1) r25.1<1>:ud r9.12:uw { NoDDChk } + + + // set the vertical block number + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL2_AVS_WA_DONE_L0_0_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL2_AVS_WA_DONE_L0_0_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x48EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_0(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_1.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_1.g4a new file mode 100644 index 000000000..6c492d2a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_1.g4a @@ -0,0 +1,557 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_1.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 1 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_1_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + add (1) r25.1<1>:ud r9.12:uw 1:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL2_AVS_WA_DONE_L0_1_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL2_AVS_WA_DONE_L0_1_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x48EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_1(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_1_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_2.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_2.g4a new file mode 100644 index 000000000..52f1cca6e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_2.g4a @@ -0,0 +1,558 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_2.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 2 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_2_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 2:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL2_AVS_WA_DONE_L0_2_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL2_AVS_WA_DONE_L0_2_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x48EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_2(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_2_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_3.g4a new file mode 100644 index 000000000..2dab0d168 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL2_AVS_Buf_3.g4a @@ -0,0 +1,558 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_3.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_3_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 3:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL2_AVS_WA_DONE_L0_3_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL2_AVS_WA_DONE_L0_3_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x48EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_3(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_3_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_0.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_0.g4a new file mode 100644 index 000000000..ee9f9de0b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_0.g4a @@ -0,0 +1,571 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 47 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL3_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL3 data into Buffer 0 + + + +// FileName : PL3_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL3 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_0_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + mov (1) r25.7<1>:ud r9.7:ud { NoDDClr } + mov (1) r25.1<1>:ud r9.12:uw { NoDDChk } + + + // set the vertical block number + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL3_AVS_WA_DONE_L0_0_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL3_AVS_WA_DONE_L0_0_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_0(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EBC02:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_0(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_1.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_1.g4a new file mode 100644 index 000000000..dd10080ae --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_1.g4a @@ -0,0 +1,564 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 45 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL3_AVS_Buf_1.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL3 data into Buffer 1 + + + +// FileName : PL3_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL3 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_1_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + add (1) r25.1<1>:ud r9.12:uw 1:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL3_AVS_WA_DONE_L0_1_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL3_AVS_WA_DONE_L0_1_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_1(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EBC02:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_1(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_1_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_2.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_2.g4a new file mode 100644 index 000000000..45952933f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_2.g4a @@ -0,0 +1,565 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 45 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL3_AVS_Buf_2.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL3 data into Buffer 2 + + + +// FileName : PL3_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL3 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_2_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 2:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL3_AVS_WA_DONE_L0_2_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL3_AVS_WA_DONE_L0_2_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_2(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EBC02:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_2(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_2_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_3.g4a new file mode 100644 index 000000000..ed07bf899 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_AVS_Buf_3.g4a @@ -0,0 +1,565 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 45 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL3_AVS_Buf_3.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL3 data into Buffer 3 + + + +// FileName : PL3_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL3 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //Check if layer is to be skipped + + + // f0.1 pre-computed in Set_Layer_0 + (-f0.1) jmpi (1) SKIP_AVS_LOAD_L0_3_ + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB400:ud //msg desc + + mov (1) r16.2:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + add (1) r25.1<1>:ud r9.12:uw 3:ud + + + mov (8) r17.0:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + // Gen7 AVS WA Only for YUV packed surfaces, NV12 and Y-channel only for Planar surfaces + // if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + // { + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + // } + // else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + // { + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + // } + // else{ + // modified_u_coord = u_coord; + // } + // Where u_left = u – 2*du + 3*ddu for IEF On + // And u_left = u for IEF Off case + // + + // check whether Gen7 AVS WA is enabled, + mov (1) r14.8:uw f0.0:uw // save f0.0 + mov (1) r14.5:f r17.2<0;1,0>:f // save pixel 0 U for chroma + + and.nz.f0.0 (1) null<1>:uw r2.3:uw 0x2:uw + (-f0.0)jmpi (1) GEN7_PL3_AVS_WA_DONE_L0_3_ + + // Gen7 AVS WA, check if IEF is ON for choosing Gen7 AVS WA formula + + and.nz.f0.0 (8) null<1>:uw r2.3<0;1,0>:uw 0x4:uw + (f0.0)mov (8) acc0.0:f r17.2<0;1,0>:f + (f0.0)mac (8) acc0.0:f r17.4<0;1,0>:f -2.0:f + (f0.0)mac (8) acc0.0:f r17.6<0;1,0>:f 3.0:f + (f0.0)mov (1) r14.2:f acc0:f // IEF ON, rTEMP3.2 = u_left + (-f0.0)mov (1) r14.2:f r17.2<0;1,0>:f // IEF OFF, rTEMP3.2 = u_left + + and (1) r14.1:ud r2.3:uw 0xFFF8:uw + asr (1) r14.1:ud r14.1:ud 3:d + mov (1) r14.1:f r14.1:ud + + // Gen7 AVS WA, if (int)(u_left*width + 5.0/256) > (int)(u_left*width) + mul (1) r14.0:f r14.2:f r14.1:f // rTEMP3.0 = u_left*width + add (1) r14.2:f r14.0:f 0.01953125:f // rTEMP3.2 = u_left*width + 5.0/256 + add (1) r14.3:f r14.0:f 0.99609375:f // rTEMP3.3 = u_left*width + 255.0/256 + + //Check if the values are < 0 and account for (int) cast of negative numbers + + //(int)(u_left*width) + cmp.l.f0.0 (1) null<1>:f r14.0:f 0.00000000:f + mov (1) r14.0:d r14.0:f + (f0.0)add (1) r14.0:d r14.0<0;1,0>:d -1:d + + //(int)(u_left*width + 5.0/256) + cmp.l.f0.0 (1) null<1>:f r14.2:f 0.00000000:f + mov (1) r14.2:d r14.2:f + (f0.0)add (1) r14.2:d r14.2<0;1,0>:d -1:d + + //(int)(u_left*width + 255.0/256) + cmp.l.f0.0 (1) null<1>:f r14.3:f 0.00000000:f + mov (1) r14.3:d r14.3:f + (f0.0)add (1) r14.3:d r14.3<0;1,0>:d -1:d + + mov (1) f0.0:uw 0:uw // clear flag + //if (((int)(u_left*width + 5.0/256) > (int)(u_left*width)) + cmp.g.f1.0 (1) null<1>:d r14.2:d r14.0:d + // modified_u_coord = u_coord – 5.0/(256*width); //floating point + (f1.0) add (1) r17.2:f r17.2<0;1,0>:f -r2.3:f + //else if(((int)(u_left*width + 255.0/256) == (int)(u_left*width)) + (-f1.0) cmp.e.f0.0 (1) null<1>:d r14.3:d r14.0:d + // modified_u_coord = u_coord + 1.0/(256*width); //floating point + (f0.0) add (1) r17.2:f r17.2<0;1,0>:f r2.2:f + +GEN7_PL3_AVS_WA_DONE_L0_3_: + mov (1) f0.0:uw r14.8:uw // restore f0.0 + + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + mov (1) r17.2:f r14.5:f // restore pixel 0 U for chroma, No AVS WA for chroma + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EB801:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_3(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0:ud r23.5<0;1,0>:ud 0x44EBC02:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_3(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_3_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_422CP.g4a new file mode 100644 index 000000000..946c15c3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_422CP.g4a @@ -0,0 +1,584 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 120 // Total instruction count +// 1 // Total kernel count + +.kernel PL3_DNDI_422CP +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4BE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_IMC3_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Load_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (2) r27.0<1>:d r27.0<2;2,1>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x10007:ud { NoDDChk } // U/V block width and height (8x2) + mov (8) r36<1>:ud r27.0<8;8,1>:ud + mov (8) r38<1>:ud r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2190001:ud + send (8) udDNDI_UV_RESP(1)<1> r38 0x4 0x2190002:ud + + + +// FileName: DN_Save_Y_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of Y channel of DN output for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +mov (2) mdMSGHDR_DN_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3000F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(4,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(5,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(4,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(5,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x60A8018:ud + + + +// FileName: DI_Save_422CP_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in 422 format to Color Pipe (IECP) + + +.declare mubMSGHDR_DI_OUT1_1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT1_2 Base=r21.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_1 Base=r24.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_2 Base=r27.0 ElementSize=1 Type=ub + + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:ud r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:ud r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDClr, NoDDChk } // Block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) r27.3<1>:ud r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r24.0<1>:ud r27<8;8,1>:ud + + +// Pack 2nd field Y; First 8x4 block + mov (8) mubMSGHDR_DI_OUT1_1(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; First 8x4 block + mov (4) mubMSGHDR_DI_OUT1_1(1,1)<4> ubDNDI_RESP(2,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,17)<4> ubDNDI_RESP(2,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(1,3)<4> ubDNDI_RESP(2,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,19)<4> ubDNDI_RESP(2,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,1)<4> ubDNDI_RESP(2,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,17)<4> ubDNDI_RESP(2,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(2,3)<4> ubDNDI_RESP(2,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,19)<4> ubDNDI_RESP(2,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + + +// Pack 2nd field Y; Second 8x4 block +mov (8) r21.0<1>:ud r18.0<8;8,1>:ud +add (1) r21.0<1>:ud r21.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT1_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; Second 8x4 block + mov (4) mubMSGHDR_DI_OUT1_2(1,1)<4> ubDNDI_RESP(2,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,17)<4> ubDNDI_RESP(2,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(1,3)<4> ubDNDI_RESP(2,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,19)<4> ubDNDI_RESP(2,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,1)<4> ubDNDI_RESP(2,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,17)<4> ubDNDI_RESP(2,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(2,3)<4> ubDNDI_RESP(2,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,19)<4> ubDNDI_RESP(2,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +send (8) null<1>:d r21.0 0x5 0x60A801B:ud + +// Pack 1st field Y; 1st 8x4 block + mov (8) mubMSGHDR_DI_OUT2_1(1)<2> ubDNDI_RESP(4,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(1,16)<2> ubDNDI_RESP(4,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2)<2> ubDNDI_RESP(4,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2,16)<2> ubDNDI_RESP(4,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U,V; 1st 8x4 block + mov (4) mubMSGHDR_DI_OUT2_1(1,1)<4> ubDNDI_RESP(6,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,17)<4> ubDNDI_RESP(6,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(1,3)<4> ubDNDI_RESP(6,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,19)<4> ubDNDI_RESP(6,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,1)<4> ubDNDI_RESP(6,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,17)<4> ubDNDI_RESP(6,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(2,3)<4> ubDNDI_RESP(6,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,19)<4> ubDNDI_RESP(6,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Pack 1st field Y; 2nd 8x4 block +mov (8) r27.0<1>:ud r24.0<8;8,1>:ud +add (1) r27.0<1>:ud r27.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT2_2(1)<2> ubDNDI_RESP(4,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(1,16)<2> ubDNDI_RESP(4,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2)<2> ubDNDI_RESP(4,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2,16)<2> ubDNDI_RESP(4,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U, V; 2nd 8x4 block + mov (4) mubMSGHDR_DI_OUT2_2(1,1)<4> ubDNDI_RESP(6,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,17)<4> ubDNDI_RESP(6,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(1,3)<4> ubDNDI_RESP(6,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,19)<4> ubDNDI_RESP(6,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,1)<4> ubDNDI_RESP(6,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,17)<4> ubDNDI_RESP(6,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(2,3)<4> ubDNDI_RESP(6,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,19)<4> ubDNDI_RESP(6,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r24.0 0x5 0x60A801E:ud +send (8) null<1>:d r27.0 0x5 0x60A801E:ud + + + +// FileName: DN_Save_UV_IMC3_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Save_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + +//Reuse the header from Load component + + + mov (4) mudMSGHDR_UCOPY(1)<1> udDNDI_UV_RESP(0)<4;4,1> + mov (4) mudMSGHDR_VCOPY(1)<1> udDNDI_UV_RESP(1)<4;4,1> + send (4) null<1>:d r36 0x5 0x40A8019:ud + send (4) null<1>:d r38 0x5 0x40A801A:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_PA.g4a new file mode 100644 index 000000000..b8bc73c76 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNDI_PA.g4a @@ -0,0 +1,522 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 90 // Total instruction count +// 1 // Total kernel count + +.kernel PL3_DNDI_PA +.code + + + +// FileName: DNDI_PL_Core.asm +// Author: Tatiya, Rupesh + + + +// FileName: DNDI_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN+DI case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4BE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + mov (1) mudMSGHDR_HIST(1)<1> udDNDI_RESP(9,0)<0;1,0> // Move denoise history to MRF (4x1) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x3:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_IMC3_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Load_16x4.asm +// Author: Vivek Kumar +// Description: Read UV for 16x4 block through DATAPORT + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (2) r27.0<1>:d r27.0<2;2,1>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x10007:ud { NoDDChk } // U/V block width and height (8x2) + mov (8) r36<1>:ud r27.0<8;8,1>:ud + mov (8) r38<1>:ud r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2190001:ud + send (8) udDNDI_UV_RESP(1)<1> r38 0x4 0x2190002:ud + + + +// FileName: DN_Save_Y_16x4.asm +// Author: Vivek Kumar +// Description: Save one 16x4 blocks of Y channel of DN output for reference + + + // check top/bottom field first +cmp.e.f0.0 (1) null<1>:w r1.28<0;1,0>:ub 1:w + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +mov (2) mdMSGHDR_DN_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x3000F:ud { NoDDChk } // block width and height (32x8) + +(f0.0) jmpi (1) TOP_FIELD_FIRST + +BOTTOM_FIELD_FIRST: + + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(4,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(5,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + + jmpi (1) SAVE_DN_CURR + +TOP_FIELD_FIRST: + mov (4) mudMSGHDR_DN_OUT(1,0)<1> udDNDI_RESP(4,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(1,4)<1> udDNDI_RESP(10,0)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + mov (4) mudMSGHDR_DN_OUT(2,0)<1> udDNDI_RESP(5,0)<4;4,1> { NoDDClr } // 2nd field luma from current frame (line 0,2) + mov (4) mudMSGHDR_DN_OUT(2,4)<1> udDNDI_RESP(10,4)<4;4,1> { NoDDChk } // 1st field luma from current frame (line 1,3) + +SAVE_DN_CURR: +//send out data through data port +send (8) null<1>:d r31.0 0x5 0x60A8018:ud + + + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud + + + +// FileName: DN_Save_UV_IMC3_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + + +// FileName: UVCopy_Save_16x4.asm +// Author: Vivek Kumar +// Description: Save UV for 16x4 block through DATAPORT + + +//Reuse the header from Load component + + + mov (4) mudMSGHDR_UCOPY(1)<1> udDNDI_UV_RESP(0)<4;4,1> + mov (4) mudMSGHDR_VCOPY(1)<1> udDNDI_UV_RESP(1)<4;4,1> + send (4) null<1>:d r36 0x5 0x40A8019:ud + send (4) null<1>:d r38 0x5 0x40A801A:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNUV_PL3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNUV_PL3.g4a new file mode 100644 index 000000000..67e83e105 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DNUV_PL3.g4a @@ -0,0 +1,2706 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 1295 // Total instruction count +// 1 // Total kernel count + + +.kernel PL3_DNUV_PL3 +.code + + + +//Module : DN_UV_Setup +//Author : Tatiya, Rupesh +//Description : Initial Set-up for DN_UV + + + + +// Module name : ChromaDenoise.inc +// Author : Tatiya, Rupesh + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================================================== +//Interface for serpent mode Chroma Denoise, added by Le +//====================================================== +//r1 + + +//noise history thresholds (low and high) + + +//temporal difference thresholds (high and low) + + +//noise history thresholds (low and high) +//#define ubNoiseHistMaxHigh r1.22 +//#define ubNoiseHistMaxLow r1.23 +//#define ubNoiseHistDeltaHigh r1.24 +//#define ubNoiseHistDeltaLow r1.25 + +//Gaussian thresholds + + +//temporal difference thresholds (default) + + +//r2 +//history thresholds (default) + + +//denoise factor (0-63) + + +//====================== Binding table (Explicit To DNUV)========================================= +//Used by DN_UV kernels + + + //Pointer to Current Frame UV + + +//r1-r6 + //CURBE GRFs used as TEMP : Used for max computation and storing max temporarily. : r1-r6 + + + .declare ubCURBE_TEMP Base=r1.0 ElementSize=1 Type=ub + .declare uwCURBE_TEMP Base=r1.0 ElementSize=2 Type=uw + .declare wCURBE_TEMP Base=r1.0 ElementSize=2 Type=w + .declare fCURBE_TEMP Base=r1.0 ElementSize=4 Type=f + .declare udCURBE_TEMP Base=r1.0 ElementSize=4 Type=ud + .declare uwMAX_ABS_DIFF Base=r5.0 ElementSize=2 Type=uw + + //r1 + + + //r3 + + + //r4 + +//r7 + //All of the following has to defined in Same GRF for optimal performance. + + +//r8-24 + //Previous Frame UV + + .declare udPREV_UV Base=r8.0 ElementSize=4 Type=ud + .declare ubPREV_UV Base=r8.0 ElementSize=1 Type=ub + + +//r25-48 + //TEMP Space for any Usage. + + +//========================================================================= +//Definations and declarations for serpent mode Chroma Denoise, added by Le +//========================================================================= + + + .declare udGNE_UV Base=r24.0 ElementSize=4 Type=ud + .declare fGNE_UV Base=r24.0 ElementSize=4 Type=f + .declare ubGNE_UV Base=r24.0 ElementSize=1 Type=ub + + .declare udMSGHDR_BNE_SERP Base=r25.0 ElementSize=4 Type=ud + .declare udMSGSRC_BNE_SERP Base=r26.0 ElementSize=4 Type=ud + + + .declare ubDN_UV_Thresholds Base=r26.0 ElementSize=1 Type=ub + .declare ubDN_UV_Thresholds_Temp Base=r27.0 ElementSize=1 Type=ub + .declare udDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=ud + .declare udDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=ud + .declare fDN_UV_Thresholds Base=r26.0 ElementSize=4 Type=f + .declare fDN_UV_Thresholds_Temp Base=r27.0 ElementSize=4 Type=f + + +//==================================================================================== + + + //TEMP23: To hold V data for PL3 surfaces + .declare udCURR_V_TEMP Base=r25.0 ElementSize=4 Type=ud + .declare ubCURR_V_TEMP Base=r25.0 ElementSize=1 Type=ub + + //GRFs to calculate Median: r25-r42 + .declare ubMEDIAN_TEMP Base=r25.0 ElementSize=1 Type=ub + + //18 GRFs to hold difference : r25-r42 + .declare wDIFF Base=r25.0 ElementSize=2 Type=w + .declare uwDIFF Base=r25.0 ElementSize=2 Type=uw + + //Temporal Diff + .declare wDIFF_TEMPORAL Base=r25.0 ElementSize=2 Type=w + .declare ubDIFF_TEMPORAL Base=r25.0 ElementSize=1 Type=ub + + //4 GRFs to hold Sobel Value : r43-46 + .declare wSOBEL_X Base=r43.0 ElementSize=2 Type=w + .declare uwSOBEL Base=r43.0 ElementSize=2 Type=uw + + + //2 GRFs to hold SOAD temporarily: r47-48 + .declare uwSOAD Base=r47.0 ElementSize=2 Type=uw + + //Temp GRFs to hold extra YUYV pixels: r43-r48 + .declare ubTEMP5 Base=r43.0 ElementSize=1 Type=ub + + //Temp GRFs in Median Calculation: r47-r48 + .declare ubTEMP1 Base=r47.0 ElementSize=1 Type=ub + + .declare uwTEMP0 Base=r48.0 ElementSize=2 Type=uw + .declare ubTEMP0 Base=r48.0 ElementSize=1 Type=ub + + //Temp Space to store Median : r49-50 + + .declare ubMEDIAN Base=r49.0 ElementSize=1 Type=ub + +//r49 + + +//r50 + //Message Source + + +//r51 + //DN_UV History Surface + + .declare udHIST_UV Base=r51.0 ElementSize=4 Type=ud + .declare ubHIST_UV Base=r51.0 ElementSize=1 Type=ub + +//r52 - r91 + //r52 + //Current Frame UV + + + .declare udCURR_UV Base=r52.0 ElementSize=4 Type=ud + .declare ubCURR_UV Base=r52.0 ElementSize=1 Type=ub + + //r54 + //CURBE COPY + + + //r55 + + + .declare uwSOAD_MIN_8x4 Base=r56.0 ElementSize=2 Type=uw + + //r61 + + + //r62 + + + //History Surface Temp Origin + + + //r63 + //Current Frame Y Temp Origin + + + //BNE Surface Origin + + + //r70 + + .declare uwDIFF_TEMPORAL_SUM4x4 Base=r70.0 ElementSize=2 Type=uw //4 GRFs + + //r74-91 : For Saving Dest UV (PL2/PL3) + + + .declare ubMSGPAYLOAD_UV0 Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_U Base=r75.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_UV1 Base=r84.0 ElementSize=1 Type=ub + + + .declare ubMSGPAYLOAD_V Base=r84.0 ElementSize=1 Type=ub + + //r90 + + .declare uwDIFF_TEMPORAL_SUM4x4_FINAL Base=r90.0 ElementSize=2 Type=uw //2 GRFs + +//r92-127 + //Current Frame Y + + + //r92 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_0 Base=r92 ElementSize=2 Type=uw + //r101 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_1 Base=r101 ElementSize=2 Type=uw + //r110 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_2 Base=r110 ElementSize=2 Type=uw + //r119 + .declare uwDIFF_TEMPORAL_SUM4x4_TEMP_3 Base=r119 ElementSize=2 Type=uw + + .declare udCURR_Y0 Base=r93.0 ElementSize=4 Type=ud + .declare ubCURR_Y0 Base=r93.0 ElementSize=1 Type=ub + .declare udCURR_Y1 Base=r102.0 ElementSize=4 Type=ud + .declare ubCURR_Y1 Base=r102.0 ElementSize=1 Type=ub + .declare udCURR_Y2 Base=r111.0 ElementSize=4 Type=ud + .declare ubCURR_Y2 Base=r111.0 ElementSize=1 Type=ub + .declare udCURR_Y3 Base=r120.0 ElementSize=4 Type=ud + .declare ubCURR_Y3 Base=r120.0 ElementSize=1 Type=ub + + //r92: To hold U data for PL3 surfaces + .declare udCURR_U_TEMP Base=r92.0 ElementSize=4 Type=ud + .declare ubCURR_U_TEMP Base=r92.0 ElementSize=1 Type=ub + + //r112: To hold U data for PL3 surfaces + .declare udPREV_U_TEMP Base=r112.0 ElementSize=4 Type=ud + .declare ubPREV_U_TEMP Base=r112.0 ElementSize=1 Type=ub + + //r120: To hold U data for PL3 surfaces + .declare udPREV_V_TEMP Base=r120.0 ElementSize=4 Type=ud + .declare ubPREV_V_TEMP Base=r120.0 ElementSize=1 Type=ub + + + // Initialize message source with r0. + mov (8) r50.0<1>:ud r0.0<8;8,1>:ud + mov (8) r92.0<1>:ud r0.0<8;8,1>:ud + mov (8) r101.0<1>:ud r0.0<8;8,1>:ud + mov (8) r110.0<1>:ud r0.0<8;8,1>:ud + mov (8) r119.0<1>:ud r0.0<8;8,1>:ud + + + +//Module Name : DN_UV_PL3_Load_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame U/V data for PL3 input. + + + +//Module name : DN_UV_Load_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Current Frame (UV only). +// We need 4 extra rows (2 per field) and 2 extra pixel (1 each side) for both U and V each. +// The processing size is 16x16 U and V each. So we need : U size - 18x20, V size - 18x20, UV size - 36x20, YUYV size - 72x20. + + + + +//18x20 U/V block is partitioned as follows: +// <------ 18 ------> +// ------------------ +// | 18x8 A1 | +// | | +// |----------------| +// | 18x8 A2 | +// | | +// |----------------| +// | 18x4 A2 | +// |----------------| +// +// Cordinates: (x-1, y-2), (x-1, y+6), (x-1, y+14) + +//1. Load U data into starting at CURR_Y0 (r93-r122) +//2. Load V data into TEMP space (r25-r44) + + //U/V surface origin: (ORIX/2, ORIY/2) + add (2) r9.4<1>:w r9.0<2;2,1>:w r4.4<2;2,1>:w { AccWrEn } // Source Block origin + shr (2) r9.4<1>:w acc0.4<2;2,1>:w 1:w //U Data + mov (2) acc0.0<1>:d r9.4<2;2,1>:w + + //A1 + add (1) r50.0<1>:d acc0.0<0;1,0>:d -1:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x70011:ud + send (8) udCURR_U_TEMP(0)<1> r50 0x4 0x2890004:ud + + //A2 + add (1) r50.1<1>:d acc0.1<0;1,0>:d 6:d + send (8) udCURR_U_TEMP(8)<1> r50 0x4 0x2890004:ud + + //A3 + add (1) r50.1<1>:d acc0.1<0;1,0>:d 14:d + mov (1) r50.2<1>:ud 0x30011:ud + send (8) udCURR_U_TEMP(16)<1> r50 0x4 0x2490004:ud + + //V Data + //A1 + add (1) r50.0<1>:d acc0.0<0;1,0>:d -1:d + add (1) r50.1<1>:d acc0.1<0;1,0>:d -2:d + mov (1) r50.2<1>:ud 0x70011:ud + send (8) udCURR_V_TEMP(0)<1> r50 0x4 0x2890005:ud + + //A2 + add (1) r50.1<1>:d acc0.1<0;1,0>:d 6:d + send (8) udCURR_V_TEMP(8)<1> r50 0x4 0x2890005:ud + + //A3 + add (1) r50.1<1>:d acc0.1<0;1,0>:d 14:d + mov (1) r50.2<1>:ud 0x30011:ud + send (8) udCURR_V_TEMP(16)<1> r50 0x4 0x2490005:ud + + //History Origin, Current Y origin and BNE surface origin - all are in inline GRF. Use , . -rT. + + //Calculate Origin For History Surface: (ORIX/4, ORIY/8) + mov (16) acc0.0<1>:w r9.0<0;2,1>:w { AccWrEn } + shr (1) r9.2<1>:w acc0.2<0;1,0>:w 2:w + shr (1) r9.3<1>:w acc0.3<0;1,0>:w 3:w + + //Calculate Origin For BNE Surface: (ORIX/8, ORIY/16) + shr (1) r9.6<1>:w acc0.6<0;1,0>:w 3:w + shr (1) r9.7<1>:w acc0.7<0;1,0>:w 4:w + + + +//Module Name : DN_UV_PL3_Load_Prev_Frame_UV.asm +//Author : Tatiya, Rupesh +//Description : Loads Pevious Frame UV data for PL3 input. + + + +//Module Name : DN_UV_Load_Prev_Frame_UV +//Author : Tatiya, Rupesh +//Description : Loads Prev Frame (UV only). U size - 16x16, V size - 16x16, UV size - 32x16, YUYV size - 64x16. + + + + +//1. Load U in bottom half of UV space for prev frame (r17-r24) +//2. Load V in bottom quarter of Y space for curr frame (r120-r127) + + mov (2) r50.0<1>:d r9.4<2;2,1>:w { AccWrEn } // Source lock origin + mov (1) r50.2<1>:ud 0xF000F:ud // U/V block width and height (16x16) + + mov (8) r49.0<1>:ud r50<8;8,1>:ud + + send (8) udPREV_U_TEMP(0)<1> r50 0x4 0x2890001:ud //U data + send (8) udPREV_V_TEMP(0)<1> r49 0x4 0x2890002:ud //V data + + + //TODO - See if History loading can be combined with Prev Frame Load. - rT + + +//Module name : DN_UV_Load_Hist_UV +//Author : Tatiya, Rupesh +//Description : Load DN History for UV denoise. 4x4 for each U & V. + + + + + mov (2) r50.0<1>:d r9.2<2;2,1>:w + mov (1) r50.2<1>:ud 0x30007:ud + send (8) udHIST_UV(0)<1> r50 0x4 0x2190022:ud + + + +//File Name : DN_UV_PL3_Interleave_Curr_Frame_UV.asm +//Author : Tatiya, Rupesh +//Description : Interleave separately loaded U and V for PL3 format. +// This is needed because Noise Detection and Noise Reduction works on interleaved UV data. + +//1. U data: Starting at CURR_Y0 (r93-r122) +//2. V data: TEMP space (r25-r44) + +//In one GRF, we need 10 U (1+8+1) bytes, but there's no SIMD10. So use SIMD16 and discard last 6 bytes. + + +//Move U data + mov (16) ubCURR_UV(0,0)<2> ubCURR_U_TEMP(0,0)<16;16,1> + mov (16) ubCURR_UV(20,0)<2> ubCURR_U_TEMP(0,8)<16;16,1> + + mov (16) ubCURR_UV(1,0)<2> ubCURR_U_TEMP(1,0)<16;16,1> + mov (16) ubCURR_UV(21,0)<2> ubCURR_U_TEMP(1,8)<16;16,1> + + mov (16) ubCURR_UV(2,0)<2> ubCURR_U_TEMP(2,0)<16;16,1> + mov (16) ubCURR_UV(22,0)<2> ubCURR_U_TEMP(2,8)<16;16,1> + + mov (16) ubCURR_UV(3,0)<2> ubCURR_U_TEMP(3,0)<16;16,1> + mov (16) ubCURR_UV(23,0)<2> ubCURR_U_TEMP(3,8)<16;16,1> + + mov (16) ubCURR_UV(4,0)<2> ubCURR_U_TEMP(4,0)<16;16,1> + mov (16) ubCURR_UV(24,0)<2> ubCURR_U_TEMP(4,8)<16;16,1> + + mov (16) ubCURR_UV(5,0)<2> ubCURR_U_TEMP(5,0)<16;16,1> + mov (16) ubCURR_UV(25,0)<2> ubCURR_U_TEMP(5,8)<16;16,1> + + mov (16) ubCURR_UV(6,0)<2> ubCURR_U_TEMP(6,0)<16;16,1> + mov (16) ubCURR_UV(26,0)<2> ubCURR_U_TEMP(6,8)<16;16,1> + + mov (16) ubCURR_UV(7,0)<2> ubCURR_U_TEMP(7,0)<16;16,1> + mov (16) ubCURR_UV(27,0)<2> ubCURR_U_TEMP(7,8)<16;16,1> + + mov (16) ubCURR_UV(8,0)<2> ubCURR_U_TEMP(8,0)<16;16,1> + mov (16) ubCURR_UV(28,0)<2> ubCURR_U_TEMP(8,8)<16;16,1> + + mov (16) ubCURR_UV(9,0)<2> ubCURR_U_TEMP(9,0)<16;16,1> + mov (16) ubCURR_UV(29,0)<2> ubCURR_U_TEMP(9,8)<16;16,1> + + mov (16) ubCURR_UV(10,0)<2> ubCURR_U_TEMP(10,0)<16;16,1> + mov (16) ubCURR_UV(30,0)<2> ubCURR_U_TEMP(10,8)<16;16,1> + + mov (16) ubCURR_UV(11,0)<2> ubCURR_U_TEMP(11,0)<16;16,1> + mov (16) ubCURR_UV(31,0)<2> ubCURR_U_TEMP(11,8)<16;16,1> + + mov (16) ubCURR_UV(12,0)<2> ubCURR_U_TEMP(12,0)<16;16,1> + mov (16) ubCURR_UV(32,0)<2> ubCURR_U_TEMP(12,8)<16;16,1> + + mov (16) ubCURR_UV(13,0)<2> ubCURR_U_TEMP(13,0)<16;16,1> + mov (16) ubCURR_UV(33,0)<2> ubCURR_U_TEMP(13,8)<16;16,1> + + mov (16) ubCURR_UV(14,0)<2> ubCURR_U_TEMP(14,0)<16;16,1> + mov (16) ubCURR_UV(34,0)<2> ubCURR_U_TEMP(14,8)<16;16,1> + + mov (16) ubCURR_UV(15,0)<2> ubCURR_U_TEMP(15,0)<16;16,1> + mov (16) ubCURR_UV(35,0)<2> ubCURR_U_TEMP(15,8)<16;16,1> + + mov (16) ubCURR_UV(16,0)<2> ubCURR_U_TEMP(16,0)<16;16,1> + mov (16) ubCURR_UV(36,0)<2> ubCURR_U_TEMP(16,8)<16;16,1> + + mov (16) ubCURR_UV(17,0)<2> ubCURR_U_TEMP(17,0)<16;16,1> + mov (16) ubCURR_UV(37,0)<2> ubCURR_U_TEMP(17,8)<16;16,1> + + mov (16) ubCURR_UV(18,0)<2> ubCURR_U_TEMP(18,0)<16;16,1> + mov (16) ubCURR_UV(38,0)<2> ubCURR_U_TEMP(18,8)<16;16,1> + + mov (16) ubCURR_UV(19,0)<2> ubCURR_U_TEMP(19,0)<16;16,1> + mov (16) ubCURR_UV(39,0)<2> ubCURR_U_TEMP(19,8)<16;16,1> + + +//Move V data + mov (16) ubCURR_UV(0,1)<2> ubCURR_V_TEMP(0,0)<16;16,1> + mov (16) ubCURR_UV(20,1)<2> ubCURR_V_TEMP(0,8)<16;16,1> + mov (16) ubCURR_UV(1,1)<2> ubCURR_V_TEMP(1,0)<16;16,1> + mov (16) ubCURR_UV(21,1)<2> ubCURR_V_TEMP(1,8)<16;16,1> + mov (16) ubCURR_UV(2,1)<2> ubCURR_V_TEMP(2,0)<16;16,1> + mov (16) ubCURR_UV(22,1)<2> ubCURR_V_TEMP(2,8)<16;16,1> + mov (16) ubCURR_UV(3,1)<2> ubCURR_V_TEMP(3,0)<16;16,1> + mov (16) ubCURR_UV(23,1)<2> ubCURR_V_TEMP(3,8)<16;16,1> + mov (16) ubCURR_UV(4,1)<2> ubCURR_V_TEMP(4,0)<16;16,1> + mov (16) ubCURR_UV(24,1)<2> ubCURR_V_TEMP(4,8)<16;16,1> + mov (16) ubCURR_UV(5,1)<2> ubCURR_V_TEMP(5,0)<16;16,1> + mov (16) ubCURR_UV(25,1)<2> ubCURR_V_TEMP(5,8)<16;16,1> + mov (16) ubCURR_UV(6,1)<2> ubCURR_V_TEMP(6,0)<16;16,1> + mov (16) ubCURR_UV(26,1)<2> ubCURR_V_TEMP(6,8)<16;16,1> + mov (16) ubCURR_UV(7,1)<2> ubCURR_V_TEMP(7,0)<16;16,1> + mov (16) ubCURR_UV(27,1)<2> ubCURR_V_TEMP(7,8)<16;16,1> + mov (16) ubCURR_UV(8,1)<2> ubCURR_V_TEMP(8,0)<16;16,1> + mov (16) ubCURR_UV(28,1)<2> ubCURR_V_TEMP(8,8)<16;16,1> + mov (16) ubCURR_UV(9,1)<2> ubCURR_V_TEMP(9,0)<16;16,1> + mov (16) ubCURR_UV(29,1)<2> ubCURR_V_TEMP(9,8)<16;16,1> + mov (16) ubCURR_UV(10,1)<2> ubCURR_V_TEMP(10,0)<16;16,1> + mov (16) ubCURR_UV(30,1)<2> ubCURR_V_TEMP(10,8)<16;16,1> + mov (16) ubCURR_UV(11,1)<2> ubCURR_V_TEMP(11,0)<16;16,1> + mov (16) ubCURR_UV(31,1)<2> ubCURR_V_TEMP(11,8)<16;16,1> + mov (16) ubCURR_UV(12,1)<2> ubCURR_V_TEMP(12,0)<16;16,1> + mov (16) ubCURR_UV(32,1)<2> ubCURR_V_TEMP(12,8)<16;16,1> + mov (16) ubCURR_UV(13,1)<2> ubCURR_V_TEMP(13,0)<16;16,1> + mov (16) ubCURR_UV(33,1)<2> ubCURR_V_TEMP(13,8)<16;16,1> + mov (16) ubCURR_UV(14,1)<2> ubCURR_V_TEMP(14,0)<16;16,1> + mov (16) ubCURR_UV(34,1)<2> ubCURR_V_TEMP(14,8)<16;16,1> + mov (16) ubCURR_UV(15,1)<2> ubCURR_V_TEMP(15,0)<16;16,1> + mov (16) ubCURR_UV(35,1)<2> ubCURR_V_TEMP(15,8)<16;16,1> + mov (16) ubCURR_UV(16,1)<2> ubCURR_V_TEMP(16,0)<16;16,1> + mov (16) ubCURR_UV(36,1)<2> ubCURR_V_TEMP(16,8)<16;16,1> + mov (16) ubCURR_UV(17,1)<2> ubCURR_V_TEMP(17,0)<16;16,1> + mov (16) ubCURR_UV(37,1)<2> ubCURR_V_TEMP(17,8)<16;16,1> + mov (16) ubCURR_UV(18,1)<2> ubCURR_V_TEMP(18,0)<16;16,1> + mov (16) ubCURR_UV(38,1)<2> ubCURR_V_TEMP(18,8)<16;16,1> + mov (16) ubCURR_UV(19,1)<2> ubCURR_V_TEMP(19,0)<16;16,1> + mov (16) ubCURR_UV(39,1)<2> ubCURR_V_TEMP(19,8)<16;16,1> + + + +//File Name : DN_UV_PL3_Interleave_Prev_Frame_UV.asm +//Author : Tatiya, Rupesh +//Description : Interleave separately loaded U and V for PL3 format. +// This is needed because Noise Detection and Noise Reduction works on interleaved UV data. + +//1.U Data: bottom half of UV space for prev frame (r17-r24) +//2.V Data: bottom quarter of Y space for curr frame (r120-r127) + + mov (16) ubPREV_UV(0,0)<2> ubPREV_U_TEMP(0,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(8,0)<2> ubPREV_U_TEMP(0,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(1,0)<2> ubPREV_U_TEMP(1,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(9,0)<2> ubPREV_U_TEMP(1,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(2,0)<2> ubPREV_U_TEMP(2,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(10,0)<2> ubPREV_U_TEMP(2,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(3,0)<2> ubPREV_U_TEMP(3,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(11,0)<2> ubPREV_U_TEMP(3,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(4,0)<2> ubPREV_U_TEMP(4,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(12,0)<2> ubPREV_U_TEMP(4,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(5,0)<2> ubPREV_U_TEMP(5,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(13,0)<2> ubPREV_U_TEMP(5,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(6,0)<2> ubPREV_U_TEMP(6,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(14,0)<2> ubPREV_U_TEMP(6,8)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(7,0)<2> ubPREV_U_TEMP(7,0)<16;8,1> { NoDDClr } + mov (16) ubPREV_UV(15,0)<2> ubPREV_U_TEMP(7,8)<16;8,1> { NoDDClr } + + mov (16) ubPREV_UV(0,1)<2> ubPREV_V_TEMP(0,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(8,1)<2> ubPREV_V_TEMP(0,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(1,1)<2> ubPREV_V_TEMP(1,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(9,1)<2> ubPREV_V_TEMP(1,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(2,1)<2> ubPREV_V_TEMP(2,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(10,1)<2> ubPREV_V_TEMP(2,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(3,1)<2> ubPREV_V_TEMP(3,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(11,1)<2> ubPREV_V_TEMP(3,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(4,1)<2> ubPREV_V_TEMP(4,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(12,1)<2> ubPREV_V_TEMP(4,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(5,1)<2> ubPREV_V_TEMP(5,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(13,1)<2> ubPREV_V_TEMP(5,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(6,1)<2> ubPREV_V_TEMP(6,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(14,1)<2> ubPREV_V_TEMP(6,8)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(7,1)<2> ubPREV_V_TEMP(7,0)<16;8,1> { NoDDChk } + mov (16) ubPREV_UV(15,1)<2> ubPREV_V_TEMP(7,8)<16;8,1> { NoDDChk } + + + +//Module Name : DN_UV_420_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Load Curr Frame Y data for 420 Input + + + +//Module Name : DN_UV_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Loads Y of Current frame. + + + + + //For 16x16 U and 16x16 V for 420, we need to read 32x32 Y. + + mov (8) acc0.0<1>:ud r0.0<8;8,1>:ud + mov (1) acc0.2<1>:ud 0xF000F:ud + add (2) acc0.0<1>:ud r9.0<2;2,1>:w r4.4<2;2,1>:w + + mov (8) r92.0<1>:ud acc0.0<8;8,1>:ud + + mov (8) r101.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r110.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r119.0<1>:ud acc0.0<8;8,1>:ud + + add (1) r101.1<1>:d acc0.1<0;1,0>:d 16:d + + add (1) r110.0<1>:d acc0.0<0;1,0>:d 16:d + + add (2) r119.0<1>:d acc0.0<2;2,1>:d 16:d + + send (8) udCURR_Y0(0)<1> r92 0x4 0x2890003:ud + send (8) udCURR_Y1(0)<1> r101 0x4 0x2890003:ud + send (8) udCURR_Y2(0)<1> r110 0x4 0x2890003:ud + send (8) udCURR_Y3(0)<1> r119 0x4 0x2890003:ud + + + +//Module Name : DN_UV_Noise_Detection_UV +//Author : Tatiya, Rupesh +//Description : Performs noise detection on 16x16 U and 16x16 V each. + + + +//Module Name : DN_UV_Move_CURBE_Inline_UV.asm +//Author : Tatiya, Rupesh + + + + + //Mov CURBE data to another space - so that it can be used as Temp Space --> r1 - r6 + mov (4) r54.28<1>:ub r2.28<4;4,1>:ub //Dest. YUY2 offset + mov (2) r54.5<1>:ud r4.0<4;2,2>:ud //Src YUY2 offset and Origin offset + mov (4) r55.28<1>:ub r1.0<4;4,1>:ub + + mov (8) r61.20<1>:ub r1.4<8;8,1>:ub + mov (4) r61.28<1>:ub r1.12<4;4,1>:ub + + //Move Inline Data to another space - so that it can be used as Temp Space --> r7 + mov (4) r62.10<1>:w r9.0<4;4,1>:w + mov (4) r63.10<1>:w r9.4<4;4,1>:w + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 1664:uw + mov (1) a0.1:uw 1816:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1792:uw + mov (1) a0.1:uw 1820:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 1920:uw + mov (1) a0.1:uw 1848:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2048:uw + mov (1) a0.1:uw 1852:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + mov (1) a0.0:uw 2304:uw + mov (1) a0.1:uw 1880:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2432:uw + mov (1) a0.1:uw 1884:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2560:uw + mov (1) a0.1:uw 1912:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + + + +//Module Name : DN_UV_Noise_Detection_Set_Top_Region_N +//Author : Tatiya, Rupesh +//Description : Sets sub-region region N from Top region. + + + //TODO - remove one instruction here using arithmatic. -rT + mov (1) a0.0:uw 2688:uw + mov (1) a0.1:uw 1916:uw + + + + +add (1) r9.7<1>:d ip:ud 32:d { NoCompact } + jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact } + + + +//Module : DN_UV_Noise_Reduction_UV +//Author : Tatiya, Rupesh +//Description : Performs Noise Reduction on 16x16 U and 16x16 V. +//Tasks : 1. Update weight history +// 2. Find if it block is motion block +// 3. Compute Denoised Pixel. + + + + +//History is 1+1 byte every 4x4 U and 4x4 V. + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,0)<16;16,1> r61.22<0;2,1>:ub + + mov (16) uwCURBE_TEMP(0)<1> 0:w + mov (16) uwCURBE_TEMP(1)<1> 0:w + + //Compute diff betn curr and prev. - First 16 lines + // 8 lines here + add (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> -ubPREV_UV(0,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> -ubPREV_UV(0,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> -ubPREV_UV(0,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> -ubPREV_UV(0,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> -ubPREV_UV(0,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> -ubPREV_UV(0,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> -ubPREV_UV(0,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> -ubPREV_UV(0,112)<16;16,1> //Diff UV interleaved + + //Update WT HIST + (-f0.0) shr (16) uwCURBE_TEMP(0)<1> ubHIST_UV(0,0)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(2)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov (16) uwCURBE_TEMP(2)<1> ubHIST_UV(0,0)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.20<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w ubHIST_UV(0,16)<16;16,1> r61.22<0;2,1>:ub + + //Compute diff betn curr and prev. - First 16 lines + // 8 more lines here + add (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> -ubPREV_UV(0,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> -ubPREV_UV(0,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> -ubPREV_UV(0,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> -ubPREV_UV(0,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> -ubPREV_UV(0,192)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> -ubPREV_UV(0,208)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> -ubPREV_UV(0,224)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> -ubPREV_UV(0,240)<16;16,1> //Diff UV interleaved + + (-f0.0) shr (16) uwCURBE_TEMP(1)<1> ubHIST_UV(0,16)<16;16,1> 1:w + (f1.0) add (16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> r61.24<0;2,1>:ub + (f0.0) mov (16) uwCURBE_TEMP(3)<1> r61.20<0;2,1>:ub + (-f0.0.anyv) mov(16) uwCURBE_TEMP(3)<1> ubHIST_UV(0,16)<16;16,1> + + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(0)<16;16,1> (abs)wDIFF_TEMPORAL(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(2)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(3)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(4)<16;16,1> (abs)wDIFF_TEMPORAL(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(6)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(7)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(8)<16;16,1> (abs)wDIFF_TEMPORAL(9)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(10)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(11)<16;16,1> + //16x16 to 16x4 - First 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(12)<16;16,1> (abs)wDIFF_TEMPORAL(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(14)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(15)<16;16,1> + +//Compute diff betn curr and prev. - Second 16 lines +//13 lines. + add (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> -ubPREV_UV(8,0)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> -ubPREV_UV(8,16)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> -ubPREV_UV(8,32)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> -ubPREV_UV(8,48)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> -ubPREV_UV(8,64)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> -ubPREV_UV(8,80)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> -ubPREV_UV(8,96)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> -ubPREV_UV(8,112)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> -ubPREV_UV(8,128)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> -ubPREV_UV(8,144)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> -ubPREV_UV(8,160)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> -ubPREV_UV(8,176)<16;16,1> //Diff UV interleaved + add (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> -ubPREV_UV(8,192)<16;16,1> //Diff UV interleaved + +//3 more lines + add (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> -ubPREV_UV(8,208)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> -ubPREV_UV(8,224)<16;16,1> //Diff UV interleaved + add (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> -ubPREV_UV(8,240)<16;16,1> //Diff UV interleaved + + //16x4 to 8x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - First 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(16)<16;16,1> (abs)wDIFF_TEMPORAL(17)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(18)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(19)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(20)<16;16,1> (abs)wDIFF_TEMPORAL(21)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(22)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(23)<16;16,1> + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(24)<16;16,1> (abs)wDIFF_TEMPORAL(25)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(26)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(2)<1> acc0.0<16;16,1>:uw (abs)wDIFF_TEMPORAL(27)<16;16,1> + + //16x16 to 16x4 - Second 16 lines + add (16) acc0.0<1>:uw (abs)wDIFF_TEMPORAL(28)<16;16,1> (abs)wCURBE_TEMP(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(5)<16;16,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(3)<1> acc0.0<16;16,1>:uw (abs)wCURBE_TEMP(6)<16;16,1> + + //Find if block is motion block - First 16 lines + cmp.g.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(0,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - First 16 lines + (-f0.0) mov (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(2)<16;16,1> + + //Actual DN - First 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(0)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(2,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(2,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(2,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,0)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,8)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(0)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(0)<1> ubCURR_UV(2,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(0)<1> wDIFF_TEMPORAL(0)<16;16,1> ubCURR_UV(2,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(1)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(3,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(3,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(3,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,16)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,24)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(1)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(1)<1> ubCURR_UV(3,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(1)<1> wDIFF_TEMPORAL(1)<16;16,1> ubCURR_UV(3,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(2)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(4,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(4,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(4,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,32)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,40)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(2)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(2)<1> ubCURR_UV(4,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(2)<1> wDIFF_TEMPORAL(2)<16;16,1> ubCURR_UV(4,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(3)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(5,2)<8;8,1> -uwCURBE_TEMP(0,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(5,10)<8;8,1> -uwCURBE_TEMP(0,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(5,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,48)<8;8,1> uwCURBE_TEMP(0,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,56)<8;8,1> uwCURBE_TEMP(0,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(3)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(3)<1> ubCURR_UV(5,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(3)<1> wDIFF_TEMPORAL(3)<16;16,1> ubCURR_UV(5,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(6,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(6,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(6,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,64)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,72)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(4)<1> ubCURR_UV(6,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(4)<1> wDIFF_TEMPORAL(4)<16;16,1> ubCURR_UV(6,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(7,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(7,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(7,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,80)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,88)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(5)<1> ubCURR_UV(7,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(5)<1> wDIFF_TEMPORAL(5)<16;16,1> ubCURR_UV(7,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(8,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(8,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(8,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,96)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,104)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(6)<1> ubCURR_UV(8,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(6)<1> wDIFF_TEMPORAL(6)<16;16,1> ubCURR_UV(8,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(7)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(9,2)<8;8,1> -uwCURBE_TEMP(0,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(9,10)<8;8,1> -uwCURBE_TEMP(0,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(9,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,112)<8;8,1> uwCURBE_TEMP(0,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,120)<8;8,1> uwCURBE_TEMP(0,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(7)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(7)<1> ubCURR_UV(9,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(7)<1> wDIFF_TEMPORAL(7)<16;16,1> ubCURR_UV(9,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(8)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(10,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(10,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(10,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,128)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,136)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(8)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(8)<1> ubCURR_UV(10,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(8)<1> wDIFF_TEMPORAL(8)<16;16,1> ubCURR_UV(10,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(9)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(11,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(11,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(11,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,144)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,152)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(9)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(9)<1> ubCURR_UV(11,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(9)<1> wDIFF_TEMPORAL(9)<16;16,1> ubCURR_UV(11,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(10)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(12,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(12,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(12,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,160)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,168)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(10)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(10)<1> ubCURR_UV(12,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(10)<1> wDIFF_TEMPORAL(10)<16;16,1> ubCURR_UV(12,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(11)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(13,2)<8;8,1> -uwCURBE_TEMP(0,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(13,10)<8;8,1> -uwCURBE_TEMP(0,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(13,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,176)<8;8,1> uwCURBE_TEMP(0,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,184)<8;8,1> uwCURBE_TEMP(0,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(11)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(11)<1> ubCURR_UV(13,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(11)<1> wDIFF_TEMPORAL(11)<16;16,1> ubCURR_UV(13,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(12)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(14,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(14,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(14,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,192)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,200)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(12)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(12)<1> ubCURR_UV(14,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(12)<1> wDIFF_TEMPORAL(12)<16;16,1> ubCURR_UV(14,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(13)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(15,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(15,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(15,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,208)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,216)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(13)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(13)<1> ubCURR_UV(15,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(13)<1> wDIFF_TEMPORAL(13)<16;16,1> ubCURR_UV(15,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(14)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(16,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(16,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(16,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,224)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,232)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(14)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(14)<1> ubCURR_UV(16,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(14)<1> wDIFF_TEMPORAL(14)<16;16,1> ubCURR_UV(16,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(15)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(17,2)<8;8,1> -uwCURBE_TEMP(0,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(17,10)<8;8,1> -uwCURBE_TEMP(0,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(17,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(0,240)<8;8,1> uwCURBE_TEMP(0,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(0,248)<8;8,1> uwCURBE_TEMP(0,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(15)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(15)<1> ubCURR_UV(17,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(15)<1> wDIFF_TEMPORAL(15)<16;16,1> ubCURR_UV(17,2)<16;16,1> + + + //16x4 to 8x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4(0)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> + add (16) uwDIFF_TEMPORAL_SUM4x4(1)<1> uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1> + + //8x4 to 4x4 - Second 16 lines + add (16) uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<1> uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1> uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1> { AccWrEn } + + //Find if block is motion block - Second 16 lines + cmp.g.f1.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<16;16,1> r61.26<0;2,1>:ub + + //Move TEMPORAL_SUM4x4 for SIMD16 use later. + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,0)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,2)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,4)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,6)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,8)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,10)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,12)<0;2,1> + mov (8) uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1> uwDIFF_TEMPORAL_SUM4x4_FINAL(1,14)<0;2,1> + + //Pick Appropriate Weight History Based on motion. - Second 16 lines + (-f1.0) mov (16) uwCURBE_TEMP(1)<1> uwCURBE_TEMP(3)<16;16,1> + + //Actual DN - Second 16 lines + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(16)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(22,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(22,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(22,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,0)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,8)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(16)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(16)<1> ubCURR_UV(22,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(16)<1> wDIFF_TEMPORAL(16)<16;16,1> ubCURR_UV(22,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(17)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(23,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(23,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(23,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,16)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,24)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(17)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(17)<1> ubCURR_UV(23,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(17)<1> wDIFF_TEMPORAL(17)<16;16,1> ubCURR_UV(23,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(18)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(24,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(24,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(24,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,32)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,40)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(18)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(18)<1> ubCURR_UV(24,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(18)<1> wDIFF_TEMPORAL(18)<16;16,1> ubCURR_UV(24,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(19)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(25,2)<8;8,1> -uwCURBE_TEMP(1,0)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(25,10)<8;8,1> -uwCURBE_TEMP(1,2)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(25,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,48)<8;8,1> uwCURBE_TEMP(1,0)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,56)<8;8,1> uwCURBE_TEMP(1,2)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(19)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(19)<1> ubCURR_UV(25,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(19)<1> wDIFF_TEMPORAL(19)<16;16,1> ubCURR_UV(25,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(20)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(26,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(26,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(26,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,64)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,72)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(20)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(20)<1> ubCURR_UV(26,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(20)<1> wDIFF_TEMPORAL(20)<16;16,1> ubCURR_UV(26,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(21)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(27,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(27,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(27,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,80)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,88)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(21)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(21)<1> ubCURR_UV(27,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(21)<1> wDIFF_TEMPORAL(21)<16;16,1> ubCURR_UV(27,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(22)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(28,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(28,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(28,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,96)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,104)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(22)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(22)<1> ubCURR_UV(28,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(22)<1> wDIFF_TEMPORAL(22)<16;16,1> ubCURR_UV(28,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(23)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(29,2)<8;8,1> -uwCURBE_TEMP(1,4)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(29,10)<8;8,1> -uwCURBE_TEMP(1,6)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(29,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,112)<8;8,1> uwCURBE_TEMP(1,4)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,120)<8;8,1> uwCURBE_TEMP(1,6)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(23)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(23)<1> ubCURR_UV(29,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(23)<1> wDIFF_TEMPORAL(23)<16;16,1> ubCURR_UV(29,2)<16;16,1> + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(24)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(30,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(30,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(30,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,128)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,136)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(24)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(24)<1> ubCURR_UV(30,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(24)<1> wDIFF_TEMPORAL(24)<16;16,1> ubCURR_UV(30,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(25)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(31,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(31,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(31,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,144)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,152)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(25)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(25)<1> ubCURR_UV(31,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(25)<1> wDIFF_TEMPORAL(25)<16;16,1> ubCURR_UV(31,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(26)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(32,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(32,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(32,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,160)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,168)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(26)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(26)<1> ubCURR_UV(32,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(26)<1> wDIFF_TEMPORAL(26)<16;16,1> ubCURR_UV(32,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(27)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(33,2)<8;8,1> -uwCURBE_TEMP(1,8)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(33,10)<8;8,1> -uwCURBE_TEMP(1,10)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(33,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,176)<8;8,1> uwCURBE_TEMP(1,8)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,184)<8;8,1> uwCURBE_TEMP(1,10)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(27)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(27)<1> ubCURR_UV(33,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(27)<1> wDIFF_TEMPORAL(27)<16;16,1> ubCURR_UV(33,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wDIFF_TEMPORAL(28)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(34,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(34,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(34,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,192)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,200)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wDIFF_TEMPORAL(28)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wDIFF_TEMPORAL(28)<1> ubCURR_UV(34,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wDIFF_TEMPORAL(28)<1> wDIFF_TEMPORAL(28)<16;16,1> ubCURR_UV(34,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(4)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(35,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(35,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(35,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,208)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,216)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(4)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(4)<1> ubCURR_UV(35,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(4)<1> wCURBE_TEMP(4)<16;16,1> ubCURR_UV(35,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(5)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(36,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(36,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(36,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,224)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,232)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(5)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(5)<1> ubCURR_UV(36,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(5)<1> wCURBE_TEMP(5)<16;16,1> ubCURR_UV(36,2)<16;16,1> + + cmp.l.f0.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.28<0;2,1>:ub + cmp.l.f1.0 (16) null<1>:w (abs)wCURBE_TEMP(6)<16;16,1> r61.30<0;2,1>:ub + mul (8) acc0.0<1>:w ubCURR_UV(37,2)<8;8,1> -uwCURBE_TEMP(1,12)<0;2,1> + mul (8) acc0.8<1>:w ubCURR_UV(37,10)<8;8,1> -uwCURBE_TEMP(1,14)<0;2,1> + mac (16) acc0<1>:w ubCURR_UV(37,2)<16;16,1> 256:w + mac (8) acc0.0<1>:w ubPREV_UV(8,240)<8;8,1> uwCURBE_TEMP(1,12)<0;2,1> + mac (8) acc0.8<1>:w ubPREV_UV(8,248)<8;8,1> uwCURBE_TEMP(1,14)<0;2,1> + add (16) acc0<1>:w acc0<16;16,1>:w 128:w + (f0.0) shr (16) wCURBE_TEMP(6)<1> acc0<16;16,1>:w 8:w + (-f0.0) mov (16) wCURBE_TEMP(6)<1> ubCURR_UV(37,2)<16;16,1> + cmp.le.f0.0 (16) null<1>:w uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> r61.26<0;2,1>:ub + (-f0.0.allv) avg (16) wCURBE_TEMP(6)<1> wCURBE_TEMP(6)<16;16,1> ubCURR_UV(37,2)<16;16,1> + + //Pack Weight History WORD -> BYTE + mov (16) ubCURBE_TEMP(3,0)<1> ubCURBE_TEMP(0)<32;16,2> + mov (16) ubCURBE_TEMP(3,16)<1> ubCURBE_TEMP(1)<32;16,2> + + + +//Module Name : DN_UV_Compute_BNE_UV +//Author : Tatiya, Rupesh +//Description : Computes minimum SOAD for each 16x4 block. + + cmp.l.f0.0 (8) null:w uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + (f0.0)sel (8) uwCURBE_TEMP(1,0)<1> uwSOAD_MIN_8x4(0,12)<16;4,1> uwSOAD_MIN_8x4(2,12)<16;4,1> + + mov (8) ubCURBE_TEMP(1)<1> ubCURBE_TEMP(1)<16;8,2> + + + +//File Name : DN_UV_PL3_Unpack_Denoised_UV.asm +//Author : Tatiya, Rupesh +//Description : Upack the interleaved UV data + +//First 16 lines. + mov (8) ubMSGPAYLOAD_U(0,0)<1> ubDIFF_TEMPORAL(0,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(0,16)<1> ubDIFF_TEMPORAL(1,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(0,0)<1> ubDIFF_TEMPORAL(0,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(0,16)<1> ubDIFF_TEMPORAL(1,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(1,0)<1> ubDIFF_TEMPORAL(2,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(1,16)<1> ubDIFF_TEMPORAL(3,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(1,0)<1> ubDIFF_TEMPORAL(2,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(1,16)<1> ubDIFF_TEMPORAL(3,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(2,0)<1> ubDIFF_TEMPORAL(4,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(2,16)<1> ubDIFF_TEMPORAL(5,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(2,0)<1> ubDIFF_TEMPORAL(4,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(2,16)<1> ubDIFF_TEMPORAL(5,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(3,0)<1> ubDIFF_TEMPORAL(6,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(3,16)<1> ubDIFF_TEMPORAL(7,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(3,0)<1> ubDIFF_TEMPORAL(6,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(3,16)<1> ubDIFF_TEMPORAL(7,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(4,0)<1> ubDIFF_TEMPORAL(8,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(4,16)<1> ubDIFF_TEMPORAL(9,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(4,0)<1> ubDIFF_TEMPORAL(8,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(4,16)<1> ubDIFF_TEMPORAL(9,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(5,0)<1> ubDIFF_TEMPORAL(10,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(5,16)<1> ubDIFF_TEMPORAL(11,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(5,0)<1> ubDIFF_TEMPORAL(10,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(5,16)<1> ubDIFF_TEMPORAL(11,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(6,0)<1> ubDIFF_TEMPORAL(12,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(6,16)<1> ubDIFF_TEMPORAL(13,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(6,0)<1> ubDIFF_TEMPORAL(12,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(6,16)<1> ubDIFF_TEMPORAL(13,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(7,0)<1> ubDIFF_TEMPORAL(14,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(7,16)<1> ubDIFF_TEMPORAL(15,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(7,0)<1> ubDIFF_TEMPORAL(14,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(7,16)<1> ubDIFF_TEMPORAL(15,2)<32;8,4> + +//Second 16 lines. +//12 lines first + mov (8) ubMSGPAYLOAD_U(0,8)<1> ubDIFF_TEMPORAL(16,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(0,24)<1> ubDIFF_TEMPORAL(17,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(0,8)<1> ubDIFF_TEMPORAL(16,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(0,24)<1> ubDIFF_TEMPORAL(17,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(1,8)<1> ubDIFF_TEMPORAL(18,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(1,24)<1> ubDIFF_TEMPORAL(19,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(1,8)<1> ubDIFF_TEMPORAL(18,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(1,24)<1> ubDIFF_TEMPORAL(19,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(2,8)<1> ubDIFF_TEMPORAL(20,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(2,24)<1> ubDIFF_TEMPORAL(21,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(2,8)<1> ubDIFF_TEMPORAL(20,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(2,24)<1> ubDIFF_TEMPORAL(21,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(3,8)<1> ubDIFF_TEMPORAL(22,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(3,24)<1> ubDIFF_TEMPORAL(23,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(3,8)<1> ubDIFF_TEMPORAL(22,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(3,24)<1> ubDIFF_TEMPORAL(23,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(4,8)<1> ubDIFF_TEMPORAL(24,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(4,24)<1> ubDIFF_TEMPORAL(25,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(4,8)<1> ubDIFF_TEMPORAL(24,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(4,24)<1> ubDIFF_TEMPORAL(25,2)<32;8,4> + mov (8) ubMSGPAYLOAD_U(5,8)<1> ubDIFF_TEMPORAL(26,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(5,24)<1> ubDIFF_TEMPORAL(27,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(5,8)<1> ubDIFF_TEMPORAL(26,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(5,24)<1> ubDIFF_TEMPORAL(27,2)<32;8,4> + + //3 lines next + mov (8) ubMSGPAYLOAD_U(6,8)<1> ubDIFF_TEMPORAL(28,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(6,24)<1> ubCURBE_TEMP(4,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(6,8)<1> ubDIFF_TEMPORAL(28,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(6,24)<1> ubCURBE_TEMP(4,2)<32;8,4> + + mov (8) ubMSGPAYLOAD_U(7,8)<1> ubCURBE_TEMP(5,0)<32;8,4> + mov (8) ubMSGPAYLOAD_U(7,24)<1> ubCURBE_TEMP(6,0)<32;8,4> + mov (8) ubMSGPAYLOAD_V(7,8)<1> ubCURBE_TEMP(5,2)<32;8,4> + mov (8) ubMSGPAYLOAD_V(7,24)<1> ubCURBE_TEMP(6,2)<32;8,4> + + + +//Module Name : DN_UV_420_Save_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Save Curr Frame Y data for 420 Input + + + +//Module Name : DN_UV_Load_Curr_Frame_Y +//Author : Tatiya, Rupesh +//Description : Saves Y or YUY2 of Current frame. + + + + + mov (8) acc0.0<1>:ud r0.0<8;8,1>:ud + mov (2) acc0.0<1>:d r62.10<2;2,1>:w + + mov (1) acc0.2<1>:d 0xF000F:ud + + mov (8) r92.0<1>:ud acc0.0<8;8,1>:ud + + mov (8) r101.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r110.0<1>:ud acc0.0<8;8,1>:ud + mov (8) r119.0<1>:ud acc0.0<8;8,1>:ud + + add (1) r101.1<1>:d acc0.1<0;1,0>:d 16:d + + add (1) r110.0<1>:d acc0.0<0;1,0>:d 16:d + + add (2) r119.0<1>:d acc0.0<2;2,1>:d 16:d + + send (8) null<1>:d r92 0x5 0x120A8018:ud + send (8) null<1>:d r101 0x5 0x120A8018:ud + send (8) null<1>:d r110 0x5 0x120A8018:ud + send (8) null<1>:d r119 0x5 0x120A8018:ud + + + //TODO - See if History saving can be combined with Curr Frame Save. - rT + + +//Module Name : DN_UV_Save_Hist_UV +//Author : Tatiya, Rupesh +//Description : Saves DN history for UV data. + + mov (8) r3.0<1>:ud r0.0<8;8,1>:ud + mov (2) r3.0<1>:d r62.12<2;2,1>:w + mov (1) r3.2<1>:d 0x30007:ud + + send (8) null<1>:d r3 0x5 0x40A8021:ud + + + +//Module Name : DN_UV_Save_BNE_UV +//Author : Tatiya, Rupesh +//Description : Saves BNE values for 16x16 U and 16x16 V. + + mov (8) r1.0<1>:ud r0.0<8;8,1>:ud + mov (2) r1.0<1>:d r63.12<2;2,1>:w + mov (1) r1.2<1>:d 0x10003:ud + + send (8) null<1>:d r1 0x5 0x40A8023:ud + + + +//File Name : DN_UV_PL3_Save_Curr_Frame_UV.asm +//Author : Tatiya, Rupesh +//Description : Save U and V data for PL3 surface + + + +//Module name : DN_UV_Save_Curr_Frame_UV +//Author : Tatiya, Rupesh +//Description : Saves Current Frame (UV only). + + + + + mov (8) r74<1>:ud r0.0<8;8,1>:ud + mov (8) r83<1>:ud r0.0<8;8,1>:ud + + shr (2) r74.0<1>:d r62.10<2;2,1>:w 1:w + mov (1) r74.2<1>:d 0xF000F:ud + + mov (8) r83.0<1>:ud r74.0<8;8,1>:ud + + send (8) null<1>:d r74 0x5 0x120A8019:ud + send (8) null<1>:d r83 0x5 0x120A801A:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + + //All sub-routines here + + +// Module Name : Noise_Detection +// Author : Tatiya, Rupesh +// Description : Performs noise detection on 32 pixels of U (8x4) and 32 pixels of V (8x4). + +DN_UV_NOISE_DETECTION_UV: + +// Find Field Block Median +// +// Purpose : Find the median value of the nine pixels in the same field +// which are centered at current pixel. +// +// Works on 9 pixels centered at the current pixel +// NOTE: pixels are within same field. +// v4 - current pixel +// +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 + +// Algorithm to find median modifies the data. +// Copy the data needed to calculate median so the original source data stays intact. +// + +//TODO - Change Interleaved implementation to separated one if - , does not work on predication. - rT + +//Delete Later - rT +//mov (1) pCUR_UV:uw 52*32:uw + +// v0 +mov (16) ubMEDIAN_TEMP(0,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(0,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(1,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(2,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(3,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(4,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(5,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(6,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(7,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(8,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw +// v0 +mov (16) ubMEDIAN_TEMP(9,0)<1> r[a0.0,0]<16;16,1> +// v0 +mov (16) ubMEDIAN_TEMP(9,16)<1> r[a0.0,32]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,0)<1> r[a0.0,2]<16;16,1> +// v1 +mov (16) ubMEDIAN_TEMP(10,16)<1> r[a0.0,34]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,0)<1> r[a0.0,4]<16;16,1> +// v2 +mov (16) ubMEDIAN_TEMP(11,16)<1> r[a0.0,36]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,0)<1> r[a0.0,64]<16;16,1> +// v3 +mov (16) ubMEDIAN_TEMP(12,16)<1> r[a0.0,96]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,0)<1> r[a0.0,66]<16;16,1> +// v4 +mov (16) ubMEDIAN_TEMP(13,16)<1> r[a0.0,98]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,0)<1> r[a0.0,68]<16;16,1> +// v5 +mov (16) ubMEDIAN_TEMP(14,16)<1> r[a0.0,100]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,0)<1> r[a0.0,128]<16;16,1> +// v6 +mov (16) ubMEDIAN_TEMP(15,16)<1> r[a0.0,160]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,0)<1> r[a0.0,130]<16;16,1> +// v7 +mov (16) ubMEDIAN_TEMP(16,16)<1> r[a0.0,162]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,0)<1> r[a0.0,132]<16;16,1> +// v8 +mov (16) ubMEDIAN_TEMP(17,16)<1> r[a0.0,164]<16;16,1> + +//TODO - Optimize one instruction here. +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// MedianSwap +// +// MedianSwap(inOutLeft, inOutRight) +// { +// if (inOutLeft > inOutRight) +// { +// temp = inOutLeft +// inOutLeft = inOutRight +// inOutRight = temp +// } +// } + +// MedianSwap(v1, v2) - U +// MedianSwap(v4, v5) - U +// MedianSwap(v1, v2) - V +// MedianSwap(v4, v5) - V + +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(1,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(1,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(1,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(1,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(3,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(6,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(3,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(6,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(3,0)<2> ubMEDIAN_TEMP(4,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(3,1)<2> ubMEDIAN_TEMP(4,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(4,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(1,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(1,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(7,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(0,0)<32;16,2> ubMEDIAN_TEMP(3,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(7,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(0,1)<32;16,2> ubMEDIAN_TEMP(3,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(7,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(0,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(7,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(0,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(3,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(3,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(5,0)<32;16,2> ubMEDIAN_TEMP(8,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(5,1)<32;16,2> ubMEDIAN_TEMP(8,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(5,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(5,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(5,0)<2> ubMEDIAN_TEMP(8,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(5,1)<2> ubMEDIAN_TEMP(8,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(3,0)<32;16,2> ubMEDIAN_TEMP(6,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(1,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(3,1)<32;16,2> ubMEDIAN_TEMP(6,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(1,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(6,0)<2> ubMEDIAN_TEMP(3,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(1,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(6,1)<2> ubMEDIAN_TEMP(3,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(1,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(2,0)<32;16,2> ubMEDIAN_TEMP(5,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(7,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(2,1)<32;16,2> ubMEDIAN_TEMP(5,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(7,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubMEDIAN_TEMP(5,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(7,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2> ubMEDIAN_TEMP(5,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(7,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(4,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(2,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(6,0)<32;16,2> ubMEDIAN_TEMP(4,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(6,1)<32;16,2> ubMEDIAN_TEMP(4,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(6,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(6,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(4,0)<32;16,2> ubMEDIAN_TEMP(2,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(4,1)<32;16,2> ubMEDIAN_TEMP(2,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2> ubMEDIAN_TEMP(2,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2> ubMEDIAN_TEMP(2,1)<32;16,2> +cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> +cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> +cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> +cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> +(f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> +(f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> +(f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + +(f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> +(f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> +(f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> +(f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + +// MedianSwap(v7, v8) - U +// MedianSwap(v0, v1) - U +// MedianSwap(v7, v8) - V +// MedianSwap(v0, v1) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(10,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(10,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(10,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(10,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v3, v4) - U + // MedianSwap(v6, v7) - U + // MedianSwap(v3, v4) - V + // MedianSwap(v6, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(12,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(15,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(12,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(15,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(12,0)<2> ubMEDIAN_TEMP(13,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(12,1)<2> ubMEDIAN_TEMP(13,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(13,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v1, v2) - U + // MedianSwap(v4, v5) - U + // MedianSwap(v1, v2) - V + // MedianSwap(v4, v5) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(10,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(10,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2> ubTEMP1(1,16)<16;16,1> + + // MedianSwap(v7, v8) - U + // MedianSwap(v0, v3) - U + // MedianSwap(v7, v8) - V + // MedianSwap(v0, v3) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(16,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(9,0)<32;16,2> ubMEDIAN_TEMP(12,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(16,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(9,1)<32;16,2> ubMEDIAN_TEMP(12,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(16,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(9,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(16,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(9,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(12,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(12,1)<2> ubTEMP1(1,16)<16;16,1> + + // NOTE: + // Compare v0 to v6 to find the minimum. + // Store the minimum for future use. + //TODO - Find if MIN is needed. + //cmp.l.f0.0 (16) null:w ubMEDIAN_TEMP(%1+0,0)<32;16,2> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //cmp.l.f1.0 (16) null:w ubMEDIAN_TEMP(%1+0,1)<32;16,2> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + //(f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,0)<32;16,2> + //(f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+0,1)<32;16,2> + //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,0)<32;16,2> + //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+6,1)<32;16,2> + + // MedianSwap(v5, v8) - U + // MedianSwap(v4, v7) - U + // MedianSwap(v5, v8) - V + // MedianSwap(v4, v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(14,0)<32;16,2> ubMEDIAN_TEMP(17,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(14,1)<32;16,2> ubMEDIAN_TEMP(17,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(14,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(1,0)<1> ubMEDIAN_TEMP(14,1)<32;16,2> + mov (16) ubTEMP1(1,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(14,0)<2> ubMEDIAN_TEMP(17,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(14,1)<2> ubMEDIAN_TEMP(17,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2> ubTEMP1(0,16)<16;16,1> + (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2> ubTEMP1(1,0)<16;16,1> + (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2> ubTEMP1(1,16)<16;16,1> + +// NOTE: +// Compare v2 to v8 to find the maximum. +// Store the maximum for future use. + //TODO - Find if MAX is needed. +// cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +// cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2> +//(f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,0)<32;16,2> +//(f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+2,1)<32;16,2> +//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,0)<32;16,2> +//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1> ubMEDIAN_TEMP(%1+8,1)<32;16,2> + +// MedianSwap(v3, v6) - U +// MedianSwap(v1, v4) - U +// MedianSwap(v3, v6) - V +// MedianSwap(v1, v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(12,0)<32;16,2> ubMEDIAN_TEMP(15,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(10,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(12,1)<32;16,2> ubMEDIAN_TEMP(15,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(10,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(15,0)<2> ubMEDIAN_TEMP(12,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(10,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(15,1)<2> ubMEDIAN_TEMP(12,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(10,1)<32;16,2> + + // MedianSwap(v2,v5) - U + // MedianSwap(v4,v7) - U + // MedianSwap(v2,v5) - V + // MedianSwap(v4,v7) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(11,0)<32;16,2> ubMEDIAN_TEMP(14,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(16,0)<32;16,2> + cmp.g.f1.0 (16) null:w ubMEDIAN_TEMP(11,1)<32;16,2> ubMEDIAN_TEMP(14,1)<32;16,2> + cmp.g.f1.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(16,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubMEDIAN_TEMP(14,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(16,0)<32;16,2> + (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2> ubMEDIAN_TEMP(14,1)<32;16,2> + (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(16,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + mov (16) ubTEMP1(0,0)<1> ubMEDIAN_TEMP(13,0)<32;16,2> + mov (16) ubTEMP1(0,16)<1> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2> ubTEMP1(0,0)<16;16,1> + (f0.1) mov (16) ubMEDIAN_TEMP(11,1)<2> ubTEMP1(0,16)<16;16,1> + + // MedianSwap(v6,v4) - U + // MedianSwap(v6,v4) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(15,0)<32;16,2> ubMEDIAN_TEMP(13,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(15,1)<32;16,2> ubMEDIAN_TEMP(13,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(15,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(15,1)<32;16,2> + + // MedianSwap(v4,v2) - U + // MedianSwap(v4,v2) - V + cmp.g.f0.0 (16) null:w ubMEDIAN_TEMP(13,0)<32;16,2> ubMEDIAN_TEMP(11,0)<32;16,2> + cmp.g.f0.1 (16) null:w ubMEDIAN_TEMP(13,1)<32;16,2> ubMEDIAN_TEMP(11,1)<32;16,2> + + (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2> ubMEDIAN_TEMP(11,0)<32;16,2> + (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2> ubMEDIAN_TEMP(11,1)<32;16,2> + +// Sobel Value calculation for the current pixel v4 +// v2 v1 v0 +// * * * <--- Different field - not used +// v5 v4 v3 +// * * * <--- Different field - not used +// v8 v7 v6 +// +// Gx = -v0 - 2*v3 - v6 + v2 + 2*v5 + v8 +// Gy = v0 + 2*v1 + v2 - v6 - 2*v7 - v8 +// +// Sobel = (|Gx| + |Gy|) >> 3 + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw -128:uw + +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(0)<1> r[a0.0,68]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(1)<1> r[a0.0,100]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(2)<1> r[a0.0,132]<16;16,1>:ub 2:w +// - 2 * v3 +mul (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -2:w +// + v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub 1:w +// - v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub -1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// + 2 * v5 +mac (16) wSOBEL_X(3)<1> r[a0.0,164]<16;16,1>:ub 2:w + +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,2]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,0]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,132]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,4]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,128]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,130]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(0)<16;16,1> + +shr (16) uwSOBEL(0)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,34]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,32]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,164]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,36]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,160]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,162]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(1)<16;16,1> + +shr (16) uwSOBEL(1)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,66]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,64]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,196]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,68]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,192]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,194]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(2)<16;16,1> + +shr (16) uwSOBEL(2)<1> acc0.0<16;16,1>:uw 3:uw +// + 2 * v1 +mul (16) acc0.0<1>:w r[a0.0,98]<16;16,1>:ub 2:w +// + v0 +mac (16) acc0.0<1>:w r[a0.0,96]<16;16,1>:ub 1:w +// - v8 +mac (16) acc0.0<1>:w r[a0.0,228]<16;16,1>:ub -1:w +// + v2 +mac (16) acc0.0<1>:w r[a0.0,100]<16;16,1>:ub 1:w +// - v6 +mac (16) acc0.0<1>:w r[a0.0,224]<16;16,1>:ub -1:w +// - 2 * v7 +mac (16) acc0.0<1>:w r[a0.0,226]<16;16,1>:ub -2:w + +add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w (abs)wSOBEL_X(3)<16;16,1> + +shr (16) uwSOBEL(3)<1> acc0.0<16;16,1>:uw 3:uw + +//Mov Median in CURBE_TEMP to free up temp space. +mov (16) ubMEDIAN(0,0)<1> ubMEDIAN_TEMP(4,0)<16;16,1> +mov (16) ubMEDIAN(0,16)<1> ubMEDIAN_TEMP(4,16)<16;16,1> +mov (16) ubMEDIAN(0,32)<1> ubMEDIAN_TEMP(13,0)<16;16,1> +mov (16) ubMEDIAN(0,48)<1> ubMEDIAN_TEMP(13,16)<16;16,1> + +// Find: +// absDiff = abs(ubCurY - ubMedian) +// Find the difference between pixel and median value. + +//Median is interleaved. So difference is also interleaved. + +//------------------------------------------------------------------------------------------ +//Process 16 U and 16 V pixels here and rest later. +// first row - v0,v1,v2 +add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(0,0)<16;16,1> +// first row - v0,v1,v2 +add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// second row - v3,v4,v5 +add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +// third row - v6,v7,v8 +add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> +add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(0,16)<16;16,1> + +//TODO - Change Later - rT +add (1) a0.0:uw a0.0<0;1,0>:uw 64:uw + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//First 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(0)<1> r[a0.0,0]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(1)<1> r[a0.0,2]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(2)<1> r[a0.0,4]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(3)<1> r[a0.0,64]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(4)<1> r[a0.0,66]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(5)<1> r[a0.0,68]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(6)<1> r[a0.0,128]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> + add (16) wDIFF(7)<1> r[a0.0,130]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(8)<1> r[a0.0,132]<16;16,1>:ub -ubMEDIAN(1,0)<16;16,1> +//------------ +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//------------ + //DIFF(0-7) is not needed here. Populate it. + // first row - v0,v1,v2 + add (16) wDIFF(9)<1> r[a0.0,32]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(10)<1> r[a0.0,34]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(11)<1> r[a0.0,36]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // second row - v3,v4,v5 + add (16) wDIFF(12)<1> r[a0.0,96]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(13)<1> r[a0.0,98]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(14)<1> r[a0.0,100]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + + // third row - v6,v7 + add (16) wDIFF(15)<1> r[a0.0,160]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> + add (16) wDIFF(16)<1> r[a0.0,162]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//------------ + //Load v8 - DIFF(8) + add (16) wDIFF(17)<1> r[a0.0,164]<16;16,1>:ub -ubMEDIAN(1,16)<16;16,1> +//------------ + +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max-block_min) < m_LocalDiffThreshold)) +// if (sigma_mb_min > sigma) +// sigma_mb_min = sigma; + +//NOTE: block_min is always zero as median is one of the value in 3x3 block. So no need o calculate it. +// So just do - +//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max) < m_LocalDiffThreshold) && ( sigma < sigma_mb_min)) +// sigma_mb_min = sigma; + +//We are processing 32 bytes of U and 32 bytes of V - each of size 8x4. +//Compare first 8 bytes with max possible (255). +//Start above condition from second 8 bytes. + +//TODO - Change Later - rT +// mov (1) pCUR_MIN_SOAD_8x4:uw 1752:uw //r54.24:ub + +//First row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(0)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> 255:uw +(f0.0) sel (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> 255:uw + +//Second row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(1)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + +// Find sum of all absolute differences AND +// maximum absolute difference for 16 U and 16 V here. +//Second 2 rows of 8x4 +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(2)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(3)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(4)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(5)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(6)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(7)<16;16,1> + add (16) uwSOAD(0)<1> acc0.0<16;16,1>:uw (abs)wDIFF(8)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1> (abs)wDIFF(1)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1> (abs)wDIFF(3)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1> (abs)wDIFF(5)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1> (abs)wDIFF(7)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(8)<16;16,1> +//Compare 0-1, 2-3, 4-5, 6-7 +cmp.g.f0.0 (16) null:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +cmp.g.f0.1 (16) null:uw (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +cmp.g.f1.0 (16) null:uw (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +cmp.g.f1.1 (16) null:uw (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Calculate SAD + add (16) acc0.0<1>:uw (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(11)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(12)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(13)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(14)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(15)<16;16,1> + add (16) acc0.0<1>:uw acc0.0<16;16,1>:uw (abs)wDIFF(16)<16;16,1> + add (16) uwSOAD(1)<1> acc0.0<16;16,1>:uw (abs)wDIFF(17)<16;16,1> + +(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1> (abs)wDIFF(10)<16;16,1> +(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1> (abs)wDIFF(12)<16;16,1> +(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1> (abs)wDIFF(14)<16;16,1> +(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1> (abs)wDIFF(16)<16;16,1> + +//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +cmp.g.f0.1 (16) null:uw uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(1)<16;16,1> +(f0.1)sel (16) uwCURBE_TEMP(2)<1> uwCURBE_TEMP(2)<16;16,1> uwCURBE_TEMP(3)<16;16,1> + +//Compare Max(0,1,2,3) - Max(4,5,6,7) +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> +(f0.0)sel (16) uwCURBE_TEMP(0)<1> uwCURBE_TEMP(0)<16;16,1> uwCURBE_TEMP(2)<16;16,1> + +//Compare Max(0,1,2,3,4,5,6,7) - 8 +cmp.g.f0.0 (16) null:uw uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> +(f0.0)sel (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1> (abs)wDIFF(17)<16;16,1> + +//Third row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(2)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(0)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(0)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(0)<16;16,1> + +//Fourth row of 8x4 + cmp.l.f0.0 (16) null:uw uwSOBEL(3)<16;16,1> r55.30<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwMAX_ABS_DIFF(1)<16;16,1> r55.28<0;2,1>:ub +(f0.0) cmp.l.f0.0 (16) null:uw uwSOAD(1)<16;16,1> uwSOBEL(0)<16;16,1> +(f0.0) mov (16) uwSOBEL(0)<1> uwSOAD(1)<16;16,1> + + cmp.l.f0.0 (8) null:uw uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> +(f0.0) sel (8) uwSOBEL(0)<1> uwSOBEL(0,0)<8;8,1> uwSOBEL(0,8)<8;8,1> + + cmp.l.f0.0 (4) null:uw uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> +(f0.0) sel (4) uwSOBEL(0)<1> uwSOBEL(0,0)<4;4,1> uwSOBEL(0,4)<4;4,1> + + cmp.l.f0.0 (2) null:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> +(f0.0) sel (2) r[a0.1,0]<1>:uw uwSOBEL(0,0)<2;2,1> uwSOBEL(0,2)<2;2,1> + + + + + + +// End of common.inc + +mov (1) ip:ud r9.7<0;1,0>:d + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_422CP.g4a new file mode 100644 index 000000000..af8e43839 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_422CP.g4a @@ -0,0 +1,566 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 117 // Total instruction count +// 1 // Total kernel count + +.kernel PL3_DN_422CP +.code + + + +// FileName: DN_PL_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for planar format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x45E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_IMC3_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Load_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + +//CHANGE : Read extra UV data to convert to 422. -rT +//we are reading extra data in ALL cases irrespective of whether upsampling is reqd or not later on, to keep things simple. + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (2) r27.0<1>:d r27.0<2;2,1>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x40007:ud { NoDDChk } // U/V block width and height (8x5) + mov (8) r36<1>:ud r27.0<8;8,1>:ud + mov (8) r38<1>:ud r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2290001:ud + send (8) udDNDI_UV_RESP(2)<1> r38 0x4 0x2290002:ud + + //Update Header for Save + mov (1) mudMSGHDR_UCOPY(0,2)<1> 0x30007:ud // U block width and height (8x4) + mov (1) mudMSGHDR_VCOPY(0,2)<1> 0x30007:ud // V block width and height (8x4) + + + +// FileName: DN_Save_Y_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of Y channel of DN output for reference + + +mov (8) mudDN_Y_OUT(0,0)<1> r0<8;8,1>:ud // message header +mov (2) mudDN_Y_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin +mov (1) mudDN_Y_OUT(0,2)<1> 0x7000F:ud { NoDDChk } // block width and height (16x8) + +//send out data through data port +send (8) null<1>:d mudDN_Y_OUT 0x5 0xA0A8018:ud + + + +// FileName: DN_Save_UV_IMC3_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Save_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + +//Reuse the header from Load component +//Header is modified at the end of load - to be usable for save. + + + mov (8) mudMSGHDR_UCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + mov (8) mudMSGHDR_VCOPY(1)<1> udDNDI_UV_RESP(2)<8;8,1> + send (4) null<1>:d r36 0x5 0x40A8019:ud + send (4) null<1>:d r38 0x5 0x40A801A:ud + + + +// FileName: DN_Upsample_UV_IMC3_16x8.asm +// Author: Tatiya, Rupesh +// Description: Upconvert 420 UV to 422 + + + +// FileName: UVCopy_Upsample_UV_16x8.asm +// Author: Tatiya, Rupesh +// Description: Convert 42X UV to 422 - to be used for IECP. + + + avg.sat (16) uwDNDI_UVCOPY_TEMP(0) ubDNDI_UV_RESP(0,0)<0;8,1> ubDNDI_UV_RESP(0,0)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(4) ubDNDI_UV_RESP(2,0)<0;8,1> ubDNDI_UV_RESP(2,0)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(1) ubDNDI_UV_RESP(0,8)<0;8,1> ubDNDI_UV_RESP(0,8)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(5) ubDNDI_UV_RESP(2,8)<0;8,1> ubDNDI_UV_RESP(2,8)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(2) ubDNDI_UV_RESP(0,16)<0;8,1> ubDNDI_UV_RESP(0,16)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(6) ubDNDI_UV_RESP(2,16)<0;8,1> ubDNDI_UV_RESP(2,16)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(3) ubDNDI_UV_RESP(0,24)<0;8,1> ubDNDI_UV_RESP(0,24)<8;8,1> + avg.sat (16) uwDNDI_UVCOPY_TEMP(7) ubDNDI_UV_RESP(2,24)<0;8,1> ubDNDI_UV_RESP(2,24)<8;8,1> + + mov (16) ubDNDI_RESP(5, 1)<2> ubDNDI_UVCOPY_TEMP(0,0)<32;16,2> { NoDDClr } + mov (16) ubDNDI_RESP(5, 0)<2> ubDNDI_UVCOPY_TEMP(4,0)<32;16,2> { NoDDChk } + mov (16) ubDNDI_RESP(5, 33)<2> ubDNDI_UVCOPY_TEMP(1,0)<32;16,2> { NoDDClr } + mov (16) ubDNDI_RESP(5, 32)<2> ubDNDI_UVCOPY_TEMP(5,0)<32;16,2> { NoDDChk } + mov (16) ubDNDI_RESP(5, 65)<2> ubDNDI_UVCOPY_TEMP(2,0)<32;16,2> { NoDDClr } + mov (16) ubDNDI_RESP(5, 64)<2> ubDNDI_UVCOPY_TEMP(6,0)<32;16,2> { NoDDChk } + mov (16) ubDNDI_RESP(5, 97)<2> ubDNDI_UVCOPY_TEMP(3,0)<32;16,2> { NoDDClr } + mov (16) ubDNDI_RESP(5, 96)<2> ubDNDI_UVCOPY_TEMP(7,0)<32;16,2> { NoDDChk } + + + +// FileName: DN_Save_422CP_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of DN output to the color pipe in 4-2-2 format + + +.declare mubMSGHDR_DN_OUT_2 Base=r36.0 ElementSize=1 Type=ub + + +mov (8) mudMSGHDR_DN_OUT(0)<1> r0<8;8,1>:ud // message header +shl (1) mdMSGHDR_DN_OUT(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin * 2 (422 output) +mov (1) mdMSGHDR_DN_OUT(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_DN_OUT(0,2)<1> 0x7000F:ud { NoDDClr, NoDDChk } // block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) mudMSGHDR_DN_OUT(0,3)<1> r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +// First 8 x 8 Block + mov (8) mubMSGHDR_DN_OUT(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3)<2> ubDNDI_RESP(0,64)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(3,16)<2> ubDNDI_RESP(0,80)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4)<2> ubDNDI_RESP(0,96)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT(4,16)<2> ubDNDI_RESP(0,112)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,1)<4> ubDNDI_RESP(5,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,17)<4> ubDNDI_RESP(5,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(1,3)<4> ubDNDI_RESP(5,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(1,19)<4> ubDNDI_RESP(5,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,1)<4> ubDNDI_RESP(5,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,17)<4> ubDNDI_RESP(5,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(2,3)<4> ubDNDI_RESP(5,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(2,19)<4> ubDNDI_RESP(5,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,1)<4> ubDNDI_RESP(5,65)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,17)<4> ubDNDI_RESP(5,81)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(3,3)<4> ubDNDI_RESP(5,64)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(3,19)<4> ubDNDI_RESP(5,80)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,1)<4> ubDNDI_RESP(5,97)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,17)<4> ubDNDI_RESP(5,113)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT(4,3)<4> ubDNDI_RESP(5,96)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT(4,19)<4> ubDNDI_RESP(5,112)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Second 8 x 8 Block +mov (8) r36.0<1>:ud r31.0<8;8,1>:ud +add (1) r36.0<1>:ud r36.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DN_OUT_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3)<2> ubDNDI_RESP(0,72)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(3,16)<2> ubDNDI_RESP(0,88)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4)<2> ubDNDI_RESP(0,104)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DN_OUT_2(4,16)<2> ubDNDI_RESP(0,120)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,1)<4> ubDNDI_RESP(5,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,17)<4> ubDNDI_RESP(5,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(1,3)<4> ubDNDI_RESP(5,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(1,19)<4> ubDNDI_RESP(5,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,1)<4> ubDNDI_RESP(5,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,17)<4> ubDNDI_RESP(5,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(2,3)<4> ubDNDI_RESP(5,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(2,19)<4> ubDNDI_RESP(5,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,1)<4> ubDNDI_RESP(5,73)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,17)<4> ubDNDI_RESP(5,89)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(3,3)<4> ubDNDI_RESP(5,72)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(3,19)<4> ubDNDI_RESP(5,88)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,1)<4> ubDNDI_RESP(5,105)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,17)<4> ubDNDI_RESP(5,121)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DN_OUT_2(4,3)<4> ubDNDI_RESP(5,104)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DN_OUT_2(4,19)<4> ubDNDI_RESP(5,120)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +//send out data through data port +send (8) null<1>:d r31.0 0x5 0xA0A801B:ud +send (8) null<1>:d r36.0 0x5 0xA0A801B:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_PL3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_PL3.g4a new file mode 100644 index 000000000..1d976146d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL3_DN_PL3.g4a @@ -0,0 +1,447 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + +.kernel PL3_DN_PL3 +.code + + + +// FileName: DN_PL_Core.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) for planar format + + + +// FileName: DN.asm +// Author: Vivek Kumar +// Description: Tasks for DN only case (16x8 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x45E8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(4,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DN_Hist_Save.asm +// Author: Vivek Kumar +// Description: Saves DN history data to statistics surface + +// Write denoise history to memory +mov (8) r27<1>:ud r0.0<8;8,1>:ud // message header + + + mov (2) mudMSGHDR_HIST(1)<1> udDNDI_RESP(4,0)<2;2,1> // Move denoise history to MRF (4x2) + + +shr (2) r27.0<1>:ud r9.0<2;2,1>:w 2:w // X,Y origin / 4 +add (1) r27.0<1>:ud r27.0<0;1,0>:ud r1.12<0;1,0>:uw { NoDDClr } // Add pitch to X origin +mov (1) r27.2<1>:ud 0x10003:ud { NoDDChk } // block width and height + +mov (8) mudMSGHDR_HIST(0)<1> r27.0<8;8,1>:ud +send (8) null<1>:d r22 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x50003:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | X | X | X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + //| X | X | + //---------------------------------------------------- + //| X | SVCM | X | + //---------------------------------------------------- + //| SHCM | STAD | X | + //---------------------------------------------------- + mov (1) mubMSGHDR_ENC_STATS(1,0)<1> ubDNDI_RESP(4,8)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,3)<1> uwDNDI_RESP(4,11)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,4)<1> uwDNDI_RESP(4,12)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (1) muwMSGHDR_ENC_STATS(1,9)<1> uwDNDI_RESP(4,8)<0;1,0> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) muwMSGHDR_ENC_STATS(1,10)<1> uwDNDI_RESP(4,9)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DN_Load_UV_IMC3_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Load_16x8.asm +// Author: Vivek Kumar +// Description: Read UV for 16x8 block through DATAPORT + +//CHANGE : Read extra UV data to convert to 422. -rT +//we are reading extra data in ALL cases irrespective of whether upsampling is reqd or not later on, to keep things simple. + + + add (2) r27.0<1>:d r9.0<2;2,1>:w r4.4<2;2,1>:w // Source Y Block origin + asr (2) r27.0<1>:d r27.0<2;2,1>:d 1:w { NoDDClr } // U/V block origin should be half of Y's + mov (1) r27.2<1>:ud 0x40007:ud { NoDDChk } // U/V block width and height (8x5) + mov (8) r36<1>:ud r27.0<8;8,1>:ud + mov (8) r38<1>:ud r27.0<8;8,1>:ud + send (8) udDNDI_UV_RESP(0)<1> r36 0x4 0x2290001:ud + send (8) udDNDI_UV_RESP(2)<1> r38 0x4 0x2290002:ud + + //Update Header for Save + mov (1) mudMSGHDR_UCOPY(0,2)<1> 0x30007:ud // U block width and height (8x4) + mov (1) mudMSGHDR_VCOPY(0,2)<1> 0x30007:ud // V block width and height (8x4) + + + +// FileName: DN_Save_Y_16x8.asm +// Author: Vivek Kumar +// Description: Save one 16x8 blocks of Y channel of DN output for reference + + +mov (8) mudDN_Y_OUT(0,0)<1> r0<8;8,1>:ud // message header +mov (2) mudDN_Y_OUT(0,0)<1> r9.0<2;2,1>:w { NoDDClr } // X origin +mov (1) mudDN_Y_OUT(0,2)<1> 0x7000F:ud { NoDDChk } // block width and height (16x8) + +//send out data through data port +send (8) null<1>:d mudDN_Y_OUT 0x5 0xA0A8018:ud + + + +// FileName: DN_Save_UV_IMC3_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + + +// FileName: UVCopy_Save_16x8.asm +// Author: Vivek Kumar +// Description: Save UV for 16x8 block through DATAPORT + + +//Reuse the header from Load component +//Header is modified at the end of load - to be usable for save. + + + mov (8) mudMSGHDR_UCOPY(1)<1> udDNDI_UV_RESP(0)<8;8,1> + mov (8) mudMSGHDR_VCOPY(1)<1> udDNDI_UV_RESP(2)<8;8,1> + send (4) null<1>:d r36 0x5 0x40A8019:ud + send (4) null<1>:d r38 0x5 0x40A801A:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_422CP.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_422CP.g4a new file mode 100644 index 000000000..45432878c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_422CP.g4a @@ -0,0 +1,483 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 87 // Total instruction count +// 1 // Total kernel count + +.kernel PL_DI_422CP +.code + + + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DI_Save_422CP_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in 422 format to Color Pipe (IECP) + + +.declare mubMSGHDR_DI_OUT1_1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT1_2 Base=r21.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_1 Base=r24.0 ElementSize=1 Type=ub + + +.declare mubMSGHDR_DI_OUT2_2 Base=r27.0 ElementSize=1 Type=ub + + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:ud r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:ud r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3000F:ud { NoDDClr, NoDDChk } // Block width and height (16x8) + +//M0.3 - 0 - CP Enable, 1 - Area of Interest, 3:2 Message Format(TBD), 4:3 - Ignored, 31:5 CP state pointer +//Compose area-of-interest bit + color pipe state pointer +or (1) r27.3<1>:ud r2.4<0;1,0>:ud r9.26<0;1,0>:b { NoDDChk } + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r24.0<1>:ud r27<8;8,1>:ud + + +// Pack 2nd field Y; First 8x4 block + mov (8) mubMSGHDR_DI_OUT1_1(1)<2> ubDNDI_RESP(0,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(1,16)<2> ubDNDI_RESP(0,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2)<2> ubDNDI_RESP(0,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_1(2,16)<2> ubDNDI_RESP(0,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; First 8x4 block + mov (4) mubMSGHDR_DI_OUT1_1(1,1)<4> ubDNDI_RESP(2,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,17)<4> ubDNDI_RESP(2,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(1,3)<4> ubDNDI_RESP(2,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(1,19)<4> ubDNDI_RESP(2,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,1)<4> ubDNDI_RESP(2,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,17)<4> ubDNDI_RESP(2,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_1(2,3)<4> ubDNDI_RESP(2,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_1(2,19)<4> ubDNDI_RESP(2,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + + +// Pack 2nd field Y; Second 8x4 block +mov (8) r21.0<1>:ud r18.0<8;8,1>:ud +add (1) r21.0<1>:ud r21.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT1_2(1)<2> ubDNDI_RESP(0,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(1,16)<2> ubDNDI_RESP(0,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2)<2> ubDNDI_RESP(0,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT1_2(2,16)<2> ubDNDI_RESP(0,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 2nd field U, V; Second 8x4 block + mov (4) mubMSGHDR_DI_OUT1_2(1,1)<4> ubDNDI_RESP(2,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,17)<4> ubDNDI_RESP(2,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(1,3)<4> ubDNDI_RESP(2,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(1,19)<4> ubDNDI_RESP(2,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,1)<4> ubDNDI_RESP(2,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,17)<4> ubDNDI_RESP(2,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT1_2(2,3)<4> ubDNDI_RESP(2,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT1_2(2,19)<4> ubDNDI_RESP(2,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r18.0 0x5 0x60A801B:ud +send (8) null<1>:d r21.0 0x5 0x60A801B:ud + +// Pack 1st field Y; 1st 8x4 block + mov (8) mubMSGHDR_DI_OUT2_1(1)<2> ubDNDI_RESP(4,0)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(1,16)<2> ubDNDI_RESP(4,16)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2)<2> ubDNDI_RESP(4,32)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_1(2,16)<2> ubDNDI_RESP(4,48)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U,V; 1st 8x4 block + mov (4) mubMSGHDR_DI_OUT2_1(1,1)<4> ubDNDI_RESP(6,1)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,17)<4> ubDNDI_RESP(6,17)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(1,3)<4> ubDNDI_RESP(6,0)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(1,19)<4> ubDNDI_RESP(6,16)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,1)<4> ubDNDI_RESP(6,33)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,17)<4> ubDNDI_RESP(6,49)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_1(2,3)<4> ubDNDI_RESP(6,32)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_1(2,19)<4> ubDNDI_RESP(6,48)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +// Pack 1st field Y; 2nd 8x4 block +mov (8) r27.0<1>:ud r24.0<8;8,1>:ud +add (1) r27.0<1>:ud r27.0<0;1,0>:w 0x10:w + + mov (8) mubMSGHDR_DI_OUT2_2(1)<2> ubDNDI_RESP(4,8)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(1,16)<2> ubDNDI_RESP(4,24)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2)<2> ubDNDI_RESP(4,40)<8;8,1> { NoDDClr } // copy line of Y directly to memory as optimization + mov (8) mubMSGHDR_DI_OUT2_2(2,16)<2> ubDNDI_RESP(4,56)<8;8,1> { NoDDClr, NoDDChk } // copy line of Y directly to memory as optimization + +// Pack 1st field U, V; 2nd 8x4 block + mov (4) mubMSGHDR_DI_OUT2_2(1,1)<4> ubDNDI_RESP(6,9)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,17)<4> ubDNDI_RESP(6,25)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(1,3)<4> ubDNDI_RESP(6,8)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(1,19)<4> ubDNDI_RESP(6,24)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,1)<4> ubDNDI_RESP(6,41)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,17)<4> ubDNDI_RESP(6,57)<8;4,2> { NoDDClr, NoDDChk } // copy line of U directly to memory as optimization + + mov (4) mubMSGHDR_DI_OUT2_2(2,3)<4> ubDNDI_RESP(6,40)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + mov (4) mubMSGHDR_DI_OUT2_2(2,19)<4> ubDNDI_RESP(6,56)<8;4,2> { NoDDChk } // copy line of V directly to memory as optimization + +send (8) null<1>:d r24.0 0x5 0x60A801E:ud +send (8) null<1>:d r27.0 0x5 0x60A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_PA.g4a new file mode 100644 index 000000000..12cb9b57e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/PL_DI_PA.g4a @@ -0,0 +1,421 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 57 // Total instruction count +// 1 // Total kernel count + +.kernel PL_DI_PA +.code + + + +// FileName: DI.asm +// Author: Vivek Kumar +// Description: Tasks for DI only case (16x4 block) + + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: DNDI.inc +// Author: Vivek Kumar +// Description: Include file for DN, DI and DNDI +// Inputs: DI_ENABLE, DN_ENABLE, DN_PLANAR, DN_PACKED + + + + +// End of common.inc + + +//Interface: +//Static Parameters: +//r1 + + +//====================== Binding table (Explicit To DNDI)========================================= + + +.declare mudMSGHDR_DNDI Base=r18 ElementSize=4 Type=ud +.declare mdMSGHDR_DNDI Base=r18 ElementSize=4 Type=d +.declare mwMSGHDR_DNDI Base=r18 ElementSize=2 Type=w + + +.declare mudMSGHDR_STMM Base=r20 ElementSize=4 Type=ud + + +.declare mudMSGHDR_HIST Base=r22 ElementSize=4 Type=ud + + +.declare mudMSGHDR_ENC_STATS Base=r24 ElementSize=4 Type=ud +.declare muwMSGHDR_ENC_STATS Base=r24 ElementSize=2 Type=uw +.declare mubMSGHDR_ENC_STATS Base=r24 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=ud +.declare mdMSGHDR_DN_OUT Base=r31.0 ElementSize=4 Type=d +.declare mubMSGHDR_DN_OUT Base=r31.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=ud +.declare mdMSGHDR_UVCOPY Base=r36 ElementSize=4 Type=d +.declare mudMSGHDR_UCOPY Base=r36 ElementSize=4 Type=ud +.declare mudMSGHDR_VCOPY Base=r38 ElementSize=4 Type=ud + + +.declare mudMSGHDR_DI_OUT1 Base=r18.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT1 Base=r18.0 ElementSize=1 Type=ub + + +.declare mudMSGHDR_DI_OUT2 Base=r23.0 ElementSize=4 Type=ud +.declare mubMSGHDR_DI_OUT2 Base=r23.0 ElementSize=1 Type=ub + +//r45 +//Use r45 as message header, so no need to "mov" the data. + +.declare mudDN_Y_OUT Base=r45.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +// Message response (Denoised & DI-ed pixels & statistics); Use buffer 5 +.declare udDNDI_RESP Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare uwDNDI_RESP Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare ubDNDI_RESP Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +// Message response (UV Copy); Use buffer 5 +.declare udDNDI_UV_RESP Base=r58.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare ubDNDI_UV_RESP Base=r58.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Temp GRFs: For 42X to 422 Conversion +.declare uwDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw //8 GRFs +.declare ubDNDI_UVCOPY_TEMP Base=r10.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub //8 GRFs +//--------------------------------------------------------------------------- +// Message descriptors +//--------------------------------------------------------------------------- +// Extended message descriptor + // Message descriptor for sampler read + // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) + // 1 (header present 1) 0 11 (SIMD32/64 mode) + // 1000 (message type) 0000 (DI state index) + // 00000000 (binding table index - set later) + // = 0x040b8000 + + +// Attention: The Message Length is The Number of GRFs with Data Only, without the Header + + +//--------------------------------------------------------------------------- +// VDI Return Data format +//--------------------------------------------------------------------------- +// Defines for DI enabled + + +// Defines for DI disabled + + + +// FileName: DNDI_Command.asm +// Author: Vivek Kumar +// Description: Sends a message to the VDI to process one DN (16x8) or DNDI (16x4) block + +// Prepare the DNDI send command +mov (8) mudMSGHDR_DNDI(0)<1> r0.0<8;8,1>:ud // message header +mov (1) mwMSGHDR_DNDI(1,4)<1> r9.0<0;1,0>:w { NoDDClr } // horizontal origin // Do we need to add offset here? -vK +mov (1) mwMSGHDR_DNDI(1,12)<1> r9.1<0;1,0>:w { NoDDChk } // vertical origin // Can these 2 be combined? - vK + +send (8) udDNDI_RESP(0)<1> r18 0x2 0x4AE8003:ud + +// On Gen6, with VDI walker, use the XY pair returned rather than programmed above +// VDI_RETURNED_XY is ordered XY in case of walker enables and the same as programmed in case of walker disabled +mov (2) r9.0<1>:w uwDNDI_RESP(9,14)<2;2,1> // horizontal/Vertial origin in W.14 and W.15 + + + +// FileName: DI_STMM_Save.asm +// Author: Vivek Kumar +// Description: Saves DI STMM Data to statistics surface in case of DI enabled (for 16x4 block) + +// Write STMM to memory +mov (8) mudMSGHDR_STMM(0)<1> r0.0<8;8,1>:ud // message header +mov (8) mudMSGHDR_STMM(1)<1> udDNDI_RESP(8,0) // Move STMM to MRF + +shr (1) mudMSGHDR_STMM(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } // X origin / 2 +mov (1) mudMSGHDR_STMM(0,1)<1> r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Y origin +mov (1) mudMSGHDR_STMM(0,2)<1> 0x30007:ud { NoDDChk } // block width and height (8x4) + +send (8) null<1>:d r20 0x5 0x40A8021:ud + + + +// FileName: DNDI_Enc_Stats_Save.asm +// Author: Vivek Kumar +// Description: Saves Encoder Statistics data to statistics surface in case of DI enabled (for 16x4 block) + +// Write encoder statistics to memory +//Currently enable this only on Gen6 validation +mov (8) mudMSGHDR_ENC_STATS(1)<1> 0x0:ud // Init payload MRF +mov (8) mudMSGHDR_ENC_STATS(0)<1> r0.0<8;8,1>:ud // message header + +shr (1) mudMSGHDR_ENC_STATS(0,0)<1> r9.0<0;1,0>:w 1:w { NoDDClr } //enable the flag after testing on si { NoDDClr } // X origin / 2 +mul (1) acc0.1<1>:ud r9.1<0;1,0>:w 3:w // Y origin * 3 +shr (1) mudMSGHDR_ENC_STATS(0,1)<1> acc0.1<0;1,0>:ud 2:w { NoDDClr, NoDDChk } //enable the flag after testing on si { NoDDClr, NoDDChk } // Y origin * 3/4 +mov (1) mudMSGHDR_ENC_STATS(0,2)<1> 0x20007:ud { NoDDChk } //enable the flag after testing on si { NoDDChk } // block width and height (8x3) +add (2) mudMSGHDR_ENC_STATS(0,0)<1> mudMSGHDR_ENC_STATS(0,0)<2;2,1> r1.12<2;2,1>:uw // Add pitch to X,Y origin + + + //Data block for Encoder Statistics + //---------------------------------------------------- + //| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bytes + //---------------------------------------------------- + //| BNE | MCNT | FCNT | TCNT | X | X | X | X | + //---------------------------------------------------- + //| DcTpT | SVCM | DcBpT | DcTpB | + //---------------------------------------------------- + //| SHCM | STAD | DcTcB | DcBpB | + //---------------------------------------------------- + mov (1) mudMSGHDR_ENC_STATS(1,0)<1> udDNDI_RESP(9,1)<0;1,0> { NoDDClr } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,3)<2> udDNDI_RESP(9,3)<2;2,1> { NoDDClr, NoDDChk } // Move encoder statistics to MRF + mov (2) mudMSGHDR_ENC_STATS(1,2)<2> udDNDI_RESP(9,5)<2;2,1> { NoDDChk } // Move encoder statistics to MRF + + +send (8) null<1>:d r24 0x5 0x40A8021:ud + + + +// FileName: DI_Save_PA_16x4.asm +// Author: Vivek Kumar +// Description: Save two 16x4 blocks of DI output in Packed format + + +add (4) a0.4<1>:uw r2.28<4;4,1>:ub 608:w // Initial Y,U,V offset in YUV422 block; it starts at m20 + +mov (8) r27.0<1>:ud r0.0<8;8,1>:ud +shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be doubled +mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin +mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x8) + +//prepare the message headers +mov (8) r18.0<1>:ud r27<8;8,1>:ud +mov (8) r23.0<1>:ud r27<8;8,1>:ud + +// Pack 2nd field Y + mov (16) r[a0.4, 0]<2> ubDNDI_RESP(0,0) { NoDDClr } + mov (16) r[a0.4, 32]<2> ubDNDI_RESP(0,16) { NoDDClr } + mov (16) r[a0.4, 64]<2> ubDNDI_RESP(0,32) { NoDDClr } + mov (16) r[a0.4, 96]<2> ubDNDI_RESP(0,48) { NoDDClr } +// Pack 2nd field U + mov (8) r[a0.5, 0]<4> ubDNDI_RESP(2,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 32]<4> ubDNDI_RESP(2,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 64]<4> ubDNDI_RESP(2,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 96]<4> ubDNDI_RESP(2,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 2nd field V + mov (8) r[a0.6, 0]<4> ubDNDI_RESP(2,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 32]<4> ubDNDI_RESP(2,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 64]<4> ubDNDI_RESP(2,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 96]<4> ubDNDI_RESP(2,48)<16;8,2> { NoDDChk } //Vpixels + +// Pack 1st field Y + mov (16) r[a0.4, 160]<2> ubDNDI_RESP(4,0) { NoDDClr } + mov (16) r[a0.4, 192]<2> ubDNDI_RESP(4,16) { NoDDClr } + mov (16) r[a0.4, 224]<2> ubDNDI_RESP(4,32) { NoDDClr } + mov (16) r[a0.4, 256]<2> ubDNDI_RESP(4,48) { NoDDClr } +// Pack 1st field U + mov (8) r[a0.5, 160]<4> ubDNDI_RESP(6,1)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 192]<4> ubDNDI_RESP(6,17)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 224]<4> ubDNDI_RESP(6,33)<16;8,2> { NoDDClr, NoDDChk } //U pixels + mov (8) r[a0.5, 256]<4> ubDNDI_RESP(6,49)<16;8,2> { NoDDClr, NoDDChk } //U pixels +// Pack 1st field V + mov (8) r[a0.6, 160]<4> ubDNDI_RESP(6,0)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 192]<4> ubDNDI_RESP(6,16)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 224]<4> ubDNDI_RESP(6,32)<16;8,2> { NoDDChk } //Vpixels + mov (8) r[a0.6, 256]<4> ubDNDI_RESP(6,48)<16;8,2> { NoDDChk } //Vpixels + +//save the previous frame +send (8) null<1>:d r18.0 0x5 0xA0A801B:ud + +//save the current frame +send (8) null<1>:d r23.0 0x5 0xA0A801E:ud + + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 + + +.end_code +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/RGB_to_YUV.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/RGB_to_YUV.g4a new file mode 100644 index 000000000..09602c593 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/RGB_to_YUV.g4a @@ -0,0 +1,932 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: YUV_to_RGB.asm +// +// Convert YUV to RGB, handle it by 16x4 block +// + + +// Description: Includes all definitions explicit to Fast Composite. + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare bBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +//Pointer to mask reg + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + +//Unnecessary to use the MSGPayLoad, So it is temporiarily used for conversion of YUV->RGB + +.declare fBUFFER_R Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_G Base=r30.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_B Base=r32.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare fBUFFER_Y Base=r36.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_U Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_V Base=r40.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare wTempY Base=r42.0 ElementSize=2 Type=w +.declare wTempU Base=r44.0 ElementSize=2 Type=w +.declare wTempV Base=r46.0 ElementSize=2 Type=w + +.declare ubTempY Base=r42.0 ElementSize=1 Type=ub +.declare ubTempU Base=r44.0 ElementSize=1 Type=ub +.declare ubTempV Base=r46.0 ElementSize=1 Type=ub + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + // ITU-R conversion, Now we are using ITU-R conversion + // Y = 0.299R + 0.587G + 0.114B + // U = -0.169R - 0.331G + 0.499B + 128 + // V = 0.499R - 0.418G - 0.0813B+ 128 + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + //It always uses the YUVA layout. +//for BUFFER_0 + mov (4) a0.0<1>:uw r22.0<4;4,1>:uw + mov (4) a0.4<1>:uw r22.0<4;4,1>:uw + // YUV uses the a0.5,a0.6 and a0.4 as the indirect-register + // Y = a0.5, U=a0.6, V=a0.4 + // if channel swap? + // This means that it should be BGRX(B is the LSB) or RGBX + // 1 means that it is BGRX. + and.nz.f0.0 null<1>:w r2.0<0;1,0>:uw 0x01:w + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.1:uw + (f0.0) mov (1) a0.1:uw uwTemp0<0;1,0> + +//the first line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_1 + + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_2 + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + +//the second line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_3 + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_NV12.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_NV12.g4a new file mode 100644 index 000000000..d302ed5df --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_NV12.g4a @@ -0,0 +1,643 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 131 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_NV12.asm +// +// Save NV12 420 frame data block of size 16x16 +// +// To save 16x16 block (16x16 bytes of Y and 16x8 bytes of interleaved UV), we need 2 send instructions with of size 16x16 and 16x8 each. +// --------------- +// | 16x16 | +// | YUYV | +// --------------- +// | 16x8 UV | +// --------------- + +//----------------------------------------------------------------- +//The layout of data is as follows: +//mMSGHDR0 : Y data header (16x16) +//mubMSGPAYLOAD0 : Y data payload (8 GRFs) +//mMSGHDR1 : U data header (16x8) +//mubMSGPAYLOAD1 : U data payload (4 GRFs) +//------------------------------------------------------------------ + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4:uw r22.0<4;4,1>:w 512:uw + + //Set up header for Y,U and V data + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + + mov (2) r28.0<1>:d r9.0<2;2,1>:w { NoDDClr } //ORI Y (LUMA) = ORI + mov (1) r37.0<1>:d r9.0<0;1,0>:w { NoDDClr } //H ORI (CHROMA) = H ORI + shr (1) r37.1<1>:d r9.1<0;1,0>:w 1:w { NoDDClr, NoDDChk } //V ORI (CHROMA) = V ORI/2 + + mov (1) r28.2<1>:ud 0xF000F:ud { NoDDChk } // Y Block width and height (16x16) + mov (1) r37.2<1>:ud 0x7000F:ud { NoDDChk } // UV Block width and height(16x8) + +// Unscramble, and pack data directly to MRFs + +// Data 16x16 block is divided as - +// --------- +// | 0 | +// --------- +// | 1 | +// --------- +// | 2 | +// --------- +// | 3 | +// --------- +// All sub-blocks are of size 16x4 +// 0: ubBUFFER_0 +// 1: ubBUFFER_1, ubBUFFER_0+16 +// 2: ubBUFFER_2 +// 3: ubBUFFER_3, ubBUFFER_2+16 + + //Y Rounding 16x4 top part + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(0,0)<2> r[a0.2,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.2,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.2,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.2,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.2,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.2,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(4,0)<2> r[a0.0,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.0,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.0,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.0,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.0,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.0,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, 16x4 bottom part + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(0,0)<2> r[a0.6,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.6,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.6,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.6,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.6,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.6,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(4,0)<2> r[a0.4,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.4,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.4,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.4,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.4,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.4,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.4:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + //Y Rounding 16x4 top part + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(0,0)<2> r[a0.2,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.2,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.2,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.2,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.2,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.2,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(4,0)<2> r[a0.0,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.0,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.0,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.0,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.0,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.0,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, 16x4 bottom part + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(0,0)<2> r[a0.6,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.6,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.6,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.6,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.6,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.6,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(4,0)<2> r[a0.4,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.4,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.4,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.4,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.4,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.4,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.4:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + // restore pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4 registers + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4:uw r22.0<4;4,1>:w 512:uw + +//Buffer 0 +//Move Y to msg payload + mov (16) mubMSGPAYLOAD0(0,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(0,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(1,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(1,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + +//Move U to msg payload + mov (8) mubMSGPAYLOAD1(0,0)<2> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(0,16)<2> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Move V to msg payload + mov (8) mubMSGPAYLOAD1(0,1)<2> r[a0.0, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0,17)<2> r[a0.0, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + +//Buffer 1 + mov (16) mubMSGPAYLOAD0(2,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(2,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(3,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(3,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,0)<2> r[a0.6, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(1,16)<2> r[a0.6, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,1)<2> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1,17)<2> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.4:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + +//Buffer 2 + mov (16) mubMSGPAYLOAD0(4,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(4,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(5,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(5,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(2,0)<2> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(2,16)<2> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(2,1)<2> r[a0.0, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(2,17)<2> r[a0.0, 65]<32;8,4>:ub { NoDDChk } + +//Buffer 3 + mov (16) mubMSGPAYLOAD0(6,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(6,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(7,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(7,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(3,0)<2> r[a0.6, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(3,16)<2> r[a0.6, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(3,1)<2> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(3,17)<2> r[a0.4, 65]<32;8,4>:ub { NoDDChk } +//=========================================================================== + +send (1) null<1>:d r28 0x5 0x120A8018:ud +send (1) null<1>:d r37 0x5 0xA0A8019:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PA.g4a new file mode 100644 index 000000000..d1f23eb60 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PA.g4a @@ -0,0 +1,647 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 174 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_PA.asm +// +// Save PA 422 frame data block of size 16x16 +// +// To save 16x16 block (32x16 bytes of YUYV) we need 2 send instructions with of size 16x16 each. +// ------------------------------- +// | 16x16 | 16x16 | +// | YUYV | YUYV | +// ------------------------------- +// these 2 sends are replaced by 8 32x2 sends to improve performance + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + //wBUFF_CHNL_PTR points to buffer 0. + //Add appropriate offsets to get pointers for all buffers (1,2,3). + //Offset is zero for buffer 0. + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + + //Set DEST pointers according to output packing i.e. YUYV, YVYU, UYVY, VYUY + add (4) a0.4<1>:w r2.28<4;4,1>:ub 928:uw + + shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be 2 times + mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) r27.2<1>:ud 0x1001F:ud { NoDDChk } // Block width and height (32x2) + +// Rounding + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 512:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 1536:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 2048:uw + // restore pointer + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + add (1) r37.1<1>:d r27.1<0;1,0>:d 2:d // Point to 2nd part + + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + + // restore pointer + add (4) a0.0:uw r22.0<4;4,1>:w 512:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 4:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 6:d // Point to 2nd part + + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + + // restore pointer + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 8:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 10:d // Point to 2nd part + + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + + // restore pointer + add (4) a0.0:uw r22.0<4;4,1>:w 1536:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 12:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 14:d // Point to 2nd part + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PL3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PL3.g4a new file mode 100644 index 000000000..fd0905f6e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_PL3.g4a @@ -0,0 +1,586 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 84 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_PL3.asm +// +// Save PL3 420 frame data block of size 16x16 +// +// To save 16x16 block (16x16 byte of Y and 8x8 byte of U and V each) we need 3 send instructions with one of size 16x16 and two of size 8x8. +// ----------------- +// | 16x16 Y | +// | | +// ----------------- +// | 8x8 U | +// --------- +// | 8x8 V | +// --------- + +//----------------------------------------------------------------- +//The layout of data is as follows: +//mMSGHDR0 : Y data header (16x16) +//mubMSGPAYLOAD0 : Y data payload (8 GRFs) +//mMSGHDR1 : U data header (8x8) +//mubMSGPAYLOAD1 : U data payload (2 GRFs) +//mMSGHDR2 : V data header (8x8) +//mubMSGPAYLOAD2 : V data payload (2 GRFs) +//------------------------------------------------------------------ + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4:uw r22.0<4;4,1>:w 512:uw + + //Set up header for Y,U and V data + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + + mov (2) r28.0<1>:d r9.0<2;2,1>:w { NoDDClr } //ORI Y (LUMA) = ORI + shr (2) r37.0<1>:d r9.0<2;2,1>:w 1:w { NoDDClr } //H/V ORI U = H/V ORI/2 + shr (2) r46.0<1>:d r9.0<2;2,1>:w 1:w { NoDDClr } //H/V ORI V = H/V ORI/2 + + mov (1) r28.2<1>:ud 0xF000F:ud { NoDDChk } // Y Block width and height (16x16) + mov (1)r37.2<1>:ud 0x70007:ud { NoDDChk } // U Block width and height (8x8) + mov (1)r46.2<1>:ud 0x70007:ud { NoDDChk } // V Block width and height (8x8) + +// Unscramble, and pack data directly to MRFs + +// Data 16x16 block is divided as - +// --------- +// | 0 | +// --------- +// | 1 | +// --------- +// | 2 | +// --------- +// | 3 | +// --------- +// All sub-blocks are of size 16x4 +// 0: ubBUFFER_0 +// 1: ubBUFFER_1, ubBUFFER_0+16 +// 2: ubBUFFER_2 +// 3: ubBUFFER_3, ubBUFFER_2+16 + + //Y Rounding, first + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.2,0]<2>:uw r[a0.2,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.2,64]<2>:uw r[a0.2,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.0,0]<2>:uw r[a0.0,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.0,64]<2>:uw r[a0.0,64]<16;8,2>:uw 0x0080:uw + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, second + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.6,0]<2>:uw r[a0.6,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.6,64]<2>:uw r[a0.6,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.4,0]<2>:uw r[a0.4,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.4,64]<2>:uw r[a0.4,64]<16;8,2>:uw 0x0080:uw + + add (4) a0.4:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + + //Y Rounding, third + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.2,0]<2>:uw r[a0.2,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.2,64]<2>:uw r[a0.2,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.0,0]<2>:uw r[a0.0,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.0,64]<2>:uw r[a0.0,64]<16;8,2>:uw 0x0080:uw + + + //Y Rounding, fourth + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.6,0]<2>:uw r[a0.6,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.6,64]<2>:uw r[a0.6,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.4,0]<2>:uw r[a0.4,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.4,64]<2>:uw r[a0.4,64]<16;8,2>:uw 0x0080:uw + + // restore the TOP and BOT pointers + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4:uw r22.0<4;4,1>:w 512:uw + +//Buffer 0 +//Move Y to msg payload + mov (16) mubMSGPAYLOAD0(0,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(0,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(1,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(1,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + +//Move U to msg payload + mov (8) mubMSGPAYLOAD1(0,0)<1> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(0,8)<1> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Move V to msg payload + mov (8) mubMSGPAYLOAD2(0,0)<1> r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD2(0,8)<1> r[a0.0, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + +//Buffer 1 + mov (16) mubMSGPAYLOAD0(2,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(2,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(3,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(3,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(0,16)<1> r[a0.6, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0,24)<1> r[a0.6, 65]<32;8,4>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(0,16)<1> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0,24)<1> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.4:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + +//Buffer 2 + mov (16) mubMSGPAYLOAD0(4,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(4,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(5,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(5,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,0)<1> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(1,8)<1> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD2(1,0)<1> r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD2(1,8)<1> r[a0.0, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Buffer 3 + mov (16) mubMSGPAYLOAD0(6,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(6,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(7,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(7,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,16)<1> r[a0.6, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1,24)<1> r[a0.6, 65]<32;8,4>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(1,16)<1> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1,24)<1> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + +//=========================================================================== + +send (1) null<1>:d r28 0x5 0x120A8018:ud +send (1) null<1>:d r37 0x5 0x60A8019:ud +send (1) null<1>:d r46 0x5 0x60A801A:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGB.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGB.g4a new file mode 100644 index 000000000..7aaa4469d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGB.g4a @@ -0,0 +1,690 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 198 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_RGB.asm +// +// Save packed ARGB 444 frame data block of size 16x16 +// +// To save 16x16 block (64x16 byte layout for ARGB8888) we need 4 send instructions with 16x16 in each +// ----------------- +// | 0 | 1 | 2 | 3 | +// ----------------- +// the 4 16x16 block send has been replaced by 16 32x2 sends to get better performance + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + +// At the save module we have all 8 address sub-registers available. +// So we will use PING-PONG type of scheme to save the data using +// pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help +// reduce dependency. - rT + +// channel switching based on bit 0 of uWRGB_BGR_CH_SWITCH + + // if channel swap? + and.nz.f0.0 null<1>:w r2.3<0;1,0>:uw 0x01:w + +//wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. +//Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). +//Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.2:uw + (f0.0) mov (1) a0.2:uw uwTemp0<0;1,0> + + shl (1) r27.0<1>:d r9.0<0;1,0>:w 2:w { NoDDClr } // H. block origin need to be quadrupled + mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) r27.2<1>:ud 0x1001F:ud { NoDDChk } // Block width and height (32x2) + + add (4) a0.4:uw a0.0<4;4,1>:w r22.8<0;2,1>:w + + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + mov (8) r55<1>:ud r27<8;8,1>:ud + + mov (8) r31<1>:ud r27<8;8,1>:ud + mov (8) r40<1>:ud r27<8;8,1>:ud + mov (8) r49<1>:ud r27<8;8,1>:ud + mov (8) r58<1>:ud r27<8;8,1>:ud + + +//for BUFFER 0 + add (1) r37.1<1>:d r27.1<0;1,0>:d 2:d + add (1) r46.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r55.1<1>:d r27.1<0;1,0>:d 2:d + +// for BUFFER 1 + add (1) r31.1<1>:d r27.1<0;1,0>:d 4:d + add (1) r40.1<1>:d r27.1<0;1,0>:d 6:d + add (1) r49.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r49.1<1>:d r27.1<0;1,0>:d 4:d + add (1) r58.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r58.1<1>:d r27.1<0;1,0>:d 6:d + // write Buf_0 to 1st quarter of four horizontal output blocks + +// Please note the scattered order of NODDCLR, NODDCHK flags. Since the sub-registers +// of destination reg are not updated at one place and hence even flags are scattered. -rT + + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.2, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.0, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.2, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.0, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.6, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.5, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.4, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.6, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.5, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.4, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.2, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.0, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.2, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.0, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.6, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.5, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.4, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.6, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.5, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.4, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub { NoDDChk } + + // write Buf_1 to 2nd quarter of four horizontal output blocks + add (4) a0.0:uw r22.0<4;4,1>:w 512:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.2:uw + (f0.0) mov (1) a0.2:uw uwTemp0<0;1,0> + + add (4) a0.4:uw a0.0<4;4,1>:w r22.8<0;2,1>:w + + mov (8) mubMSGPAYLOAD4(0, 0)<4> r[a0.2, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD4(0, 1)<4> r[a0.1, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(0, 2)<4> r[a0.0, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD4(1, 0)<4> r[a0.2, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD4(1, 1)<4> r[a0.1, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(1, 2)<4> r[a0.0, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD5(0, 0)<4> r[a0.6, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD5(0, 1)<4> r[a0.5, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(0, 2)<4> r[a0.4, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD5(1, 0)<4> r[a0.6, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD5(1, 1)<4> r[a0.5, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(1, 2)<4> r[a0.4, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD6(0, 0)<4> r[a0.2, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD6(0, 1)<4> r[a0.1, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(0, 2)<4> r[a0.0, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD6(1, 0)<4> r[a0.2, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD6(1, 1)<4> r[a0.1, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(1, 2)<4> r[a0.0, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD7(0, 0)<4> r[a0.6, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD7(0, 1)<4> r[a0.5, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(0, 2)<4> r[a0.4, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD7(1, 0)<4> r[a0.6, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD7(1, 1)<4> r[a0.5, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(1, 2)<4> r[a0.4, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(1, 3)<4> r2.31:ub { NoDDChk } + + // send buffer 0 and buffer 1 + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + send (1) null<1>:d r46 0x5 0x60A8018:ud + send (1) null<1>:d r55 0x5 0x60A8018:ud + + send (1) null<1>:d r31 0x5 0x60A8018:ud + send (1) null<1>:d r40 0x5 0x60A8018:ud + send (1) null<1>:d r49 0x5 0x60A8018:ud + send (1) null<1>:d r58 0x5 0x60A8018:ud + +//========== +//prepare headers +//for BUFFER 2 + add (1) r28.1<1>:d r27.1<0;1,0>:d 8:d + add (1) r37.1<1>:d r27.1<0;1,0>:d 10:d + add (1) r46.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r46.1<1>:d r27.1<0;1,0>:d 8:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r55.1<1>:d r27.1<0;1,0>:d 10:d +// for BUFFER 3 + add (1) r31.1<1>:d r27.1<0;1,0>:d 12:d + add (1) r40.1<1>:d r27.1<0;1,0>:d 14:d + add (1) r49.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r49.1<1>:d r27.1<0;1,0>:d 12:d + add (1) r58.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r58.1<1>:d r27.1<0;1,0>:d 14:d + +//=========== + + // write Buf_2 to 3rd quarter of four horizontal output blocks + add (4) a0.0:uw r22.0<4;4,1>:w 1024:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.2:uw + (f0.0) mov (1) a0.2:uw uwTemp0<0;1,0> + + add (4) a0.4:uw a0.0<4;4,1>:w r22.8<0;2,1>:w + + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.2, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.0, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.2, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.0, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.6, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.5, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.4, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.6, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.5, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.4, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.2, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.0, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.2, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.0, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.6, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.5, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.4, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.6, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.5, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.4, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub { NoDDChk } + + // write Buf_3 to 4th quarter of four horizontal output blocks + add (4) a0.0:uw r22.0<4;4,1>:w 1536:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.2:uw + (f0.0) mov (1) a0.2:uw uwTemp0<0;1,0> + + add (4) a0.4:uw a0.0<4;4,1>:w r22.8<0;2,1>:w + + mov (8) mubMSGPAYLOAD4(0, 0)<4> r[a0.2, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD4(0, 1)<4> r[a0.1, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(0, 2)<4> r[a0.0, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD4(1, 0)<4> r[a0.2, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD4(1, 1)<4> r[a0.1, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(1, 2)<4> r[a0.0, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD4(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD5(0, 0)<4> r[a0.6, 1]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD5(0, 1)<4> r[a0.5, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(0, 2)<4> r[a0.4, 1]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD5(1, 0)<4> r[a0.6, 33]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD5(1, 1)<4> r[a0.5, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(1, 2)<4> r[a0.4, 33]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD5(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD6(0, 0)<4> r[a0.2, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD6(0, 1)<4> r[a0.1, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(0, 2)<4> r[a0.0, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD6(1, 0)<4> r[a0.2, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD6(1, 1)<4> r[a0.1, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(1, 2)<4> r[a0.0, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD6(1, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD7(0, 0)<4> r[a0.6, 17]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD7(0, 1)<4> r[a0.5, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(0, 2)<4> r[a0.4, 17]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(0, 3)<4> r2.31:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD7(1, 0)<4> r[a0.6, 49]<16;8,2> { NoDDClr } + mov (8) mubMSGPAYLOAD7(1, 1)<4> r[a0.5, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(1, 2)<4> r[a0.4, 49]<16;8,2> { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD7(1, 3)<4> r2.31:ub { NoDDChk } + + // send buffer 2 and buffer 3 + send (1) null<1>:d r28 0x5 0x60A8018:ud + send (1) null<1>:d r37 0x5 0x60A8018:ud + send (1) null<1>:d r46 0x5 0x60A8018:ud + send (1) null<1>:d r55 0x5 0x60A8018:ud + + send (1) null<1>:d r31 0x5 0x60A8018:ud + send (1) null<1>:d r40 0x5 0x60A8018:ud + send (1) null<1>:d r49 0x5 0x60A8018:ud + send (1) null<1>:d r58 0x5 0x60A8018:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGBX.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGBX.g4a new file mode 100644 index 000000000..a61fdbdb3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Save_AVS_RGBX.g4a @@ -0,0 +1,661 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_RGBX.asm +// +// Save packed ARGB 444 frame data block of size 16x16 +// +// To save 16x16 block (64x16 byte layout for ARGB8888) we need 4 send instructions with 32x8 in each +// -------- +// | 0 | 1 | +// | 2 | 3 | +// --------- +// the 4 32x8 block send is used + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + +// At the save module we have all 8 address sub-registers available. +// So we will use PING-PONG type of scheme to save the data using +// pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help +// reduce dependency. - rT + + //Internal LAYOUT:(RRGGBBAA) + //Assign buffer channel order for Buffer 0123 in the order RGBA a0.3>A, a0.2>B, a0.1>G, a0.0>R + // R = 0, G= 4, B = 8, A = 12. + mov (4) acc0.0<1>:w 0x62EA:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw + + // if channel swap? + // This means that it should be BGRA(B is the LSB) or RGBA + // the internal format is always RGBA(MSB-A-B-G-R). + and.nz.f0.0 null<1>:w r2.3<0;1,0>:uw 0x01:w + +//wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. +//Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). +//Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0:uw r22.0<4;4,1>:w 0:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0<0;1,0>:uw + (f0.0) mov (1) a0.0<1>:uw a0.2<0;1,0>:uw + (f0.0) mov (1) a0.2<1>:uw uwTemp0<0;1,0> + + shl (1) r27.0<1>:d r9.0<0;1,0>:w 2:w { NoDDClr } // H. block origin need to be quadrupled + mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x4) + + mov (4) a0.4<1>:uw a0.0<4;4,1>:uw + + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + mov (8) r55<1>:ud r27<8;8,1>:ud + + mov (8) r31<1>:ud r27<8;8,1>:ud + mov (8) r40<1>:ud r27<8;8,1>:ud + mov (8) r49<1>:ud r27<8;8,1>:ud + mov (8) r58<1>:ud r27<8;8,1>:ud + +//Buffer 0/1 are written by using 4 32x4. + + add (1) r37.0<1>:d r27.0<0;1,0>:d 32:d + + add (1) r46.1<1>:d r27.1<0;1,0>:d 4:d + + add (1) r55.1<1>:d r27.1<0;1,0>:d 4:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + + // write Buf_0 to 1st quarter of four horizontal output blocks + +// Please note the scattered order of NODDCLR, NODDCHK flags. Since the sub-registers +// of destination reg are not updated at one place and hence even flags are scattered. -rT + +/* for block 0 the left part of buffer 0 and 1 */ + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 3)<4> r2.31:ub + +/* For Buffer 0 */ + send (16) null<1>:d r28 0x5 0x0A0A8018:ud + send (16) null<1>:d r37 0x5 0x0A0A8018:ud + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 512:uw + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 3)<4> r2.31:ub + // send Buffer 1 + send (16) null<1>:d r46 0x5 0x0A0A8018:ud + send (16) null<1>:d r55 0x5 0x0A0A8018:ud + + +/* for Buffer 2/3 */ + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + mov (8) r55<1>:ud r27<8;8,1>:ud + + add (1) r28.1<1>:d r27.1<0;1,0>:d 8:d + + add (1) r37.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r37.1<1>:d r27.1<0;1,0>:d 8:d + + add (1) r46.1<1>:d r27.1<0;1,0>:d 12:d + + add (1) r55.1<1>:d r27.1<0;1,0>:d 12:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 1024:uw + + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 3)<4> r2.31:ub + +// Send Buffer 2 + send (16) null<1>:d r28 0x5 0x0A0A8018:ud + send (16) null<1>:d r37 0x5 0x0A0A8018:ud + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 1536:uw + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 3)<4> r2.31:ub + // send buffer 3 + send (16) null<1>:d r46 0x5 0x0A0A8018:ud + send (16) null<1>:d r55 0x5 0x0A0A8018:ud + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_BGRA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_BGRA.g4a new file mode 100644 index 000000000..147f2c247 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_BGRA.g4a @@ -0,0 +1,388 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_BGRA.asm + + + +//Module Name: Set_Buf_0123_BGRA + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT:(UUYYVVAA) + //AVS RGBX LAYOUT (RRGGBBAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + // V = 8, Y= 0, U = 4, A = 12. + // And a0.x is used as indirect-register for RGBX. R=a0.1, G=a0.2, B=a0.0 + // B = 8, R= 0, G = 4, A = 12 + mov (4) acc0.0<1>:w 0x6EA2:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + + //SU LAYOUT:(VYUAVYUA) + //V = 4, Y = 2, U = 0, A = 6 + //B = 4, G = 2, R = 0, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL2.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL2.g4a new file mode 100644 index 000000000..75636b6bc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL2.g4a @@ -0,0 +1,383 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_PL2.asm + + + +//Module Name: Set_Buf_0123_PL2 + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT: (YYUUVVAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + //For PL2-AVS: V = 8, Y= 0, U = 4, A = 12. + mov (4) acc0.0<1>:w 0x6EA2:v //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + //SU LAYOUT:(YUVAYUVA) + //V = 4, Y = 0, U = 2, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL3.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL3.g4a new file mode 100644 index 000000000..65db8e198 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_PL3.g4a @@ -0,0 +1,383 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_PL3.asm + + + +//Module Name: Set_Buf_0123_PL3 + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT: (YYUUVVAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + //For PL3-AVS: V = 8, Y= 0, U = 4, A = 12. + mov (4) acc0.0<1>:w 0x6EA2:v //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + //SU LAYOUT:(YUVAYUVA) + //V = 4, Y = 0, U = 2, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VUYA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VUYA.g4a new file mode 100644 index 000000000..6af988967 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VUYA.g4a @@ -0,0 +1,384 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_YUVA.asm + + + +// Module Name : Set_Buf_0123_VUYA + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //For AVS: We use surface state as R8G8B8A8_UNORM and hence set pointers to VUYA. + //AVS LAYOUT:(VVUUYYAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + //V = 0, Y= 8, U = 4, A = 12. + mov (4) acc0.0<1>:w 0x6E2A:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw + + //Used by Shuffle. + //SU LAYOUT:(VUYAVUYA) + //V = 0, Y = 4, U = 2, A = 6 + mov (4) acc0.0<1>:w 0x6240:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VYUA.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VYUA.g4a new file mode 100644 index 000000000..afca370f9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_AVS_Buf_0123_VYUA.g4a @@ -0,0 +1,384 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_VYUA.asm + + + +//Module Name: Set_Buf_0123_VYUA + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT:(VVYYUUAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + // V = 0, Y= 4, U = 8, A = 12. + mov (4) acc0.0<1>:w 0x62EA:v //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + + //SU LAYOUT:(VYUAVYUA) + //V = 0, Y = 2, U = 4, A = 6 + mov (4) acc0.0<1>:w 0x6420:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_Layer_0.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_Layer_0.g4a new file mode 100644 index 000000000..4a31eefe1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/Set_Layer_0.g4a @@ -0,0 +1,489 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 18 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + + + + + +//Module name: Set_Layer_N.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Used to generate LABELS at compile time. + + +//definitions for Expand Mask +.declare uwMask_Temp1 Base=r17.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp1 Base=r17.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF +.declare udMask_Temp1 Base=r17.0 ElementSize=4 Type=ud // 1 GRF +.declare uwMask_Temp2 Base=r16.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp2 Base=r16.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF +.declare udMask_Temp2 Base=r16.0 ElementSize=4 Type=ud // 1 GRF + +.declare uwMask_Temp3 Base=r15.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp3 Base=r15.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF + +.declare udALPHA_MASK_REG Base=r21.0 ElementSize=4 Type=ud // 1 GRF +.declare udALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=4 Type=ud // 1 GRF + + +//Initialize mask reg to FFFF + + mov (16) uwALPHA_MASK_REG(0)<1> 0xFFFF:uw + + +//Fast jump for - +//LAYER0: we determine whether layer 0 is to be loaded and processed or not based +// on block mask in module "Set_Layer_0" and store result in f0.1. +// This flag is then directly used to while loading buf0-3 and colorfill. +// (So flag f0.1 should not be changed from Set_Layer_0 till Colorfill) +// +//LAYER1-7: For all other layers, we compute whether layer is to be loaded and processed +// based on block mask in module "Set_Layer_1-7" and store result in SKIP_LAYER +// variable. +// While Loading buf 4 and 5, we move SKIP_LAYER to f0.0 every time and use it +// for Loading. +// For processing though, we move SKIP_LAYER only once to f0.1 in module +// "Set_Buf0_Buf4" and use f0.1 for deciding whether layer 1-7 (all 4 sub blocks) +// is to be processed or not. +// (So flag f0.1) should not be modififed from module "Set_Buf0_Buf4" till module +// that processess sub-block 3). +// +//None of the above fast jumps, apply to CSC modules. We always perform CSC irrespective of mask. +// +//Example: (Without going into finer details) +// Typical Combined kernel: +// +// (let var = decision whether to load/process that layer) +// +// Set_Layer_0 //f0.1 <- var +// .. +// Set_Layer_1 //f0.1 <- var, SKIP_LAYER <- var +// .. +// Load buf 0 //use f0.1 +// Load buf 4 //f0.0 <- SKIP_LAYER +// Load buf 1 //use f0.1 +// Load buf 5 //f0.0 <- SKIP_LAYER +// Load buf 2 //use f0.1 +// Load buf 3 //use f0.1 +// .. +// .. +// Colorfill +// .. +// Set_Buf0_Buf4 //f0.1 <- SKIP_LAYER +// process0-4 //Use f0.1 +// Load buf 4 +// Set_Buf1_Buf5 +// process1-5 +// Load buf 5 +// .. +// Set_Layer_2 //f0.1 <-var, SKIP_LAYER <- var +// .. +// Set_Buf2_Buf4 +// process2-4 +// Load buf 4 +// Set_Buf3_Buf5 +// process3-5 +// Load buf 5 +// .. + + + //For layer 0, use f0.1 directly + cmp.ne.f0.1 (1) null<1>:d r9.2:uw 0:uw + (f0.1)cmp.ne.f0.1 (1) null<1>:d r9.3:uw 0:uw + (-f0.1) jmpi (1) SKIP_LAYER_L0 + + + and (1) r24.2:ub r2.2<0;1,0>:uw 3:uw + + + //Copy all AVS Payload data + // Setup Message Payload Header for 1st block of Media Sampler 8x8 (16x4 for IVB+) + mov (1) r25.6:f r9.5:f { NoDDClr } //NLAS dx + mov (1) r25.4:f r3.0:f { NoDDClr, NoDDChk } //Step X + mov (1) r25.5:f r4.0:f { NoDDClr, NoDDChk } //Step Y + + + mov (1) r25.2:f r6.0<0;1,0>:f { NoDDClr, NoDDChk } //Orig X + mov (1) r25.3:f r5.0<0;1,0>:f { NoDDChk } //Orig Y + + //NLAS calculations for 2nd half of blocks of Media Sampler 8x8: + // X(i) = X0 + dx*i + ddx*i*(i-1)/2 ==> X(8) = X0 + dx*8 +ddx*28 + // dx(i)= dx(0) + ddx*i ==> dx(8)= dx + ddx*8 + + //OPTIMIZATION: fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY - are sub registers of same GRF. Use NODDCLR NODDCHK. -rT + + // Calculating X(8) + mov (1) acc0.2:f r6.0:f + mac (1) acc0.2:f r3.0:f 8.0:f + mac (1) r23.2:f r9.5:f 28.0:f { NoDDClr } + + // Calculating Y(4) + mul (1) r23.1<1>:f r4.0:f 4.0:f { NoDDClr, NoDDChk } //dY*4 + + // Calculating dx(8) + mov (1) acc0.4:f r3.0:f + mac (1) r23.4:f r9.5:f 8.0:f { NoDDClr, NoDDChk } + + // Binding Index + mov (1) r23.5:ud 0:ud { NoDDChk } + + +SKIP_LAYER_L0: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/VP_Setup.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/VP_Setup.g4a new file mode 100644 index 000000000..837e3c961 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/VP_Setup.g4a @@ -0,0 +1,875 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// 326 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: VP_Setup.asm +// Author: Vivek Kumar +// Description: Sets up all parameters for the Video Processing Kernel + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Setup pointer to the inline parameter + +// Copy MSG HDR + mov (8) r27.0<1>:ud r0.0<8;8,1>:ud // Initialize message payload header with R0 + + +//temp; remove it once unread msg warnings are resolved -vK +mov (8) r25:ud r0.0<8;8,1>:ud +mov (8) r26:ud r0.0<8;8,1>:ud + +// Calculate StepX for all layers and overwrite it on the ratio + mul (8) r3.0<1>:f r3.0<8;8,1>:f r9.4<0;1,0>:f //StepX_ratio = StepX / VideoStepX + + //Normalised Ratio of Horizontal step size with main video for all layers now becomes + //Normalised Horizontal step size for all layers + +// Calculate block origin for all layers and overwrite it on the frame origin + mov (2) r8.5<1>:f r9.0<2;2,1>:w //Convert origin from word to float + + cmp.e.f0.0 (8) null<1>:d r2.26:ub 1:uw + + + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 0:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L0 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L0 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L0 + + // rotate 0 degree +ROTATE_0_L0: + (-f0.0)mov (1) acc0.0:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.0:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 90 degree +ROTATE_90_L0: + (-f0.0)mov (1) acc0.0:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.0:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 180 degree +ROTATE_180_L0: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.0:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.0:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 270 degree +ROTATE_270_L0: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.0:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.0:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L0: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 2:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L1 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L1 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L1 + + // rotate 0 degree +ROTATE_0_L1: + (-f0.0)mov (1) acc0.1:f r6.1<0;1,0>:f + (-f0.0)mac (1) r6.1<1>:f r3.1<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.1:f r5.1<0;1,0>:f + mac (1) r5.1<1>:f r4.1<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L1 + + // rotate 90 degree +ROTATE_90_L1: + (-f0.0)mov (1) acc0.1:f r6.1<0;1,0>:f + (-f0.0)mac (1) r6.1<1>:f r3.1<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.1:f r5.1<0;1,0>:f + mac (1) r5.1<1>:f r4.1<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L1 + + // rotate 180 degree +ROTATE_180_L1: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.1:f r6.1<0;1,0>:f + (-f0.0)mac (1) r6.1<1>:f r3.1<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.1:f r5.1<0;1,0>:f + mac (1) r5.1<1>:f r4.1<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L1 + + // rotate 270 degree +ROTATE_270_L1: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.1:f r6.1<0;1,0>:f + (-f0.0)mac (1) r6.1<1>:f r3.1<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.1:f r5.1<0;1,0>:f + mac (1) r5.1<1>:f r4.1<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L1: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 4:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L2 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L2 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L2 + + // rotate 0 degree +ROTATE_0_L2: + (-f0.0)mov (1) acc0.2:f r6.2<0;1,0>:f + (-f0.0)mac (1) r6.2<1>:f r3.2<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.2:f r5.2<0;1,0>:f + mac (1) r5.2<1>:f r4.2<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L2 + + // rotate 90 degree +ROTATE_90_L2: + (-f0.0)mov (1) acc0.2:f r6.2<0;1,0>:f + (-f0.0)mac (1) r6.2<1>:f r3.2<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.2:f r5.2<0;1,0>:f + mac (1) r5.2<1>:f r4.2<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L2 + + // rotate 180 degree +ROTATE_180_L2: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.2:f r6.2<0;1,0>:f + (-f0.0)mac (1) r6.2<1>:f r3.2<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.2:f r5.2<0;1,0>:f + mac (1) r5.2<1>:f r4.2<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L2 + + // rotate 270 degree +ROTATE_270_L2: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.2:f r6.2<0;1,0>:f + (-f0.0)mac (1) r6.2<1>:f r3.2<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.2:f r5.2<0;1,0>:f + mac (1) r5.2<1>:f r4.2<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L2: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 6:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L3 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L3 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L3 + + // rotate 0 degree +ROTATE_0_L3: + (-f0.0)mov (1) acc0.3:f r6.3<0;1,0>:f + (-f0.0)mac (1) r6.3<1>:f r3.3<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.3:f r5.3<0;1,0>:f + mac (1) r5.3<1>:f r4.3<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L3 + + // rotate 90 degree +ROTATE_90_L3: + (-f0.0)mov (1) acc0.3:f r6.3<0;1,0>:f + (-f0.0)mac (1) r6.3<1>:f r3.3<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.3:f r5.3<0;1,0>:f + mac (1) r5.3<1>:f r4.3<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L3 + + // rotate 180 degree +ROTATE_180_L3: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.3:f r6.3<0;1,0>:f + (-f0.0)mac (1) r6.3<1>:f r3.3<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.3:f r5.3<0;1,0>:f + mac (1) r5.3<1>:f r4.3<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L3 + + // rotate 270 degree +ROTATE_270_L3: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.3:f r6.3<0;1,0>:f + (-f0.0)mac (1) r6.3<1>:f r3.3<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.3:f r5.3<0;1,0>:f + mac (1) r5.3<1>:f r4.3<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L3: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 8:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L4 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L4 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L4 + + // rotate 0 degree +ROTATE_0_L4: + (-f0.0)mov (1) acc0.4:f r6.4<0;1,0>:f + (-f0.0)mac (1) r6.4<1>:f r3.4<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.4:f r5.4<0;1,0>:f + mac (1) r5.4<1>:f r4.4<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L4 + + // rotate 90 degree +ROTATE_90_L4: + (-f0.0)mov (1) acc0.4:f r6.4<0;1,0>:f + (-f0.0)mac (1) r6.4<1>:f r3.4<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.4:f r5.4<0;1,0>:f + mac (1) r5.4<1>:f r4.4<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L4 + + // rotate 180 degree +ROTATE_180_L4: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.4:f r6.4<0;1,0>:f + (-f0.0)mac (1) r6.4<1>:f r3.4<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.4:f r5.4<0;1,0>:f + mac (1) r5.4<1>:f r4.4<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L4 + + // rotate 270 degree +ROTATE_270_L4: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.4:f r6.4<0;1,0>:f + (-f0.0)mac (1) r6.4<1>:f r3.4<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.4:f r5.4<0;1,0>:f + mac (1) r5.4<1>:f r4.4<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L4: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 10:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L5 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L5 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L5 + + // rotate 0 degree +ROTATE_0_L5: + (-f0.0)mov (1) acc0.5:f r6.5<0;1,0>:f + (-f0.0)mac (1) r6.5<1>:f r3.5<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.5:f r5.5<0;1,0>:f + mac (1) r5.5<1>:f r4.5<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L5 + + // rotate 90 degree +ROTATE_90_L5: + (-f0.0)mov (1) acc0.5:f r6.5<0;1,0>:f + (-f0.0)mac (1) r6.5<1>:f r3.5<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.5:f r5.5<0;1,0>:f + mac (1) r5.5<1>:f r4.5<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L5 + + // rotate 180 degree +ROTATE_180_L5: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.5:f r6.5<0;1,0>:f + (-f0.0)mac (1) r6.5<1>:f r3.5<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.5:f r5.5<0;1,0>:f + mac (1) r5.5<1>:f r4.5<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L5 + + // rotate 270 degree +ROTATE_270_L5: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.5:f r6.5<0;1,0>:f + (-f0.0)mac (1) r6.5<1>:f r3.5<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.5:f r5.5<0;1,0>:f + mac (1) r5.5<1>:f r4.5<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L5: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 12:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L6 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L6 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L6 + + // rotate 0 degree +ROTATE_0_L6: + (-f0.0)mov (1) acc0.6:f r6.6<0;1,0>:f + (-f0.0)mac (1) r6.6<1>:f r3.6<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.6:f r5.6<0;1,0>:f + mac (1) r5.6<1>:f r4.6<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L6 + + // rotate 90 degree +ROTATE_90_L6: + (-f0.0)mov (1) acc0.6:f r6.6<0;1,0>:f + (-f0.0)mac (1) r6.6<1>:f r3.6<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.6:f r5.6<0;1,0>:f + mac (1) r5.6<1>:f r4.6<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L6 + + // rotate 180 degree +ROTATE_180_L6: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.6:f r6.6<0;1,0>:f + (-f0.0)mac (1) r6.6<1>:f r3.6<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.6:f r5.6<0;1,0>:f + mac (1) r5.6<1>:f r4.6<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L6 + + // rotate 270 degree +ROTATE_270_L6: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.6:f r6.6<0;1,0>:f + (-f0.0)mac (1) r6.6<1>:f r3.6<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.6:f r5.6<0;1,0>:f + mac (1) r5.6<1>:f r4.6<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L6: + nop + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 14:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L7 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L7 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L7 + + // rotate 0 degree +ROTATE_0_L7: + (-f0.0)mov (1) acc0.7:f r6.7<0;1,0>:f + (-f0.0)mac (1) r6.7<1>:f r3.7<0;1,0>:f r8.5<0;1,0>:f + + mov (1) acc0.7:f r5.7<0;1,0>:f + mac (1) r5.7<1>:f r4.7<0;1,0>:f r8.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L7 + + // rotate 90 degree +ROTATE_90_L7: + (-f0.0)mov (1) acc0.7:f r6.7<0;1,0>:f + (-f0.0)mac (1) r6.7<1>:f r3.7<0;1,0>:f r8.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.7:f r5.7<0;1,0>:f + mac (1) r5.7<1>:f r4.7<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L7 + + // rotate 180 degree +ROTATE_180_L7: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.7:f r6.7<0;1,0>:f + (-f0.0)mac (1) r6.7<1>:f r3.7<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.7:f r5.7<0;1,0>:f + mac (1) r5.7<1>:f r4.7<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L7 + + // rotate 270 degree +ROTATE_270_L7: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r8.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.7:f r6.7<0;1,0>:f + (-f0.0)mac (1) r6.7<1>:f r3.7<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.7:f r5.7<0;1,0>:f + mac (1) r5.7<1>:f r4.7<0;1,0>:f r8.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L7: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/YUV_to_RGB.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/YUV_to_RGB.g4a new file mode 100644 index 000000000..c7e12460a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/YUV_to_RGB.g4a @@ -0,0 +1,1017 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * This file was originally licensed under the following license + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: YUV_to_RGB.asm +// +// Convert YUV to RGB, handle it by 16x4 block +// + + +// Description: Includes all definitions explicit to Fast Composite. + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare bBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + +//Unnecessary to use the MSGPayLoad, So it is temporiarily used for conversion of YUV->RGB + +.declare fBUFFER_R Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_G Base=r30.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_B Base=r32.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare fBUFFER_Y Base=r36.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_U Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_V Base=r40.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + + +.declare wTempR Base=r42.0 ElementSize=2 Type=w +.declare wTempG Base=r44.0 ElementSize=2 Type=w +.declare wTempB Base=r46.0 ElementSize=2 Type=w + +.declare ubTempR Base=r42.0 ElementSize=1 Type=ub +.declare ubTempG Base=r44.0 ElementSize=1 Type=ub +.declare ubTempB Base=r46.0 ElementSize=1 Type=ub + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare wTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + // NTSC standard + // R = Clamp ( 1.164(Y-16/255) + 1.596(Cr-128/255)) + // G = Clamp ( 1.164(Y-16/255) - 0.813(Cr-128/255) - 0.392(Cb-128/255)) + // B = Clamp ( 1.164(Y-16/255) + 2.017(Cb-128/255)) + // ITU-R conversion, Now we are using ITU-R conversion + // R = clip( Y + 1.402*(Cr-128)) // ITU-R + // G = clip( Y - 0.344*(Cb-128) - 0.714*(Cr-128)) + // B = clip( Y + 1.772*(Cb-128)) + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + //Y/U/V is also stored as R/G/B for the internal purpose +//for BUFFER_0 + mov (4) a0.0<1>:uw r22.0<4;4,1>:uw +//the first line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 0 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_1 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 512:uw +//the first line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 1 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_2 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 1024:uw +//the first line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 2 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_3 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 1536:uw +//the first line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 3 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.asm new file mode 100644 index 000000000..091ed5066 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.asm @@ -0,0 +1,19 @@ +// Module name: AVS +.kernel AVS +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL2.g4a" +#include "PL2_AVS_Buf_0.g4a" +#include "PL2_AVS_Buf_1.g4a" +#include "PL2_AVS_Buf_2.g4a" +#include "PL2_AVS_Buf_3.g4a" +#include "Save_AVS_NV12.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel + +// end of DNDI diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g75b new file mode 100644 index 000000000..a6fd4c812 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g75b @@ -0,0 +1,654 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000290 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g7b new file mode 100644 index 000000000..1cf1b2f41 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/avs.g7b @@ -0,0 +1,654 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000052 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.asm new file mode 100644 index 000000000..b820fdba3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.asm @@ -0,0 +1,11 @@ +// Module name: DNDI +.kernel DNDI +.code + +#include "NV12_DI_NV12.g4a" + +.end_code + +.end_kernel + +// end of DNDI diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g75b new file mode 100644 index 000000000..2f9dff9ce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g75b @@ -0,0 +1,46 @@ + { 0x00600001, 0x22400021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x226801ad, 0x00000120, 0x00000000 }, + { 0x00000801, 0x227801ad, 0x00000122, 0x00000000 }, + { 0x02600031, 0x25c00e21, 0x00000240, 0x04ae8003 }, + { 0x00200001, 0x2120012d, 0x004506fc, 0x00000000 }, + { 0x00600001, 0x22800021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x22a00021, 0x008d06c0, 0x00000000 }, + { 0x00000408, 0x22803da1, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x228401a1, 0x00000122, 0x00000000 }, + { 0x00000801, 0x22880061, 0x00000000, 0x00030007 }, + { 0x05600031, 0x20000e24, 0x00000280, 0x040a8021 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0000, 0x00000000 }, + { 0x00000408, 0x23003da1, 0x00000120, 0x00010001 }, + { 0x00000041, 0x24043da0, 0x00000122, 0x00030003 }, + { 0x00000c08, 0x23043c01, 0x00000404, 0x00020002 }, + { 0x00000801, 0x23080061, 0x00000000, 0x00020007 }, + { 0x00200040, 0x23002421, 0x00450300, 0x00450038 }, + { 0x00000401, 0x23200021, 0x000006e4, 0x00000000 }, + { 0x00200c01, 0x432c0021, 0x004506ec, 0x00000000 }, + { 0x00200801, 0x43280021, 0x004506f4, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000300, 0x040a8021 }, + { 0x00600001, 0x23800021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x238001a5, 0x00000120, 0x00000000 }, + { 0x00000c01, 0x238401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23880061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x22400021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x22e00021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x22600021, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x22800021, 0x008d05e0, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0660, 0x00000000 }, + { 0x0000040c, 0x23843ca5, 0x00000384, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x0001000f }, + { 0x00800401, 0x42c00231, 0x00ce0601, 0x00000000 }, + { 0x00800801, 0x42c10231, 0x00ce0600, 0x00000000 }, + { 0x00800401, 0x43600231, 0x00ce0681, 0x00000000 }, + { 0x00800801, 0x43610231, 0x00ce0680, 0x00000000 }, + { 0x00600001, 0x22a00021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0380, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000240, 0x060a801b }, + { 0x05600031, 0x20000e24, 0x000002e0, 0x060a801e }, + { 0x05600031, 0x20000e24, 0x000002a0, 0x040a801c }, + { 0x05600031, 0x20000e24, 0x00000340, 0x040a801f }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g7b new file mode 100644 index 000000000..2f9dff9ce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/dndi.g7b @@ -0,0 +1,46 @@ + { 0x00600001, 0x22400021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x226801ad, 0x00000120, 0x00000000 }, + { 0x00000801, 0x227801ad, 0x00000122, 0x00000000 }, + { 0x02600031, 0x25c00e21, 0x00000240, 0x04ae8003 }, + { 0x00200001, 0x2120012d, 0x004506fc, 0x00000000 }, + { 0x00600001, 0x22800021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x22a00021, 0x008d06c0, 0x00000000 }, + { 0x00000408, 0x22803da1, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x228401a1, 0x00000122, 0x00000000 }, + { 0x00000801, 0x22880061, 0x00000000, 0x00030007 }, + { 0x05600031, 0x20000e24, 0x00000280, 0x040a8021 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0000, 0x00000000 }, + { 0x00000408, 0x23003da1, 0x00000120, 0x00010001 }, + { 0x00000041, 0x24043da0, 0x00000122, 0x00030003 }, + { 0x00000c08, 0x23043c01, 0x00000404, 0x00020002 }, + { 0x00000801, 0x23080061, 0x00000000, 0x00020007 }, + { 0x00200040, 0x23002421, 0x00450300, 0x00450038 }, + { 0x00000401, 0x23200021, 0x000006e4, 0x00000000 }, + { 0x00200c01, 0x432c0021, 0x004506ec, 0x00000000 }, + { 0x00200801, 0x43280021, 0x004506f4, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000300, 0x040a8021 }, + { 0x00600001, 0x23800021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x238001a5, 0x00000120, 0x00000000 }, + { 0x00000c01, 0x238401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23880061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x22400021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x22e00021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x22600021, 0x008d05c0, 0x00000000 }, + { 0x00600001, 0x22800021, 0x008d05e0, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0640, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0660, 0x00000000 }, + { 0x0000040c, 0x23843ca5, 0x00000384, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x0001000f }, + { 0x00800401, 0x42c00231, 0x00ce0601, 0x00000000 }, + { 0x00800801, 0x42c10231, 0x00ce0600, 0x00000000 }, + { 0x00800401, 0x43600231, 0x00ce0681, 0x00000000 }, + { 0x00800801, 0x43610231, 0x00ce0680, 0x00000000 }, + { 0x00600001, 0x22a00021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0380, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000240, 0x060a801b }, + { 0x05600031, 0x20000e24, 0x000002e0, 0x060a801e }, + { 0x05600031, 0x20000e24, 0x000002a0, 0x040a801c }, + { 0x05600031, 0x20000e24, 0x00000340, 0x040a801f }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.asm new file mode 100644 index 000000000..94e7c6b25 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.asm @@ -0,0 +1,5 @@ +// Module name: DN + +#include "NV12_DN_NV12.g4a" + +// end of DNDI diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g75b new file mode 100644 index 000000000..663cbec18 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g75b @@ -0,0 +1,40 @@ + { 0x00600001, 0x22400021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x226801ad, 0x00000120, 0x00000000 }, + { 0x00000801, 0x227801ad, 0x00000122, 0x00000000 }, + { 0x02600031, 0x25c00e21, 0x00000240, 0x045e8003 }, + { 0x00200001, 0x2120012d, 0x0045065c, 0x00000000 }, + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00200001, 0x22e00021, 0x00450640, 0x00000000 }, + { 0x00200008, 0x23603da1, 0x00450120, 0x00020002 }, + { 0x00000440, 0x23602421, 0x00000360, 0x00000038 }, + { 0x00000801, 0x23680061, 0x00000000, 0x00010003 }, + { 0x00600001, 0x22c00021, 0x008d0360, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x000002c0, 0x040a8021 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0000, 0x00000000 }, + { 0x00000408, 0x23003da1, 0x00000120, 0x00010001 }, + { 0x00000041, 0x24043da0, 0x00000122, 0x00030003 }, + { 0x00000c08, 0x23043c01, 0x00000404, 0x00020002 }, + { 0x00000801, 0x23080061, 0x00000000, 0x00050003 }, + { 0x00200040, 0x23002421, 0x00450300, 0x00450038 }, + { 0x00000401, 0x23200231, 0x00000648, 0x00000000 }, + { 0x00000c01, 0x23260129, 0x00000656, 0x00000000 }, + { 0x00200c01, 0x23280129, 0x00450658, 0x00000000 }, + { 0x00000c01, 0x23320129, 0x00000650, 0x00000000 }, + { 0x00200801, 0x23340129, 0x00450652, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000300, 0x040a8021 }, + { 0x00200040, 0x236035a5, 0x00450120, 0x00450088 }, + { 0x0000040c, 0x23643ca5, 0x00000364, 0x00010001 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0004000f }, + { 0x00600001, 0x24800021, 0x008d0360, 0x00000000 }, + { 0x04600031, 0x27400e21, 0x00000480, 0x02390001 }, + { 0x00000001, 0x24880061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x25a00021, 0x008d0000, 0x00000000 }, + { 0x00200401, 0x25a001a1, 0x00450120, 0x00000000 }, + { 0x00000801, 0x25a80061, 0x00000000, 0x0007000f }, + { 0x05600031, 0x20000e24, 0x000005a0, 0x0a0a8018 }, + { 0x00600001, 0x24a00021, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x24c00021, 0x008d0760, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000480, 0x060a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g7b new file mode 100644 index 000000000..663cbec18 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/nv12_dn_nv12.g7b @@ -0,0 +1,40 @@ + { 0x00600001, 0x22400021, 0x008d0000, 0x00000000 }, + { 0x00000401, 0x226801ad, 0x00000120, 0x00000000 }, + { 0x00000801, 0x227801ad, 0x00000122, 0x00000000 }, + { 0x02600031, 0x25c00e21, 0x00000240, 0x045e8003 }, + { 0x00200001, 0x2120012d, 0x0045065c, 0x00000000 }, + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00200001, 0x22e00021, 0x00450640, 0x00000000 }, + { 0x00200008, 0x23603da1, 0x00450120, 0x00020002 }, + { 0x00000440, 0x23602421, 0x00000360, 0x00000038 }, + { 0x00000801, 0x23680061, 0x00000000, 0x00010003 }, + { 0x00600001, 0x22c00021, 0x008d0360, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x000002c0, 0x040a8021 }, + { 0x00600001, 0x23200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x23000021, 0x008d0000, 0x00000000 }, + { 0x00000408, 0x23003da1, 0x00000120, 0x00010001 }, + { 0x00000041, 0x24043da0, 0x00000122, 0x00030003 }, + { 0x00000c08, 0x23043c01, 0x00000404, 0x00020002 }, + { 0x00000801, 0x23080061, 0x00000000, 0x00050003 }, + { 0x00200040, 0x23002421, 0x00450300, 0x00450038 }, + { 0x00000401, 0x23200231, 0x00000648, 0x00000000 }, + { 0x00000c01, 0x23260129, 0x00000656, 0x00000000 }, + { 0x00200c01, 0x23280129, 0x00450658, 0x00000000 }, + { 0x00000c01, 0x23320129, 0x00000650, 0x00000000 }, + { 0x00200801, 0x23340129, 0x00450652, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000300, 0x040a8021 }, + { 0x00200040, 0x236035a5, 0x00450120, 0x00450088 }, + { 0x0000040c, 0x23643ca5, 0x00000364, 0x00010001 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0004000f }, + { 0x00600001, 0x24800021, 0x008d0360, 0x00000000 }, + { 0x04600031, 0x27400e21, 0x00000480, 0x02390001 }, + { 0x00000001, 0x24880061, 0x00000000, 0x0003000f }, + { 0x00600001, 0x25a00021, 0x008d0000, 0x00000000 }, + { 0x00200401, 0x25a001a1, 0x00450120, 0x00000000 }, + { 0x00000801, 0x25a80061, 0x00000000, 0x0007000f }, + { 0x05600031, 0x20000e24, 0x000005a0, 0x0a0a8018 }, + { 0x00600001, 0x24a00021, 0x008d0740, 0x00000000 }, + { 0x00600001, 0x24c00021, 0x008d0760, 0x00000000 }, + { 0x05600031, 0x20000e24, 0x00000480, 0x060a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.asm new file mode 100644 index 000000000..62f14bd20 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PA_TO_PL3 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_VYUA.g4a" +#include "PA_AVS_Buf_0.g4a" +#include "PA_AVS_Buf_1.g4a" +#include "PA_AVS_Buf_2.g4a" +#include "PA_AVS_Buf_3.g4a" +#include "Save_AVS_PA.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g75b new file mode 100644 index 000000000..1f63b1b98 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g75b @@ -0,0 +1,677 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000240 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g7b new file mode 100644 index 000000000..656063e00 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pa.g7b @@ -0,0 +1,677 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000048 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.asm new file mode 100644 index 000000000..1e952b47c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PA_TO_pl2 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_VYUA.g4a" +#include "PA_AVS_Buf_0.g4a" +#include "PA_AVS_Buf_1.g4a" +#include "PA_AVS_Buf_2.g4a" +#include "PA_AVS_Buf_3.g4a" +#include "Save_AVS_NV12.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g75b new file mode 100644 index 000000000..4e4139a86 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g75b @@ -0,0 +1,634 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000240 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g7b new file mode 100644 index 000000000..33335bb6b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl2.g7b @@ -0,0 +1,634 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000048 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.asm new file mode 100644 index 000000000..d149f488e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PA_TO_PL3 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_VYUA.g4a" +#include "PA_AVS_Buf_0.g4a" +#include "PA_AVS_Buf_1.g4a" +#include "PA_AVS_Buf_2.g4a" +#include "PA_AVS_Buf_3.g4a" +#include "Save_AVS_PL3.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g75b new file mode 100644 index 000000000..9e42f7ecc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g75b @@ -0,0 +1,587 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000240 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g7b new file mode 100644 index 000000000..ad9a1c338 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pa_to_pl3.g7b @@ -0,0 +1,587 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006420 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000048 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.asm new file mode 100644 index 000000000..5f737ee5e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PA +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL2.g4a" +#include "PL2_AVS_Buf_0.g4a" +#include "PL2_AVS_Buf_1.g4a" +#include "PL2_AVS_Buf_2.g4a" +#include "PL2_AVS_Buf_3.g4a" +#include "Save_AVS_PA.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g75b new file mode 100644 index 000000000..589f1f8ca --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g75b @@ -0,0 +1,697 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000290 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g7b new file mode 100644 index 000000000..1e6c104b1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pa.g7b @@ -0,0 +1,697 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000052 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.asm new file mode 100644 index 000000000..6e840d5dd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PL2 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL2.g4a" +#include "PL2_AVS_Buf_0.g4a" +#include "PL2_AVS_Buf_1.g4a" +#include "PL2_AVS_Buf_2.g4a" +#include "PL2_AVS_Buf_3.g4a" +#include "Save_AVS_NV12.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g75b new file mode 100644 index 000000000..a6fd4c812 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g75b @@ -0,0 +1,654 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000290 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g7b new file mode 100644 index 000000000..1cf1b2f41 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl2.g7b @@ -0,0 +1,654 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000052 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.asm new file mode 100644 index 000000000..d48071b03 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PL3 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL2.g4a" +#include "PL2_AVS_Buf_0.g4a" +#include "PL2_AVS_Buf_1.g4a" +#include "PL2_AVS_Buf_2.g4a" +#include "PL2_AVS_Buf_3.g4a" +#include "Save_AVS_PL3.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g75b new file mode 100644 index 000000000..f6fec4f59 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g75b @@ -0,0 +1,607 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000290 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g7b new file mode 100644 index 000000000..377b1bb2b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_pl3.g7b @@ -0,0 +1,607 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000052 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.asm new file mode 100644 index 000000000..dd18c4d76 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.asm @@ -0,0 +1,18 @@ +// Module name: AVS +.kernel PL2_TO_PA +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL2.g4a" +#include "PL2_AVS_Buf_0.g4a" +#include "PL2_AVS_Buf_1.g4a" +#include "PL2_AVS_Buf_2.g4a" +#include "PL2_AVS_Buf_3.g4a" +#include "YUV_to_RGB.g4a" +#include "Save_AVS_RGBX.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g75b new file mode 100644 index 000000000..1d65bc55c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g75b @@ -0,0 +1,1180 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000290 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000280 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22000128, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x04000400 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x06000600 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x02800005, 0x20003d2c, 0x00000046, 0x00010001 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00010001, 0x22200109, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22000108, 0x00000204, 0x00000000 }, + { 0x00010001, 0x22040128, 0x00000220, 0x00000000 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00020002 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0003001f }, + { 0x00400001, 0x22080108, 0x00690200, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x23e00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25000021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26200021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a01ca5, 0x00000360, 0x00000020 }, + { 0x00000040, 0x25c41ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x26e41ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x26e01ca5, 0x00000360, 0x00000020 }, + { 0x00600001, 0x63a00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x63a30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c00231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c10231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c20231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x63c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c00231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c10231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c20231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x64c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e00231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e10231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e20231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x64e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e00231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e10231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e20231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x63e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64000231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64010231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64020231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x64030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65000231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65010231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65020231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x65030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65200231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65210231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65220231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x65230231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x00000380, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000004a0, 0x0a0a8018 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x02000200 }, + { 0x00600001, 0x65e00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x65e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66000231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66010231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66020231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x66030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67000231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67010231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67020231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x67030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67200231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67210231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67220231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x67230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66200231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66210231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66220231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x66230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66400231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66410231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66420231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x66430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67400231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67410231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67420231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x67430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67600231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67610231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67620231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x67630231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x000005c0, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000006e0, 0x0a0a8018 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a01ca5, 0x00000360, 0x00000020 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x25c41ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x26e41ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x26e01ca5, 0x00000360, 0x00000020 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x04000400 }, + { 0x00600001, 0x63a00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x63a30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c00231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c10231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c20231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x63c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c00231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c10231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c20231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x64c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e00231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e10231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e20231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x64e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e00231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e10231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e20231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x63e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64000231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64010231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64020231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x64030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65000231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65010231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65020231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x65030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65200231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65210231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65220231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x65230231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x00000380, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000004a0, 0x0a0a8018 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x06000600 }, + { 0x00600001, 0x65e00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x65e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66000231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66010231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66020231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x66030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67000231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67010231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67020231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x67030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67200231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67210231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67220231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x67230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66200231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66210231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66220231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x66230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66400231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66410231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66420231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x66430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67400231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67410231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67420231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x67430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67600231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67610231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67620231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x67630231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x000005c0, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000006e0, 0x0a0a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g7b new file mode 100644 index 000000000..7c38529b9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl2_to_rgbx.g7b @@ -0,0 +1,1180 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000052 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x048eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22000128, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x04000400 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002d28, 0x006902c0, 0x06000600 }, + { 0x00600001, 0x2480023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2480023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x24c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x24e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2500023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2520023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24807fbd, 0x00200480, 0x3b8080c4 }, + { 0x00800041, 0x24c07fbd, 0x002004c0, 0x3b8080c4 }, + { 0x00800041, 0x25007fbd, 0x00200500, 0x3b8080c4 }, + { 0x00800040, 0x248077bd, 0x00200480, 0x000000ec }, + { 0x00800040, 0x24c077bd, 0x002004c0, 0x000000fc }, + { 0x00800040, 0x250077bd, 0x00200500, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000e4 }, + { 0x80800048, 0x238077bd, 0x008d0500, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x000000f4 }, + { 0x80800048, 0x23c077bd, 0x008d0500, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d0480, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d04c0, 0x00000104 }, + { 0x80800048, 0x240077bd, 0x008d0500, 0x00000108 }, + { 0x00800041, 0x23807fbd, 0x008d0380, 0x437f0000 }, + { 0x00800041, 0x23c07fbd, 0x008d03c0, 0x437f0000 }, + { 0x00800041, 0x24007fbd, 0x008d0400, 0x437f0000 }, + { 0x00800001, 0x454003ad, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x000062ea }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x02800005, 0x20003d2c, 0x00000046, 0x00010001 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00010001, 0x22200109, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22000108, 0x00000204, 0x00000000 }, + { 0x00010001, 0x22040128, 0x00000220, 0x00000000 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00020002 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0003001f }, + { 0x00400001, 0x22080108, 0x00690200, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x23e00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25000021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26200021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x27400021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a01ca5, 0x00000360, 0x00000020 }, + { 0x00000040, 0x25c41ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x26e41ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x26e01ca5, 0x00000360, 0x00000020 }, + { 0x00600001, 0x63a00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x63a30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c00231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c10231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c20231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x63c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c00231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c10231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c20231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x64c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e00231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e10231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e20231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x64e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e00231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e10231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e20231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x63e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64000231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64010231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64020231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x64030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65000231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65010231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65020231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x65030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65200231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65210231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65220231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x65230231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x00000380, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000004a0, 0x0a0a8018 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x02000200 }, + { 0x00600001, 0x65e00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x65e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66000231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66010231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66020231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x66030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67000231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67010231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67020231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x67030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67200231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67210231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67220231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x67230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66200231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66210231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66220231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x66230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66400231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66410231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66420231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x66430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67400231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67410231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67420231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x67430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67600231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67610231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67620231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x67630231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x000005c0, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000006e0, 0x0a0a8018 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a01ca5, 0x00000360, 0x00000020 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x25c41ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x26e41ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x26e01ca5, 0x00000360, 0x00000020 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x04000400 }, + { 0x00600001, 0x63a00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x63a30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c00231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c10231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c20231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x63c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c00231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c10231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c20231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x64c30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e00231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e10231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e20231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x64e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e00231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e10231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e20231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x63e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64000231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64010231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64020231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x64030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65000231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65010231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65020231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x65030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65200231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65210231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65220231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x65230231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x00000380, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000004a0, 0x0a0a8018 }, + { 0x00400040, 0x22002d08, 0x00690208, 0x06000600 }, + { 0x00600001, 0x65e00231, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e10231, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e20231, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x65e30231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66000231, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66010231, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66020231, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x66030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67000231, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67010231, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67020231, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x67030231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67200231, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67210231, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67220231, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x67230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66200231, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66210231, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66220231, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x66230231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66400231, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66410231, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66420231, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x66430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67400231, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67410231, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67420231, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x67430231, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67600231, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67610231, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67620231, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x67630231, 0x0000005f, 0x00000000 }, + { 0x05800031, 0x20000e24, 0x000005c0, 0x0a0a8018 }, + { 0x05800031, 0x20000e24, 0x000006e0, 0x0a0a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.asm new file mode 100644 index 000000000..b3be8f9c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PA +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL3.g4a" +#include "PL3_AVS_Buf_0.g4a" +#include "PL3_AVS_Buf_1.g4a" +#include "PL3_AVS_Buf_2.g4a" +#include "PL3_AVS_Buf_3.g4a" +#include "Save_AVS_PA.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g75b new file mode 100644 index 000000000..0f7c49803 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g75b @@ -0,0 +1,709 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002c0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g7b new file mode 100644 index 000000000..5e46e34b4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pa.g7b @@ -0,0 +1,709 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000058 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082e2c, 0x0069005c, 0x03a003a0 }, + { 0x00000409, 0x23603da5, 0x00000120, 0x00010001 }, + { 0x00000c01, 0x236401a5, 0x00000122, 0x00000000 }, + { 0x00000801, 0x23680061, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x80400040, 0xc0002d29, 0x008a8000, 0x00800080 }, + { 0x80400040, 0xc0202d29, 0x008a8020, 0x00800080 }, + { 0x80400040, 0xc0402d29, 0x008a8040, 0x00800080 }, + { 0x80400040, 0xc0602d29, 0x008a8060, 0x00800080 }, + { 0x80600040, 0xa4002d29, 0x008d8400, 0x00800080 }, + { 0x80600040, 0xa4202d29, 0x008d8420, 0x00800080 }, + { 0x80600040, 0xa4402d29, 0x008d8440, 0x00800080 }, + { 0x80600040, 0xa4602d29, 0x008d8460, 0x00800080 }, + { 0x80400040, 0xc8002d29, 0x008a8800, 0x00800080 }, + { 0x80400040, 0xc8202d29, 0x008a8820, 0x00800080 }, + { 0x80400040, 0xc8402d29, 0x008a8840, 0x00800080 }, + { 0x80400040, 0xc8602d29, 0x008a8860, 0x00800080 }, + { 0x80400040, 0xc0102d29, 0x008a8010, 0x00800080 }, + { 0x80400040, 0xc0302d29, 0x008a8030, 0x00800080 }, + { 0x80400040, 0xc0502d29, 0x008a8050, 0x00800080 }, + { 0x80400040, 0xc0702d29, 0x008a8070, 0x00800080 }, + { 0x80600040, 0xa4102d29, 0x008d8410, 0x00800080 }, + { 0x80600040, 0xa4302d29, 0x008d8430, 0x00800080 }, + { 0x80600040, 0xa4502d29, 0x008d8450, 0x00800080 }, + { 0x80600040, 0xa4702d29, 0x008d8470, 0x00800080 }, + { 0x80400040, 0xc8102d29, 0x008a8810, 0x00800080 }, + { 0x80400040, 0xc8302d29, 0x008a8830, 0x00800080 }, + { 0x80400040, 0xc8502d29, 0x008a8850, 0x00800080 }, + { 0x80400040, 0xc8702d29, 0x008a8870, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x08000800 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000002 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x02000200 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000004 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x00000006 }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x00000008 }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000a }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x06000600 }, + { 0x00000040, 0x23841ca5, 0x00000364, 0x0000000c }, + { 0x00000040, 0x24a41ca5, 0x00000364, 0x0000000e }, + { 0x00600401, 0xf8000231, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0xf8200231, 0x00cf8021, 0x00000000 }, + { 0x00800c01, 0xd0000231, 0x00d28401, 0x00000000 }, + { 0x00800c01, 0xd0200231, 0x00d28421, 0x00000000 }, + { 0x00600801, 0xf4000231, 0x00cf8801, 0x00000000 }, + { 0x00600801, 0xf4200231, 0x00cf8821, 0x00000000 }, + { 0x00600401, 0xf9200231, 0x00cf8041, 0x00000000 }, + { 0x00600401, 0xf9400231, 0x00cf8061, 0x00000000 }, + { 0x00800c01, 0xd1200231, 0x00d28441, 0x00000000 }, + { 0x00800c01, 0xd1400231, 0x00d28461, 0x00000000 }, + { 0x00600801, 0xf5200231, 0x00cf8841, 0x00000000 }, + { 0x00600801, 0xf5400231, 0x00cf8861, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x060a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.asm new file mode 100644 index 000000000..6123fc989 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PL2 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL3.g4a" +#include "PL3_AVS_Buf_0.g4a" +#include "PL3_AVS_Buf_1.g4a" +#include "PL3_AVS_Buf_2.g4a" +#include "PL3_AVS_Buf_3.g4a" +#include "Save_AVS_NV12.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g75b new file mode 100644 index 000000000..8aefed35d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g75b @@ -0,0 +1,666 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002c0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g7b new file mode 100644 index 000000000..3cd0fc129 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl2.g7b @@ -0,0 +1,666 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000058 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.asm new file mode 100644 index 000000000..0861513bc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PL3 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_PL3.g4a" +#include "PL3_AVS_Buf_0.g4a" +#include "PL3_AVS_Buf_1.g4a" +#include "PL3_AVS_Buf_2.g4a" +#include "PL3_AVS_Buf_3.g4a" +#include "Save_AVS_PL3.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g75b new file mode 100644 index 000000000..a11b13258 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g75b @@ -0,0 +1,619 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002c0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000002b0 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g7b new file mode 100644 index 000000000..1292798b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/pl3_to_pl3.g7b @@ -0,0 +1,619 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000058 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000056 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000d000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x00000001, 0x21d403bd, 0x00000228, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x00000001, 0x222803bd, 0x000001d4, 0x00000000 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044eb801 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e800229, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x044ebc02 }, + { 0x00000001, 0x22080061, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00200408, 0x24a03da5, 0x00450120, 0x00010001 }, + { 0x00200408, 0x25c03da5, 0x00450120, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x00070007 }, + { 0x00000801, 0x25c80061, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x80600040, 0xc8002d29, 0x00ae8800, 0x00800080 }, + { 0x80600040, 0xc8402d29, 0x00ae8840, 0x00800080 }, + { 0x80600040, 0xc0002d29, 0x00ae8000, 0x00800080 }, + { 0x80600040, 0xc0402d29, 0x00ae8040, 0x00800080 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x80600040, 0xd8002d29, 0x00ae9800, 0x00800080 }, + { 0x80600040, 0xd8402d29, 0x00ae9840, 0x00800080 }, + { 0x80600040, 0xd0002d29, 0x00ae9000, 0x00800080 }, + { 0x80600040, 0xd0402d29, 0x00ae9040, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24c80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x25e00231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x25e80231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24d00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24d80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x25f00231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x25f80231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x24e00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x24e80231, 0x00cf8841, 0x00000000 }, + { 0x00600401, 0x26000231, 0x00cf8001, 0x00000000 }, + { 0x00600c01, 0x26080231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600c01, 0x24f00231, 0x00cf9801, 0x00000000 }, + { 0x00600801, 0x24f80231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x26100231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x26180231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x060a8019 }, + { 0x05000031, 0x20000e24, 0x000005c0, 0x060a801a }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.asm new file mode 100644 index 000000000..8bf8bd81b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.asm @@ -0,0 +1,18 @@ +// Module name: AVS +.kernel RGBX_TO_NV12 +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_BGRA.g4a" +#include "PA_AVS_Buf_0.g4a" +#include "PA_AVS_Buf_1.g4a" +#include "PA_AVS_Buf_2.g4a" +#include "PA_AVS_Buf_3.g4a" +#include "RGB_to_YUV.g4a" +#include "Save_AVS_NV12.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g75b new file mode 100644 index 000000000..6b4697c57 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g75b @@ -0,0 +1,1059 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000090 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x000000f0 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000180 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x000000d0 }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000240 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000230 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x000001a0 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22000128, 0x006902c0, 0x00000000 }, + { 0x00400001, 0x22080128, 0x006902c0, 0x00000000 }, + { 0x02800005, 0x20003d2c, 0x00000040, 0x00010001 }, + { 0x00010001, 0x22200109, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22000108, 0x00000202, 0x00000000 }, + { 0x00010001, 0x22020128, 0x00000220, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g7b new file mode 100644 index 000000000..5b624ce86 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen7/rgbx_to_nv12.g7b @@ -0,0 +1,1059 @@ + { 0x00600001, 0x23600021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200021, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400021, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x206077bd, 0x008d0060, 0x00000130 }, + { 0x00200001, 0x211401bd, 0x00450120, 0x00000000 }, + { 0x01600010, 0x20002e24, 0x0000005a, 0x00010001 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00000000 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000114 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240003bc, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c077bd, 0x00000060, 0x00000220 }, + { 0x00000001, 0x240003bc, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a077bd, 0x00000080, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00020002 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000114 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240403bc, 0x000000c4, 0x00000000 }, + { 0x00110048, 0x20c477bd, 0x00000064, 0x00000220 }, + { 0x00000001, 0x240403bc, 0x000000a4, 0x00000000 }, + { 0x00000048, 0x20a477bd, 0x00000084, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00040004 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000114 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240803bc, 0x000000c8, 0x00000000 }, + { 0x00110048, 0x20c877bd, 0x00000068, 0x00000220 }, + { 0x00000001, 0x240803bc, 0x000000a8, 0x00000000 }, + { 0x00000048, 0x20a877bd, 0x00000088, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00060006 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000114 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x240c03bc, 0x000000cc, 0x00000000 }, + { 0x00110048, 0x20cc77bd, 0x0000006c, 0x00000220 }, + { 0x00000001, 0x240c03bc, 0x000000ac, 0x00000000 }, + { 0x00000048, 0x20ac77bd, 0x0000008c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x00080008 }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000114 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241003bc, 0x000000d0, 0x00000000 }, + { 0x00110048, 0x20d077bd, 0x00000070, 0x00000220 }, + { 0x00000001, 0x241003bc, 0x000000b0, 0x00000000 }, + { 0x00000048, 0x20b077bd, 0x00000090, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000a000a }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000114 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241403bc, 0x000000d4, 0x00000000 }, + { 0x00110048, 0x20d477bd, 0x00000074, 0x00000220 }, + { 0x00000001, 0x241403bc, 0x000000b4, 0x00000000 }, + { 0x00000048, 0x20b477bd, 0x00000094, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000c000c }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000114 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241803bc, 0x000000d8, 0x00000000 }, + { 0x00110048, 0x20d877bd, 0x00000078, 0x00000220 }, + { 0x00000001, 0x241803bc, 0x000000b8, 0x00000000 }, + { 0x00000048, 0x20b877bd, 0x00000098, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000008, 0x22202d29, 0x00000044, 0x000e000e }, + { 0x00000005, 0x22202d29, 0x00000220, 0x00030003 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00010001 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000012 }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00020002 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x01000010, 0x20002d2c, 0x02000220, 0x00030003 }, + { 0x00010220, 0x34001c00, 0x02001400, 0x00000030 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000114 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000118 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000118 }, + { 0x00000001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x00000024 }, + { 0x00110001, 0x2200013d, 0x00000040, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004114, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00000040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00000040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000220 }, + { 0x00000220, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00110001, 0x2200013d, 0x00000042, 0x00000000 }, + { 0x00110040, 0x222077bd, 0x00004118, 0x00000200 }, + { 0x00110040, 0x22207fbd, 0x00000220, 0xc1800000 }, + { 0x00110001, 0x241c03bc, 0x000000dc, 0x00000000 }, + { 0x00110048, 0x20dc77bd, 0x0000007c, 0x00000220 }, + { 0x00000001, 0x241c03bc, 0x000000bc, 0x00000000 }, + { 0x00000048, 0x20bc77bd, 0x0000009c, 0x00000114 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a00169, 0x00000000, 0xffffffff }, + { 0x02000010, 0x20002d24, 0x02000124, 0x00000000 }, + { 0x02010010, 0x20002d24, 0x02000126, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x0000001a }, + { 0x00000005, 0x23022d31, 0x00000044, 0x00030003 }, + { 0x00000401, 0x233803bd, 0x00000134, 0x00000000 }, + { 0x00000c01, 0x233003bd, 0x00000060, 0x00000000 }, + { 0x00000c01, 0x233403bd, 0x00000080, 0x00000000 }, + { 0x00000c01, 0x232803bd, 0x000000c0, 0x00000000 }, + { 0x00000801, 0x232c03bd, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x240803bc, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24087fbc, 0x00000060, 0x41000000 }, + { 0x00000448, 0x22e87fbd, 0x00000134, 0x41e00000 }, + { 0x00000c41, 0x22e47fbd, 0x00000080, 0x40800000 }, + { 0x00000001, 0x241003bc, 0x00000060, 0x00000000 }, + { 0x00000c48, 0x22f07fbd, 0x00000134, 0x41000000 }, + { 0x00000801, 0x22f40061, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006ea2 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00460046 }, + { 0x00400009, 0x22c02d8d, 0x00690400, 0x00050005 }, + { 0x00400001, 0x2400036c, 0x00000000, 0x00006204 }, + { 0x00400040, 0x24002d8c, 0x00690400, 0x00400040 }, + { 0x00400409, 0x22402d8d, 0x00690400, 0x00050005 }, + { 0x00000801, 0x22500061, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00061, 0x00000000, 0x00400040 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000048 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000401, 0x233c0021, 0x0000013c, 0x00000000 }, + { 0x00000801, 0x23240121, 0x00000138, 0x00000000 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x28000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000001 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2a000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000002 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2c000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00110220, 0x34001c00, 0x02001400, 0x00000046 }, + { 0x00000040, 0x22000c20, 0x000002f4, 0x050eb400 }, + { 0x00000001, 0x22080061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23240d21, 0x00000138, 0x00000003 }, + { 0x00600001, 0x22200021, 0x008d0320, 0x00000000 }, + { 0x00000001, 0x21d00109, 0x00000600, 0x00000000 }, + { 0x02000005, 0x20002d28, 0x00000046, 0x00020002 }, + { 0x00110220, 0x34001c00, 0x00001400, 0x00000034 }, + { 0x02600005, 0x20002d28, 0x00000046, 0x00040004 }, + { 0x00610001, 0x240003bc, 0x00000228, 0x00000000 }, + { 0x00610048, 0x24007fbc, 0x00000230, 0xc0000000 }, + { 0x00610048, 0x24007fbc, 0x00000238, 0x40400000 }, + { 0x00010001, 0x21c8039d, 0x00210400, 0x00000000 }, + { 0x00110001, 0x21c803bd, 0x00000228, 0x00000000 }, + { 0x00000005, 0x21c42d21, 0x00000046, 0xfff8fff8 }, + { 0x0000000c, 0x21c41c21, 0x000001c4, 0x00000003 }, + { 0x00000001, 0x21c4003d, 0x000001c4, 0x00000000 }, + { 0x00000041, 0x21c077bd, 0x000001c8, 0x000001c4 }, + { 0x00000040, 0x21c87fbd, 0x000001c0, 0x3ca00000 }, + { 0x00000040, 0x21cc7fbd, 0x000001c0, 0x3f7f0000 }, + { 0x05000010, 0x20007fbc, 0x000001c0, 0x00000000 }, + { 0x00000001, 0x21c003a5, 0x000001c0, 0x00000000 }, + { 0x00010040, 0x21c01ca5, 0x000001c0, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001c8, 0x00000000 }, + { 0x00000001, 0x21c803a5, 0x000001c8, 0x00000000 }, + { 0x00010040, 0x21c81ca5, 0x000001c8, 0xffffffff }, + { 0x05000010, 0x20007fbc, 0x000001cc, 0x00000000 }, + { 0x00000001, 0x21cc03a5, 0x000001cc, 0x00000000 }, + { 0x00010040, 0x21cc1ca5, 0x000001cc, 0xffffffff }, + { 0x00000001, 0x26000168, 0x00000000, 0x00000000 }, + { 0x03000010, 0x200014a4, 0x040001c8, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x04000228, 0x0000404c }, + { 0x01110010, 0x200014a4, 0x000001cc, 0x000001c0 }, + { 0x00010040, 0x222877bd, 0x00000228, 0x00000048 }, + { 0x00000001, 0x26000128, 0x000001d0, 0x00000000 }, + { 0x02000031, 0x2e000229, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22000128, 0x006902c0, 0x00000000 }, + { 0x00400001, 0x22080128, 0x006902c0, 0x00000000 }, + { 0x02800005, 0x20003d2c, 0x00000040, 0x00010001 }, + { 0x00010001, 0x22200109, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22000108, 0x00000202, 0x00000000 }, + { 0x00010001, 0x22020128, 0x00000220, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22002d08, 0x008d0200, 0x02000200 }, + { 0x00600001, 0x2380023d, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8801, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8811, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0000169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4010231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8010231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0010231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8821, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8831, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0200169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4210231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8210231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0210231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8841, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8851, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0400169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4410231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8410231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0410231, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x2380023d, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23a0023d, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x23c0023d, 0x00ae8861, 0x00000000 }, + { 0x00600001, 0x23e0023d, 0x00ae8871, 0x00000000 }, + { 0x00600001, 0x2400023d, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x2420023d, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24007fbc, 0x008d0380, 0x3e991687 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24807fbd, 0x008d0400, 0x3de978d5 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c07fbd, 0x008d0400, 0x3eff7cee }, + { 0x00800001, 0x240003fc, 0x00000000, 0x43000000 }, + { 0x00800048, 0x24007fbc, 0x008d0380, 0x3eff7cee }, + { 0x00800048, 0x24007fbc, 0x008d03c0, 0xbed60419 }, + { 0x00800048, 0x25007fbd, 0x008d0400, 0xbda6809d }, + { 0x00800001, 0x454003ad, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x458003ad, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c003ad, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xb4600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb8600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xb0600169, 0x00000000, 0x00000000 }, + { 0x00800001, 0xd4610231, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xd8610231, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xd0610231, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00600001, 0x23800021, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d0360, 0x00000000 }, + { 0x00200401, 0x238001a5, 0x00450120, 0x00000000 }, + { 0x00000401, 0x24a001a5, 0x00000120, 0x00000000 }, + { 0x00000c08, 0x24a43da5, 0x00000122, 0x00010001 }, + { 0x00000801, 0x23880061, 0x00000000, 0x000f000f }, + { 0x00000801, 0x24a80061, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x80800040, 0xa4002d29, 0x00b18400, 0x00800080 }, + { 0x80800040, 0xa4202d29, 0x00b18420, 0x00800080 }, + { 0x80800040, 0xa4402d29, 0x00b18440, 0x00800080 }, + { 0x80800040, 0xa4602d29, 0x00b18460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae8800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae8820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae8840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae8860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xc8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae8000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae8020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae8040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae8060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x80800040, 0xb4002d29, 0x00b19400, 0x00800080 }, + { 0x80800040, 0xb4202d29, 0x00b19420, 0x00800080 }, + { 0x80800040, 0xb4402d29, 0x00b19440, 0x00800080 }, + { 0x80800040, 0xb4602d29, 0x00b19460, 0x00800080 }, + { 0x00600008, 0x45c03d29, 0x00ae9800, 0x00010001 }, + { 0x00600008, 0x45e03d29, 0x00ae9820, 0x00010001 }, + { 0x00600008, 0x46003d29, 0x00ae9840, 0x00010001 }, + { 0x00600008, 0x46203d29, 0x00ae9860, 0x00010001 }, + { 0x00600040, 0x45c02529, 0x00ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xd8002d29, 0x00ae05c0, 0x00800080 }, + { 0x00600040, 0x46002529, 0x00ae0600, 0x00ae0620 }, + { 0x80600040, 0xd8402d29, 0x00ae0600, 0x00800080 }, + { 0x00600008, 0x46403d29, 0x00ae9000, 0x00010001 }, + { 0x00600008, 0x46603d29, 0x00ae9020, 0x00010001 }, + { 0x00600008, 0x46803d29, 0x00ae9040, 0x00010001 }, + { 0x00600008, 0x46a03d29, 0x00ae9060, 0x00010001 }, + { 0x00600040, 0x46402529, 0x00ae0640, 0x00ae0660 }, + { 0x80600040, 0xd0002d29, 0x00ae0640, 0x00800080 }, + { 0x00600040, 0x46802529, 0x00ae0680, 0x00ae06a0 }, + { 0x80600040, 0xd0402d29, 0x00ae0680, 0x00800080 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x02000200 }, + { 0x00800401, 0x23a00231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x23b00231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x23c00231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x23d00231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x44c00231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x44d00231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x44c10231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x44d10231, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22002da8, 0x006902c0, 0x04000400 }, + { 0x00800401, 0x23e00231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x23f00231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24000231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24100231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x44e00231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x44f00231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x44e10231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x44f10231, 0x00cf9041, 0x00000000 }, + { 0x00400040, 0x22082da8, 0x006902c0, 0x06000600 }, + { 0x00800401, 0x24200231, 0x00d28401, 0x00000000 }, + { 0x00800801, 0x24300231, 0x00d28421, 0x00000000 }, + { 0x00800401, 0x24400231, 0x00d28441, 0x00000000 }, + { 0x00800801, 0x24500231, 0x00d28461, 0x00000000 }, + { 0x00600401, 0x45000231, 0x00cf8801, 0x00000000 }, + { 0x00600c01, 0x45100231, 0x00cf8841, 0x00000000 }, + { 0x00600c01, 0x45010231, 0x00cf8001, 0x00000000 }, + { 0x00600801, 0x45110231, 0x00cf8041, 0x00000000 }, + { 0x00800401, 0x24600231, 0x00d29401, 0x00000000 }, + { 0x00800801, 0x24700231, 0x00d29421, 0x00000000 }, + { 0x00800401, 0x24800231, 0x00d29441, 0x00000000 }, + { 0x00800801, 0x24900231, 0x00d29461, 0x00000000 }, + { 0x00600401, 0x45200231, 0x00cf9801, 0x00000000 }, + { 0x00600c01, 0x45300231, 0x00cf9841, 0x00000000 }, + { 0x00600c01, 0x45210231, 0x00cf9001, 0x00000000 }, + { 0x00600801, 0x45310231, 0x00cf9041, 0x00000000 }, + { 0x05000031, 0x20000e24, 0x00000380, 0x120a8018 }, + { 0x05000031, 0x20000e24, 0x000004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20001e24, 0x00000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.am new file mode 100644 index 000000000..cdad1d900 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.am @@ -0,0 +1,9 @@ +INTEL_PP_PRE_G75B = \ + sharpening_h_blur.g75b \ + sharpening_unmask.g75b \ + sharpening_v_blur.g75b + +EXTRA_DIST = $(INTEL_PP_PRE_G75B) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.in new file mode 100644 index 000000000..a50d63c1c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/Makefile.in @@ -0,0 +1,458 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/shaders/post_processing/gen75 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_PP_PRE_G75B = \ + sharpening_h_blur.g75b \ + sharpening_unmask.g75b \ + sharpening_v_blur.g75b + +EXTRA_DIST = $(INTEL_PP_PRE_G75B) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/gen75/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/gen75/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_h_blur.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_h_blur.g75b new file mode 100644 index 000000000..d81319c63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_h_blur.g75b @@ -0,0 +1,1718 @@ +{ 0x00000001, 0x23400161, 0x00000000, 0x00000000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x23440161, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0007 }, +{ 0x00000001, 0x20400161, 0x00000000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000340, 0x02490000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x00000001, 0x202c0161, 0x00000000, 0x00040004 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20243c21, 0x00000020, 0xfffcfffc }, +{ 0x06000010, 0x20002c20, 0x02000024, 0x00040004 }, +{ 0x00200001, 0x232803bd, 0x004500b0, 0x00000000 }, +{ 0x00200001, 0x230803bd, 0x004500a0, 0x00000000 }, +{ 0x00200001, 0x22e803bd, 0x00450090, 0x00000000 }, +{ 0x00200001, 0x22c803bd, 0x00450080, 0x00000000 }, +{ 0x00200001, 0x22a803bd, 0x00450070, 0x00000000 }, +{ 0x00200001, 0x228803bd, 0x00450060, 0x00000000 }, +{ 0x00200001, 0x226803bd, 0x00450050, 0x00000000 }, +{ 0x00200001, 0x224803bd, 0x00450040, 0x00000000 }, +{ 0x00200001, 0x233803bd, 0x004500b8, 0x00000000 }, +{ 0x00200001, 0x231803bd, 0x004500a8, 0x00000000 }, +{ 0x00200001, 0x22f803bd, 0x00450098, 0x00000000 }, +{ 0x00200001, 0x22d803bd, 0x00450088, 0x00000000 }, +{ 0x00200001, 0x22b803bd, 0x00450078, 0x00000000 }, +{ 0x00200001, 0x229803bd, 0x00450068, 0x00000000 }, +{ 0x00200001, 0x227803bd, 0x00450058, 0x00000000 }, +{ 0x00200001, 0x225803bd, 0x00450048, 0x00000000 }, +{ 0x00010220, 0x34001c00, 0x02001400, 0x000067d0 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000340, 0x02490000 }, +{ 0x00200001, 0x226003bd, 0x00450268, 0x00000000 }, +{ 0x00200001, 0x224003bd, 0x00450248, 0x00000000 }, +{ 0x00200001, 0x228003bd, 0x00450288, 0x00000000 }, +{ 0x00200001, 0x22c003bd, 0x004502c8, 0x00000000 }, +{ 0x00200001, 0x22a003bd, 0x004502a8, 0x00000000 }, +{ 0x00200001, 0x232003bd, 0x00450328, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0007 }, +{ 0x00200001, 0x230003bd, 0x00450308, 0x00000000 }, +{ 0x00200001, 0x22e003bd, 0x004502e8, 0x00000000 }, +{ 0x00000040, 0x20402c21, 0x0000002c, 0x00040004 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00200001, 0x227003bd, 0x00450278, 0x00000000 }, +{ 0x00200001, 0x225003bd, 0x00450258, 0x00000000 }, +{ 0x00200001, 0x226803bd, 0x00450050, 0x00000000 }, +{ 0x00200001, 0x224803bd, 0x00450040, 0x00000000 }, +{ 0x00200001, 0x227803bd, 0x00450058, 0x00000000 }, +{ 0x00200001, 0x225803bd, 0x00450048, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000240, 0x00000000 }, +{ 0x00200001, 0x229003bd, 0x00450298, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000250, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000260, 0x00000000 }, +{ 0x00200001, 0x228803bd, 0x00450060, 0x00000000 }, +{ 0x00200001, 0x22d003bd, 0x004502d8, 0x00000000 }, +{ 0x00200001, 0x22b003bd, 0x004502b8, 0x00000000 }, +{ 0x00200001, 0x229803bd, 0x00450068, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000270, 0x00000000 }, +{ 0x00200001, 0x22c803bd, 0x00450080, 0x00000000 }, +{ 0x00200001, 0x22a803bd, 0x00450070, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000280, 0x00000000 }, +{ 0x00200001, 0x22d803bd, 0x00450088, 0x00000000 }, +{ 0x00200001, 0x22b803bd, 0x00450078, 0x00000000 }, +{ 0x00200001, 0x233003bd, 0x00450338, 0x00000000 }, +{ 0x00200001, 0x231003bd, 0x00450318, 0x00000000 }, +{ 0x00200001, 0x22f003bd, 0x004502f8, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000290, 0x00000000 }, +{ 0x00200001, 0x22e803bd, 0x00450090, 0x00000000 }, +{ 0x00200001, 0x230803bd, 0x004500a0, 0x00000000 }, +{ 0x00200001, 0x232803bd, 0x004500b0, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a0, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c0, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d0, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b0, 0x00000000 }, +{ 0x00200001, 0x233803bd, 0x004500b8, 0x00000000 }, +{ 0x00200001, 0x231803bd, 0x004500a8, 0x00000000 }, +{ 0x00200001, 0x22f803bd, 0x00450098, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e0, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c1, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000241, 0x00000000 }, +{ 0x00000001, 0x203003fd, 0x00000000, 0x332bcc77 }, +{ 0x00000001, 0x214003fd, 0x00000000, 0x3c1d98ad }, +{ 0x00000001, 0x206c023d, 0x000002f0, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d1, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000251, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000261, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e1, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f1, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000271, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000281, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000301, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000311, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000291, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a1, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000321, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000331, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b1, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x2080023d, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a2, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x209c023d, 0x000002b2, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d2, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000300, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000310, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000320, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000330, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000322, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20bc023d, 0x00000332, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a3, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x209c023d, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x215003fd, 0x00000000, 0x3e525448 }, +{ 0x00000001, 0x216003fd, 0x00000000, 0x3f11e168 }, +{ 0x00000001, 0x20a4023d, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000303, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b4023d, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2088023d, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000314, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x2080023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000265, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a0023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b5, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b4023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x217003fd, 0x00000000, 0x3875735f }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x218003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61a000b1, 0x00000180, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c1, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000241, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x61a800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61b800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61c800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61d800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61e800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61f800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d1, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000251, 0x00000000 }, +{ 0x00000001, 0x620000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000261, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e1, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f1, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000271, 0x00000000 }, +{ 0x00000001, 0x620800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000281, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000301, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000311, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000291, 0x00000000 }, +{ 0x00000001, 0x621000b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a1, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000321, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000331, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b1, 0x00000000 }, +{ 0x00000001, 0x621800b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d2, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a2, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000322, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000332, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b2, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x2080023d, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c3, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x2084023d, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x00000244, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b4, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc023d, 0x00000334, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2080023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61a900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b100b1, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61b900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61c900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61d900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x61e100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61e900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x61f900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d2, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x620100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x620900b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x621100b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a2, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000333, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000322, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000332, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x205c023d, 0x000002b2, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x621900b1, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x2080023d, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b4, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x41aa0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41ba0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41ca0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41da0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41ea0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f20231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fa0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42020231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420a0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42120231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000323, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x205c023d, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x421a0231, 0x00000024, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x2080023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a0023d, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20bc023d, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x41ab0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41bb0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41cb0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41db0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41eb0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f30231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fb0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42030231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420b0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42130231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000335, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x207c023d, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x421b0231, 0x00000024, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x208c023d, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bb, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030b, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20b4023d, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61ac00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61bc00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dc, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61cc00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61dc00b1, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61ec00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61fc00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x620400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x620c00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x621400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b6, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x2064023d, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000335, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x621c00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ab, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a0023d, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a4023d, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x2098023d, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x2080023d, 0x0000024d, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ad, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a0023d, 0x000002cd, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bd, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20a8023d, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61ad00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61bd00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61cd00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033d, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61dd00b1, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61ed00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61fd00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x620500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x620d00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x621500b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b6, 0x00000000 }, +{ 0x00000001, 0x621d00b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b7, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a0023d, 0x000002cb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x2080023d, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c023d, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a8023d, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024d, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002cd, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dd, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ad, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc023d, 0x0000033d, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x2080023d, 0x0000024e, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025e, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002ce, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002de, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026e, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027e, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ee, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fe, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028e, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029e, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030e, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031e, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ae, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002be, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032e, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033e, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x222003a5, 0x00000100, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41ae0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2040023d, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x2060023d, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41be0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41ce0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41de0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x41ee0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f60231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fe0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2044023d, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42060231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2048023d, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x204c023d, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420e0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2050023d, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x2054023d, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x222003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42160231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x2058023d, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x2064023d, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x205c023d, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x421e0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x2068023d, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x206c023d, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b8, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00000001, 0x2080023d, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002c9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x2084023d, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002d9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x2080023d, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x2070023d, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x2074023d, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x2078023d, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x207c023d, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x00000329, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20bc023d, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002aa, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002da, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20a8023d, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ab, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a0023d, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20a4023d, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x2098023d, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x2080023d, 0x0000024d, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ad, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c023d, 0x000002bd, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a4023d, 0x000002dd, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033d, 0x00000000 }, +{ 0x00000001, 0x2080023d, 0x0000024e, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a0023d, 0x000002ce, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025e, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026e, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002de, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ee, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027e, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028e, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002fe, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030e, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029e, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002ae, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031e, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032e, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002be, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc023d, 0x0000033e, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x2080023d, 0x0000024f, 0x00000000 }, +{ 0x00000001, 0x2084023d, 0x0000025f, 0x00000000 }, +{ 0x00000001, 0x20a0023d, 0x000002cf, 0x00000000 }, +{ 0x00000001, 0x20a4023d, 0x000002df, 0x00000000 }, +{ 0x00000001, 0x2088023d, 0x0000026f, 0x00000000 }, +{ 0x00000001, 0x208c023d, 0x0000027f, 0x00000000 }, +{ 0x00000001, 0x20a8023d, 0x000002ef, 0x00000000 }, +{ 0x00000001, 0x20ac023d, 0x000002ff, 0x00000000 }, +{ 0x00000001, 0x2090023d, 0x0000028f, 0x00000000 }, +{ 0x00000001, 0x2094023d, 0x0000029f, 0x00000000 }, +{ 0x00000001, 0x20b0023d, 0x0000030f, 0x00000000 }, +{ 0x00000001, 0x20b4023d, 0x0000031f, 0x00000000 }, +{ 0x00000001, 0x2098023d, 0x000002af, 0x00000000 }, +{ 0x00000001, 0x209c023d, 0x000002bf, 0x00000000 }, +{ 0x00000001, 0x20b8023d, 0x0000032f, 0x00000000 }, +{ 0x00000001, 0x20bc023d, 0x0000033f, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x204003a5, 0x00000100, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x41af0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000108, 0x00000000 }, +{ 0x00600001, 0x218003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000344, 0x0a0a8000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41bf0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41cf0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41df0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x41ef0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f70231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41ff0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42070231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420f0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x204003a5, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42170231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x21880061, 0x00000000, 0x000f0007 }, +{ 0x00000001, 0x602400b1, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x218003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x421f0231, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x218403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000180, 0x00000200 }, +{ 0x00000040, 0x202c2c21, 0x0000002c, 0x00080008 }, +{ 0x00000040, 0x20243c21, 0x00000020, 0xfffcfffc }, +{ 0x05000010, 0x20000420, 0x0000002c, 0x00000024 }, +{ 0x00010220, 0x34001c00, 0x00001400, 0xffff9830 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000340, 0x02290000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20400161, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00800001, 0x206003bd, 0x008d0040, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000344, 0x060a8000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20400161, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20243c21, 0x00000020, 0xfffcfffc }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000340, 0x02290000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x204003bd, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00800001, 0x206003bd, 0x008d0040, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000344, 0x060a8000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x204003bd, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x2e0003bd, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20000fa0, 0x00000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_unmask.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_unmask.g75b new file mode 100644 index 000000000..e0baf3bc2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_unmask.g75b @@ -0,0 +1,170 @@ +{ 0x00000001, 0x21280161, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x202c0161, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x21480161, 0x00000000, 0x00050005 }, +{ 0x00000001, 0x21680161, 0x00000000, 0x00040004 }, +{ 0x00000001, 0x21880161, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x21080161, 0x00000000, 0x00010001 }, +{ 0x06000010, 0x20002c20, 0x04000020, 0x00000000 }, +{ 0x00010220, 0x34001c00, 0x04001400, 0x00000530 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000128, 0x02190000 }, +{ 0x06000010, 0x20002c20, 0x02000030, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x00030003 }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x206003a1, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x22000c20, 0x00000188, 0x02190000 }, +{ 0x00400001, 0x21a003bd, 0x00690060, 0x00000000 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00400001, 0x21c003bd, 0x00690040, 0x00000000 }, +{ 0x00010220, 0x34001c00, 0x02001400, 0x00000150 }, +{ 0x00000001, 0x218201ed, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x217003bd, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x006901c0, 0x00000000 }, +{ 0x0020002c, 0x21601c01, 0x00490000, 0x00000460 }, +{ 0x00000001, 0x210c01ed, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x217003bd, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x00690150, 0x00000000 }, +{ 0x0020002c, 0x21201c01, 0x00490000, 0x00000500 }, +{ 0x00400001, 0x217003bd, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x218001ed, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x215003bd, 0x00690150, 0x00000000 }, +{ 0x0020002c, 0x21001c01, 0x00490000, 0x00000570 }, +{ 0x00000001, 0x218001ed, 0x00000000, 0x00800080 }, +{ 0x0020002c, 0x21001c01, 0x00490000, 0x00000550 }, +{ 0x00000001, 0x4180002d, 0x00000030, 0x00000000 }, +{ 0x00400001, 0x217003bd, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x202401ad, 0x00000180, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x006901a0, 0x00000000 }, +{ 0x0020002c, 0x21001c01, 0x00490000, 0x00000500 }, +{ 0x00400001, 0x219003bd, 0x00690150, 0x00000000 }, +{ 0x00000220, 0x34001c00, 0x00001400, 0x00000010 }, +{ 0x00400001, 0x219003bd, 0x006901a0, 0x00000000 }, +{ 0x01000010, 0x20002c20, 0x00000034, 0x00000000 }, +{ 0x00010220, 0x34001c00, 0x00001400, 0x00000160 }, +{ 0x00000001, 0x210e01ed, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x217003bd, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x006901c0, 0x00000000 }, +{ 0x0020002c, 0x21801c01, 0x00490000, 0x000005e0 }, +{ 0x00000001, 0x210c01ed, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x217003bd, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x00690150, 0x00000000 }, +{ 0x0020002c, 0x21201c01, 0x00490000, 0x00000380 }, +{ 0x00600040, 0x41503e31, 0x00ae4150, 0x00ff00ff }, +{ 0x00000001, 0x211001ed, 0x00000000, 0x00800080 }, +{ 0x00600040, 0x41513e31, 0x00ae4151, 0x00ff00ff }, +{ 0x00400001, 0x217003bd, 0x00690150, 0x00000000 }, +{ 0x0020002c, 0x21401c01, 0x00490000, 0x00000630 }, +{ 0x00000001, 0x211001ed, 0x00000000, 0x00800080 }, +{ 0x0020002c, 0x21401c01, 0x00490000, 0x00000610 }, +{ 0x00000001, 0x4110002d, 0x00000034, 0x00000000 }, +{ 0x00400001, 0x217003bd, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x202401ad, 0x00000110, 0x00000000 }, +{ 0x00400001, 0x215003bd, 0x00690190, 0x00000000 }, +{ 0x0020002c, 0x21401c01, 0x00490000, 0x000005c0 }, +{ 0x00400001, 0x21e003bd, 0x00690150, 0x00000000 }, +{ 0x00000220, 0x34001c00, 0x00001400, 0x00000010 }, +{ 0x00400001, 0x21e003bd, 0x00690190, 0x00000000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000168, 0x040a8000 }, +{ 0x00400001, 0x206003bd, 0x006901e0, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x00030003 }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x0000000c, 0x20242c21, 0x00000028, 0x00010001 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000108, 0x02190000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x00010003 }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000024, 0x00000000 }, +{ 0x0c600031, 0x204003a1, 0x00000040, 0x00000200 }, +{ 0x00200001, 0x206003bd, 0x00450040, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000148, 0x040a8000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x00010003 }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000024, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x202c2c21, 0x0000002c, 0x00040004 }, +{ 0x05000010, 0x20000420, 0x0600002c, 0x00000020 }, +{ 0x00010220, 0x34001c00, 0x06001400, 0xfffffad0 }, +{ 0x00600001, 0x2e0003bd, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20000fa0, 0x00000e00, 0x82000010 }, +{ 0x00000040, 0x20243da5, 0x00004182, 0x00800080 }, +{ 0x00600041, 0x20c03625, 0x008d0178, 0x00000182 }, +{ 0x00600041, 0x20803625, 0x008d0170, 0x00000182 }, +{ 0x05600010, 0x2000462c, 0x00ae0170, 0x00ae0150 }, +{ 0x00600041, 0x206044a5, 0x00000024, 0x008d0158 }, +{ 0x00600041, 0x204044a5, 0x00000024, 0x008d0150 }, +{ 0x00600040, 0x20a014a5, 0x008d00c0, 0x008d0060 }, +{ 0x00600040, 0x208014a5, 0x008d0080, 0x008d0040 }, +{ 0x0080000c, 0x40403cad, 0x008d0080, 0x00070007 }, +{ 0x05601010, 0x2000462c, 0x00ae0171, 0x00ae0151 }, +{ 0x00800001, 0x204001ad, 0x00ae0040, 0x00000000 }, +{ 0x00610001, 0x415001b1, 0x00ae0040, 0x00000000 }, +{ 0x00611001, 0x415101b1, 0x00ae0042, 0x00000000 }, +{ 0x0020002d, 0x20000024, 0x00450160, 0x00000000 }, +{ 0x00800040, 0x2040462d, 0x00b10150, 0x00b14170 }, +{ 0x00000040, 0x20243da5, 0x0000410c, 0x00800080 }, +{ 0x05800010, 0x20003dac, 0x04b10040, 0x00000000 }, +{ 0x00810001, 0x204001ad, 0x04b14040, 0x00000000 }, +{ 0x00600041, 0x208044a5, 0x00000024, 0x008d0158 }, +{ 0x00600041, 0x206044a5, 0x00000024, 0x008d0150 }, +{ 0x00800041, 0x20a035a5, 0x008d0040, 0x0000010c }, +{ 0x00800040, 0x204014a5, 0x008d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60403cb1, 0x008d0040, 0x00070007 }, +{ 0x00800001, 0x21500231, 0x00cf0040, 0x00000000 }, +{ 0x0020002d, 0x20000024, 0x00450120, 0x00000000 }, +{ 0x00600040, 0x20803e25, 0x008d4170, 0x00ff00ff }, +{ 0x00600040, 0x20403e25, 0x008d4150, 0x00ff00ff }, +{ 0x00600040, 0x20a03e25, 0x008d4178, 0x00ff00ff }, +{ 0x00600040, 0x20603e25, 0x008d4158, 0x00ff00ff }, +{ 0x00000040, 0x20243da5, 0x00004180, 0x00800080 }, +{ 0x10600041, 0x240014a4, 0x008d0040, 0x008d0080 }, +{ 0x10600049, 0x200014a4, 0x008d0040, 0x008d0080 }, +{ 0x00600001, 0x20c00085, 0x008d0400, 0x00000000 }, +{ 0x10600041, 0x240014a4, 0x008d0060, 0x008d00a0 }, +{ 0x10600049, 0x200014a4, 0x008d0060, 0x008d00a0 }, +{ 0x00600001, 0x20e00085, 0x008d0400, 0x00000000 }, +{ 0x00000001, 0x204001e5, 0x00000000, 0x00ff00ff }, +{ 0x0c600038, 0x208014a5, 0x008d00e0, 0x00000040 }, +{ 0x0c600038, 0x206014a5, 0x008d00c0, 0x00000040 }, +{ 0x00800040, 0x40403cad, 0x008d4060, 0x00ff00ff }, +{ 0x00800001, 0x204001ad, 0x00ae0040, 0x00000000 }, +{ 0x00600041, 0x208044a5, 0x00000024, 0x008d0158 }, +{ 0x00800041, 0x20a035a5, 0x008d0040, 0x00000180 }, +{ 0x00600041, 0x206044a5, 0x00000024, 0x008d0150 }, +{ 0x00800040, 0x204014a5, 0x008d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60403cb1, 0x008d0040, 0x00070007 }, +{ 0x00800001, 0x21500231, 0x00cf0040, 0x00000000 }, +{ 0x0020002d, 0x20000024, 0x00450100, 0x00000000 }, +{ 0x00000040, 0x20243da5, 0x0000410e, 0x00800080 }, +{ 0x00600041, 0x20c03625, 0x008d0178, 0x0000010e }, +{ 0x00600041, 0x20803625, 0x008d0170, 0x0000010e }, +{ 0x03600010, 0x2000462c, 0x02ae0170, 0x00ae0150 }, +{ 0x00600041, 0x206044a5, 0x00000024, 0x008d0158 }, +{ 0x00600041, 0x204044a5, 0x00000024, 0x008d0150 }, +{ 0x00600040, 0x20a014a5, 0x008d00c0, 0x008d0060 }, +{ 0x00600040, 0x208014a5, 0x008d0080, 0x008d0040 }, +{ 0x0080000c, 0x40403cad, 0x008d0080, 0x00070007 }, +{ 0x03601010, 0x2000462c, 0x02ae0171, 0x00ae0151 }, +{ 0x00800001, 0x204001ad, 0x00ae0040, 0x00000000 }, +{ 0x00610001, 0x415001b1, 0x02ae0040, 0x00000000 }, +{ 0x00611001, 0x415101b1, 0x02ae0042, 0x00000000 }, +{ 0x0020002d, 0x20000024, 0x00450180, 0x00000000 }, +{ 0x00000001, 0x208001e5, 0x00000000, 0x00ff00ff }, +{ 0x00600041, 0x20604625, 0x008d0178, 0x008d0158 }, +{ 0x00600041, 0x20404625, 0x008d0170, 0x008d0150 }, +{ 0x00000040, 0x20243da5, 0x00004110, 0x00800080 }, +{ 0x0c600038, 0x20c014a5, 0x008d0060, 0x00000080 }, +{ 0x0c600038, 0x20a014a5, 0x008d0040, 0x00000080 }, +{ 0x00800001, 0x404000ad, 0x008d00a0, 0x00000000 }, +{ 0x00800001, 0x204001ad, 0x00ae0040, 0x00000000 }, +{ 0x00600041, 0x208044a5, 0x00000024, 0x008d0158 }, +{ 0x00800041, 0x20a035a5, 0x008d0040, 0x00000110 }, +{ 0x00600041, 0x206044a5, 0x00000024, 0x008d0150 }, +{ 0x00800040, 0x204014a5, 0x008d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60403cb1, 0x008d0040, 0x00070007 }, +{ 0x00800001, 0x21500231, 0x00cf0040, 0x00000000 }, +{ 0x0020002d, 0x20000024, 0x00450140, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_v_blur.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_v_blur.g75b new file mode 100644 index 000000000..665754037 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen75/sharpening_v_blur.g75b @@ -0,0 +1,368 @@ +{ 0x00000001, 0x23600161, 0x00000000, 0x00000000 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x23640161, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0007000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000360, 0x02490000 }, +{ 0x00000001, 0x20440161, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x20280161, 0x00000000, 0x00040004 }, +{ 0x0c600031, 0x22e003a1, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20203c21, 0x00000024, 0xfffcfffc }, +{ 0x06000010, 0x20002c20, 0x02000020, 0x00040004 }, +{ 0x00010220, 0x34001c00, 0x02001400, 0x00001470 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000360, 0x02490000 }, +{ 0x00800001, 0x22a003bd, 0x008d0320, 0x00000000 }, +{ 0x00800001, 0x226003bd, 0x008d02e0, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0007000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000040, 0x20442c21, 0x00000028, 0x00040004 }, +{ 0x00600001, 0x20a0023d, 0x008d0278, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0270, 0x00000000 }, +{ 0x00600001, 0x2060023d, 0x008d0268, 0x00000000 }, +{ 0x0c600031, 0x22e003a1, 0x00000040, 0x00000200 }, +{ 0x00000001, 0x202003fd, 0x00000000, 0x332bcc77 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00600001, 0x2040023d, 0x008d0260, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x00600001, 0x20a0023d, 0x008d0288, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0280, 0x00000000 }, +{ 0x00000001, 0x214003fd, 0x00000000, 0x3e525448 }, +{ 0x00000001, 0x216003fd, 0x00000000, 0x3875735f }, +{ 0x00600001, 0x2040023d, 0x008d0270, 0x00000000 }, +{ 0x00000001, 0x203003fd, 0x00000000, 0x3c1d98ad }, +{ 0x00600001, 0x2060023d, 0x008d0278, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x20a0023d, 0x008d0298, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0290, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00600001, 0x20a0023d, 0x008d02a8, 0x00000000 }, +{ 0x00000001, 0x215003fd, 0x00000000, 0x3f11e168 }, +{ 0x00600001, 0x2080023d, 0x008d02a0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00600001, 0x20a0023d, 0x008d02b8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02b0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x00600001, 0x20a0023d, 0x008d0288, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0280, 0x00000000 }, +{ 0x00800001, 0x218003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x618000b1, 0x008d0180, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0298, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0290, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d02a0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02a8, 0x00000000 }, +{ 0x00800001, 0x21a00231, 0x00cf0180, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02b0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2060023d, 0x008d0288, 0x00000000 }, +{ 0x00600001, 0x2040023d, 0x008d0280, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00600001, 0x2080023d, 0x008d0290, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0298, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02a8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02a0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d02b0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02b8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x21b00231, 0x00cf0220, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x00600001, 0x2060023d, 0x008d0298, 0x00000000 }, +{ 0x00600001, 0x2040023d, 0x008d0290, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x00600001, 0x20a0023d, 0x008d02a8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02a0, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02b8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02b0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2040023d, 0x008d02a0, 0x00000000 }, +{ 0x00600001, 0x2060023d, 0x008d02a8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00600001, 0x2080023d, 0x008d0310, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0318, 0x00000000 }, +{ 0x00800001, 0x21c00231, 0x00cf0220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00600001, 0x2080023d, 0x008d02b0, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02b8, 0x00000000 }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x21d00231, 0x00cf0220, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x00600001, 0x2040023d, 0x008d02b0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00600001, 0x2060023d, 0x008d02b8, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00600001, 0x20a0023d, 0x008d0318, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0310, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00600001, 0x20a0023d, 0x008d0328, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0320, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x00600001, 0x20a0023d, 0x008d02c8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02c0, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x00800001, 0x21e00231, 0x00cf0220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2060023d, 0x008d02c8, 0x00000000 }, +{ 0x00600001, 0x2040023d, 0x008d02c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00600001, 0x2080023d, 0x008d0310, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0318, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d0320, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0328, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00600001, 0x2080023d, 0x008d0330, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00600001, 0x2080023d, 0x008d02d0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02d8, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2080023d, 0x008d0310, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0318, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d0320, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0328, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d0330, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x21f00231, 0x00cf0220, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d0340, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0348, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x00600001, 0x2080023d, 0x008d02e0, 0x00000000 }, +{ 0x00600001, 0x2060023d, 0x008d02d8, 0x00000000 }, +{ 0x00600001, 0x2040023d, 0x008d02d0, 0x00000000 }, +{ 0x00600001, 0x218003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000364, 0x0a0a8000 }, +{ 0x00600001, 0x20a0023d, 0x008d02e8, 0x00000000 }, +{ 0x00800001, 0x222003a5, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c07fbd, 0x008d0080, 0x3875735f }, +{ 0x00800001, 0x622000b1, 0x008d0220, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d02f8, 0x00000000 }, +{ 0x00600001, 0x2080023d, 0x008d02f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d0300, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0308, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d0310, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0318, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00600001, 0x2080023d, 0x008d0320, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0328, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00600001, 0x2080023d, 0x008d0330, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00600001, 0x2080023d, 0x008d0340, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0348, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00600001, 0x2080023d, 0x008d0350, 0x00000000 }, +{ 0x00600001, 0x20a0023d, 0x008d0358, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00000001, 0x21880061, 0x00000000, 0x0007000f }, +{ 0x00800001, 0x204003a5, 0x008d0100, 0x00000000 }, +{ 0x00000001, 0x218003bd, 0x0000002c, 0x00000000 }, +{ 0x00800001, 0x22000231, 0x00cf0220, 0x00000000 }, +{ 0x00800001, 0x604000b1, 0x008d0040, 0x00000000 }, +{ 0x00800001, 0x22100231, 0x00cf0040, 0x00000000 }, +{ 0x00000001, 0x218403bd, 0x00000028, 0x00000000 }, +{ 0x00000040, 0x20282c21, 0x00000028, 0x00080008 }, +{ 0x0c600031, 0x200003a0, 0x00000180, 0x00000200 }, +{ 0x00000040, 0x20203c21, 0x00000024, 0xfffcfffc }, +{ 0x05000010, 0x20000420, 0x00000028, 0x00000020 }, +{ 0x00010220, 0x34001c00, 0x00001400, 0xffffeb90 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000360, 0x02290000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20440161, 0x00000000, 0x00000000 }, +{ 0x0c600031, 0x226003a1, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000364, 0x060a8000 }, +{ 0x00800001, 0x206003bd, 0x008d0260, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20440161, 0x00000000, 0x00000000 }, +{ 0x00000040, 0x20203c21, 0x00000024, 0xfffcfffc }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000360, 0x02290000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000020, 0x00000000 }, +{ 0x0c600031, 0x226003a1, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x204003bd, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000c20, 0x00000364, 0x060a8000 }, +{ 0x00800001, 0x206003bd, 0x008d0260, 0x00000000 }, +{ 0x00000001, 0x20480061, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x204003bd, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x204403bd, 0x00000020, 0x00000000 }, +{ 0x0c600031, 0x200003a0, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x2e0003bd, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20000fa0, 0x00000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/EOT.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/EOT.g8a new file mode 100644 index 000000000..f03f96c2a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/EOT.g8a @@ -0,0 +1,166 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 2 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//End of Thread message + +mov (8) r127<1>:ud r0.0<8;8,1>:ud + send (1) null<1>:d r127 0x27 0x02000010 diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.am new file mode 100644 index 000000000..475beb900 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.am @@ -0,0 +1,79 @@ +INTEL_PP_G8B = \ + pl2_to_pl2.g8b \ + pl2_to_pl3.g8b \ + pl3_to_pl2.g8b \ + pl3_to_pl3.g8b \ + pl2_to_rgbx.g8b \ + rgbx_to_nv12.g8b \ + pl2_to_pa.g8b \ + pl3_to_pa.g8b \ + pa_to_pl2.g8b \ + pa_to_pl3.g8b \ + pa_to_pa.g8b \ + $(NULL) + +INTEL_PP_PRE_G8B = \ + sharpening_h_blur.g8b \ + sharpening_unmask.g8b \ + sharpening_v_blur.g8b + +INTEL_PP_G8A = \ + EOT.g8a \ + PL2_AVS_Buf_0.g8a \ + PL2_AVS_Buf_1.g8a \ + PL2_AVS_Buf_2.g8a \ + PL2_AVS_Buf_3.g8a \ + PL3_AVS_Buf_0.g8a \ + PL3_AVS_Buf_1.g8a \ + PL3_AVS_Buf_2.g8a \ + PL3_AVS_Buf_3.g8a \ + PA_AVS_Buf_0.g8a \ + PA_AVS_Buf_1.g8a \ + PA_AVS_Buf_2.g8a \ + PA_AVS_Buf_3.g8a \ + Save_AVS_NV12.g8a \ + Save_AVS_PL3.g8a \ + Save_AVS_RGBX.g8a \ + Save_AVS_PA.g8a \ + Set_AVS_Buf_0123_PL2.g8a \ + Set_AVS_Buf_0123_PL3.g8a \ + Set_AVS_Buf_0123_BGRA.g8a \ + Set_AVS_Buf_0123_VYUA.g8a \ + YUV_to_RGB.g8a \ + RGB_to_YUV.g8a \ + Set_Layer_0.g8a \ + VP_Setup.g8a \ + $(NULL) + +INTEL_PP_ASM = $(INTEL_PP_G8B:%.g8b=%.asm) +INTEL_PP_GEN8_ASM = $(INTEL_PP_G8B:%.g8b=%.g8s) + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_PP_G8B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g8b .g8s .asm + +if HAVE_GEN4ASM +$(INTEL_PP_GEN8_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G8A) +.asm.g8s: + $(AM_V_GEN)cpp $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g8s.g8b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 8 $< +endif + +CLEANFILES = $(INTEL_PP_GEN7_ASM) + +EXTRA_DIST = \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G8A) \ + $(INTEL_PP_G8B) \ + $(INTEL_PP_PRE_G8B) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.in new file mode 100644 index 000000000..c738bff88 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Makefile.in @@ -0,0 +1,524 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_PP_G8B) +subdir = src/shaders/post_processing/gen8 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_PP_G8B = \ + pl2_to_pl2.g8b \ + pl2_to_pl3.g8b \ + pl3_to_pl2.g8b \ + pl3_to_pl3.g8b \ + pl2_to_rgbx.g8b \ + rgbx_to_nv12.g8b \ + pl2_to_pa.g8b \ + pl3_to_pa.g8b \ + pa_to_pl2.g8b \ + pa_to_pl3.g8b \ + pa_to_pa.g8b \ + $(NULL) + +INTEL_PP_PRE_G8B = \ + sharpening_h_blur.g8b \ + sharpening_unmask.g8b \ + sharpening_v_blur.g8b + +INTEL_PP_G8A = \ + EOT.g8a \ + PL2_AVS_Buf_0.g8a \ + PL2_AVS_Buf_1.g8a \ + PL2_AVS_Buf_2.g8a \ + PL2_AVS_Buf_3.g8a \ + PL3_AVS_Buf_0.g8a \ + PL3_AVS_Buf_1.g8a \ + PL3_AVS_Buf_2.g8a \ + PL3_AVS_Buf_3.g8a \ + PA_AVS_Buf_0.g8a \ + PA_AVS_Buf_1.g8a \ + PA_AVS_Buf_2.g8a \ + PA_AVS_Buf_3.g8a \ + Save_AVS_NV12.g8a \ + Save_AVS_PL3.g8a \ + Save_AVS_RGBX.g8a \ + Save_AVS_PA.g8a \ + Set_AVS_Buf_0123_PL2.g8a \ + Set_AVS_Buf_0123_PL3.g8a \ + Set_AVS_Buf_0123_BGRA.g8a \ + Set_AVS_Buf_0123_VYUA.g8a \ + YUV_to_RGB.g8a \ + RGB_to_YUV.g8a \ + Set_Layer_0.g8a \ + VP_Setup.g8a \ + $(NULL) + +INTEL_PP_ASM = $(INTEL_PP_G8B:%.g8b=%.asm) +INTEL_PP_GEN8_ASM = $(INTEL_PP_G8B:%.g8b=%.g8s) +TARGETS = $(am__append_1) +SUFFIXES = .g8b .g8s .asm +CLEANFILES = $(INTEL_PP_GEN7_ASM) +EXTRA_DIST = \ + $(INTEL_PP_ASM) \ + $(INTEL_PP_G8A) \ + $(INTEL_PP_G8B) \ + $(INTEL_PP_PRE_G8B) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g8b .g8s .asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/gen8/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/gen8/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_PP_GEN8_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G8A) +@HAVE_GEN4ASM_TRUE@.asm.g8s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp $< > _pp0.$@; \ +@HAVE_GEN4ASM_TRUE@ $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ +@HAVE_GEN4ASM_TRUE@ rm _pp0.$@ +@HAVE_GEN4ASM_TRUE@.g8s.g8b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 8 $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_0.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_0.g8a new file mode 100644 index 000000000..11acccb68 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_0.g8a @@ -0,0 +1,457 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x50EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x00000000:ud // Enable ARGB channels + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 0:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns RGBA data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_1.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_1.g8a new file mode 100644 index 000000000..246beecc9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_1.g8a @@ -0,0 +1,457 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x50EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x00000000:ud // Enable ARGB channels + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 1:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns RGBA data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_2.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_2.g8a new file mode 100644 index 000000000..549bde650 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_2.g8a @@ -0,0 +1,457 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x50EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x00000000:ud // Enable ARGB channels + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 2:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns RGBA data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_3.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_3.g8a new file mode 100644 index 000000000..ac9e6316d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PA_AVS_Buf_3.g8a @@ -0,0 +1,457 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x50EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x00000000:ud // Enable ARGB channels + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 3:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns RGBA data in 16 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_0.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_0.g8a new file mode 100644 index 000000000..7463b3ba9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_0.g8a @@ -0,0 +1,462 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + + // set the vertical block number + + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x48EB001:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_0(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_1.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_1.g8a new file mode 100644 index 000000000..89cc74769 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_1.g8a @@ -0,0 +1,458 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_1.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 1 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + mov (1) r25.1<1>:ud 1:ud + + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x48EB001:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_1(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_1_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_2.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_2.g8a new file mode 100644 index 000000000..b97657dfa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_2.g8a @@ -0,0 +1,458 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_2.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 2 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + mov (1) r25.1<1>:ud 2:ud + + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x48EB001:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_2(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_2_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_3.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_3.g8a new file mode 100644 index 000000000..48851559d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL2_AVS_Buf_3.g8a @@ -0,0 +1,460 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 42 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_3.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + // set the vertical block number + + + mov (1) r25.1<1>:ud 3:ud + + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x48EB001:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000A000:ud // Enable Red+Blue channel + + send (1) uwBUFFER_3(4)<1> r16 0x2 a0.0:ud + // Returns UV data in 8 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_3_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_0.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_0.g8a new file mode 100644 index 000000000..f9c8688e2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_0.g8a @@ -0,0 +1,470 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 0:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_0(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB001:ud // msg desc; 1 is added to change BI to UV + + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_0(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB002:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_0(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_1.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_1.g8a new file mode 100644 index 000000000..2bfaadbe2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_1.g8a @@ -0,0 +1,470 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 1:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_1(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB001:ud // msg desc; 1 is added to change BI to UV + + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_1(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB002:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_1(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_2.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_2.g8a new file mode 100644 index 000000000..57c2df265 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_2.g8a @@ -0,0 +1,470 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 2:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_2(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB001:ud // msg desc; 1 is added to change BI to UV + + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_2(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB002:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_2(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_3.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_3.g8a new file mode 100644 index 000000000..553da39a3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/PL3_AVS_Buf_3.g8a @@ -0,0 +1,470 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 44 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: PL2_AVS_Buf_0.asm +// Author: Tatiya, Rupesh +// Description: Loads 8x8 AVS/IEF PL2 data into Buffer 0 + + + +// FileName : PL2_AVS_Buf.asm +// Author : Tatiya, Rupesh +// Description : Loads 8x8 AVS/IEF PL2 data into Buffer N + + + +// Module name: Scaling.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + // Message Header + // m0.7 31:0 Debug + // m0.6 31:0 Debug + // m0.5 31:0 Ignored + // m0.4 31:0 Ignored + // m0.3 31:0 Ignored + // m0.2 31:16 Ignored + // 15 Alpha Write Channel Mask enable=0, disable=1 + // 14 Blue Write Channel Mask (U) + // 13 Green Write Channel Mask (Y) + // 12 Red Write Channel Mask (V) + // 11:0 Ignored + // m0.1 Ignored + // m0.0 Ignored + + + // AVS payload + // m1.7 Group ID Number + // m1.6 U 2nd Derivative ---> NLAS dx + // m1.5 Delta V ---> Step Y + // m1.4 Delta U ---> Step X + // m1.3 Pixel 0 V Address ---> ORIY (Y0) + // m1.2 Pixel 0 U Address ---> ORIX (X0) + // m1.1 Vertical Block Number + // m1.0 Reserved + + // Sampler Message Descriptor + // 31:29 Reserved 000 + // 28:25 Message length 0010 + // 24:20 Response length xxxxx ---> 4GRFs for each enabled channel (AVS), 2GRFs for each enabled channel (sample unorm) + // 19 Header Present 1 + // 18:17 SIMD Mode 11 ---> SIMD32/64 + // 16:12 Message Type xxxxx ---> 01011 sample_8x8, 01100 (sample_unorm), 01010 (sample_unorm+killpix) + // 11:8 Sampler Index xxxx + // 7:0 Binding Table Index xxxxxxxx + + + // Msg Header M0.2 + // 15:15 Alpha Write Channel Mask, 0: written back, 1: not written back + // 14:14 Blue Write Channel Mask + // 13:13 Green Write Channel Mask + // 12:12 Red Write Channel Mask + + +//By design, Buffer 0,1,2,3 always have Layer 0 and Buffer 4,5 always have L1-L7 + + +//used to generate LABELS at compile time. + + + // 18:17 SIMD Mode 10 ---> SIMD16 + // 16:12 Message Type xxxxx ---> 00000 (SIMD16) + + +//r10-17 - 8 GRFs to load SIMD16 data (upto 4 channels) +//r18-19 - 2 GRFs to store sampler ramp. + + .declare mfSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare muwSCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + .declare mudCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare mubCALING_0X_34X_PAYLOAD Base=r14.0 ElementSize=1 SrcRegion=<32;32,1> DstRegion=<1> Type=ub + + + .declare fSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + .declare udSCALING_0X_34X_TEMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + .declare ub4SCALING_0X_34X_TEMP Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<1> Type=ub + .declare uwSCALING_0X_34X_TEMP Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + + // Sampler ramp is used for Scaling 0X_0.34X + .declare fSAMPLER_RAMP Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> Type=f // 1 GRFs, 8 elements + + + //#define rMSGDSC_UV r23.0 + + +//End of _SCALING_ + + + //NOTE: We need offsets for second halfof LAYER 0 - even if we do not load it. + //Update the channel offset in the buffers for the lower 8x4 data for BUFFER_0. + mov (1) r22.4<1>:ud 0x400040:ud + + + mov (1) r16.3<1>:ud r0.3<0;1,0>:ud + + + //AVS_PAYLOAD already has all the data loaded at this point + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB000:ud //msg desc + + mov (1) r16.2<1>:ud 0x0000D000:ud // Enable Red channel + + + + // set the vertical block number + + mov (1) r25.1<1>:ud 3:ud + + mov (8) r17.0<1>:ud r25.0<8;8,1>:ud // Copy msg payload mirrors to MRFs + + send (1) uwBUFFER_3(0)<1> r16 0x2 a0.0:ud + // Returns Y data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB001:ud // msg desc; 1 is added to change BI to UV + + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_3(4)<1> r16 0x2 a0.0:ud + // Returns U data in 4 GRFs in scrambled order + + add (1) a0.0<1>:ud r23.5<0;1,0>:ud 0x44EB002:ud // msg desc; 1 is added to change BI to UV + mov (1) r16.2<1>:ud 0x0000E000:ud // Enable Red channel + + send (1) uwBUFFER_3(8)<1> r16 0x2 a0.0:ud + // Returns V data in 4 GRFs in scrambled order + +SKIP_AVS_LOAD_L0_0_: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/RGB_to_YUV.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/RGB_to_YUV.g8a new file mode 100644 index 000000000..ebea2649d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/RGB_to_YUV.g8a @@ -0,0 +1,910 @@ +/* + * Copyright 2000-2013 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: YUV_to_RGB.asm +// +// Convert YUV to RGB, handle it by 16x4 block +// + + +// Description: Includes all definitions explicit to Fast Composite. + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare bBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +//Pointer to mask reg + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + +//Unnecessary to use the MSGPayLoad, So it is temporiarily used for conversion of YUV->RGB + +.declare fBUFFER_R Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_G Base=r30.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_B Base=r32.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare fBUFFER_Y Base=r36.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_U Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_V Base=r40.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare wTempY Base=r42.0 ElementSize=2 Type=w +.declare wTempU Base=r44.0 ElementSize=2 Type=w +.declare wTempV Base=r46.0 ElementSize=2 Type=w + +.declare ubTempY Base=r42.0 ElementSize=1 Type=ub +.declare ubTempU Base=r44.0 ElementSize=1 Type=ub +.declare ubTempV Base=r46.0 ElementSize=1 Type=ub + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + // ITU-R conversion, Now we are using ITU-R conversion + // Y = 0.299R + 0.587G + 0.114B + // U = -0.169R - 0.331G + 0.499B + 128 + // V = 0.499R - 0.418G - 0.0813B+ 128 + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + //It always uses the YUVA layout. +//for BUFFER_0 + mov (4) a0.0<1>:uw r22.0<4;4,1>:uw + mov (4) a0.4<1>:uw r22.0<4;4,1>:uw + // YUV uses the a0.5,a0.6 and a0.4 as the indirect-register + // Y = a0.5, U=a0.6, V=a0.4 + // if channel swap? + // This means that it should be BGRX(B is the LSB) or RGBX + // 1 means that it is BGRX. + and.nz.f0.0 null<1>:w r2.0<0;1,0>:uw 0x01:w + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0:uw + (f0.0) mov (1) a0.0:uw a0.1:uw + (f0.0) mov (1) a0.1:uw uwTemp0<0;1,0> + +//the first line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 0 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_1 + + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 1 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_2 + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + +//the second line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 2 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + +//for Buffer_3 + add (8) a0.0<1>:uw a0.0<8;8,1>:uw 512:uw +//the first line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 0]<1>:uw 0:uw + mov (16) r[a0.6, 0]<1>:uw 0:uw + mov (16) r[a0.4, 0]<1>:uw 0:uw + mov (16) r[a0.5,1]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,1]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,1]<2>:ub ubTempV(0, 0)<32;8,4> + + +//the second line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 32]<1>:uw 0:uw + mov (16) r[a0.6, 32]<1>:uw 0:uw + mov (16) r[a0.4, 32]<1>:uw 0:uw + mov (16) r[a0.5,33]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,33]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,33]<2>:ub ubTempV(0, 0)<32;8,4> + +//the third line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 64]<1>:uw 0:uw + mov (16) r[a0.6, 64]<1>:uw 0:uw + mov (16) r[a0.4, 64]<1>:uw 0:uw + mov (16) r[a0.5,65]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,65]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,65]<2>:ub ubTempV(0, 0)<32;8,4> + +//the fourth line in the block 3 + mov (8) fBUFFER_R(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_R(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_G(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_G(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_B(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_B(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.299f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> 0.587f + mac (16) fBUFFER_Y(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.114f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> -0.169f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.331f + mac (16) fBUFFER_U(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 0.499f + + mov (16) acc0.0<1>:f 128.0f + mac (16) acc0.0<1>:f fBUFFER_R(0, 0)<8;8,1> 0.499f + mac (16) acc0.0<1>:f fBUFFER_G(0, 0)<8;8,1> -0.418f + mac (16) fBUFFER_V(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> -0.0813f + + mov (16) wTempY(0,0)<2> fBUFFER_Y(0, 0)<8;8,1> + mov (16) wTempU(0,0)<2> fBUFFER_U(0, 0)<8;8,1> + mov (16) wTempV(0,0)<2> fBUFFER_V(0, 0)<8;8,1> + + mov (16) r[a0.5, 96]<1>:uw 0:uw + mov (16) r[a0.6, 96]<1>:uw 0:uw + mov (16) r[a0.4, 96]<1>:uw 0:uw + mov (16) r[a0.5,97]<2>:ub ubTempY(0, 0)<32;8,4> + mov (16) r[a0.6,97]<2>:ub ubTempU(0, 0)<32;8,4> + mov (16) r[a0.4,97]<2>:ub ubTempV(0, 0)<32;8,4> + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_NV12.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_NV12.g8a new file mode 100644 index 000000000..ae4999ce2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_NV12.g8a @@ -0,0 +1,621 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 131 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_NV12.asm +// +// Save NV12 420 frame data block of size 16x16 +// +// To save 16x16 block (16x16 bytes of Y and 16x8 bytes of interleaved UV), we need 2 send instructions with of size 16x16 and 16x8 each. +// --------------- +// | 16x16 | +// | YUYV | +// --------------- +// | 16x8 UV | +// --------------- + +//----------------------------------------------------------------- +//The layout of data is as follows: +//mMSGHDR0 : Y data header (16x16) +//mubMSGPAYLOAD0 : Y data payload (8 GRFs) +//mMSGHDR1 : U data header (16x8) +//mubMSGPAYLOAD1 : U data payload (4 GRFs) +//------------------------------------------------------------------ + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4<1>:uw r22.0<4;4,1>:w 512:uw + + //Set up header for Y,U and V data + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + + mov (2) r28.0<1>:d r9.0<2;2,1>:w { NoDDClr } //ORI Y (LUMA) = ORI + mov (1) r37.0<1>:d r9.0<0;1,0>:w { NoDDClr } //H ORI (CHROMA) = H ORI + shr (1) r37.1<1>:d r9.1<0;1,0>:w 1:w { NoDDClr, NoDDChk } //V ORI (CHROMA) = V ORI/2 + + mov (1) r28.2<1>:ud 0xF000F:ud { NoDDChk } // Y Block width and height (16x16) + mov (1) r37.2<1>:ud 0x7000F:ud { NoDDChk } // UV Block width and height(16x8) + +// Unscramble, and pack data directly to MRFs + +// Data 16x16 block is divided as - +// --------- +// | 0 | +// --------- +// | 1 | +// --------- +// | 2 | +// --------- +// | 3 | +// --------- +// All sub-blocks are of size 16x4 +// 0: ubBUFFER_0 +// 1: ubBUFFER_1, ubBUFFER_0+16 +// 2: ubBUFFER_2 +// 3: ubBUFFER_3, ubBUFFER_2+16 + + //Y Rounding 16x4 top part + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(0,0)<2> r[a0.2,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.2,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.2,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.2,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.2,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.2,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(4,0)<2> r[a0.0,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.0,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.0,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.0,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.0,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.0,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, 16x4 bottom part + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(0,0)<2> r[a0.6,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.6,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.6,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.6,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.6,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.6,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(4,0)<2> r[a0.4,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.4,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.4,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.4,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.4,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.4,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.4<1>:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + //Y Rounding 16x4 top part + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(0,0)<2> r[a0.2,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.2,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.2,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.2,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.2,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.2,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 top part + shr (8) uwBUFFER_5(4,0)<2> r[a0.0,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.0,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.0,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.0,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.0,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.0,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, 16x4 bottom part + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(0,0)<2> r[a0.6,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(1,0)<2> r[a0.6,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(2,0)<2> r[a0.6,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(3,0)<2> r[a0.6,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(0,0)<2> uwBUFFER_5(0,0)<16;8,2> uwBUFFER_5(1,0)<16;8,2> + add.sat (8) r[a0.6,0]<2>:uw uwBUFFER_5(0,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(2,0)<2> uwBUFFER_5(2,0)<16;8,2> uwBUFFER_5(3,0)<16;8,2> + add.sat (8) r[a0.6,64]<2>:uw uwBUFFER_5(2,0)<16;8,2> 0x0080:uw + + // V Averaging and Rounding, 8x2 bottom part + shr (8) uwBUFFER_5(4,0)<2> r[a0.4,0]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(5,0)<2> r[a0.4,32]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(6,0)<2> r[a0.4,64]<16;8,2>:uw 1:w + shr (8) uwBUFFER_5(7,0)<2> r[a0.4,96]<16;8,2>:uw 1:w + + add (8) uwBUFFER_5(4,0)<2> uwBUFFER_5(4,0)<16;8,2> uwBUFFER_5(5,0)<16;8,2> + add.sat (8) r[a0.4,0]<2>:uw uwBUFFER_5(4,0)<16;8,2> 0x0080:uw + + add (8) uwBUFFER_5(6,0)<2> uwBUFFER_5(6,0)<16;8,2> uwBUFFER_5(7,0)<16;8,2> + add.sat (8) r[a0.4,64]<2>:uw uwBUFFER_5(6,0)<16;8,2> 0x0080:uw + + add (4) a0.4<1>:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + // restore pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4 registers + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4<1>:uw r22.0<4;4,1>:w 512:uw + +//Buffer 0 +//Move Y to msg payload + mov (16) mubMSGPAYLOAD0(0,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(0,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(1,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(1,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + +//Move U to msg payload + mov (8) mubMSGPAYLOAD1(0,0)<2> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(0,16)<2> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Move V to msg payload + mov (8) mubMSGPAYLOAD1(0,1)<2> r[a0.0, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0,17)<2> r[a0.0, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + +//Buffer 1 + mov (16) mubMSGPAYLOAD0(2,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(2,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(3,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(3,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,0)<2> r[a0.6, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(1,16)<2> r[a0.6, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,1)<2> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1,17)<2> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.4<1>:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + +//Buffer 2 + mov (16) mubMSGPAYLOAD0(4,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(4,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(5,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(5,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(2,0)<2> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(2,16)<2> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(2,1)<2> r[a0.0, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(2,17)<2> r[a0.0, 65]<32;8,4>:ub { NoDDChk } + +//Buffer 3 + mov (16) mubMSGPAYLOAD0(6,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(6,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(7,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(7,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(3,0)<2> r[a0.6, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(3,16)<2> r[a0.6, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD1(3,1)<2> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(3,17)<2> r[a0.4, 65]<32;8,4>:ub { NoDDChk } +//=========================================================================== + +send (1) null<1>:d r28 0xc 0x120A8018:ud +send (1) null<1>:d r37 0xc 0xA0A8019:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PA.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PA.g8a new file mode 100644 index 000000000..a8ddc09ad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PA.g8a @@ -0,0 +1,629 @@ +/* + * Copyright 2000-2013 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: Zhao Yakui + */ +// 174 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_PA.asm +// +// Save PA 422 frame data block of size 16x16 +// +// To save 16x16 block (32x16 bytes of YUYV) we need 2 send instructions with of size 16x16 each. +// ------------------------------- +// | 16x16 | 16x16 | +// | YUYV | YUYV | +// ------------------------------- +// these 2 sends are replaced by 8 32x2 sends to improve performance + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + //wBUFF_CHNL_PTR points to buffer 0. + //Add appropriate offsets to get pointers for all buffers (1,2,3). + //Offset is zero for buffer 0. + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + + //Set DEST pointers according to output packing i.e. YUYV, YVYU, UYVY, VYUY + add (4) a0.4<1>:w r2.28<4;4,1>:ub 928:uw + + /* X block origin. YUY2 or UYUV */ + shl (1) r27.0<1>:d r9.0<0;1,0>:w 1:w { NoDDClr } // H. block origin need to be 2 times + mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) r27.2<1>:ud 0x1001F:ud { NoDDChk } // Block width and height (32x2) + +// Rounding + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 512:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1536:uw + // left + add.sat (4) r[a0.0, 0]<2>:uw r[a0.0, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,32]<2>:uw r[a0.0, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,64]<2>:uw r[a0.0, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,96]<2>:uw r[a0.0, 96]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 0]<1>:uw r[a0.1, 0]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,32]<1>:uw r[a0.1, 32]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,64]<1>:uw r[a0.1, 64]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,96]<1>:uw r[a0.1, 96]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 0]<2>:uw r[a0.2, 0]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,32]<2>:uw r[a0.2, 32]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,64]<2>:uw r[a0.2, 64]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,96]<2>:uw r[a0.2, 96]<8;4,2>:uw 0x0080:uw + + // right + add.sat (4) r[a0.0,16]<2>:uw r[a0.0, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,48]<2>:uw r[a0.0, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,80]<2>:uw r[a0.0, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.0,112]<2>:uw r[a0.0, 112]<8;4,2>:uw 0x0080:uw + + add.sat (8) r[a0.1, 16]<1>:uw r[a0.1, 16]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,48]<1>:uw r[a0.1, 48]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,80]<1>:uw r[a0.1, 80]<8;8,1>:uw 0x0080:uw + add.sat (8) r[a0.1,112]<1>:uw r[a0.1, 112]<8;8,1>:uw 0x0080:uw + + add.sat (4) r[a0.2, 16]<2>:uw r[a0.2, 16]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,48]<2>:uw r[a0.2, 48]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,80]<2>:uw r[a0.2, 80]<8;4,2>:uw 0x0080:uw + add.sat (4) r[a0.2,112]<2>:uw r[a0.2, 112]<8;4,2>:uw 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 2048:uw + // restore pointer + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + add (1) r37.1<1>:d r27.1<0;1,0>:d 2:d // Point to 2nd part + + /* a0.2 U, a0.1 Y, a0.0 V */ + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + /* a0.4 + 288 = r38 */ + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0xc 0x60A8018:ud + send (1) null<1>:d r37 0xc 0x60A8018:ud + + // restore pointer + add (4) a0.0<1>:uw r22.0<4;4,1>:w 512:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 4:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 6:d // Point to 2nd part + + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0xc 0x60A8018:ud + send (1) null<1>:d r37 0xc 0x60A8018:ud + + // restore pointer + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 8:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 10:d // Point to 2nd part + + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0xc 0x60A8018:ud + send (1) null<1>:d r37 0xc 0x60A8018:ud + + // restore pointer + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1536:uw + + add (1) r28.1<1>:d r27.1<0;1,0>:d 12:d // Point to 2nd part + add (1) r37.1<1>:d r27.1<0;1,0>:d 14:d // Point to 2nd part + + mov (8) r[a0.6, 0]<4>:ub r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 32]<4>:ub r[a0.0,33]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4, 0]<2>:ub r[a0.1, 1]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4, 32]<2>:ub r[a0.1,33]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5, 0]<4>:ub r[a0.2, 1]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5, 32]<4>:ub r[a0.2,33]<32;8,4>:ub { NoDDChk } + + mov (8) r[a0.6, 288]<4>:ub r[a0.0,65]<32;8,4>:ub { NoDDClr } + mov (8) r[a0.6, 320]<4>:ub r[a0.0,97]<32;8,4>:ub { NoDDClr } + mov (16) r[a0.4,288]<2>:ub r[a0.1,65]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (16) r[a0.4,320]<2>:ub r[a0.1,97]<32;16,2>:ub { NoDDClr, NoDDChk } + mov (8) r[a0.5,288]<4>:ub r[a0.2,65]<32;8,4>:ub { NoDDChk } + mov (8) r[a0.5,320]<4>:ub r[a0.2,97]<32;8,4>:ub { NoDDChk } + + send (1) null<1>:d r28 0xc 0x60A8018:ud + send (1) null<1>:d r37 0xc 0x60A8018:ud + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PL3.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PL3.g8a new file mode 100644 index 000000000..572d2aa6d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_PL3.g8a @@ -0,0 +1,565 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Author: Zhao Yakui + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 84 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_PL3.asm +// +// Save PL3 420 frame data block of size 16x16 +// +// To save 16x16 block (16x16 byte of Y and 8x8 byte of U and V each) we need 3 send instructions with one of size 16x16 and two of size 8x8. +// ----------------- +// | 16x16 Y | +// | | +// ----------------- +// | 8x8 U | +// --------- +// | 8x8 V | +// --------- + +//----------------------------------------------------------------- +//The layout of data is as follows: +//mMSGHDR0 : Y data header (16x16) +//mubMSGPAYLOAD0 : Y data payload (8 GRFs) +//mMSGHDR1 : U data header (8x8) +//mubMSGPAYLOAD1 : U data payload (2 GRFs) +//mMSGHDR2 : V data header (8x8) +//mubMSGPAYLOAD2 : V data payload (2 GRFs) +//------------------------------------------------------------------ + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4<1>:uw r22.0<4;4,1>:w 512:uw + + //Set up header for Y,U and V data + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + + mov (2) r28.0<1>:d r9.0<2;2,1>:w { NoDDClr } //ORI Y (LUMA) = ORI + shr (2) r37.0<1>:d r9.0<2;2,1>:w 1:w { NoDDClr } //H/V ORI U = H/V ORI/2 + shr (2) r46.0<1>:d r9.0<2;2,1>:w 1:w { NoDDClr } //H/V ORI V = H/V ORI/2 + + mov (1) r28.2<1>:ud 0xF000F:ud { NoDDChk } // Y Block width and height (16x16) + mov (1) r37.2<1>:ud 0x70007:ud { NoDDChk } // U Block width and height (8x8) + mov (1) r46.2<1>:ud 0x70007:ud { NoDDChk } // V Block width and height (8x8) + +// Unscramble, and pack data directly to MRFs + +// Data 16x16 block is divided as - +// --------- +// | 0 | +// --------- +// | 1 | +// --------- +// | 2 | +// --------- +// | 3 | +// --------- +// All sub-blocks are of size 16x4 +// 0: ubBUFFER_0 +// 1: ubBUFFER_1, ubBUFFER_0+16 +// 2: ubBUFFER_2 +// 3: ubBUFFER_3, ubBUFFER_2+16 + + //Y Rounding, first + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.2,0]<2>:uw r[a0.2,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.2,64]<2>:uw r[a0.2,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.0,0]<2>:uw r[a0.0,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.0,64]<2>:uw r[a0.0,64]<16;8,2>:uw 0x0080:uw + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + + //Y Rounding, second + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.6,0]<2>:uw r[a0.6,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.6,64]<2>:uw r[a0.6,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.4,0]<2>:uw r[a0.4,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.4,64]<2>:uw r[a0.4,64]<16;8,2>:uw 0x0080:uw + + add (4) a0.4<1>:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + + //Y Rounding, third + add.sat (16) r[a0.1,0]<1>:uw r[a0.1,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,32]<1>:uw r[a0.1,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,64]<1>:uw r[a0.1,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.1,96]<1>:uw r[a0.1,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.2,0]<2>:uw r[a0.2,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.2,64]<2>:uw r[a0.2,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.0,0]<2>:uw r[a0.0,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.0,64]<2>:uw r[a0.0,64]<16;8,2>:uw 0x0080:uw + + + //Y Rounding, fourth + add.sat (16) r[a0.5,0]<1>:uw r[a0.5,0]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,32]<1>:uw r[a0.5,32]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,64]<1>:uw r[a0.5,64]<16;16,1>:uw 0x0080:uw + add.sat (16) r[a0.5,96]<1>:uw r[a0.5,96]<16;16,1>:uw 0x0080:uw + + // U rounding + add.sat (8) r[a0.6,0]<2>:uw r[a0.6,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.6,64]<2>:uw r[a0.6,64]<16;8,2>:uw 0x0080:uw + + // V rounding + add.sat (8) r[a0.4,0]<2>:uw r[a0.4,0]<16;8,2>:uw 0x0080:uw + add.sat (8) r[a0.4,64]<2>:uw r[a0.4,64]<16;8,2>:uw 0x0080:uw + + // restore the TOP and BOT pointers + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + add (4) a0.4<1>:uw r22.0<4;4,1>:w 512:uw + +//Buffer 0 +//Move Y to msg payload + mov (16) mubMSGPAYLOAD0(0,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(0,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(1,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(1,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + +//Move U to msg payload + mov (8) mubMSGPAYLOAD1(0,0)<1> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(0,8)<1> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Move V to msg payload + mov (8) mubMSGPAYLOAD2(0,0)<1> r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD2(0,8)<1> r[a0.0, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + add (4) a0.0<1>:uw r22.0<4;4,1>:w 1024:uw //Update Buffer 2 pointers + +//Buffer 1 + mov (16) mubMSGPAYLOAD0(2,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(2,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(3,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(3,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(0,16)<1> r[a0.6, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(0,24)<1> r[a0.6, 65]<32;8,4>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(0,16)<1> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(0,24)<1> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + + add (4) a0.4<1>:uw r22.0<4;4,1>:w 1536:uw //Update Buffer 3 pointers + +//Buffer 2 + mov (16) mubMSGPAYLOAD0(4,0)<1> r[a0.1, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(4,16)<1> r[a0.1, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(5,0)<1> r[a0.1, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(5,16)<1> r[a0.1, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,0)<1> r[a0.2, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD1(1,8)<1> r[a0.2, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + + mov (8) mubMSGPAYLOAD2(1,0)<1> r[a0.0, 1]<32;8,4>:ub { NoDDClr } + mov (8) mubMSGPAYLOAD2(1,8)<1> r[a0.0, 65]<32;8,4>:ub { NoDDClr, NoDDChk } + +//Buffer 3 + mov (16) mubMSGPAYLOAD0(6,0)<1> r[a0.5, 1]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(6,16)<1> r[a0.5, 33]<32;16,2>:ub { NoDDChk } + mov (16) mubMSGPAYLOAD0(7,0)<1> r[a0.5, 65]<32;16,2>:ub { NoDDClr } + mov (16) mubMSGPAYLOAD0(7,16)<1> r[a0.5, 97]<32;16,2>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD1(1,16)<1> r[a0.6, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD1(1,24)<1> r[a0.6, 65]<32;8,4>:ub { NoDDChk } + + mov (8) mubMSGPAYLOAD2(1,16)<1> r[a0.4, 1]<32;8,4>:ub { NoDDClr, NoDDChk } + mov (8) mubMSGPAYLOAD2(1,24)<1> r[a0.4, 65]<32;8,4>:ub { NoDDChk } + +//=========================================================================== + +send (1) null<1>:d r28 0xc 0x120A8018:ud +send (1) null<1>:d r37 0xc 0x60A8019:ud +send (1) null<1>:d r46 0xc 0x60A801A:ud diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_RGBX.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_RGBX.g8a new file mode 100644 index 000000000..fbf3543e8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Save_AVS_RGBX.g8a @@ -0,0 +1,641 @@ +/* + * Copyright 2000-2013 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: Save_AVS_RGBX.asm +// +// Save packed ARGB 444 frame data block of size 16x16 +// +// To save 16x16 block (64x16 byte layout for ARGB8888) we need 8 send instructions with 32x4 in each +// -------- +// | 0 | 1 | +// | 2 | 3 | +// | 4 | 5 | +// | 6 | 7 | +// --------- +// the 8 32x4 block send is used + + + +// Module name: Save.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + + +.declare mudMSGPAYLOAD0 Base=r29.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD1 Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD2 Base=r47.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mudMSGPAYLOAD3 Base=r56.0 ElementSize=4 SrcRegion=<8;8,1> Type=ud + +.declare muwMSGPAYLOAD0 Base=r29.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD1 Base=r38.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD2 Base=r47.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare muwMSGPAYLOAD3 Base=r56.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw + +.declare mubMSGPAYLOAD0 Base=r29.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD1 Base=r38.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD2 Base=r47.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD3 Base=r56.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD4 Base=r32.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD5 Base=r41.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD6 Base=r50.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare mubMSGPAYLOAD7 Base=r59.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub + + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare uwTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + + +// At the save module we have all 8 address sub-registers available. +// So we will use PING-PONG type of scheme to save the data using +// pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help +// reduce dependency. - rT + + //Internal LAYOUT:(RRGGBBAA) + //Assign buffer channel order for Buffer 0123 in the order RGBA a0.3>A, a0.2>B, a0.1>G, a0.0>R + // R = 0, G= 4, B = 8, A = 12. + mov (4) acc0.0<1>:w 0x62EA:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw + + // if channel swap? + // This means that it should be BGRA(B is the LSB) or RGBA + // the internal format is always RGBA(MSB-A-B-G-R). + and.nz.f0.0 null<1>:w r2.3<0;1,0>:uw 0x01:w + +//wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. +//Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). +//Offsets are zero for buffer 0 and buffer 4. + add (4) a0.0<1>:uw r22.0<4;4,1>:w 0:uw + + // pointer swap + (f0.0) mov (1) uwTemp0<1> a0.0<0;1,0>:uw + (f0.0) mov (1) a0.0<1>:uw a0.2<0;1,0>:uw + (f0.0) mov (1) a0.2<1>:uw uwTemp0<0;1,0> + + shl (1) r27.0<1>:d r9.0<0;1,0>:w 2:w { NoDDClr } // H. block origin need to be quadrupled + mov (1) r27.1<1>:d r9.1<0;1,0>:w { NoDDClr, NoDDChk } // Block origin (1st quadrant) + mov (1) r27.2<1>:ud 0x3001F:ud { NoDDChk } // Block width and height (32x4) + + mov (4) a0.4<1>:uw a0.0<4;4,1>:uw + + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + mov (8) r55<1>:ud r27<8;8,1>:ud + + mov (8) r31<1>:ud r27<8;8,1>:ud + mov (8) r40<1>:ud r27<8;8,1>:ud + mov (8) r49<1>:ud r27<8;8,1>:ud + mov (8) r58<1>:ud r27<8;8,1>:ud + +//Buffer 0/1 are written by using 4 32x4. + + add (1) r37.0<1>:d r27.0<0;1,0>:d 32:d + + add (1) r46.1<1>:d r27.1<0;1,0>:d 4:d + + add (1) r55.1<1>:d r27.1<0;1,0>:d 4:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + + // write Buf_0 to 1st quarter of four horizontal output blocks + +// Please note the scattered order of NODDCLR, NODDCHK flags. Since the sub-registers +// of destination reg are not updated at one place and hence even flags are scattered. -rT + +/* for block 0 the left part of buffer 0 and 1 */ + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 3)<4> r2.31:ub + +/* For Buffer 0 */ + send (16) null<1>:d r28 0xc 0x0A0A8018:ud + send (16) null<1>:d r37 0xc 0x0A0A8018:ud + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 512:uw + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 3)<4> r2.31:ub + // send Buffer 1 + send (16) null<1>:d r46 0xc 0x0A0A8018:ud + send (16) null<1>:d r55 0xc 0x0A0A8018:ud + + +/* for Buffer 2/3 */ + mov (8) r28<1>:ud r27<8;8,1>:ud + mov (8) r37<1>:ud r27<8;8,1>:ud + mov (8) r46<1>:ud r27<8;8,1>:ud + mov (8) r55<1>:ud r27<8;8,1>:ud + + add (1) r28.1<1>:d r27.1<0;1,0>:d 8:d + + add (1) r37.0<1>:d r27.0<0;1,0>:d 32:d + add (1) r37.1<1>:d r27.1<0;1,0>:d 8:d + + add (1) r46.1<1>:d r27.1<0;1,0>:d 12:d + + add (1) r55.1<1>:d r27.1<0;1,0>:d 12:d + add (1) r55.0<1>:d r27.0<0;1,0>:d 32:d + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 1024:uw + + mov (8) mubMSGPAYLOAD0(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD0(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD0(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD1(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD1(3, 3)<4> r2.31:ub + +// Send Buffer 2 + send (16) null<1>:d r28 0xc 0x0A0A8018:ud + send (16) null<1>:d r37 0xc 0x0A0A8018:ud + + add (4) a0.0<1>:uw a0.4<4;4,1>:uw 1536:uw + mov (8) mubMSGPAYLOAD2(0, 0)<4> r[a0.0, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 1)<4> r[a0.1, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 2)<4> r[a0.2, 1]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(1, 0)<4> r[a0.0, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 1)<4> r[a0.1, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 2)<4> r[a0.2, 33]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(0, 0)<4> r[a0.0, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 1)<4> r[a0.1, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 2)<4> r[a0.2, 17]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(0, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(1, 0)<4> r[a0.0, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 1)<4> r[a0.1, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 2)<4> r[a0.2, 49]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(1, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(2, 0)<4> r[a0.0, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 1)<4> r[a0.1, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 2)<4> r[a0.2, 65]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD2(3, 0)<4> r[a0.0, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 1)<4> r[a0.1, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 2)<4> r[a0.2, 97]<16;8,2>:ub + mov (8) mubMSGPAYLOAD2(3, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(2, 0)<4> r[a0.0, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 1)<4> r[a0.1, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 2)<4> r[a0.2, 81]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(2, 3)<4> r2.31:ub + + mov (8) mubMSGPAYLOAD3(3, 0)<4> r[a0.0, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 1)<4> r[a0.1, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 2)<4> r[a0.2, 113]<16;8,2>:ub + mov (8) mubMSGPAYLOAD3(3, 3)<4> r2.31:ub + // send buffer 3 + send (16) null<1>:d r46 0xc 0x0A0A8018:ud + send (16) null<1>:d r55 0xc 0x0A0A8018:ud + + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_BGRA.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_BGRA.g8a new file mode 100644 index 000000000..b1f7fb76b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_BGRA.g8a @@ -0,0 +1,368 @@ +/* + * Copyright 2000-2013 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: Zhao Yakui + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_BGRA.asm + + + +//Module Name: Set_Buf_0123_BGRA + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT:(UUYYVVAA) + //AVS RGBX LAYOUT (RRGGBBAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + // V = 8, Y= 0, U = 4, A = 12. + // And a0.x is used as indirect-register for RGBX. R=a0.1, G=a0.2, B=a0.0 + // B = 8, R= 0, G = 4, A = 12 + mov (4) acc0.0<1>:w 0x6EA2:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + + //SU LAYOUT:(VYUAVYUA) + //V = 4, Y = 2, U = 0, A = 6 + //B = 4, G = 2, R = 0, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL2.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL2.g8a new file mode 100644 index 000000000..dcbe2971e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL2.g8a @@ -0,0 +1,361 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_PL2.asm + + + +//Module Name: Set_Buf_0123_PL2 + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT: (YYUUVVAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + //For PL2-AVS: V = 8, Y= 0, U = 4, A = 12. + mov (4) acc0.0<1>:w 0x6EA2:v //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + //SU LAYOUT:(YUVAYUVA) + //V = 4, Y = 0, U = 2, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL3.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL3.g8a new file mode 100644 index 000000000..292e6874a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_PL3.g8a @@ -0,0 +1,362 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_PL3.asm + + + +//Module Name: Set_Buf_0123_PL3 + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT: (YYUUVVAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + //For PL3-AVS: V = 8, Y= 0, U = 4, A = 12. + mov (4) acc0.0<1>:w 0x6EA2:v + //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + //SU LAYOUT:(YUVAYUVA) + //V = 4, Y = 0, U = 2, A = 6 + mov (4) acc0.0<1>:w 0x6204:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_VYUA.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_VYUA.g8a new file mode 100644 index 000000000..84f89f999 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_AVS_Buf_0123_VYUA.g8a @@ -0,0 +1,366 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 7 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +//Module Name: Set_AVS_Buf_0123_VYUA.asm + + + +//Module Name: Set_Buf_0123_VYUA + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + + //AVS LAYOUT:(VVYYUUAA) + //Assign buffer channel order for Buffer 0123 in the order AUYV a0.3>A, a0.2>U, a0.1>Y, a0.0>V + // V = 0, Y= 4, U = 8, A = 12. + //YCrCb or YCrCb_Swap returns the following data: + //Cr is returned on R-channel. 0 + //Y is returned on G channel. 4 + //Cb is returned on B channel. 8 + mov (4) acc0.0<1>:w 0x62EA:v //Subtract 6 from 0,4,8,12 + add (4) acc0.0<1>:w acc0<4;4,1>:w 70:uw //add 6 back + shl (4) r22.0<1>:w acc0<4;4,1>:w 5:uw //Convert to BYTE address. + + //OPT: wAVS_SU_SHUFFLE_PTR_0 and udAVS_SU_SHUFFLE_OFF_0 are sub-regs of same GRF. -rT + + //SU LAYOUT:(VYUAVYUA) + //V = 0, Y = 2, U = 4, A = 6 + mov (4) acc0.0<1>:w 0x6420:v + add (4) acc0.0<1>:w acc0<4;4,1>:w 64:uw + shl (4) r18.0<1>:w acc0<4;4,1>:w 5:uw { NoDDClr } //Convert to BYTE address. + + //OFFSET: + mov (1) r18.4<1>:ud 0x1000100:ud { NoDDChk } + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_Layer_0.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_Layer_0.g8a new file mode 100644 index 000000000..8219655f3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/Set_Layer_0.g8a @@ -0,0 +1,483 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// 18 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + +#define MSG_AVS_SAMPLE 0x00000000 +#define MSG_CONVOLE_SAMPLE 0x10000000 +#define MSG_MINMAX_SAMPLE 0x20000000 +#define MSG_MINMAXF_SAMPLE 0x30000000 +#define MSG_ERODE_SAMPLE 0x40000000 +#define MSG_DILATE_SAMPLE 0x50000000 +#define MSG_BOOLCENT_SAMPLE 0x60000000 +#define MSG_CENTROID_SAMPLE 0x70000000 + +#define MSG_IEF_BYPASS 0x08000000 +#define MSG_IEF_ENABLE 0x00000000 + +//16x4 or 8x4 or 16x8 or 4x4 +#define MSG_AVS_164 0x00000000 +#define MSG_AVS_84 0x02000000 +#define MSG_AVS_168 0x04000000 +#define MSG_AVS_44 0x06000000 + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + + + + + +//Module name: Set_Layer_N.inc + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Used to generate LABELS at compile time. + + +//definitions for Expand Mask +.declare uwMask_Temp1 Base=r17.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp1 Base=r17.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF +.declare udMask_Temp1 Base=r17.0 ElementSize=4 Type=ud // 1 GRF +.declare uwMask_Temp2 Base=r16.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp2 Base=r16.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF +.declare udMask_Temp2 Base=r16.0 ElementSize=4 Type=ud // 1 GRF + +.declare uwMask_Temp3 Base=r15.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF +.declare ubMask_Temp3 Base=r15.0 ElementSize=1 SrcRegion=<16;16,1> Type=ub // 1 GRF + +.declare udALPHA_MASK_REG Base=r21.0 ElementSize=4 Type=ud // 1 GRF +.declare udALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=4 Type=ud // 1 GRF + + +//Initialize mask reg to FFFF + + mov (16) uwALPHA_MASK_REG(0)<1> 0xFFFF:uw + + +//Fast jump for - +//LAYER0: we determine whether layer 0 is to be loaded and processed or not based +// on block mask in module "Set_Layer_0" and store result in f0.1. +// This flag is then directly used to while loading buf0-3 and colorfill. +// (So flag f0.1 should not be changed from Set_Layer_0 till Colorfill) +// +//LAYER1-7: For all other layers, we compute whether layer is to be loaded and processed +// based on block mask in module "Set_Layer_1-7" and store result in SKIP_LAYER +// variable. +// While Loading buf 4 and 5, we move SKIP_LAYER to f0.0 every time and use it +// for Loading. +// For processing though, we move SKIP_LAYER only once to f0.1 in module +// "Set_Buf0_Buf4" and use f0.1 for deciding whether layer 1-7 (all 4 sub blocks) +// is to be processed or not. +// (So flag f0.1) should not be modififed from module "Set_Buf0_Buf4" till module +// that processess sub-block 3). +// +//None of the above fast jumps, apply to CSC modules. We always perform CSC irrespective of mask. +// +//Example: (Without going into finer details) +// Typical Combined kernel: +// +// (let var = decision whether to load/process that layer) +// +// Set_Layer_0 //f0.1 <- var +// .. +// Set_Layer_1 //f0.1 <- var, SKIP_LAYER <- var +// .. +// Load buf 0 //use f0.1 +// Load buf 4 //f0.0 <- SKIP_LAYER +// Load buf 1 //use f0.1 +// Load buf 5 //f0.0 <- SKIP_LAYER +// Load buf 2 //use f0.1 +// Load buf 3 //use f0.1 +// .. +// .. +// Colorfill +// .. +// Set_Buf0_Buf4 //f0.1 <- SKIP_LAYER +// process0-4 //Use f0.1 +// Load buf 4 +// Set_Buf1_Buf5 +// process1-5 +// Load buf 5 +// .. +// Set_Layer_2 //f0.1 <-var, SKIP_LAYER <- var +// .. +// Set_Buf2_Buf4 +// process2-4 +// Load buf 4 +// Set_Buf3_Buf5 +// process3-5 +// Load buf 5 +// .. + + + and (1) r24.2<1>:ub r2.2<0;1,0>:uw 3:uw + + + //Copy all AVS Payload data + // Setup Message Payload Header for 1st block of Media Sampler 8x8 (16x4 for IVB+) + //currently the dx & dy is passed by Constant buffer (zero) + mov (1) r25.0<1>:f r9.6<0;1,0>:f //NLAS dy + mov (1) r25.6<1>:f r9.5<0;1,0>:f //NLAS dx + mov (1) r25.4<1>:f r3.0<0;1,0>:f //Step X + mov (1) r25.5<1>:f r4.0<0;1,0>:f //Step Y + + + mov (1) r25.2<1>:f r6.0<0;1,0>:f //Orig X + mov (1) r25.3<1>:f r5.0<0;1,0>:f //Orig Y + + mov (1) r25.7<1>:ud 0:ud + add (1) r25.7<1>:ud r25.7<0;1,0>:ud MSG_AVS_SAMPLE + MSG_AVS_164 + MSG_IEF_BYPASS:ud + + //NLAS calculations for 2nd half of blocks of Media Sampler 8x8: + // X(i) = X0 + dx*i + ddx*i*(i-1)/2 ==> X(8) = X0 + dx*8 +ddx*28 + // dx(i)= dx(0) + ddx*i ==> dx(8)= dx + ddx*8 + + //OPTIMIZATION: fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY - are sub registers of same GRF. Use NODDCLR NODDCHK. -rT + + // Calculating X(8) + mov (1) acc0.2<1>:f r6.0<0;1,0>:f + mac (1) acc0.2<1>:f r3.0<0;1,0>:f 8.0:f + mac (1) r23.2<1>:f r9.5<0;1,0>:f 28.0:f { NoDDClr } + + // Calculating Y(4) + mul (1) r23.1<1>:f r4.0<0;1,0>:f 4.0:f { NoDDClr, NoDDChk } //dY*4 + + // Calculating dx(8) + mov (1) acc0.4<1>:f r3.0<0;1,0>:f + mac (1) r23.4<1>:f r9.5<0;1,0>:f 8.0:f { NoDDClr, NoDDChk } + + // Binding Index + mov (1) r23.5<1>:ud 0:ud { NoDDChk } + + +SKIP_LAYER_L0: + nop + + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/VP_Setup.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/VP_Setup.g8a new file mode 100644 index 000000000..8ef15dbe1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/VP_Setup.g8a @@ -0,0 +1,440 @@ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * Copyright 2000-2011 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: Zhao Yakui + */ + +// 326 // Total instruction count +// 1 // Total kernel count + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// FileName: VP_Setup.asm +// Author: Vivek Kumar +// Description: Sets up all parameters for the Video Processing Kernel + + + + +// Description: Includes all definitions explicit to Fast Composite. + + + + +// End of common.inc + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_4 Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud +.declare udBUFFER_5 Base=r46.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwBUFFER_0 Base=r64.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_1 Base=r80.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_2 Base=r96.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_3 Base=r112.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_4 Base=r28.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw +.declare uwBUFFER_5 Base=r46.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare ubBUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4BUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_4 Base=r28.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub +.declare ub4BUFFER_5 Base=r46.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Setup pointer to the inline parameter + +// Copy MSG HDR + mov (8) r27.0<1>:ud r0.0<8;8,1>:ud // Initialize message payload header with R0 + +// Only one layer is enough + +//temp; remove it once unread msg warnings are resolved -vK +mov (8) r25<1>:ud r0.0<8;8,1>:ud +mov (8) r26<1>:ud r0.0<8;8,1>:ud + +// Calculate StepX for all layers and overwrite it on the ratio + mul (8) r3.0<1>:f r3.0<8;8,1>:f r9.4<0;1,0>:f //StepX_ratio = StepX / VideoStepX + + //Normalised Ratio of Horizontal step size with main video for all layers now becomes + //Normalised Horizontal step size for all layers + +// Calculate block origin for all layers and overwrite it on the frame origin + mov (2) r10.5<1>:f r9.0<2;2,1>:w //Convert origin from word to float + + cmp.e.f0.0 (1) null<1>:d r2.26<0;1,0>:ub 1:uw + + + shr (1) r17.0<1>:uw r2.2<0;1,0>:uw 0:uw + and (1) r17.0<1>:uw r17.0<0;1,0>:uw 3:uw + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 1:uw + (f0.1) jmpi (1) ROTATE_90_L0 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 2:uw + (f0.1) jmpi (1) ROTATE_180_L0 + cmp.e.f0.1 (1) null<1>:w r17.0<0;1,0>:uw 3:uw + (f0.1) jmpi (1) ROTATE_270_L0 + + // rotate 0 degree +ROTATE_0_L0: + (-f0.0)mov (1) acc0.0<1>:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r10.5<0;1,0>:f + + mov (1) acc0.0<1>:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r10.6<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 90 degree +ROTATE_90_L0: + (-f0.0)mov (1) acc0.0<1>:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r10.6<0;1,0>:f + + mov (1) r16.0<1>:f r2.0<0;1,0>:uw + add (1) r17.0<1>:f -r10.5<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + + mov (1) acc0.0<1>:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 180 degree +ROTATE_180_L0: + (-f0.0)mov (1) r16.0<1>:f r2.0<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r10.5<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.0<1>:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r17.0<0;1,0>:f + + mov (1) r16.0<1>:f r2.1<0;1,0>:uw + add (1) r17.0<1>:f -r10.6<0;1,0>:f r16.0<0;1,0>:f + add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + mov (1) acc0.0<1>:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r17.0<0;1,0>:f + jmpi (1) END_SRC_BLOCK_ORIG_COMP_L0 + + // rotate 270 degree +ROTATE_270_L0: + (-f0.0)mov (1) r16.0<1>:f r2.1<0;1,0>:uw + (-f0.0)add (1) r17.0<1>:f -r10.6<0;1,0>:f r16.0<0;1,0>:f + (-f0.0)add (1) r17.0<1>:f r17.0<0;1,0>:f -16.0:f + (-f0.0)mov (1) acc0.0<1>:f r6.0<0;1,0>:f + (-f0.0)mac (1) r6.0<1>:f r3.0<0;1,0>:f r17.0<0;1,0>:f + + mov (1) acc0.0<1>:f r5.0<0;1,0>:f + mac (1) r5.0<1>:f r4.0<0;1,0>:f r10.5<0;1,0>:f + +END_SRC_BLOCK_ORIG_COMP_L0: + nop diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/YUV_to_RGB.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/YUV_to_RGB.g8a new file mode 100644 index 000000000..e1994f258 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/YUV_to_RGB.g8a @@ -0,0 +1,996 @@ +/* + * Copyright 2000-2013 Intel Corporation All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * Authors: + * Zhao Yakui + */ + + + +// Module name: common.inc +// +// Common header file for all Video-Processing kernels +// + +.default_execution_size (16) +.default_register_type :ub + +.reg_count_total 128 +.reg_count_payload 7 + +//========== Common constants ========== + + +//========== Macros ========== + + +//Fast Jump, For more details see "Set_Layer_N.asm" + + +//========== Defines ==================== + +//========== Static Parameters (Common To All) ========== +//r1 + + +//r2 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + +//Color Pipe (IECP) parameters + + +//ByteCopy + + +//r4 + + // e.g. byte0 byte1 byte2 + // YUYV 0 1 3 + // YVYU 0 3 1 + + +//========== Inline parameters (Common To All) =========== + + +//============== Binding Index Table=========== +//Common between DNDI and DNUV + + +//================= Common Message Descriptor ===== +// Message descriptor for thread spawning +// Message Descriptors +// = 000 0001 (min message len 1 ) 0,0000 (resp len 0 -add later) +// 0000,0000,0000 +// 0001(Spawn a root thread),0001 (Root thread spawn thread) +// = 0x02000011 +// Thread Spawner Message Descriptor + + +// Message descriptor for atomic operation add +// Message Descriptors +// = 000 0110 (min message len 6 ) 0,0000 (resp len 0 -add later) +// 1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add) +// 0000,0000 (Binding table index, added later) +// = 0x02000011 + +// Atomic Operation Add Message Descriptor + + +// Message descriptor for dataport media write + // Message Descriptors + // = 000 0001 (min message len 1 - add later) 00000 (resp len 0) + // 1 (header present 1) 0 1010 (media block write) 000000 + // 00000000 (binding table index - set later) + // = 0x020A8000 + + +// Message Length defines + + +// Response Length defines + + +// Block Width and Height Size defines + + +// Extended Message Descriptors + + +// Common message descriptors: + + +//===================== Math Function Control =================================== + + +//============ Message Registers =============== + // buf4 starts from r28 + + +//#define mMSGHDR_EOT r43 // Dummy Message Register for EOT + + +.declare mubMSGPAYLOAD Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub +.declare muwMSGPAYLOAD Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw +.declare mudMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud +.declare mfMSGPAYLOAD Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f + +//=================== End of thread instruction =========================== + + +//=====================Pointers Used===================================== + + +//======================================================================= + + +//r11-r17 +// Define temp space for any usages + + +// Common Buffers + + +// temp space for rotation + +.declare fROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare udROBUF Base=r11.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=ud + +.declare uwROBUF Base=r11.0 ElementSize=2 SrcRegion=<16;16,1> DstRegion=<1> Type=uw + +.declare ubROBUF Base=r11.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +.declare ub4ROBUF Base=r11.0 ElementSize=1 SrcRegion=<32;8,4> DstRegion=<4> Type=ub + + +// End of common.inc + + +// Module name: YUV_to_RGB.asm +// +// Convert YUV to RGB, handle it by 16x4 block +// + + +// Description: Includes all definitions explicit to Fast Composite. + + +//========== GRF partition ========== + // r0 header : r0 (1 GRF) + // Static parameters : r1 - r6 (6 GRFS) + // Inline parameters : r7 - r8 (2 GRFs) + // MSGSRC : r27 (1 GRF) +//=================================== + +//Interface: +//========== Static Parameters (Explicit To Fast Composite) ========== +//r1 +//CSC Set 0 + + +.declare udCSC_CURBE Base=r1.0 ElementSize=4 Type=ud + +//Constant alpha + + +//r2 + + +// Gen7 AVS WA + + +// WiDi Definitions + + +//Colorfill + + + // 0: 0-degree, 1: 90, 2: 180, 3: 270-degree, clockwise. + +.declare ubCOLOR_PIXEL_VAL Base=r2.20 ElementSize=1 SrcRegion=<0;1,0> DstRegion=<1> Type=ub + +//r3 +//Normalised Ratio of Horizontal step size with main video for all layers + + + //Normalised Ratio of Horizontal step size with main video for all layers becomes + //Normalised Horizontal step size for all layers in VP_Setup.asm + + +//r4 +//Normalised Vertical step size for all layers + + +//r5 +//Normalised Vertical Frame Origin for all layers + + +//r6 +//Normalised Horizontal Frame Origin for all layers + + +//========== Inline Parameters (Explicit To Fast Composite) ========== + + +//Main video Step X + + +//====================== Binding table (Explicit To Fast Composite)========================================= + + +//Used by Interlaced Scaling Kernels + + +//========== Sampler State Table Index (Explicit To Fast Composite)========== +//Sampler Index for AVS/IEF messages + + +//Sampler Index for SIMD16 sampler messages + + +//============================================================================= + +.declare fBUFFER_0 Base=r64.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_1 Base=r80.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_2 Base=r96.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f +.declare fBUFFER_3 Base=r112.0 ElementSize=4 SrcRegion=<8;8,1> DstRegion=<1> Type=f + +.declare bBUFFER_0 Base=r64.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_1 Base=r80.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_2 Base=r96.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub +.declare bBUFFER_3 Base=r112.0 ElementSize=1 SrcRegion=<16;16,1> DstRegion=<1> Type=ub + +//Pointer to mask reg + + +//r18 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +.declare udCSC_COEFF_0 Base=r18.0 ElementSize=4 Type=ud // 1 GRF + +//r19 + + +.declare udCSC_COEFF_1 Base=r19.0 ElementSize=4 Type=ud // 1 GRF + + +//r20 + +.declare uwALPHA_MASK_REG_TEMP Base=r20.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r21 + +.declare uwALPHA_MASK_REG Base=r21.0 ElementSize=2 SrcRegion=<16;16,1> Type=uw // 1 GRF + +//r22 + + +//Always keep Cannel Pointers and Offsets in same GRF, so that we can use +// NODDCLR, NODDCHK flags. -rT + + +//Keep fORIGIN_X_NLAS, fY_OFFSET_2ND_BLOCK, fSTEP_X_NLAS, pMSGDSC_COPY, ubCONST_ALPHA_COPY as +//sub registers of same GRF to enable using NODDCLR NODDCHK. -rT + +//r23 + + +//Lumakey + + +//r24 + + +//r25 + + +//r26 + + +//defines to generate LABELS during compile time. + + +//Msg payload buffers; upto 4 full-size messages can be written + +//Unnecessary to use the MSGPayLoad, So it is temporiarily used for conversion of YUV->RGB + +.declare fBUFFER_R Base=r28.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_G Base=r30.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_B Base=r32.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + +.declare fBUFFER_Y Base=r36.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_U Base=r38.0 ElementSize=4 SrcRegion=<8;8,1> Type=f +.declare fBUFFER_V Base=r40.0 ElementSize=4 SrcRegion=<8;8,1> Type=f + + +.declare wTempR Base=r42.0 ElementSize=2 Type=w +.declare wTempG Base=r44.0 ElementSize=2 Type=w +.declare wTempB Base=r46.0 ElementSize=2 Type=w + +.declare ubTempR Base=r42.0 ElementSize=1 Type=ub +.declare ubTempG Base=r44.0 ElementSize=1 Type=ub +.declare ubTempB Base=r46.0 ElementSize=1 Type=ub + + // the r17 register (nTEMP0) is originally defined from "Common.inc" + // instead of re-defining a nTEMP0 here, we use "SAVE_RGB" suffix for its naming + + .declare wTemp0 Base=r17.0 ElementSize=2 Type=uw + + +//_SAVE_INC_ + // NTSC standard + // R = Clamp ( 1.164(Y-16/255) + 1.596(Cr-128/255)) + // G = Clamp ( 1.164(Y-16/255) - 0.813(Cr-128/255) - 0.392(Cb-128/255)) + // B = Clamp ( 1.164(Y-16/255) + 2.017(Cb-128/255)) + // ITU-R conversion, Now we are using ITU-R conversion + // R = clip( Y + 1.402*(Cr-128)) // ITU-R + // G = clip( Y - 0.344*(Cb-128) - 0.714*(Cr-128)) + // B = clip( Y + 1.772*(Cb-128)) + + // At the save module we have all 8 address sub-registers available. + // So we will use PING-PONG type of scheme to save the data using + // pointers pBUF_CHNL_TOP_8x4 and pBUF_CHNL_BOT_8x4. This will help + // reduce dependency. - rT + + //wBUFF_CHNL_PTR points to either buffer 0 or buffer 4. + //Add appropriate offsets to get pointers for all buffers (1,2,3 or 5). + //Offsets are zero for buffer 0 and buffer 4. + //Y/U/V is also stored as R/G/B for the internal purpose +//for BUFFER_0 + mov (4) a0.0<1>:uw r22.0<4;4,1>:uw +//the first line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 0 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 0 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_1 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 512:uw +//the first line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 1 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 1 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_2 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 1024:uw +//the first line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 2 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 2 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + + +//for BUFFER_3 + add (4) a0.0<1>:uw r22.0<4;4,1>:uw 1536:uw +//the first line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 1]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 17]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 1]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 17]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 1]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 17]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,1]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,1]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,1]<2>:ub ubTempB(0, 0)<32;8,4> + +//the second line in the block 3 + + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 33]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 49]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 33]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 49]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 33]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 49]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,33]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,33]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,33]<2>:ub ubTempB(0, 0)<32;8,4> + +//the third line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 65]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 81]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 65]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 81]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 65]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 81]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,65]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,65]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,65]<2>:ub ubTempB(0, 0)<32;8,4> + +//the fourth line in the block 3 + mov (8) fBUFFER_Y(0, 0)<1> r[a0.1, 97]<16;8,2>:ub + mov (8) fBUFFER_Y(1, 0)<1> r[a0.1, 113]<16;8,2>:ub + mov (8) fBUFFER_U(0, 0)<1> r[a0.2, 97]<16;8,2>:ub + mov (8) fBUFFER_U(1, 0)<1> r[a0.2, 113]<16;8,2>:ub + mov (8) fBUFFER_V(0, 0)<1> r[a0.0, 97]<16;8,2>:ub + mov (8) fBUFFER_V(1, 0)<1> r[a0.0, 113]<16;8,2>:ub + + mul (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> 0.0039216f + mul (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> 0.0039216f + mul (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> 0.0039216f + + add (16) fBUFFER_Y(0, 0)<1> fBUFFER_Y(0, 0)<1> r7.3<0;1,0>:f + add (16) fBUFFER_U(0, 0)<1> fBUFFER_U(0, 0)<1> r7.7<0;1,0>:f + add (16) fBUFFER_V(0, 0)<1> fBUFFER_V(0, 0)<1> r8.3<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.1<0;1,0>:f + mac.sat (16) fBUFFER_R(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.2<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r7.4<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r7.5<0;1,0>:f + mac.sat (16) fBUFFER_G(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r7.6<0;1,0>:f + + mul (16) acc0.0<1>:f fBUFFER_Y(0, 0)<8;8,1> r8.0<0;1,0>:f + mac (16) acc0.0<1>:f fBUFFER_U(0, 0)<8;8,1> r8.1<0;1,0>:f + mac.sat (16) fBUFFER_B(0, 0)<1> fBUFFER_V(0, 0)<8;8,1> r8.2<0;1,0>:f + + mul (16) fBUFFER_R(0, 0)<1> fBUFFER_R(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_G(0, 0)<1> fBUFFER_G(0, 0)<8;8,1> 255.0f + mul (16) fBUFFER_B(0, 0)<1> fBUFFER_B(0, 0)<8;8,1> 255.0f + + mov (16) wTempR(0, 0)<2> fBUFFER_R(0, 0)<8;8,1> + mov (16) wTempG(0, 0)<2> fBUFFER_G(0, 0)<8;8,1> + mov (16) wTempB(0, 0)<2> fBUFFER_B(0, 0)<8;8,1> + mov (16) r[a0.1,97]<2>:ub ubTempR(0, 0)<32;8,4> + mov (16) r[a0.2,97]<2>:ub ubTempG(0, 0)<32;8,4> + mov (16) r[a0.0,97]<2>:ub ubTempB(0, 0)<32;8,4> + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.asm new file mode 100644 index 000000000..44e3b35c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel YUY2_TO_NV12 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_VYUA.g8a" +#include "PA_AVS_Buf_0.g8a" +#include "PA_AVS_Buf_1.g8a" +#include "PA_AVS_Buf_2.g8a" +#include "PA_AVS_Buf_3.g8a" +#include "Save_AVS_PA.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.g8b new file mode 100644 index 000000000..5a92f0ae9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pa.g8b @@ -0,0 +1,279 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.asm new file mode 100644 index 000000000..adc81fdbe --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel YUY2_TO_NV12 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_VYUA.g8a" +#include "PA_AVS_Buf_0.g8a" +#include "PA_AVS_Buf_1.g8a" +#include "PA_AVS_Buf_2.g8a" +#include "PA_AVS_Buf_3.g8a" +#include "Save_AVS_NV12.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.g8b new file mode 100644 index 000000000..19d4ff0b5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl2.g8b @@ -0,0 +1,236 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.asm new file mode 100644 index 000000000..44c7f9e28 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel YUY2_TO_NV12 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_VYUA.g8a" +#include "PA_AVS_Buf_0.g8a" +#include "PA_AVS_Buf_1.g8a" +#include "PA_AVS_Buf_2.g8a" +#include "PA_AVS_Buf_3.g8a" +#include "Save_AVS_PL3.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.g8b new file mode 100644 index 000000000..255ea818c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pa_to_pl3.g8b @@ -0,0 +1,189 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.asm new file mode 100644 index 000000000..55d9cedfb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PA +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL2.g8a" +#include "PL2_AVS_Buf_0.g8a" +#include "PL2_AVS_Buf_1.g8a" +#include "PL2_AVS_Buf_2.g8a" +#include "PL2_AVS_Buf_3.g8a" +#include "Save_AVS_PA.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.g8b new file mode 100644 index 000000000..5a3dde592 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pa.g8b @@ -0,0 +1,287 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.asm new file mode 100644 index 000000000..0281854d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PL2 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL2.g8a" +#include "PL2_AVS_Buf_0.g8a" +#include "PL2_AVS_Buf_1.g8a" +#include "PL2_AVS_Buf_2.g8a" +#include "PL2_AVS_Buf_3.g8a" +#include "Save_AVS_NV12.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.g8b new file mode 100644 index 000000000..c34fdeae2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl2.g8b @@ -0,0 +1,244 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.asm new file mode 100644 index 000000000..042a83476 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL2_TO_PL3 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL2.g8a" +#include "PL2_AVS_Buf_0.g8a" +#include "PL2_AVS_Buf_1.g8a" +#include "PL2_AVS_Buf_2.g8a" +#include "PL2_AVS_Buf_3.g8a" +#include "Save_AVS_PL3.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.g8b new file mode 100644 index 000000000..ebfcb71bd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_pl3.g8b @@ -0,0 +1,197 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.asm new file mode 100644 index 000000000..58a5204de --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.asm @@ -0,0 +1,18 @@ +// Module name: AVS +.kernel PL2_TO_PL2 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL2.g8a" +#include "PL2_AVS_Buf_0.g8a" +#include "PL2_AVS_Buf_1.g8a" +#include "PL2_AVS_Buf_2.g8a" +#include "PL2_AVS_Buf_3.g8a" +#include "YUV_to_RGB.g8a" +#include "Save_AVS_RGBX.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.g8b new file mode 100644 index 000000000..ba6c270a6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl2_to_rgbx.g8b @@ -0,0 +1,770 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22001240, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x04000400 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x06000600 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x02800005, 0x20001260, 0x1e000046, 0x00010001 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00010001, 0x22201048, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22001040, 0x00000204, 0x00000000 }, + { 0x00010001, 0x22041240, 0x00000220, 0x00000000 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00020002 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0003001f }, + { 0x00400001, 0x22081040, 0x00690200, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x23e00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25000208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26200208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x27400208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a00a28, 0x0e000360, 0x00000020 }, + { 0x00000040, 0x25c40a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x26e40a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x26e00a28, 0x0e000360, 0x00000020 }, + { 0x00600001, 0x63a02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x63a22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c02288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c12288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x63c22288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c02288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c12288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x64c22288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e02288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e12288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x64e22288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e02288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e12288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x63e22288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64002288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64012288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x64022288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65002288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65012288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x65022288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65202288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65212288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x65222288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65232288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x06000380, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060004a0, 0x0a0a8018 }, + { 0x00400040, 0x22001040, 0x16690208, 0x02000200 }, + { 0x00600001, 0x65e02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x65e22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66002288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66012288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x66022288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67002288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67012288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x67022288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67202288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67212288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x67222288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66202288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66212288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x66222288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66402288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66412288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x66422288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67402288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67412288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x67422288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67602288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67612288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x67622288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67632288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x060005c0, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060006e0, 0x0a0a8018 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a00a28, 0x0e000360, 0x00000020 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x25c40a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x26e40a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x26e00a28, 0x0e000360, 0x00000020 }, + { 0x00400040, 0x22001040, 0x16690208, 0x04000400 }, + { 0x00600001, 0x63a02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x63a22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c02288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c12288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x63c22288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c02288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c12288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x64c22288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e02288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e12288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x64e22288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e02288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e12288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x63e22288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64002288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64012288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x64022288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65002288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65012288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x65022288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65202288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65212288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x65222288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65232288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x06000380, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060004a0, 0x0a0a8018 }, + { 0x00400040, 0x22001040, 0x16690208, 0x06000600 }, + { 0x00600001, 0x65e02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x65e22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66002288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66012288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x66022288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67002288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67012288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x67022288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67202288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67212288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x67222288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66202288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66212288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x66222288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66402288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66412288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x66422288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67402288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67412288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x67422288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67602288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67612288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x67622288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67632288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x060005c0, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060006e0, 0x0a0a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.asm new file mode 100644 index 000000000..acb7670ce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PL3 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL3.g8a" +#include "PL3_AVS_Buf_0.g8a" +#include "PL3_AVS_Buf_1.g8a" +#include "PL3_AVS_Buf_2.g8a" +#include "PL3_AVS_Buf_3.g8a" +#include "Save_AVS_PA.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.g8b new file mode 100644 index 000000000..4bf629482 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pa.g8b @@ -0,0 +1,303 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.asm new file mode 100644 index 000000000..713cb979a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PL2 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL3.g8a" +#include "PL3_AVS_Buf_0.g8a" +#include "PL3_AVS_Buf_1.g8a" +#include "PL3_AVS_Buf_2.g8a" +#include "PL3_AVS_Buf_3.g8a" +#include "Save_AVS_NV12.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.g8b new file mode 100644 index 000000000..70fafd837 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl2.g8b @@ -0,0 +1,260 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.asm new file mode 100644 index 000000000..f6a2a7605 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PL3_TO_PL3 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_PL3.g8a" +#include "PL3_AVS_Buf_0.g8a" +#include "PL3_AVS_Buf_1.g8a" +#include "PL3_AVS_Buf_2.g8a" +#include "PL3_AVS_Buf_3.g8a" +#include "Save_AVS_PL3.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.g8b new file mode 100644 index 000000000..800fe687f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/pl3_to_pl3.g8b @@ -0,0 +1,213 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.asm new file mode 100644 index 000000000..14baafeba --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.asm @@ -0,0 +1,18 @@ +// Module name: AVS +.kernel RGBX_TO_NV12 +.code + +#include "VP_Setup.g8a" +#include "Set_Layer_0.g8a" +#include "Set_AVS_Buf_0123_BGRA.g8a" +#include "PA_AVS_Buf_0.g8a" +#include "PA_AVS_Buf_1.g8a" +#include "PA_AVS_Buf_2.g8a" +#include "PA_AVS_Buf_3.g8a" +#include "RGB_to_YUV.g8a" +#include "Save_AVS_NV12.g8a" +#include "EOT.g8a" + +.end_code + +.end_kernel diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.g8b new file mode 100644 index 000000000..20e1053c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/rgbx_to_nv12.g8b @@ -0,0 +1,661 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22001240, 0x006902c0, 0x00000000 }, + { 0x00400001, 0x22081240, 0x006902c0, 0x00000000 }, + { 0x02800005, 0x20001260, 0x1e000040, 0x00010001 }, + { 0x00010001, 0x22201048, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22001040, 0x00000202, 0x00000000 }, + { 0x00010001, 0x22021240, 0x00000220, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x0e000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_h_blur.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_h_blur.g8b new file mode 100644 index 000000000..ffa759b40 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_h_blur.g8b @@ -0,0 +1,1718 @@ +{ 0x00000001, 0x23401608, 0x00000000, 0x00000000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x23441608, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0007 }, +{ 0x00000001, 0x20401608, 0x00000000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000340, 0x02490000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x00000001, 0x202c1608, 0x00000000, 0x00040004 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20240208, 0x1e000020, 0xfffcfffc }, +{ 0x06000010, 0x20000201, 0x16000024, 0x00040004 }, +{ 0x00200001, 0x23283ae8, 0x004500b0, 0x00000000 }, +{ 0x00200001, 0x23083ae8, 0x004500a0, 0x00000000 }, +{ 0x00200001, 0x22e83ae8, 0x00450090, 0x00000000 }, +{ 0x00200001, 0x22c83ae8, 0x00450080, 0x00000000 }, +{ 0x00200001, 0x22a83ae8, 0x00450070, 0x00000000 }, +{ 0x00200001, 0x22883ae8, 0x00450060, 0x00000000 }, +{ 0x00200001, 0x22683ae8, 0x00450050, 0x00000000 }, +{ 0x00200001, 0x22483ae8, 0x00450040, 0x00000000 }, +{ 0x00200001, 0x23383ae8, 0x004500b8, 0x00000000 }, +{ 0x00200001, 0x23183ae8, 0x004500a8, 0x00000000 }, +{ 0x00200001, 0x22f83ae8, 0x00450098, 0x00000000 }, +{ 0x00200001, 0x22d83ae8, 0x00450088, 0x00000000 }, +{ 0x00200001, 0x22b83ae8, 0x00450078, 0x00000000 }, +{ 0x00200001, 0x22983ae8, 0x00450068, 0x00000000 }, +{ 0x00200001, 0x22783ae8, 0x00450058, 0x00000000 }, +{ 0x00200001, 0x22583ae8, 0x00450048, 0x00000000 }, +{ 0x00010020, 0x34000005, 0x0e001400, 0x000067d0 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000340, 0x02490000 }, +{ 0x00200001, 0x22603ae8, 0x00450268, 0x00000000 }, +{ 0x00200001, 0x22403ae8, 0x00450248, 0x00000000 }, +{ 0x00200001, 0x22803ae8, 0x00450288, 0x00000000 }, +{ 0x00200001, 0x22c03ae8, 0x004502c8, 0x00000000 }, +{ 0x00200001, 0x22a03ae8, 0x004502a8, 0x00000000 }, +{ 0x00200001, 0x23203ae8, 0x00450328, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0007 }, +{ 0x00200001, 0x23003ae8, 0x00450308, 0x00000000 }, +{ 0x00200001, 0x22e03ae8, 0x004502e8, 0x00000000 }, +{ 0x00000040, 0x20400208, 0x1600002c, 0x00040004 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00200001, 0x22703ae8, 0x00450278, 0x00000000 }, +{ 0x00200001, 0x22503ae8, 0x00450258, 0x00000000 }, +{ 0x00200001, 0x22683ae8, 0x00450050, 0x00000000 }, +{ 0x00200001, 0x22483ae8, 0x00450040, 0x00000000 }, +{ 0x00200001, 0x22783ae8, 0x00450058, 0x00000000 }, +{ 0x00200001, 0x22583ae8, 0x00450048, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000240, 0x00000000 }, +{ 0x00200001, 0x22903ae8, 0x00450298, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000250, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000260, 0x00000000 }, +{ 0x00200001, 0x22883ae8, 0x00450060, 0x00000000 }, +{ 0x00200001, 0x22d03ae8, 0x004502d8, 0x00000000 }, +{ 0x00200001, 0x22b03ae8, 0x004502b8, 0x00000000 }, +{ 0x00200001, 0x22983ae8, 0x00450068, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000270, 0x00000000 }, +{ 0x00200001, 0x22c83ae8, 0x00450080, 0x00000000 }, +{ 0x00200001, 0x22a83ae8, 0x00450070, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000280, 0x00000000 }, +{ 0x00200001, 0x22d83ae8, 0x00450088, 0x00000000 }, +{ 0x00200001, 0x22b83ae8, 0x00450078, 0x00000000 }, +{ 0x00200001, 0x23303ae8, 0x00450338, 0x00000000 }, +{ 0x00200001, 0x23103ae8, 0x00450318, 0x00000000 }, +{ 0x00200001, 0x22f03ae8, 0x004502f8, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000290, 0x00000000 }, +{ 0x00200001, 0x22e83ae8, 0x00450090, 0x00000000 }, +{ 0x00200001, 0x23083ae8, 0x004500a0, 0x00000000 }, +{ 0x00200001, 0x23283ae8, 0x004500b0, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a0, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c0, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d0, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b0, 0x00000000 }, +{ 0x00200001, 0x23383ae8, 0x004500b8, 0x00000000 }, +{ 0x00200001, 0x23183ae8, 0x004500a8, 0x00000000 }, +{ 0x00200001, 0x22f83ae8, 0x00450098, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e0, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c1, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000241, 0x00000000 }, +{ 0x00000001, 0x20303ee8, 0x00000000, 0x332bcc77 }, +{ 0x00000001, 0x21403ee8, 0x00000000, 0x3c1d98ad }, +{ 0x00000001, 0x206c22e8, 0x000002f0, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d1, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000251, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000261, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e1, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f1, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000271, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000281, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000301, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000311, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000291, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a1, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000321, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000331, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b1, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x208022e8, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a2, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x209c22e8, 0x000002b2, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d2, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000300, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000310, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000320, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000330, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000322, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20bc22e8, 0x00000332, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a3, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x209c22e8, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x21503ee8, 0x00000000, 0x3e525448 }, +{ 0x00000001, 0x21603ee8, 0x00000000, 0x3f11e168 }, +{ 0x00000001, 0x20a422e8, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000303, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b422e8, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208822e8, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000314, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x208022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000265, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b5, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x21703ee8, 0x00000000, 0x3875735f }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x21803a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61a00a88, 0x00000180, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c1, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000241, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x61a80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b00a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61b80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c00a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61c80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d00a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61d80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e00a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61e80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f00a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61f80a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d1, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000251, 0x00000000 }, +{ 0x00000001, 0x62000a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000261, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e1, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f1, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000271, 0x00000000 }, +{ 0x00000001, 0x62080a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000281, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000301, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000311, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000291, 0x00000000 }, +{ 0x00000001, 0x62100a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a1, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000321, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000331, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b1, 0x00000000 }, +{ 0x00000001, 0x62180a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d2, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a2, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000322, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000332, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b2, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x208022e8, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c3, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x208422e8, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x00000244, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b4, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc22e8, 0x00000334, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a10a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61a90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b10a88, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61b90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c10a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61c90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d10a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61d90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c2, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000242, 0x00000000 }, +{ 0x00000001, 0x61e10a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61e90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f10a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x61f90a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d2, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000252, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x62010a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000262, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e2, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f2, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000272, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x62090a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000282, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000302, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000312, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000323, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000292, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x62110a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a2, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000333, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000322, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000332, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x205c22e8, 0x000002b2, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x62190a88, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x208022e8, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b4, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x41aa2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41ba2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41ca2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41da2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41ea2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000243, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c3, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f22288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fa2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000253, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000263, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d3, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42022288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e3, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000273, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000283, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f3, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420a2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000303, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000293, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a3, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000313, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42122288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000323, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x205c22e8, 0x000002b3, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000333, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x421a2288, 0x00000024, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x208022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000335, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a022e8, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20bc22e8, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x41ab2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41bb2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41cb2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41db2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41eb2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c4, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000244, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f32288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fb2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d4, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000254, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42032288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000264, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e4, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f4, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000274, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420b2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000284, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000304, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000314, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000294, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42132288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a4, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000324, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000335, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x207c22e8, 0x00000334, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b4, 0x00000000 }, +{ 0x00000001, 0x421b2288, 0x00000024, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x208c22e8, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bb, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030b, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20b422e8, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61ac0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61bc0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dc, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61cc0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61dc0a88, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61ec0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f40a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61fc0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x62040a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x620c0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c5, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000245, 0x00000000 }, +{ 0x00000001, 0x62140a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b6, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x206422e8, 0x000002d5, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000255, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000265, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e5, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f5, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000275, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000285, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000305, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000315, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000295, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a5, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000325, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000335, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b5, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x621c0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ab, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a022e8, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a422e8, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x209822e8, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x208022e8, 0x0000024d, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ad, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x20a022e8, 0x000002cd, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bd, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20a822e8, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000246, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c6, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x00000001, 0x61a50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x61ad0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x61b50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x61bd0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x61c50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x61cd0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x61d50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033d, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x61dd0a88, 0x00000220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x61e50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x61ed0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x61f50a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x61fd0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000256, 0x00000000 }, +{ 0x00000001, 0x62050a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000266, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000276, 0x00000000 }, +{ 0x00000001, 0x620d0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000286, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000296, 0x00000000 }, +{ 0x00000001, 0x62150a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d6, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a6, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e6, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b6, 0x00000000 }, +{ 0x00000001, 0x621d0a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f6, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000306, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b7, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000316, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000326, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000336, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ab, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x20a022e8, 0x000002cb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x208022e8, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c22e8, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a822e8, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024d, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002cd, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dd, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ad, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc22e8, 0x0000033d, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x208022e8, 0x0000024e, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025e, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002ce, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002de, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026e, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027e, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ee, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fe, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028e, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029e, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030e, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031e, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ae, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002be, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032e, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033e, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x22203a28, 0x00000100, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x41ae2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000108, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204022e8, 0x00000247, 0x00000000 }, +{ 0x00000001, 0x206022e8, 0x000002c7, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41be2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41ce2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41de2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x41ee2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f62288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41fe2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204422e8, 0x00000257, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42062288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x204822e8, 0x00000267, 0x00000000 }, +{ 0x00000001, 0x204c22e8, 0x00000277, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420e2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205022e8, 0x00000287, 0x00000000 }, +{ 0x00000001, 0x205422e8, 0x00000297, 0x00000000 }, +{ 0x00000001, 0x22203a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42162288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000220, 0x00000000 }, +{ 0x00000001, 0x205822e8, 0x000002a7, 0x00000000 }, +{ 0x00000001, 0x206422e8, 0x000002d7, 0x00000000 }, +{ 0x00000001, 0x205c22e8, 0x000002b7, 0x00000000 }, +{ 0x00000001, 0x421e2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x206822e8, 0x000002e7, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c8, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x00000248, 0x00000000 }, +{ 0x00000001, 0x206c22e8, 0x000002f7, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d8, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x00000258, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000268, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e8, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f8, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000278, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000288, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000308, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000318, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000298, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a8, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000328, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x00000338, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b8, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00000001, 0x208022e8, 0x00000249, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002c9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872003 }, +{ 0x00000001, 0x208422e8, 0x00000259, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x00000269, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x00000279, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x00000289, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x00000299, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002a9, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002b9, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002d9, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x208022e8, 0x0000024a, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002e9, 0x00000000 }, +{ 0x00000001, 0x207022e8, 0x00000307, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002f9, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025a, 0x00000000 }, +{ 0x00000001, 0x207422e8, 0x00000317, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026a, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x00000309, 0x00000000 }, +{ 0x00000001, 0x207822e8, 0x00000327, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x00000319, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027a, 0x00000000 }, +{ 0x00000001, 0x207c22e8, 0x00000337, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028a, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x00000329, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72003 }, +{ 0x00000001, 0x20bc22e8, 0x00000339, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029a, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002aa, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002ca, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002ba, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002da, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x20a822e8, 0x000002ea, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024b, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fa, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026b, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030a, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031a, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032a, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033a, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029b, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ab, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x20a022e8, 0x000002cb, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bb, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00000001, 0x20a422e8, 0x000002db, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002eb, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024c, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025c, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fb, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030b, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026c, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031b, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032b, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028c, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033b, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00000001, 0x209822e8, 0x000002ac, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bc, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cc, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002dc, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00000001, 0x208022e8, 0x0000024d, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ec, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fc, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025d, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026d, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030c, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031c, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027d, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028d, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032c, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033c, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029d, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ad, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x00000001, 0x209c22e8, 0x000002bd, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cd, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x20a422e8, 0x000002dd, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ed, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fd, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030d, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031d, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032d, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033d, 0x00000000 }, +{ 0x00000001, 0x208022e8, 0x0000024e, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00000001, 0x20a022e8, 0x000002ce, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025e, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026e, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002de, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ee, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027e, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028e, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002fe, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030e, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029e, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002ae, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031e, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032e, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002be, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072017 }, +{ 0x00000001, 0x20bc22e8, 0x0000033e, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472017 }, +{ 0x00000001, 0x208022e8, 0x0000024f, 0x00000000 }, +{ 0x00000001, 0x208422e8, 0x0000025f, 0x00000000 }, +{ 0x00000001, 0x20a022e8, 0x000002cf, 0x00000000 }, +{ 0x00000001, 0x20a422e8, 0x000002df, 0x00000000 }, +{ 0x00000001, 0x208822e8, 0x0000026f, 0x00000000 }, +{ 0x00000001, 0x208c22e8, 0x0000027f, 0x00000000 }, +{ 0x00000001, 0x20a822e8, 0x000002ef, 0x00000000 }, +{ 0x00000001, 0x20ac22e8, 0x000002ff, 0x00000000 }, +{ 0x00000001, 0x209022e8, 0x0000028f, 0x00000000 }, +{ 0x00000001, 0x209422e8, 0x0000029f, 0x00000000 }, +{ 0x00000001, 0x20b022e8, 0x0000030f, 0x00000000 }, +{ 0x00000001, 0x20b422e8, 0x0000031f, 0x00000000 }, +{ 0x00000001, 0x209822e8, 0x000002af, 0x00000000 }, +{ 0x00000001, 0x209c22e8, 0x000002bf, 0x00000000 }, +{ 0x00000001, 0x20b822e8, 0x0000032f, 0x00000000 }, +{ 0x00000001, 0x20bc22e8, 0x0000033f, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00000001, 0x20403a28, 0x00000100, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000104, 0x00000000 }, +{ 0x00000001, 0x41a72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x41af2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000108, 0x00000000 }, +{ 0x00600001, 0x21803ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000344, 0x0a0a8000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x0000010c, 0x00000000 }, +{ 0x00000001, 0x41b72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000110, 0x00000000 }, +{ 0x00000001, 0x41bf2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000114, 0x00000000 }, +{ 0x00000001, 0x41c72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000118, 0x00000000 }, +{ 0x00000001, 0x41cf2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x0000011c, 0x00000000 }, +{ 0x00000001, 0x41d72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000120, 0x00000000 }, +{ 0x00000001, 0x41df2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000124, 0x00000000 }, +{ 0x00000001, 0x41e72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000128, 0x00000000 }, +{ 0x00000001, 0x41ef2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x0000012c, 0x00000000 }, +{ 0x00000001, 0x41f72288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000130, 0x00000000 }, +{ 0x00000001, 0x41ff2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000134, 0x00000000 }, +{ 0x00000001, 0x42072288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x00000138, 0x00000000 }, +{ 0x00000001, 0x420f2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x20403a28, 0x0000013c, 0x00000000 }, +{ 0x00000001, 0x42172288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x21880608, 0x00000000, 0x000f0007 }, +{ 0x00000001, 0x60240a88, 0x00000040, 0x00000000 }, +{ 0x00000001, 0x21803ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x421f2288, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x21843ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000180, 0x00000200 }, +{ 0x00000040, 0x202c0208, 0x1600002c, 0x00080008 }, +{ 0x00000040, 0x20240208, 0x1e000020, 0xfffcfffc }, +{ 0x05000010, 0x20000200, 0x0200002c, 0x00000024 }, +{ 0x00010020, 0x34000004, 0x0e001400, 0xffff9830 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000340, 0x02290000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20401608, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00800001, 0x20603ae8, 0x008d0040, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000344, 0x060a8000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20401608, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20240208, 0x1e000020, 0xfffcfffc }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000340, 0x02290000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20403ae8, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00800001, 0x20603ae8, 0x008d0040, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000344, 0x060a8000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x000f0003 }, +{ 0x00000001, 0x20403ae8, 0x00000024, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x2e003ae8, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20003a00, 0x06000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_unmask.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_unmask.g8b new file mode 100644 index 000000000..f27a2d5cb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_unmask.g8b @@ -0,0 +1,159 @@ +{ 0x00000001, 0x21281608, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x202c1608, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x21481608, 0x00000000, 0x00050005 }, +{ 0x00000001, 0x21681608, 0x00000000, 0x00040004 }, +{ 0x00000001, 0x21881608, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x21081608, 0x00000000, 0x00010001 }, +{ 0x06000010, 0x20000202, 0x16000020, 0x00000000 }, +{ 0x00010020, 0x34000006, 0x0e001400, 0x00000530 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000128, 0x02190000 }, +{ 0x06000010, 0x20000201, 0x16000030, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x00030003 }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20603a08, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x22000200, 0x06000188, 0x02190000 }, +{ 0x00400001, 0x21a03ae8, 0x00690060, 0x00000000 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00400001, 0x21c03ae8, 0x00690040, 0x00000000 }, +{ 0x00010020, 0x34000005, 0x0e001400, 0x00000150 }, +{ 0x00000001, 0x21821e68, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x21703ae8, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x006901c0, 0x00000000 }, +{ 0x0080802c, 0x21600008, 0x0e490000, 0x00000460 }, +{ 0x00000001, 0x210c1e68, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x21703ae8, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x00690150, 0x00000000 }, +{ 0x0080802c, 0x21200008, 0x0e490000, 0x000004e0 }, +{ 0x00400001, 0x21703ae8, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x21801e68, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x21503ae8, 0x00690150, 0x00000000 }, +{ 0x0080802c, 0x21000008, 0x0e490000, 0x00000550 }, +{ 0x00000001, 0x21801e68, 0x00000000, 0x00800080 }, +{ 0x0080802c, 0x21000008, 0x0e490000, 0x00000530 }, +{ 0x00000001, 0x41800268, 0x00000030, 0x00000000 }, +{ 0x00400001, 0x21703ae8, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x20241a68, 0x00000180, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x006901a0, 0x00000000 }, +{ 0x0080802c, 0x21000008, 0x0e490000, 0x000004e0 }, +{ 0x00400001, 0x21903ae8, 0x00690150, 0x00000000 }, +{ 0x00000020, 0x34000004, 0x0e001400, 0x00000010 }, +{ 0x00400001, 0x21903ae8, 0x006901a0, 0x00000000 }, +{ 0x01000010, 0x20000200, 0x16000034, 0x00000000 }, +{ 0x00010020, 0x34000004, 0x0e001400, 0x00000160 }, +{ 0x00000001, 0x21121e68, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x21703ae8, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x006901c0, 0x00000000 }, +{ 0x0080802c, 0x21800008, 0x0e490000, 0x00000560 }, +{ 0x00000001, 0x210c1e68, 0x00000000, 0x00800080 }, +{ 0x00400001, 0x21703ae8, 0x006901a0, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x00690150, 0x00000000 }, +{ 0x0080802c, 0x21200008, 0x0e490000, 0x00000360 }, +{ 0x00600040, 0x41502288, 0x1eae4150, 0x00ff00ff }, +{ 0x00000001, 0x21101e68, 0x00000000, 0x00800080 }, +{ 0x00600040, 0x41512288, 0x1eae4151, 0x00ff00ff }, +{ 0x00400001, 0x21703ae8, 0x00690150, 0x00000000 }, +{ 0x0080802c, 0x21400008, 0x0e490000, 0x00000590 }, +{ 0x00000001, 0x21101e68, 0x00000000, 0x00800080 }, +{ 0x0080802c, 0x21400008, 0x0e490000, 0x00000570 }, +{ 0x00000001, 0x41100268, 0x00000034, 0x00000000 }, +{ 0x00400001, 0x21703ae8, 0x00690150, 0x00000000 }, +{ 0x00000001, 0x20241a68, 0x00000110, 0x00000000 }, +{ 0x00400001, 0x21503ae8, 0x00690190, 0x00000000 }, +{ 0x0080802c, 0x21400008, 0x0e490000, 0x00000520 }, +{ 0x00400001, 0x21e03ae8, 0x00690150, 0x00000000 }, +{ 0x00000020, 0x34000004, 0x0e001400, 0x00000010 }, +{ 0x00400001, 0x21e03ae8, 0x00690190, 0x00000000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000168, 0x040a8000 }, +{ 0x00400001, 0x20603ae8, 0x006901e0, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x00030003 }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000028, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x0000000c, 0x20240208, 0x16000028, 0x00010001 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000108, 0x02190000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x00010003 }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000024, 0x00000000 }, +{ 0x0c600031, 0x20403a08, 0x00000040, 0x00000200 }, +{ 0x00200001, 0x20603ae8, 0x00450040, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000148, 0x040a8000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x00010003 }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000024, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x202c0208, 0x1600002c, 0x00040004 }, +{ 0x05000010, 0x20000203, 0x0200002c, 0x00000020 }, +{ 0x00010020, 0x34000007, 0x0e001400, 0xfffffad0 }, +{ 0x00600001, 0x2e003ae8, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20003a00, 0x06000e00, 0x82000010 }, +{ 0x00000040, 0x20241a28, 0x1e004182, 0x00800080 }, +{ 0x00800041, 0x20802228, 0x1ab10170, 0x00000182 }, +{ 0x05600010, 0x20002260, 0x22ae0170, 0x00ae0150 }, +{ 0x00600041, 0x20600a28, 0x22000024, 0x008d0158 }, +{ 0x00600041, 0x20400a28, 0x22000024, 0x008d0150 }, +{ 0x00800040, 0x20400a28, 0x0a8d0080, 0x008d0040 }, +{ 0x0080000c, 0x40400a68, 0x1e8d0040, 0x00070007 }, +{ 0x05601010, 0x20002260, 0x22ae0171, 0x00ae0151 }, +{ 0x00800001, 0x20401a68, 0x00ae0040, 0x00000000 }, +{ 0x00610001, 0x41501a88, 0x00ae0040, 0x00000000 }, +{ 0x00611001, 0x41511a88, 0x00ae0042, 0x00000000 }, +{ 0x0080002d, 0x20000220, 0x00450160, 0x00000000 }, +{ 0x00800040, 0x20402268, 0x22b10150, 0x00b14170 }, +{ 0x00000040, 0x20241a28, 0x1e00410c, 0x00800080 }, +{ 0x05800010, 0x20001a62, 0x1eb10040, 0x00000000 }, +{ 0x00810001, 0x20401a6a, 0x00b14040, 0x00000000 }, +{ 0x00600041, 0x20800a28, 0x22000024, 0x008d0158 }, +{ 0x00600041, 0x20600a28, 0x22000024, 0x008d0150 }, +{ 0x00800041, 0x20a01a28, 0x1a8d0040, 0x0000010c }, +{ 0x00800040, 0x20400a28, 0x0a8d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60400a88, 0x1e8d0040, 0x00070007 }, +{ 0x00800001, 0x21502288, 0x00cf0040, 0x00000000 }, +{ 0x0080002d, 0x20000220, 0x00450120, 0x00000000 }, +{ 0x00800040, 0x20802228, 0x1eb14170, 0x00ff00ff }, +{ 0x00800040, 0x20402228, 0x1eb14150, 0x00ff00ff }, +{ 0x00000040, 0x20241a28, 0x1e004180, 0x00800080 }, +{ 0x00600041, 0x20c00a28, 0x0a8d0040, 0x008d0080 }, +{ 0x00600041, 0x20e00a28, 0x0a8d0060, 0x008d00a0 }, +{ 0x00000001, 0x20401e28, 0x00000000, 0x00ff00ff }, +{ 0x0c600038, 0x20800a28, 0x0a8d00e0, 0x00000040 }, +{ 0x0c600038, 0x20600a28, 0x0a8d00c0, 0x00000040 }, +{ 0x00800040, 0x40400a68, 0x1e8d4060, 0x00ff00ff }, +{ 0x00800001, 0x20401a68, 0x00ae0040, 0x00000000 }, +{ 0x00600041, 0x20800a28, 0x22000024, 0x008d0158 }, +{ 0x00800041, 0x20a01a28, 0x1a8d0040, 0x00000180 }, +{ 0x00600041, 0x20600a28, 0x22000024, 0x008d0150 }, +{ 0x00800040, 0x20400a28, 0x0a8d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60400a88, 0x1e8d0040, 0x00070007 }, +{ 0x00800001, 0x21502288, 0x00cf0040, 0x00000000 }, +{ 0x0080002d, 0x20000220, 0x00450100, 0x00000000 }, +{ 0x00000040, 0x20241a28, 0x1e004112, 0x00800080 }, +{ 0x00800041, 0x20802228, 0x1ab10170, 0x00000112 }, +{ 0x03600010, 0x20002261, 0x22ae0170, 0x00ae0150 }, +{ 0x00600041, 0x20600a28, 0x22000024, 0x008d0158 }, +{ 0x00600041, 0x20400a28, 0x22000024, 0x008d0150 }, +{ 0x00800040, 0x20400a28, 0x0a8d0080, 0x008d0040 }, +{ 0x0080000c, 0x40400a68, 0x1e8d0040, 0x00070007 }, +{ 0x03601010, 0x20002261, 0x22ae0171, 0x00ae0151 }, +{ 0x00800001, 0x20401a68, 0x00ae0040, 0x00000000 }, +{ 0x00610001, 0x41501a89, 0x00ae0040, 0x00000000 }, +{ 0x00611001, 0x41511a89, 0x00ae0042, 0x00000000 }, +{ 0x0080002d, 0x20000220, 0x00450180, 0x00000000 }, +{ 0x00000001, 0x20801e28, 0x00000000, 0x00ff00ff }, +{ 0x00800041, 0x20402228, 0x22b10170, 0x00b10150 }, +{ 0x00000040, 0x20241a28, 0x1e004110, 0x00800080 }, +{ 0x0c600038, 0x20c00a28, 0x0a8d0060, 0x00000080 }, +{ 0x0c600038, 0x20a00a28, 0x0a8d0040, 0x00000080 }, +{ 0x00800001, 0x40400a68, 0x008d00a0, 0x00000000 }, +{ 0x00800001, 0x20401a68, 0x00ae0040, 0x00000000 }, +{ 0x00600041, 0x20800a28, 0x22000024, 0x008d0158 }, +{ 0x00800041, 0x20a01a28, 0x1a8d0040, 0x00000110 }, +{ 0x00600041, 0x20600a28, 0x22000024, 0x008d0150 }, +{ 0x00800040, 0x20400a28, 0x0a8d00a0, 0x008d0060 }, +{ 0x0080000c, 0x60400a88, 0x1e8d0040, 0x00070007 }, +{ 0x00800001, 0x21502288, 0x00cf0040, 0x00000000 }, +{ 0x0080002d, 0x20000220, 0x00450140, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_v_blur.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_v_blur.g8b new file mode 100644 index 000000000..a57f43d3f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen8/sharpening_v_blur.g8b @@ -0,0 +1,296 @@ +{ 0x00000001, 0x23601608, 0x00000000, 0x00000000 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000001, 0x23641608, 0x00000000, 0x00020002 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0007000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000360, 0x02490000 }, +{ 0x00000001, 0x20441608, 0x00000000, 0x00000000 }, +{ 0x00000001, 0x20281608, 0x00000000, 0x00040004 }, +{ 0x0c600031, 0x22e03a08, 0x00000040, 0x00000200 }, +{ 0x00000040, 0x20200208, 0x1e000024, 0xfffcfffc }, +{ 0x06000010, 0x20000201, 0x16000020, 0x00040004 }, +{ 0x00010020, 0x34000005, 0x0e001400, 0x00000ff0 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000360, 0x02490000 }, +{ 0x00800001, 0x22a03ae8, 0x008d0320, 0x00000000 }, +{ 0x00800001, 0x22603ae8, 0x008d02e0, 0x00000000 }, +{ 0x00000001, 0x21403ee8, 0x00000000, 0x3e525448 }, +{ 0x00000001, 0x21603ee8, 0x00000000, 0x3875735f }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0007000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000040, 0x20440208, 0x16000028, 0x00040004 }, +{ 0x00800001, 0x208022e8, 0x00b10270, 0x00000000 }, +{ 0x0c600031, 0x22e03a08, 0x00000040, 0x00000200 }, +{ 0x00000001, 0x20203ee8, 0x00000000, 0x332bcc77 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x208022e8, 0x00b10280, 0x00000000 }, +{ 0x00800001, 0x204022e8, 0x00b10260, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x00000001, 0x20303ee8, 0x00000000, 0x3c1d98ad }, +{ 0x00800001, 0x204022e8, 0x00b10270, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10290, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00000001, 0x21503ee8, 0x00000000, 0x3f11e168 }, +{ 0x00800001, 0x208022e8, 0x00b102a0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b102b0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x208022e8, 0x00b10280, 0x00000000 }, +{ 0x00800001, 0x21803a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x61800a88, 0x008d0180, 0x00000000 }, +{ 0x00800001, 0x21a02288, 0x00cf0180, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x00800001, 0x208022e8, 0x00b10290, 0x00000000 }, +{ 0x00800001, 0x204022e8, 0x00b10280, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102a0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102b0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x208022e8, 0x00b10290, 0x00000000 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102a0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102b0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x00800001, 0x21b02288, 0x00cf0220, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102a0, 0x00000000 }, +{ 0x00800001, 0x204022e8, 0x00b10290, 0x00000000 }, +{ 0x00800001, 0x21c02288, 0x00cf0220, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x208022e8, 0x00b102b0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x204022e8, 0x00b102a0, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b10310, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x208022e8, 0x00b102b0, 0x00000000 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x21d02288, 0x00cf0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b10310, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x00800001, 0x204022e8, 0x00b102b0, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b10320, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x208022e8, 0x00b102c0, 0x00000000 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x204022e8, 0x00b102c0, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b10310, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10320, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b10330, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x21e02288, 0x00cf0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102d0, 0x00000000 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x21f02288, 0x00cf0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b10310, 0x00000000 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x00800001, 0x204022e8, 0x00b102d0, 0x00000000 }, +{ 0x00600001, 0x21803ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000364, 0x0a0a8000 }, +{ 0x00800001, 0x208022e8, 0x00b10320, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10330, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b10340, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00800001, 0x208022e8, 0x00b102e0, 0x00000000 }, +{ 0x00800001, 0x22203a28, 0x008d0100, 0x00000000 }, +{ 0x00800041, 0x20c03ae8, 0x3e8d0080, 0x3875735f }, +{ 0x00800001, 0x62200a88, 0x008d0220, 0x00000000 }, +{ 0x00800001, 0x208022e8, 0x00b102f0, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392071c8, 0x00c72002 }, +{ 0x0060015b, 0x081e0000, 0x392061c8, 0x00872002 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10300, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b10310, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472015 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072015 }, +{ 0x00800001, 0x208022e8, 0x00b10320, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472014 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072014 }, +{ 0x00800001, 0x208022e8, 0x00b10330, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472003 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072003 }, +{ 0x00800001, 0x208022e8, 0x00b10340, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472016 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072016 }, +{ 0x00800001, 0x208022e8, 0x00b10350, 0x00000000 }, +{ 0x0060015b, 0x091e0000, 0x392091c8, 0x01472002 }, +{ 0x0060015b, 0x081e0000, 0x392081c8, 0x01072002 }, +{ 0x00000001, 0x21880608, 0x00000000, 0x0007000f }, +{ 0x00800001, 0x20403a28, 0x008d0100, 0x00000000 }, +{ 0x00000001, 0x21803ae8, 0x0000002c, 0x00000000 }, +{ 0x00800001, 0x22002288, 0x00cf0220, 0x00000000 }, +{ 0x00800001, 0x60400a88, 0x008d0040, 0x00000000 }, +{ 0x00800001, 0x22102288, 0x00cf0040, 0x00000000 }, +{ 0x00000001, 0x21843ae8, 0x00000028, 0x00000000 }, +{ 0x00000040, 0x20280208, 0x16000028, 0x00080008 }, +{ 0x0c600031, 0x20003a00, 0x00000180, 0x00000200 }, +{ 0x00000040, 0x20200208, 0x1e000024, 0xfffcfffc }, +{ 0x05000010, 0x20000200, 0x02000028, 0x00000020 }, +{ 0x00010020, 0x34000004, 0x0e001400, 0xfffff010 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000360, 0x02290000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20441608, 0x00000000, 0x00000000 }, +{ 0x0c600031, 0x22603a08, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000364, 0x060a8000 }, +{ 0x00800001, 0x20603ae8, 0x008d0260, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20441608, 0x00000000, 0x00000000 }, +{ 0x00000040, 0x20200208, 0x1e000024, 0xfffcfffc }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000360, 0x02290000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000020, 0x00000000 }, +{ 0x0c600031, 0x22603a08, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x20403ae8, 0x008d0000, 0x00000000 }, +{ 0x00000040, 0x22000200, 0x06000364, 0x060a8000 }, +{ 0x00800001, 0x20603ae8, 0x008d0260, 0x00000000 }, +{ 0x00000001, 0x20480608, 0x00000000, 0x0003000f }, +{ 0x00000001, 0x20403ae8, 0x0000002c, 0x00000000 }, +{ 0x00000001, 0x20443ae8, 0x00000020, 0x00000000 }, +{ 0x0c600031, 0x20003a00, 0x00000040, 0x00000200 }, +{ 0x00600001, 0x2e003ae8, 0x008d0000, 0x00000000 }, +{ 0x07000031, 0x20003a00, 0x06000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.am new file mode 100644 index 000000000..1e32dffd6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.am @@ -0,0 +1,74 @@ +SRCDIR = $(top_srcdir)/src/shaders/post_processing/gen8 +VPATH = $(SRCDIR) + +INTEL_PP_G9B = \ + pl2_to_pl2.g9b \ + pl2_to_pl3.g9b \ + pl3_to_pl2.g9b \ + pl3_to_pl3.g9b \ + pl2_to_rgbx.g9b \ + rgbx_to_nv12.g9b \ + pl2_to_pa.g9b \ + pl3_to_pa.g9b \ + pa_to_pl2.g9b \ + pa_to_pl3.g9b \ + pa_to_pa.g9b \ + $(NULL) + +INTEL_PP_G8A = \ + EOT.g8a \ + PL2_AVS_Buf_0.g8a \ + PL2_AVS_Buf_1.g8a \ + PL2_AVS_Buf_2.g8a \ + PL2_AVS_Buf_3.g8a \ + PL3_AVS_Buf_0.g8a \ + PL3_AVS_Buf_1.g8a \ + PL3_AVS_Buf_2.g8a \ + PL3_AVS_Buf_3.g8a \ + PA_AVS_Buf_0.g8a \ + PA_AVS_Buf_1.g8a \ + PA_AVS_Buf_2.g8a \ + PA_AVS_Buf_3.g8a \ + Save_AVS_NV12.g8a \ + Save_AVS_PL3.g8a \ + Save_AVS_RGBX.g8a \ + Save_AVS_PA.g8a \ + Set_AVS_Buf_0123_PL2.g8a \ + Set_AVS_Buf_0123_PL3.g8a \ + Set_AVS_Buf_0123_BGRA.g8a \ + Set_AVS_Buf_0123_VYUA.g8a \ + YUV_to_RGB.g8a \ + RGB_to_YUV.g8a \ + Set_Layer_0.g8a \ + VP_Setup.g8a \ + $(NULL) + +INTEL_PP_G9A = $(INTEL_PP_G8A) +INTEL_PP_ASM = $(INTEL_PP_G9B:%.g9b=%.asm) +INTEL_PP_GEN9_ASM = $(INTEL_PP_G9B:%.g9b=%.g9s) + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_PP_G9B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g9b .g9s .asm + +$(INTEL_PP_GEN9_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G9A) +.asm.g9s: + $(AM_V_GEN)cpp $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g9s.g9b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 9 $< + +CLEANFILES = $(INTEL_PP_GEN9_ASM) + +EXTRA_DIST = \ + $(INTEL_PP_G9B) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.in new file mode 100644 index 000000000..0308258bb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_PP_G9B) +subdir = src/shaders/post_processing/gen9 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +VPATH = $(SRCDIR) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +SRCDIR = $(top_srcdir)/src/shaders/post_processing/gen8 +INTEL_PP_G9B = \ + pl2_to_pl2.g9b \ + pl2_to_pl3.g9b \ + pl3_to_pl2.g9b \ + pl3_to_pl3.g9b \ + pl2_to_rgbx.g9b \ + rgbx_to_nv12.g9b \ + pl2_to_pa.g9b \ + pl3_to_pa.g9b \ + pa_to_pl2.g9b \ + pa_to_pl3.g9b \ + pa_to_pa.g9b \ + $(NULL) + +INTEL_PP_G8A = \ + EOT.g8a \ + PL2_AVS_Buf_0.g8a \ + PL2_AVS_Buf_1.g8a \ + PL2_AVS_Buf_2.g8a \ + PL2_AVS_Buf_3.g8a \ + PL3_AVS_Buf_0.g8a \ + PL3_AVS_Buf_1.g8a \ + PL3_AVS_Buf_2.g8a \ + PL3_AVS_Buf_3.g8a \ + PA_AVS_Buf_0.g8a \ + PA_AVS_Buf_1.g8a \ + PA_AVS_Buf_2.g8a \ + PA_AVS_Buf_3.g8a \ + Save_AVS_NV12.g8a \ + Save_AVS_PL3.g8a \ + Save_AVS_RGBX.g8a \ + Save_AVS_PA.g8a \ + Set_AVS_Buf_0123_PL2.g8a \ + Set_AVS_Buf_0123_PL3.g8a \ + Set_AVS_Buf_0123_BGRA.g8a \ + Set_AVS_Buf_0123_VYUA.g8a \ + YUV_to_RGB.g8a \ + RGB_to_YUV.g8a \ + Set_Layer_0.g8a \ + VP_Setup.g8a \ + $(NULL) + +INTEL_PP_G9A = $(INTEL_PP_G8A) +INTEL_PP_ASM = $(INTEL_PP_G9B:%.g9b=%.asm) +INTEL_PP_GEN9_ASM = $(INTEL_PP_G9B:%.g9b=%.g9s) +TARGETS = $(am__append_1) +SUFFIXES = .g9b .g9s .asm +CLEANFILES = $(INTEL_PP_GEN9_ASM) +EXTRA_DIST = \ + $(INTEL_PP_G9B) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g9b .g9s .asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/post_processing/gen9/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/post_processing/gen9/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +$(INTEL_PP_GEN9_ASM): $(INTEL_PP_ASM) $(INTEL_PP_G9A) +.asm.g9s: + $(AM_V_GEN)cpp $< > _pp0.$@; \ + $(PYTHON2) $(top_srcdir)/src/shaders/gpp.py _pp0.$@ $@; \ + rm _pp0.$@ +.g9s.g9b: + $(AM_V_GEN)$(GEN4ASM) -a -o $@ -g 9 $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pa.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pa.g9b new file mode 100644 index 000000000..c06ff03a1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pa.g9b @@ -0,0 +1,279 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl2.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl2.g9b new file mode 100644 index 000000000..f98bf0258 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl2.g9b @@ -0,0 +1,236 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl3.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl3.g9b new file mode 100644 index 000000000..c37964de3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pa_to_pl3.g9b @@ -0,0 +1,189 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006420 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pa.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pa.g9b new file mode 100644 index 000000000..75bbd2fab --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pa.g9b @@ -0,0 +1,287 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl2.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl2.g9b new file mode 100644 index 000000000..71f152511 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl2.g9b @@ -0,0 +1,244 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl3.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl3.g9b new file mode 100644 index 000000000..c4ba9aa19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_pl3.g9b @@ -0,0 +1,197 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_rgbx.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_rgbx.g9b new file mode 100644 index 000000000..95a0e6a23 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl2_to_rgbx.g9b @@ -0,0 +1,770 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x048eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000a000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22001240, 0x006902c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x04000400 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001240, 0x166902c0, 0x06000600 }, + { 0x00600001, 0x248022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x248022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x24a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x24c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x24e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x250022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x252022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24803ae8, 0x3e200480, 0x3b8080c4 }, + { 0x00800041, 0x24c03ae8, 0x3e2004c0, 0x3b8080c4 }, + { 0x00800041, 0x25003ae8, 0x3e200500, 0x3b8080c4 }, + { 0x00800040, 0x24803ae8, 0x3a200480, 0x000000ec }, + { 0x00800040, 0x24c03ae8, 0x3a2004c0, 0x000000fc }, + { 0x00800040, 0x25003ae8, 0x3a200500, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000e4 }, + { 0x80800048, 0x23803ae8, 0x3a8d0500, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x000000f4 }, + { 0x80800048, 0x23c03ae8, 0x3a8d0500, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d0480, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d04c0, 0x00000104 }, + { 0x80800048, 0x24003ae8, 0x3a8d0500, 0x00000108 }, + { 0x00800041, 0x23803ae8, 0x3e8d0380, 0x437f0000 }, + { 0x00800041, 0x23c03ae8, 0x3e8d03c0, 0x437f0000 }, + { 0x00800041, 0x24003ae8, 0x3e8d0400, 0x437f0000 }, + { 0x00800001, 0x45403a68, 0x008d0380, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d03c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0400, 0x00000000 }, + { 0x00800001, 0xc2612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xc4612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc0612288, 0x00cf05c0, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x000062ea }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x02800005, 0x20001260, 0x1e000046, 0x00010001 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00010001, 0x22201048, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22001040, 0x00000204, 0x00000000 }, + { 0x00010001, 0x22041240, 0x00000220, 0x00000000 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00020002 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0003001f }, + { 0x00400001, 0x22081040, 0x00690200, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x23e00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25000208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26200208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x27400208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a00a28, 0x0e000360, 0x00000020 }, + { 0x00000040, 0x25c40a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x26e40a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x26e00a28, 0x0e000360, 0x00000020 }, + { 0x00600001, 0x63a02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x63a22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c02288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c12288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x63c22288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c02288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c12288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x64c22288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e02288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e12288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x64e22288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e02288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e12288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x63e22288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64002288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64012288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x64022288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65002288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65012288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x65022288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65202288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65212288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x65222288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65232288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x06000380, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060004a0, 0x0a0a8018 }, + { 0x00400040, 0x22001040, 0x16690208, 0x02000200 }, + { 0x00600001, 0x65e02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x65e22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66002288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66012288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x66022288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67002288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67012288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x67022288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67202288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67212288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x67222288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66202288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66212288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x66222288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66402288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66412288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x66422288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67402288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67412288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x67422288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67602288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67612288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x67622288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67632288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x060005c0, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060006e0, 0x0a0a8018 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x26e00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a00a28, 0x0e000360, 0x00000020 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x25c40a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x26e40a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x26e00a28, 0x0e000360, 0x00000020 }, + { 0x00400040, 0x22001040, 0x16690208, 0x04000400 }, + { 0x00600001, 0x63a02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x63a12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x63a22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x63a32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63c02288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x63c12288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x63c22288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x63c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64c02288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x64c12288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x64c22288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x64c32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64e02288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x64e12288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x64e22288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x64e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x63e02288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x63e12288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x63e22288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x63e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x64002288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x64012288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x64022288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x64032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65002288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x65012288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x65022288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x65032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x65202288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x65212288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x65222288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x65232288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x06000380, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060004a0, 0x0a0a8018 }, + { 0x00400040, 0x22001040, 0x16690208, 0x06000600 }, + { 0x00600001, 0x65e02288, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x65e12288, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x65e22288, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x65e32288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66002288, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x66012288, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x66022288, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x66032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67002288, 0x00ae8011, 0x00000000 }, + { 0x00600001, 0x67012288, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x67022288, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x67032288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67202288, 0x00ae8031, 0x00000000 }, + { 0x00600001, 0x67212288, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x67222288, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x67232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66202288, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x66212288, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x66222288, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x66232288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x66402288, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x66412288, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x66422288, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x66432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67402288, 0x00ae8051, 0x00000000 }, + { 0x00600001, 0x67412288, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x67422288, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x67432288, 0x0000005f, 0x00000000 }, + { 0x00600001, 0x67602288, 0x00ae8071, 0x00000000 }, + { 0x00600001, 0x67612288, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x67622288, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x67632288, 0x0000005f, 0x00000000 }, + { 0x0c800031, 0x20002220, 0x060005c0, 0x0a0a8018 }, + { 0x0c800031, 0x20002220, 0x060006e0, 0x0a0a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pa.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pa.g9b new file mode 100644 index 000000000..91309eeb5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pa.g9b @@ -0,0 +1,303 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22082260, 0x1669005c, 0x03a003a0 }, + { 0x00000209, 0x23601a28, 0x1e000120, 0x00010001 }, + { 0x00000601, 0x23641a28, 0x00000122, 0x00000000 }, + { 0x00000401, 0x23680608, 0x00000000, 0x0001001f }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x80400040, 0xc0001248, 0x168a8000, 0x00800080 }, + { 0x80400040, 0xc0201248, 0x168a8020, 0x00800080 }, + { 0x80400040, 0xc0401248, 0x168a8040, 0x00800080 }, + { 0x80400040, 0xc0601248, 0x168a8060, 0x00800080 }, + { 0x80600040, 0xa2001248, 0x168d8200, 0x00800080 }, + { 0x80600040, 0xa2201248, 0x168d8220, 0x00800080 }, + { 0x80600040, 0xa2401248, 0x168d8240, 0x00800080 }, + { 0x80600040, 0xa2601248, 0x168d8260, 0x00800080 }, + { 0x80400040, 0xc4001248, 0x168a8400, 0x00800080 }, + { 0x80400040, 0xc4201248, 0x168a8420, 0x00800080 }, + { 0x80400040, 0xc4401248, 0x168a8440, 0x00800080 }, + { 0x80400040, 0xc4601248, 0x168a8460, 0x00800080 }, + { 0x80400040, 0xc0101248, 0x168a8010, 0x00800080 }, + { 0x80400040, 0xc0301248, 0x168a8030, 0x00800080 }, + { 0x80400040, 0xc0501248, 0x168a8050, 0x00800080 }, + { 0x80400040, 0xc0701248, 0x168a8070, 0x00800080 }, + { 0x80600040, 0xa2101248, 0x168d8210, 0x00800080 }, + { 0x80600040, 0xa2301248, 0x168d8230, 0x00800080 }, + { 0x80600040, 0xa2501248, 0x168d8250, 0x00800080 }, + { 0x80600040, 0xa2701248, 0x168d8270, 0x00800080 }, + { 0x80400040, 0xc4101248, 0x168a8410, 0x00800080 }, + { 0x80400040, 0xc4301248, 0x168a8430, 0x00800080 }, + { 0x80400040, 0xc4501248, 0x168a8450, 0x00800080 }, + { 0x80400040, 0xc4701248, 0x168a8470, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x08000800 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000002 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x02000200 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000004 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x00000006 }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x00000008 }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000a }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x06000600 }, + { 0x00000040, 0x23840a28, 0x0e000364, 0x0000000c }, + { 0x00000040, 0x24a40a28, 0x0e000364, 0x0000000e }, + { 0x00600201, 0xec002288, 0x00cf8001, 0x00000000 }, + { 0x00600201, 0xec202288, 0x00cf8021, 0x00000000 }, + { 0x00800601, 0xc8002288, 0x00d28201, 0x00000000 }, + { 0x00800601, 0xc8202288, 0x00d28221, 0x00000000 }, + { 0x00600401, 0xea002288, 0x00cf8401, 0x00000000 }, + { 0x00600401, 0xea202288, 0x00cf8421, 0x00000000 }, + { 0x00600201, 0xed202288, 0x00cf8041, 0x00000000 }, + { 0x00600201, 0xed402288, 0x00cf8061, 0x00000000 }, + { 0x00800601, 0xc9202288, 0x00d28241, 0x00000000 }, + { 0x00800601, 0xc9402288, 0x00d28261, 0x00000000 }, + { 0x00600401, 0xeb202288, 0x00cf8441, 0x00000000 }, + { 0x00600401, 0xeb402288, 0x00cf8461, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x060a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8018 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl2.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl2.g9b new file mode 100644 index 000000000..addd4ba7b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl2.g9b @@ -0,0 +1,260 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl3.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl3.g9b new file mode 100644 index 000000000..471d2d718 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/pl3_to_pl3.g9b @@ -0,0 +1,213 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x28802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x29002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2a802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2b002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2c802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2d002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000d000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb001 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2e802248, 0x00000200, 0x00000200 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x044eb002 }, + { 0x00000001, 0x22080608, 0x00000000, 0x0000e000 }, + { 0x02000031, 0x2f002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x25c00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00200208, 0x24a01a28, 0x1e450120, 0x00010001 }, + { 0x00200208, 0x25c01a28, 0x1e450120, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x00070007 }, + { 0x00000401, 0x25c80608, 0x00000000, 0x00070007 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x80600040, 0xc4001248, 0x16ae8400, 0x00800080 }, + { 0x80600040, 0xc4401248, 0x16ae8440, 0x00800080 }, + { 0x80600040, 0xc0001248, 0x16ae8000, 0x00800080 }, + { 0x80600040, 0xc0401248, 0x16ae8040, 0x00800080 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x80600040, 0xcc001248, 0x16ae8c00, 0x00800080 }, + { 0x80600040, 0xcc401248, 0x16ae8c40, 0x00800080 }, + { 0x80600040, 0xc8001248, 0x16ae8800, 0x00800080 }, + { 0x80600040, 0xc8401248, 0x16ae8840, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24c82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x25e02288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x25e82288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24d02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24d82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x25f02288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x25f82288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x24e02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x24e82288, 0x00cf8441, 0x00000000 }, + { 0x00600201, 0x26002288, 0x00cf8001, 0x00000000 }, + { 0x00600601, 0x26082288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600601, 0x24f02288, 0x00cf8c01, 0x00000000 }, + { 0x00600401, 0x24f82288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x26102288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x26182288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x060a8019 }, + { 0x0c000031, 0x20002220, 0x060005c0, 0x060a801a }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/rgbx_to_nv12.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/rgbx_to_nv12.g9b new file mode 100644 index 000000000..a241c1a66 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/post_processing/gen9/rgbx_to_nv12.g9b @@ -0,0 +1,661 @@ + { 0x00600001, 0x23600208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23200208, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x23400208, 0x008d0000, 0x00000000 }, + { 0x00600041, 0x20603ae8, 0x3a8d0060, 0x00000130 }, + { 0x00200001, 0x21541ae8, 0x00450120, 0x00000000 }, + { 0x01000010, 0x20002220, 0x1600005a, 0x00010001 }, + { 0x00000008, 0x22201248, 0x16000044, 0x00000000 }, + { 0x00000005, 0x22201248, 0x16000220, 0x00030003 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00010001 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000090 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00020002 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x000000f0 }, + { 0x01000010, 0x20001261, 0x16000220, 0x00030003 }, + { 0x00010020, 0x34000005, 0x0e001400, 0x00000180 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000154 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000158 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x000001a0 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000158 }, + { 0x00000001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000120 }, + { 0x00110001, 0x220012e8, 0x00000040, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004154, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00000040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00000040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000220 }, + { 0x00000020, 0x34000004, 0x0e001400, 0x00000070 }, + { 0x00110001, 0x220012e8, 0x00000042, 0x00000000 }, + { 0x00110040, 0x22203ae8, 0x3a004158, 0x00000200 }, + { 0x00110040, 0x22203ae8, 0x3e000220, 0xc1800000 }, + { 0x00110001, 0x24003ae0, 0x000000c0, 0x00000000 }, + { 0x00110048, 0x20c03ae8, 0x3a000060, 0x00000220 }, + { 0x00000001, 0x24003ae0, 0x000000a0, 0x00000000 }, + { 0x00000048, 0x20a03ae8, 0x3a000080, 0x00000154 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00800001, 0x22a01648, 0x10000000, 0xffffffff }, + { 0x00000005, 0x23021288, 0x16000044, 0x00030003 }, + { 0x00000001, 0x23203ae8, 0x00000138, 0x00000000 }, + { 0x00000001, 0x23383ae8, 0x00000134, 0x00000000 }, + { 0x00000001, 0x23303ae8, 0x00000060, 0x00000000 }, + { 0x00000001, 0x23343ae8, 0x00000080, 0x00000000 }, + { 0x00000001, 0x23283ae8, 0x000000c0, 0x00000000 }, + { 0x00000001, 0x232c3ae8, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x233c0608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x233c0208, 0x0600033c, 0x08000000 }, + { 0x00000001, 0x24083ae0, 0x000000c0, 0x00000000 }, + { 0x00000048, 0x24083ae0, 0x3e000060, 0x41000000 }, + { 0x00000248, 0x22e83ae8, 0x3e000134, 0x41e00000 }, + { 0x00000641, 0x22e43ae8, 0x3e000080, 0x40800000 }, + { 0x00000001, 0x24103ae0, 0x00000060, 0x00000000 }, + { 0x00000648, 0x22f03ae8, 0x3e000134, 0x41000000 }, + { 0x00000401, 0x22f40608, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006ea2 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00460046 }, + { 0x00400009, 0x22c01868, 0x16690400, 0x00050005 }, + { 0x00400001, 0x24003660, 0x30000000, 0x00006204 }, + { 0x00400040, 0x24001860, 0x16690400, 0x00400040 }, + { 0x00400209, 0x22401868, 0x16690400, 0x00050005 }, + { 0x00000401, 0x22500608, 0x00000000, 0x01000100 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x28002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000001 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2a002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000002 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2c002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22d00608, 0x00000000, 0x00400040 }, + { 0x00000001, 0x220c0208, 0x0000000c, 0x00000000 }, + { 0x00000040, 0x22000200, 0x060002f4, 0x050eb000 }, + { 0x00000001, 0x22080608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23240608, 0x00000000, 0x00000003 }, + { 0x00600001, 0x22200208, 0x008d0320, 0x00000000 }, + { 0x02000031, 0x2e002248, 0x00000200, 0x00000200 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00400001, 0x22001240, 0x006902c0, 0x00000000 }, + { 0x00400001, 0x22081240, 0x006902c0, 0x00000000 }, + { 0x02800005, 0x20001260, 0x1e000040, 0x00010001 }, + { 0x00010001, 0x22201048, 0x00000200, 0x00000000 }, + { 0x00010001, 0x22001040, 0x00000202, 0x00000000 }, + { 0x00010001, 0x22021240, 0x00000220, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00600040, 0x22001040, 0x168d0200, 0x02000200 }, + { 0x00600001, 0x238022e8, 0x00ae8201, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8211, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8401, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8411, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8001, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8011, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8001648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca012288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc012288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8012288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8221, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8231, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8421, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8431, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8021, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8031, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8201648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca212288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc212288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8212288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8241, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8251, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8441, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8451, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8041, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8051, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8401648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca412288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc412288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8412288, 0x00cf05c0, 0x00000000 }, + { 0x00600001, 0x238022e8, 0x00ae8261, 0x00000000 }, + { 0x00600001, 0x23a022e8, 0x00ae8271, 0x00000000 }, + { 0x00600001, 0x23c022e8, 0x00ae8461, 0x00000000 }, + { 0x00600001, 0x23e022e8, 0x00ae8471, 0x00000000 }, + { 0x00600001, 0x240022e8, 0x00ae8061, 0x00000000 }, + { 0x00600001, 0x242022e8, 0x00ae8071, 0x00000000 }, + { 0x00800041, 0x24003ae0, 0x3e8d0380, 0x3e991687 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0x3f1645a2 }, + { 0x00800048, 0x24803ae8, 0x3e8d0400, 0x3de978d5 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0xbe2d0e56 }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbea978d5 }, + { 0x00800048, 0x24c03ae8, 0x3e8d0400, 0x3eff7cee }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x43000000 }, + { 0x00800048, 0x24003ae0, 0x3e8d0380, 0x3eff7cee }, + { 0x00800048, 0x24003ae0, 0x3e8d03c0, 0xbed60419 }, + { 0x00800048, 0x25003ae8, 0x3e8d0400, 0xbda6809d }, + { 0x00800001, 0x45403a68, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x45803a68, 0x008d04c0, 0x00000000 }, + { 0x00800001, 0x45c03a68, 0x008d0500, 0x00000000 }, + { 0x00800001, 0xaa601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xac601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xa8601648, 0x10000000, 0x00000000 }, + { 0x00800001, 0xca612288, 0x00cf0540, 0x00000000 }, + { 0x00800001, 0xcc612288, 0x00cf0580, 0x00000000 }, + { 0x00800001, 0xc8612288, 0x00cf05c0, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00600001, 0x23800208, 0x008d0360, 0x00000000 }, + { 0x00600001, 0x24a00208, 0x008d0360, 0x00000000 }, + { 0x00200201, 0x23801a28, 0x00450120, 0x00000000 }, + { 0x00000201, 0x24a01a28, 0x00000120, 0x00000000 }, + { 0x00000608, 0x24a41a28, 0x1e000122, 0x00010001 }, + { 0x00000401, 0x23880608, 0x00000000, 0x000f000f }, + { 0x00000401, 0x24a80608, 0x00000000, 0x0007000f }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x80800040, 0xa2001248, 0x16b18200, 0x00800080 }, + { 0x80800040, 0xa2201248, 0x16b18220, 0x00800080 }, + { 0x80800040, 0xa2401248, 0x16b18240, 0x00800080 }, + { 0x80800040, 0xa2601248, 0x16b18260, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8400, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8420, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8440, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8460, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xc4001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xc4401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8000, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8020, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8040, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8060, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc0001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc0401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x80800040, 0xaa001248, 0x16b18a00, 0x00800080 }, + { 0x80800040, 0xaa201248, 0x16b18a20, 0x00800080 }, + { 0x80800040, 0xaa401248, 0x16b18a40, 0x00800080 }, + { 0x80800040, 0xaa601248, 0x16b18a60, 0x00800080 }, + { 0x00600008, 0x45c01248, 0x1eae8c00, 0x00010001 }, + { 0x00600008, 0x45e01248, 0x1eae8c20, 0x00010001 }, + { 0x00600008, 0x46001248, 0x1eae8c40, 0x00010001 }, + { 0x00600008, 0x46201248, 0x1eae8c60, 0x00010001 }, + { 0x00600040, 0x45c01248, 0x12ae05c0, 0x00ae05e0 }, + { 0x80600040, 0xcc001248, 0x16ae05c0, 0x00800080 }, + { 0x00600040, 0x46001248, 0x12ae0600, 0x00ae0620 }, + { 0x80600040, 0xcc401248, 0x16ae0600, 0x00800080 }, + { 0x00600008, 0x46401248, 0x1eae8800, 0x00010001 }, + { 0x00600008, 0x46601248, 0x1eae8820, 0x00010001 }, + { 0x00600008, 0x46801248, 0x1eae8840, 0x00010001 }, + { 0x00600008, 0x46a01248, 0x1eae8860, 0x00010001 }, + { 0x00600040, 0x46401248, 0x12ae0640, 0x00ae0660 }, + { 0x80600040, 0xc8001248, 0x16ae0640, 0x00800080 }, + { 0x00600040, 0x46801248, 0x12ae0680, 0x00ae06a0 }, + { 0x80600040, 0xc8401248, 0x16ae0680, 0x00800080 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x02000200 }, + { 0x00800201, 0x23a02288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x23b02288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x23c02288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x23d02288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x44c02288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x44d02288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x44c12288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x44d12288, 0x00cf8041, 0x00000000 }, + { 0x00400040, 0x22001a40, 0x166902c0, 0x04000400 }, + { 0x00800201, 0x23e02288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x23f02288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24002288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24102288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x44e02288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x44f02288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x44e12288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x44f12288, 0x00cf8841, 0x00000000 }, + { 0x00400040, 0x22081a40, 0x166902c0, 0x06000600 }, + { 0x00800201, 0x24202288, 0x00d28201, 0x00000000 }, + { 0x00800401, 0x24302288, 0x00d28221, 0x00000000 }, + { 0x00800201, 0x24402288, 0x00d28241, 0x00000000 }, + { 0x00800401, 0x24502288, 0x00d28261, 0x00000000 }, + { 0x00600201, 0x45002288, 0x00cf8401, 0x00000000 }, + { 0x00600601, 0x45102288, 0x00cf8441, 0x00000000 }, + { 0x00600601, 0x45012288, 0x00cf8001, 0x00000000 }, + { 0x00600401, 0x45112288, 0x00cf8041, 0x00000000 }, + { 0x00800201, 0x24602288, 0x00d28a01, 0x00000000 }, + { 0x00800401, 0x24702288, 0x00d28a21, 0x00000000 }, + { 0x00800201, 0x24802288, 0x00d28a41, 0x00000000 }, + { 0x00800401, 0x24902288, 0x00d28a61, 0x00000000 }, + { 0x00600201, 0x45202288, 0x00cf8c01, 0x00000000 }, + { 0x00600601, 0x45302288, 0x00cf8c41, 0x00000000 }, + { 0x00600601, 0x45212288, 0x00cf8801, 0x00000000 }, + { 0x00600401, 0x45312288, 0x00cf8841, 0x00000000 }, + { 0x0c000031, 0x20002220, 0x06000380, 0x120a8018 }, + { 0x0c000031, 0x20002220, 0x060004a0, 0x0a0a8019 }, + { 0x00600001, 0x2fe00208, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x20002220, 0x06000fe0, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.am new file mode 100644 index 000000000..63991ce28 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.am @@ -0,0 +1,206 @@ + +INTEL_G4I = \ + exa_wm.g4i \ + exa_wm_affine.g4i \ + exa_wm_yuv_color_balance.gxa \ + exa_yuv_rgb.gxa \ + exa_yuv_gen4.g4i \ + exa_yuv_gen6.g4i + +INTEL_G4A = \ + exa_sf.g4a \ + exa_wm_xy.g4a \ + exa_wm_src_affine.g4a \ + exa_wm_src_sample_argb.g4a \ + exa_wm_src_sample_planar.g4a \ + exa_wm_yuv_color_balance.g4a \ + exa_wm_yuv_rgb.g4a \ + exa_wm_write.g4a + +INTEL_G4S = $(INTEL_G4A:%.g4a=%.g4s) + +INTEL_G4B = \ + exa_sf.g4b \ + exa_wm_xy.g4b \ + exa_wm_src_affine.g4b \ + exa_wm_src_sample_argb.g4b \ + exa_wm_src_sample_planar.g4b \ + exa_wm_yuv_color_balance.g4b \ + exa_wm_yuv_rgb.g4b \ + exa_wm_write.g4b + +INTEL_G4B_GEN5 = \ + exa_sf.g4b.gen5 \ + exa_wm_xy.g4b.gen5 \ + exa_wm_src_affine.g4b.gen5 \ + exa_wm_src_sample_argb.g4b.gen5 \ + exa_wm_src_sample_planar.g4b.gen5 \ + exa_wm_yuv_color_balance.g4b.gen5 \ + exa_wm_yuv_rgb.g4b.gen5 \ + exa_wm_write.g4b.gen5 + +INTEL_G6I = $(INTEL_G4I) + +INTEL_G6A = \ + exa_wm_src_affine.g6a \ + exa_wm_src_sample_argb.g6a \ + exa_wm_src_sample_planar.g6a \ + exa_wm_write.g6a \ + exa_wm_yuv_color_balance.g6a \ + exa_wm_yuv_rgb.g6a + +INTEL_G6S = $(INTEL_G6A:%.g6a=%.g6s) + +INTEL_G6B = \ + exa_wm_src_affine.g6b \ + exa_wm_src_sample_argb.g6b \ + exa_wm_src_sample_planar.g6b \ + exa_wm_write.g6b \ + exa_wm_yuv_color_balance.g6b \ + exa_wm_yuv_rgb.g6b + +INTEL_G7I = $(INTEL_G4I) \ + exa_wm_write.g7i + +INTEL_G7A = \ + exa_wm_src_affine.g7a \ + exa_wm_src_sample_argb.g7a \ + exa_wm_src_sample_planar.g7a \ + exa_wm_write.g7a \ + exa_wm_yuv_color_balance.g7a \ + exa_wm_yuv_rgb.g7a + +INTEL_G7S = $(INTEL_G7A:%.g7a=%.g7s) + +INTEL_G7B = \ + exa_wm_src_affine.g7b \ + exa_wm_src_sample_argb.g7b \ + exa_wm_src_sample_planar.g7b \ + exa_wm_write.g7b \ + exa_wm_yuv_color_balance.g7b \ + exa_wm_yuv_rgb.g7b + +# XXX: only regenerate binary for EU code containing JMPI instructions +INTEL_G7B_HASWELL = \ + exa_wm_src_sample_planar.g7b.haswell \ + exa_wm_yuv_color_balance.g7b.haswell \ + $(NULL) + +INTEL_G8A = \ + exa_wm_src_affine.g8a \ + exa_wm_src_sample_planar.g8a \ + exa_wm_src_sample_argb.g8a \ + exa_wm_yuv_color_balance.g8a \ + exa_wm_write.g8a \ + exa_wm_yuv_rgb.g8a + +INTEL_G8S = $(INTEL_G8A:%.g8a=%.g8s) + +INTEL_G8B = \ + exa_wm_src_affine.g8b \ + exa_wm_src_sample_planar.g8b \ + exa_wm_src_sample_argb.g8b \ + exa_wm_yuv_color_balance.g8b \ + exa_wm_yuv_rgb.g8b \ + exa_wm_write.g8b + +INTEL_G9A = \ + exa_wm_src_affine.g9a \ + exa_wm_src_sample_planar.g9a \ + exa_wm_src_sample_argb.g9a \ + exa_wm_yuv_color_balance.g9a \ + exa_wm_write.g9a \ + exa_wm_yuv_rgb.g9a + +INTEL_G9I = $(INTEL_G4I) + +INTEL_G9S = $(INTEL_G9A:%.g9a=%.g9s) + +INTEL_G9B = \ + exa_wm_src_affine.g9b \ + exa_wm_src_sample_planar.g9b \ + exa_wm_src_sample_argb.g9b \ + exa_wm_yuv_color_balance.g9b \ + exa_wm_yuv_rgb.g9b \ + exa_wm_write.g9b + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_G4B) +TARGETS += $(INTEL_G4B_GEN5) +TARGETS += $(INTEL_G6B) +TARGETS += $(INTEL_G7B) +TARGETS += $(INTEL_G7B_HASWELL) +TARGETS += $(INTEL_G8B) +TARGETS += $(INTEL_G9B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g4a .g4s .g4b .g4b.gen5 .g6a .g6s .g6b .g7a .g7s .g7b .g7b.haswell .g8a .g8b .g8s + +if HAVE_GEN4ASM +$(INTEL_G4S): $(INTEL_G4A) $(INTEL_G4I) +.g4a.g4s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g4s.g4b: + $(AM_V_GEN)$(GEN4ASM) -o $@ $< +.g4s.g4b.gen5: + $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@ $< + +$(INTEL_G6S): $(INTEL_G6A) $(INTEL_G6I) +.g6a.g6s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g6s.g6b: + $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +$(INTEL_G7S): $(INTEL_G7A) $(INTEL_G7I) +.g7a.g7s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g7s.g7b: + $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< +.g7s.g7b.haswell: + $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + + +$(INTEL_G8S): $(INTEL_G8A) $(INTEL_G8I) +.g8a.g8s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g8s.g8b: + $(AM_V_GEN)$(GEN4ASM) -g 8 -o $@ $< + +$(INTEL_G9S): $(INTEL_G9A) $(INTEL_G9I) +.g9a.g9s: + $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +.g9s.g9b: + $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +endif + +CLEANFILES = \ + $(INTEL_G4S) \ + $(INTEL_G6S) \ + $(INTEL_G7S) \ + $(INTEL_G8S) \ + $(INTEL_G9S) \ + $(NULL) + +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G7B_HASWELL) \ + $(INTEL_G7I) \ + $(INTEL_G8A) \ + $(INTEL_G8B) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.in new file mode 100644 index 000000000..2f85de847 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/Makefile.in @@ -0,0 +1,641 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_G4B) $(INTEL_G4B_GEN5) \ +@HAVE_GEN4ASM_TRUE@ $(INTEL_G6B) $(INTEL_G7B) \ +@HAVE_GEN4ASM_TRUE@ $(INTEL_G7B_HASWELL) $(INTEL_G8B) \ +@HAVE_GEN4ASM_TRUE@ $(INTEL_G9B) +subdir = src/shaders/render +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +INTEL_G4I = \ + exa_wm.g4i \ + exa_wm_affine.g4i \ + exa_wm_yuv_color_balance.gxa \ + exa_yuv_rgb.gxa \ + exa_yuv_gen4.g4i \ + exa_yuv_gen6.g4i + +INTEL_G4A = \ + exa_sf.g4a \ + exa_wm_xy.g4a \ + exa_wm_src_affine.g4a \ + exa_wm_src_sample_argb.g4a \ + exa_wm_src_sample_planar.g4a \ + exa_wm_yuv_color_balance.g4a \ + exa_wm_yuv_rgb.g4a \ + exa_wm_write.g4a + +INTEL_G4S = $(INTEL_G4A:%.g4a=%.g4s) +INTEL_G4B = \ + exa_sf.g4b \ + exa_wm_xy.g4b \ + exa_wm_src_affine.g4b \ + exa_wm_src_sample_argb.g4b \ + exa_wm_src_sample_planar.g4b \ + exa_wm_yuv_color_balance.g4b \ + exa_wm_yuv_rgb.g4b \ + exa_wm_write.g4b + +INTEL_G4B_GEN5 = \ + exa_sf.g4b.gen5 \ + exa_wm_xy.g4b.gen5 \ + exa_wm_src_affine.g4b.gen5 \ + exa_wm_src_sample_argb.g4b.gen5 \ + exa_wm_src_sample_planar.g4b.gen5 \ + exa_wm_yuv_color_balance.g4b.gen5 \ + exa_wm_yuv_rgb.g4b.gen5 \ + exa_wm_write.g4b.gen5 + +INTEL_G6I = $(INTEL_G4I) +INTEL_G6A = \ + exa_wm_src_affine.g6a \ + exa_wm_src_sample_argb.g6a \ + exa_wm_src_sample_planar.g6a \ + exa_wm_write.g6a \ + exa_wm_yuv_color_balance.g6a \ + exa_wm_yuv_rgb.g6a + +INTEL_G6S = $(INTEL_G6A:%.g6a=%.g6s) +INTEL_G6B = \ + exa_wm_src_affine.g6b \ + exa_wm_src_sample_argb.g6b \ + exa_wm_src_sample_planar.g6b \ + exa_wm_write.g6b \ + exa_wm_yuv_color_balance.g6b \ + exa_wm_yuv_rgb.g6b + +INTEL_G7I = $(INTEL_G4I) \ + exa_wm_write.g7i + +INTEL_G7A = \ + exa_wm_src_affine.g7a \ + exa_wm_src_sample_argb.g7a \ + exa_wm_src_sample_planar.g7a \ + exa_wm_write.g7a \ + exa_wm_yuv_color_balance.g7a \ + exa_wm_yuv_rgb.g7a + +INTEL_G7S = $(INTEL_G7A:%.g7a=%.g7s) +INTEL_G7B = \ + exa_wm_src_affine.g7b \ + exa_wm_src_sample_argb.g7b \ + exa_wm_src_sample_planar.g7b \ + exa_wm_write.g7b \ + exa_wm_yuv_color_balance.g7b \ + exa_wm_yuv_rgb.g7b + + +# XXX: only regenerate binary for EU code containing JMPI instructions +INTEL_G7B_HASWELL = \ + exa_wm_src_sample_planar.g7b.haswell \ + exa_wm_yuv_color_balance.g7b.haswell \ + $(NULL) + +INTEL_G8A = \ + exa_wm_src_affine.g8a \ + exa_wm_src_sample_planar.g8a \ + exa_wm_src_sample_argb.g8a \ + exa_wm_yuv_color_balance.g8a \ + exa_wm_write.g8a \ + exa_wm_yuv_rgb.g8a + +INTEL_G8S = $(INTEL_G8A:%.g8a=%.g8s) +INTEL_G8B = \ + exa_wm_src_affine.g8b \ + exa_wm_src_sample_planar.g8b \ + exa_wm_src_sample_argb.g8b \ + exa_wm_yuv_color_balance.g8b \ + exa_wm_yuv_rgb.g8b \ + exa_wm_write.g8b + +INTEL_G9A = \ + exa_wm_src_affine.g9a \ + exa_wm_src_sample_planar.g9a \ + exa_wm_src_sample_argb.g9a \ + exa_wm_yuv_color_balance.g9a \ + exa_wm_write.g9a \ + exa_wm_yuv_rgb.g9a + +INTEL_G9I = $(INTEL_G4I) +INTEL_G9S = $(INTEL_G9A:%.g9a=%.g9s) +INTEL_G9B = \ + exa_wm_src_affine.g9b \ + exa_wm_src_sample_planar.g9b \ + exa_wm_src_sample_argb.g9b \ + exa_wm_yuv_color_balance.g9b \ + exa_wm_yuv_rgb.g9b \ + exa_wm_write.g9b + +TARGETS = $(am__append_1) +SUFFIXES = .g4a .g4s .g4b .g4b.gen5 .g6a .g6s .g6b .g7a .g7s .g7b .g7b.haswell .g8a .g8b .g8s +CLEANFILES = \ + $(INTEL_G4S) \ + $(INTEL_G6S) \ + $(INTEL_G7S) \ + $(INTEL_G8S) \ + $(INTEL_G9S) \ + $(NULL) + +EXTRA_DIST = \ + $(INTEL_G4A) \ + $(INTEL_G4B) \ + $(INTEL_G4B_GEN5) \ + $(INTEL_G4I) \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G7B_HASWELL) \ + $(INTEL_G7I) \ + $(INTEL_G8A) \ + $(INTEL_G8B) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g4a .g4s .g4b .g4b.gen5 .g6a .g6s .g6b .g7a .g7s .g7b .g7b.haswell .g8a .g8b .g8s .g9a .g9b .g9s +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/render/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/render/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_G4S): $(INTEL_G4A) $(INTEL_G4I) +@HAVE_GEN4ASM_TRUE@.g4a.g4s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g4s.g4b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -o $@ $< +@HAVE_GEN4ASM_TRUE@.g4s.g4b.gen5: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 5 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_G6S): $(INTEL_G6A) $(INTEL_G6I) +@HAVE_GEN4ASM_TRUE@.g6a.g6s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g6s.g6b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_G7S): $(INTEL_G7A) $(INTEL_G7I) +@HAVE_GEN4ASM_TRUE@.g7a.g7s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g7s.g7b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< +@HAVE_GEN4ASM_TRUE@.g7s.g7b.haswell: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_G8S): $(INTEL_G8A) $(INTEL_G8I) +@HAVE_GEN4ASM_TRUE@.g8a.g8s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g8s.g8b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 8 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_G9S): $(INTEL_G9A) $(INTEL_G9I) +@HAVE_GEN4ASM_TRUE@.g9a.g9s: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)m4 -I$(srcdir) $< > $@ +@HAVE_GEN4ASM_TRUE@.g9s.g9b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4a new file mode 100644 index 000000000..3e660ac2b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4a @@ -0,0 +1,107 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * + */ + +/* + * Inputs (note all sub-register addresses are bytes, not float indices) + * + * Note that the vertices will have been reordered: + * + * V0 is topmost (leftmost among topmost) (upper left) + * V1 is next clockwise (lower right) + * V2 is remaining (lower left) + * + * V0 ...................... XX + * | . + * | . + * | . + * V2------------------------V1 + * + * G0 thread state -- just pass along + * + * G1 and G2 are fixed by SF spec + * + * G1.0 reserved + * G1.4 Provoking vertex + * G1.8 Determinant + * G1.12 X1 - X0 + * G1.16 X2 - X0 + * G1.20 Y1 - Y0 + * G1.24 Y2 - Y0 + * G1.30 reserved + * + * G2.0 Z0 + * G2.4 1/W0 + * G2.8 Z1 + * G2.12 1/W1 + * G2.16 Z2 + * G2.20 1/W2 + * G2.24 reserved + * G2.30 reserved + * + * G3 is V0 Vertex Attribute Data from URB (upper left) + * + * G3.0 u0 + * G3.4 v0 + * + * G4 is V1 Vertex Attribute Data from URB (lower right) + * + * G4.0 u1 + * G4.4 v1 + * + * G5 is V2 Vertex Attribute Data from URB (lower left) + * + */ + +/* Compute inverses of the input deltas */ +send (4) 0 g6<1>F g1.12<4,4,1>F math inv mlen 1 rlen 1 { align1 }; + +/* texture location at V0 */ +mov (4) m3<1>F g3<4,4,1>F { align1 }; + +/* compute V1 - V2 (motion in X) for texture coordinates */ +add (4) g7<1>F g4<4,4,1>F -g5<4,4,1>F { align1 }; + +/* multiply by 1/dx */ +mul (4) m1<1>F g7<4,4,1>F g6.0<0,1,0>F { align1 }; + +/* Compute V2 - V0 (motion in Y) for texture coordinates */ +add (4) g7<1>F g5<4,4,1>F -g3<4,4,1>F { align1 }; + +/* multiply by 1/dy */ +mul (4) m2<1>F g7<4,4,1>F g6.8<0,1,0>F {align1 }; + +/* and we're done */ +send (8) 0 null g0<8,8,1>F urb 0 transpose used complete mlen 4 rlen 0 { align1 EOT }; +nop; +nop; +nop; +nop; +nop; +nop; +nop; +nop; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b new file mode 100644 index 000000000..223c9c9ab --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b @@ -0,0 +1,15 @@ + { 0x00400031, 0x20c01fbd, 0x0069002c, 0x01110001 }, + { 0x00400001, 0x206003be, 0x00690060, 0x00000000 }, + { 0x00400040, 0x20e077bd, 0x00690080, 0x006940a0 }, + { 0x00400041, 0x202077be, 0x006900e0, 0x000000c0 }, + { 0x00400040, 0x20e077bd, 0x006900a0, 0x00694060 }, + { 0x00400041, 0x204077be, 0x006900e0, 0x000000c8 }, + { 0x00600031, 0x20001fbc, 0x008d0000, 0x8640c800 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b.gen5 new file mode 100644 index 000000000..a838f47c6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_sf.g4b.gen5 @@ -0,0 +1,15 @@ + { 0x00400031, 0x20c01fbd, 0x1069002c, 0x02100001 }, + { 0x00400001, 0x206003be, 0x00690060, 0x00000000 }, + { 0x00400040, 0x20e077bd, 0x00690080, 0x006940a0 }, + { 0x00400041, 0x202077be, 0x006900e0, 0x000000c0 }, + { 0x00400040, 0x20e077bd, 0x006900a0, 0x00694060 }, + { 0x00400041, 0x204077be, 0x006900e0, 0x000000c8 }, + { 0x00600031, 0x20001fbc, 0x648d0000, 0x8808c800 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm.g4i new file mode 100644 index 000000000..e186d3a96 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm.g4i @@ -0,0 +1,182 @@ +/* + * Copyright © 2006-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* + * Input parameters + */ + +/* Destination X/Y */ +define(`dst_x_uw', `g1.8<2,4,0>UW') +define(`dst_y_uw', `g1.10<2,4,0>UW') +define(`screen_x0', `g1.0<0,1,0>F') +define(`screen_y0', `g1.4<0,1,0>F') + +/* UV flag */ +define(`interleaved_uv', `g2.0<0,1,0>UW') + +/* Source transformation parameters */ +define(`src_du_dx', `g6.0<0,1,0>F') +define(`src_du_dy', `g6.4<0,1,0>F') +define(`src_uo', `g6.12<0,1,0>F') +define(`src_dv_dx', `g6.16<0,1,0>F') +define(`src_dv_dy', `g6.20<0,1,0>F') +define(`src_vo', `g6.28<0,1,0>F') +define(`src_dw_dx', `g7.0<0,1,0>F') +define(`src_dw_dy', `g7.4<0,1,0>F') +define(`src_wo', `g7.12<0,1,0>F') + +define(`mask_du_dx', `g8.0<0,1,0>F') +define(`mask_du_dy', `g8.4<0,1,0>F') +define(`mask_uo', `g8.12<0,1,0>F') +define(`mask_dv_dx', `g8.16<0,1,0>F') +define(`mask_dv_dy', `g8.20<0,1,0>F') +define(`mask_vo', `g8.28<0,1,0>F') +define(`mask_dw_dx', `g9.0<0,1,0>F') +define(`mask_dw_dy', `g9.4<0,1,0>F') +define(`mask_wo', `g9.12<0,1,0>F') + +/* Attribute for snb+ */ +define(`a0_a_x',`g10.0<0,1,0>F') +define(`a0_a_y',`g10.16<0,1,0>F') + +/* + * Local variables. Pairs must be aligned on even reg boundry + */ + +/* this holds the X dest coordinates */ +define(`dst_x', `g42') +define(`dst_x_0', `dst_x') +define(`dst_x_1', `g43') + +/* this holds the Y dest coordinates */ +define(`dst_y', `g44') +define(`dst_y_0', `dst_y') +define(`dst_y_1', `g45') + +/* When computing x * dn/dx, use this */ +define(`temp_x', `g30') +define(`temp_x_0', `temp_x') +define(`temp_x_1', `g31') + +/* When computing y * dn/dy, use this */ +define(`temp_y', `g28') +define(`temp_y_0', temp_y) +define(`temp_y_1', `g29') + +/* when loading x/y, use these to hold them in UW format */ +define(`temp_x_uw', temp_x) +define(`temp_y_uw', temp_y) + +/* compute source and mask u/v to this pair to send to sampler */ +define(`src_msg', `m1') +define(`src_msg_ind',`1') +define(`src_u', `m2') +define(`src_v', `m4') +define(`src_w', `g12') +define(`src_w_0', `src_w') +define(`src_w_1', `g13') + +define(`mask_msg', `m7') +define(`mask_msg_ind',`7') +define(`mask_u', `m8') +define(`mask_v', `m10') +define(`mask_w', `src_w') +define(`mask_w_0', `src_w_0') +define(`mask_w_1', `src_w_1') + +/* sample src to these registers */ +define(`src_sample_base', `g14') + +define(`src_sample_r', `g14') +define(`src_sample_r_01', `g14') +define(`src_sample_r_23', `g15') + +define(`src_sample_g', `g16') +define(`src_sample_g_01', `g16') +define(`src_sample_g_23', `g17') + +define(`src_sample_b', `g18') +define(`src_sample_b_01', `g18') +define(`src_sample_b_23', `g19') + +define(`src_sample_a', `g20') +define(`src_sample_a_01', `g20') +define(`src_sample_a_23', `g21') + +/* sample mask to these registers */ +define(`mask_sample_base', `g22') + +define(`mask_sample_r', `g22') +define(`mask_sample_r_01', `g22') +define(`mask_sample_r_23', `g23') + +define(`mask_sample_g', `g24') +define(`mask_sample_g_01', `g24') +define(`mask_sample_g_23', `g25') + +define(`mask_sample_b', `g26') +define(`mask_sample_b_01', `g26') +define(`mask_sample_b_23', `g27') + +define(`mask_sample_a', `g28') +define(`mask_sample_a_01', `g28') +define(`mask_sample_a_23', `g29') + +/* Color Balance to these registers */ +define(`color_balance_base', `g32') + +define(`color_balance_r', `g32') +define(`color_balance_r_01', `g32') +define(`color_balance_r_23', `g33') + +define(`color_balance_g', `g34') +define(`color_balance_g_01', `g34') +define(`color_balance_g_23', `g35') + +define(`color_balance_b', `g36') +define(`color_balance_b_01', `g37') +define(`color_balance_b_23', `g37') + +define(`color_balance_a', `g38') +define(`color_balance_a_01', `g39') +define(`color_balance_a_23', `g39') + +/* data port SIMD16 send registers */ + +define(`data_port_msg_0', `m0') +define(`data_port_msg_0_ind', `0') +define(`data_port_msg_1', `m1') +define(`data_port_r_01', `m2') +define(`data_port_g_01', `m3') +define(`data_port_b_01', `m4') +define(`data_port_a_01', `m5') + +define(`data_port_r_23', `m6') +define(`data_port_g_23', `m7') +define(`data_port_b_23', `m8') +define(`data_port_a_23', `m9') + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_affine.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_affine.g4i new file mode 100644 index 000000000..e72656b6e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_affine.g4i @@ -0,0 +1,44 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* + * Fragment to compute src u/v values under an affine transform + */ + +/********** Compute u *************/ + +mul (16) temp_x<1>F dst_x<8,8,1>F du_dx { compr align1 }; +mul (16) temp_y<1>F dst_y<8,8,1>F du_dy { compr align1 }; +add (16) temp_x<1>F temp_x<8,8,1>F temp_y<8,8,1>F { compr align1 }; +add (16) u<1>F temp_x<8,8,1>F uo { compr align1 }; + +/********** Compute v *************/ + +mul (16) temp_x<1>F dst_x<8,8,1>F dv_dx { compr align1 }; +mul (16) temp_y<1>F dst_y<8,8,1>F dv_dy { compr align1 }; +add (16) temp_x<1>F temp_x<8,8,1>F temp_y<8,8,1>F { compr align1 }; +add (16) v<1>F temp_x<8,8,1>F vo { compr align1 }; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4a new file mode 100644 index 000000000..3194b5a69 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4a @@ -0,0 +1,45 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* + * Fragment to compute src u/v values under an affine transform + */ + +include(`exa_wm.g4i') + +define(`du_dx', `src_du_dx') +define(`du_dy', `src_du_dy') +define(`uo', `src_uo') + +define(`dv_dx', `src_dv_dx') +define(`dv_dy', `src_dv_dy') +define(`vo', `src_vo') + +define(`u', `src_u') +define(`v', `src_v') + +include(`exa_wm_affine.g4i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b new file mode 100644 index 000000000..7507b7229 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b @@ -0,0 +1,8 @@ + { 0x00802041, 0x23c077bd, 0x008d0540, 0x000000c0 }, + { 0x00802041, 0x238077bd, 0x008d0580, 0x000000c4 }, + { 0x00802040, 0x23c077bd, 0x008d03c0, 0x008d0380 }, + { 0x00802040, 0x204077be, 0x008d03c0, 0x000000cc }, + { 0x00802041, 0x23c077bd, 0x008d0540, 0x000000d0 }, + { 0x00802041, 0x238077bd, 0x008d0580, 0x000000d4 }, + { 0x00802040, 0x23c077bd, 0x008d03c0, 0x008d0380 }, + { 0x00802040, 0x208077be, 0x008d03c0, 0x000000dc }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b.gen5 new file mode 100644 index 000000000..7507b7229 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g4b.gen5 @@ -0,0 +1,8 @@ + { 0x00802041, 0x23c077bd, 0x008d0540, 0x000000c0 }, + { 0x00802041, 0x238077bd, 0x008d0580, 0x000000c4 }, + { 0x00802040, 0x23c077bd, 0x008d03c0, 0x008d0380 }, + { 0x00802040, 0x204077be, 0x008d03c0, 0x000000cc }, + { 0x00802041, 0x23c077bd, 0x008d0540, 0x000000d0 }, + { 0x00802041, 0x238077bd, 0x008d0580, 0x000000d4 }, + { 0x00802040, 0x23c077bd, 0x008d03c0, 0x008d0380 }, + { 0x00802040, 0x208077be, 0x008d03c0, 0x000000dc }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6a new file mode 100644 index 000000000..04358cb63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6a @@ -0,0 +1,44 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +/* + * Fragment to compute src u/v values + */ +include(`exa_wm.g4i') + +define(`ul', `src_u') +define(`uh', `m3') +define(`vl', `src_v') +define(`vh', `m5') + +define(`bl', `g2.0<8,8,1>F') +define(`bh', `g4.0<8,8,1>F') + +/* U */ +pln (8) ul<1>F a0_a_x bl { align1 }; /* pixel 0-7 */ +pln (8) uh<1>F a0_a_x bh { align1 }; /* pixel 8-15 */ + +/* V */ +pln (8) vl<1>F a0_a_y bl { align1 }; /* pixel 0-7 */ +pln (8) vh<1>F a0_a_y bh { align1 }; /* pixel 8-15 */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6b new file mode 100644 index 000000000..22c1d2215 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g6b @@ -0,0 +1,4 @@ + { 0x0060005a, 0x204077be, 0x00000140, 0x008d0040 }, + { 0x0060005a, 0x206077be, 0x00000140, 0x008d0080 }, + { 0x0060005a, 0x208077be, 0x00000150, 0x008d0040 }, + { 0x0060005a, 0x20a077be, 0x00000150, 0x008d0080 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7a new file mode 100644 index 000000000..88e5ed5ba --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7a @@ -0,0 +1,45 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +/* + * Fragment to compute src u/v values + */ +include(`exa_wm.g4i') + +define(`ul', `g66') +define(`uh', `g67') +define(`vl', `g68') +define(`vh', `g69') + +define(`bl', `g2.0<8,8,1>F') +define(`bh', `g4.0<8,8,1>F') + + +/* U */ +pln (8) ul<1>F a0_a_x bl { align1 }; /* pixel 0-7 */ +pln (8) uh<1>F a0_a_x bh { align1 }; /* pixel 8-15 */ + +/* V */ +pln (8) vl<1>F a0_a_y bl { align1 }; /* pixel 0-7 */ +pln (8) vh<1>F a0_a_y bh { align1 }; /* pixel 8-15 */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7b new file mode 100644 index 000000000..a15b7b695 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g7b @@ -0,0 +1,4 @@ + { 0x0060005a, 0x284077bd, 0x00000140, 0x008d0040 }, + { 0x0060005a, 0x286077bd, 0x00000140, 0x008d0080 }, + { 0x0060005a, 0x288077bd, 0x00000150, 0x008d0040 }, + { 0x0060005a, 0x28a077bd, 0x00000150, 0x008d0080 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8a new file mode 100644 index 000000000..7927c3b12 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8a @@ -0,0 +1,45 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +/* + * Fragment to compute src u/v values + */ +include(`exa_wm.g4i') + +define(`ul', `g66') +define(`uh', `g67') +define(`vl', `g68') +define(`vh', `g69') + +define(`bl', `g2.0<8,8,1>F') +define(`bh', `g4.0<8,8,1>F') + + +/* U */ +pln (8) ul<1>F a0_a_x bl { align1 }; /* pixel 0-7 */ +pln (8) uh<1>F a0_a_x bh { align1 }; /* pixel 8-15 */ + +/* V */ +pln (8) vl<1>F a0_a_y bl { align1 }; /* pixel 0-7 */ +pln (8) vh<1>F a0_a_y bh { align1 }; /* pixel 8-15 */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8b new file mode 100644 index 000000000..f5f9eca1a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g8b @@ -0,0 +1,4 @@ + { 0x0060005a, 0x28403ae8, 0x3a000140, 0x008d0040 }, + { 0x0060005a, 0x28603ae8, 0x3a000140, 0x008d0080 }, + { 0x0060005a, 0x28803ae8, 0x3a000150, 0x008d0040 }, + { 0x0060005a, 0x28a03ae8, 0x3a000150, 0x008d0080 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9a new file mode 100644 index 000000000..832f70c4e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9a @@ -0,0 +1,45 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +/* + * Fragment to compute src u/v values + */ +include(`exa_wm.g4i') + +define(`ul', `g66') +define(`uh', `g67') +define(`vl', `g68') +define(`vh', `g69') + +define(`bl', `g2.0<8,8,1>F') +define(`bh', `g4.0<8,8,1>F') + + +/* U */ +pln (8) ul<1>F a0_a_x bl { align1 }; /* pixel 0-7 */ +pln (8) uh<1>F a0_a_x bh { align1 }; /* pixel 8-15 */ + +/* V */ +pln (8) vl<1>F a0_a_y bl { align1 }; /* pixel 0-7 */ +pln (8) vh<1>F a0_a_y bh { align1 }; /* pixel 8-15 */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9b new file mode 100644 index 000000000..f5f9eca1a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_affine.g9b @@ -0,0 +1,4 @@ + { 0x0060005a, 0x28403ae8, 0x3a000140, 0x008d0040 }, + { 0x0060005a, 0x28603ae8, 0x3a000140, 0x008d0080 }, + { 0x0060005a, 0x28803ae8, 0x3a000150, 0x008d0040 }, + { 0x0060005a, 0x28a03ae8, 0x3a000150, 0x008d0080 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4a new file mode 100644 index 000000000..c65765530 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4a @@ -0,0 +1,52 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface */ + +include(`exa_wm.g4i') + +define(`global_alpha', `r2.0<0,1,0>f') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +/* load argb */ +mov (1) g0.8<1>UD 0x00000000UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ +send (16) src_msg_ind /* msg reg index */ + src_sample_base<1>UW /* readback */ + g0<8,8,1>UW /* copy to msg start reg*/ + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 8 { align1 }; /* required message len 5, readback len 8 */ + +mul (8) src_sample_a_01<1>f src_sample_a_01<8,8,1>f global_alpha { align1 }; +mul (8) src_sample_a_23<1>f src_sample_a_23<8,8,1>f global_alpha { align1 }; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b new file mode 100644 index 000000000..42e4a6809 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b @@ -0,0 +1,4 @@ + { 0x00000201, 0x20080061, 0x00000000, 0x00000000 }, + { 0x01800031, 0x21c01d29, 0x008d0000, 0x02580001 }, + { 0x00600041, 0x228077bd, 0x008d0280, 0x00000040 }, + { 0x00600041, 0x22a077bd, 0x008d02a0, 0x00000040 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b.gen5 new file mode 100644 index 000000000..2012f89ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g4b.gen5 @@ -0,0 +1,4 @@ + { 0x00000201, 0x20080061, 0x00000000, 0x00000000 }, + { 0x01800031, 0x21c01d29, 0x208d0000, 0x0a8a0001 }, + { 0x00600041, 0x228077bd, 0x008d0280, 0x00000040 }, + { 0x00600041, 0x22a077bd, 0x008d02a0, 0x00000040 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6a new file mode 100644 index 000000000..c30b209f4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6a @@ -0,0 +1,55 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface */ + +include(`exa_wm.g4i') + +/* subpicture global alpha */ +define(`global_alpha', `r6.0<0,1,0>f') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +/* load argb */ +mov (1) g0.8<1>UD 0x00000000UD { align1 mask_disable }; +mov (8) src_msg<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ +send (16) src_msg_ind /* msg reg index */ + src_sample_base<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 8 { align1 }; /* required message len 5, readback len 8 */ + +mul (8) src_sample_a_01<1>f src_sample_a_01<8,8,1>f global_alpha { align1 }; +mul (8) src_sample_a_23<1>f src_sample_a_23<1>f global_alpha { align1 }; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6b new file mode 100644 index 000000000..53c62485e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g6b @@ -0,0 +1,5 @@ + { 0x00000201, 0x20080061, 0x00000000, 0x00000000 }, + { 0x00600201, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c01cc9, 0x00000020, 0x0a8a0001 }, + { 0x00600041, 0x228077bd, 0x008d0280, 0x000000c0 }, + { 0x00600041, 0x22a077bd, 0x002002a0, 0x000000c0 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7a new file mode 100644 index 000000000..0165f7b64 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7a @@ -0,0 +1,59 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen7', `g65') +define(`src_msg_ind_gen7',`65') + +/* subpicture global alpha */ +define(`global_alpha', `r6.0<0,1,0>f') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +/* load argb */ +mov (1) g0.8<1>UD 0x00000000UD { align1 mask_disable }; +mov (8) src_msg_gen7<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ +send (16) src_msg_ind_gen7 /* msg reg index */ + src_sample_base<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 8 { align1 }; /* required message len 5, readback len 8 */ + +mul (8) src_sample_a_01<1>f src_sample_a_01<8,8,1>f global_alpha { align1 mask_disable }; +mul (8) src_sample_a_23<1>f src_sample_a_23<8,8,1>f global_alpha { align1 mask_disable }; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7b new file mode 100644 index 000000000..0708bc0c4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g7b @@ -0,0 +1,5 @@ + { 0x00000201, 0x20080061, 0x00000000, 0x00000000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c01ca9, 0x00000820, 0x0a8c0001 }, + { 0x00600241, 0x228077bd, 0x008d0280, 0x000000c0 }, + { 0x00600241, 0x22a077bd, 0x008d02a0, 0x000000c0 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8a new file mode 100644 index 000000000..3a4e99f14 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8a @@ -0,0 +1,59 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen8', `g65') +define(`src_msg_ind_gen8',`65') + +/* subpicture global alpha */ +define(`global_alpha', `r6.0<0,1,0>f') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +/* load argb */ +mov (1) g0.8<1>UD 0x00000000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_base<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 8 { align1 }; /* required message len 5, readback len 8 */ + +mul (8) src_sample_a_01<1>f src_sample_a_01<8,8,1>f global_alpha { align1 mask_disable }; +mul (8) src_sample_a_23<1>f src_sample_a_23<8,8,1>f global_alpha { align1 mask_disable }; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8b new file mode 100644 index 000000000..2b046371b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g8b @@ -0,0 +1,5 @@ + { 0x00000001, 0x2008060c, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c00a48, 0x0e000820, 0x0a8c0001 }, + { 0x00600041, 0x22803aec, 0x3a8d0280, 0x000000c0 }, + { 0x00600041, 0x22a03aec, 0x3a8d02a0, 0x000000c0 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9a new file mode 100644 index 000000000..ca57ea602 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9a @@ -0,0 +1,59 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + * Zhao Yakui + */ + +/* Sample the src surface */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen8', `g65') +define(`src_msg_ind_gen8',`65') + +/* subpicture global alpha */ +define(`global_alpha', `r6.0<0,1,0>f') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +/* load argb */ +mov (1) g0.8<1>UD 0x00000000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_base<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 8 { align1 }; /* required message len 5, readback len 8 */ + +mul (8) src_sample_a_01<1>f src_sample_a_01<8,8,1>f global_alpha { align1 mask_disable }; +mul (8) src_sample_a_23<1>f src_sample_a_23<8,8,1>f global_alpha { align1 mask_disable }; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9b new file mode 100644 index 000000000..5cd181e3b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_argb.g9b @@ -0,0 +1,5 @@ + { 0x00000001, 0x2008060c, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c00a48, 0x06000820, 0x0a8c0001 }, + { 0x00600041, 0x22803aec, 0x3a8d0280, 0x000000c0 }, + { 0x00600041, 0x22a03aec, 0x3a8d02a0, 0x000000c0 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4a new file mode 100644 index 000000000..8cbb2896c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4a @@ -0,0 +1,87 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface in planar format */ + +include(`exa_wm.g4i') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ + +and.nz (1) null interleaved_uv 0x01UW {align1}; +(f0) jmpi INTERLEAVED_UV; + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ + +/* sample U (Cr) */ +send (16) src_msg_ind /* msg reg index */ + src_sample_g<1>UW /* readback */ + g0<8,8,1>UW /* copy to msg start reg*/ + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +/* sample V (Cb) */ +send (16) src_msg_ind /* msg reg index */ + src_sample_b<1>UW /* readback */ + g0<8,8,1>UW /* copy to msg start reg*/ + sampler (5,4,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +jmpi SAMPLE_Y; + +INTERLEAVED_UV: +/* load r */ +mov (1) g0.8<1>UD 0x0000c000UD { align1 mask_disable }; + +/* sample UV (CrCb) */ +send (16) src_msg_ind /* msg reg index */ + src_sample_g<1>UW /* readback */ + g0<8,8,1>UW /* copy to msg start reg*/ + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 4 { align1 }; /* required message len 5, readback len 8 */ + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; + +SAMPLE_Y: +/* sample Y */ +send (16) src_msg_ind /* msg reg index */ + src_sample_r<1>UW /* readback */ + g0<8,8,1>UW /* copy to msg start reg*/ + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b new file mode 100644 index 000000000..94f2f3b63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b @@ -0,0 +1,10 @@ + { 0x02000005, 0x20002d3c, 0x00000040, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x01800031, 0x22001d29, 0x008d0000, 0x02520203 }, + { 0x01800031, 0x22401d29, 0x008d0000, 0x02520405 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000003 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000c000 }, + { 0x01800031, 0x22001d29, 0x008d0000, 0x02540203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x01800031, 0x21c01d29, 0x008d0000, 0x02520001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b.gen5 new file mode 100644 index 000000000..c6457232c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g4b.gen5 @@ -0,0 +1,10 @@ + { 0x02000005, 0x20002d3c, 0x00000040, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x01800031, 0x22001d29, 0x208d0000, 0x0a2a0203 }, + { 0x01800031, 0x22401d29, 0x208d0000, 0x0a2a0405 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000c000 }, + { 0x01800031, 0x22001d29, 0x208d0000, 0x0a4a0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x01800031, 0x21c01d29, 0x208d0000, 0x0a2a0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6a new file mode 100644 index 000000000..9f907fcdf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6a @@ -0,0 +1,92 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface in planar format */ + +include(`exa_wm.g4i') +/* UV flag */ +define(`nv12', `g6.0<0,1,0>UW') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ +cmp.g.f0.0 (1) null nv12 0x0UW {align1}; +(f0.0) jmpi INTERLEAVED_UV; + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* src_msg will be copied with g0, as it contains send desc */ +/* emit sampler 'send' cmd */ + +/* sample U (Cr) */ +send (16) src_msg_ind /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +/* sample V (Cb) */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg<1>UD g0<8,8,1>UD { align1 mask_disable }; + +send (16) src_msg_ind /* msg reg index */ + src_sample_b<1>UW /* readback */ + null + sampler (5,4,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +jmpi SAMPLE_Y; + +INTERLEAVED_UV: +mov (1) g0.8<1>UD 0x0000c000UD { align1 mask_disable }; +mov (8) src_msg<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample UV (CrCb) */ +send (16) src_msg_ind /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 4 { align1 }; /* required message len 5, readback len 8 */ + +SAMPLE_Y: +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample Y */ +send (16) src_msg_ind /* msg reg index */ + src_sample_r<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6b new file mode 100644 index 000000000..e9368b6fc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g6b @@ -0,0 +1,15 @@ + { 0x03000010, 0x20002d3c, 0x000000c0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001cc9, 0x00000020, 0x0a2a0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22401cc9, 0x00000020, 0x0a2a0405 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000c000 }, + { 0x00600201, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001cc9, 0x00000020, 0x0a4a0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x20200022, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c01cc9, 0x00000020, 0x0a2a0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7a new file mode 100644 index 000000000..8a47fb509 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7a @@ -0,0 +1,105 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* Sample the src surface in planar format */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen7', `g65') +define(`src_msg_ind_gen7',`65') +/* UV flag */ +define(`uv_flag', `g6.0<0,1,0>UW') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ +cmp.e.f0.0 (1) null uv_flag 0x1UW {align1}; +(f0.0) jmpi INTERLEAVED_UV; + +cmp.e.f0.0 (1) null uv_flag 0x2UW {align1}; +(f0.0) jmpi CONSTANT_UV; + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen7<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* emit sampler 'send' cmd */ + +/* sample U (Cr) */ +send (16) src_msg_ind_gen7 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +/* sample V (Cb) */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen7<1>UD g0<8,8,1>UD { align1 mask_disable }; + +send (16) src_msg_ind_gen7 /* msg reg index */ + src_sample_b<1>UW /* readback */ + null + sampler (5,4,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +jmpi SAMPLE_Y; + +CONSTANT_UV: +mov (16) src_sample_g<1>f 0.5f { compr align1 mask_disable }; +mov (16) src_sample_b<1>f 0.5f { compr align1 mask_disable }; + +jmpi SAMPLE_Y; + +INTERLEAVED_UV: +mov (1) g0.8<1>UD 0x0000c000UD { align1 mask_disable }; +mov (8) src_msg_gen7<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample UV (CrCb) */ +send (16) src_msg_ind_gen7 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 4 { align1 }; /* required message len 5, readback len 8 */ + + +SAMPLE_Y: +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen7<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample Y */ +send (16) src_msg_ind_gen7 /* msg reg index */ + src_sample_r<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b new file mode 100644 index 000000000..598bd66ae --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b @@ -0,0 +1,20 @@ + { 0x01000010, 0x20002d3c, 0x000000c0, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x01000010, 0x20002d3c, 0x000000c0, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001ca9, 0x00000820, 0x0a2c0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22401ca9, 0x00000820, 0x0a2c0405 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00800201, 0x220003fd, 0x00000000, 0x3f000000 }, + { 0x00800201, 0x224003fd, 0x00000000, 0x3f000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000c000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001ca9, 0x00000820, 0x0a4c0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c01ca9, 0x00000820, 0x0a2c0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b.haswell b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b.haswell new file mode 100644 index 000000000..dc388c297 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g7b.haswell @@ -0,0 +1,20 @@ + { 0x01000010, 0x20002d3c, 0x000000c0, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x01000010, 0x20002d3c, 0x000000c0, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001ca9, 0x00000820, 0x0a2c0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22401ca9, 0x00000820, 0x0a2c0405 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x00800201, 0x220003fd, 0x00000000, 0x3f000000 }, + { 0x00800201, 0x224003fd, 0x00000000, 0x3f000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000c000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22001ca9, 0x00000820, 0x0a4c0203 }, + { 0x00000201, 0x20080061, 0x00000000, 0x0000e000 }, + { 0x00600201, 0x28200021, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c01ca9, 0x00000820, 0x0a2c0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8a new file mode 100644 index 000000000..76844913d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8a @@ -0,0 +1,106 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + * Zhao Yakui + */ + +/* Sample the src surface in planar format */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen8', `g65') +define(`src_msg_ind_gen8',`65') +/* UV flag */ +define(`uv_flag', `g6.0<0,1,0>UW') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ +cmp.e.f0.0 (1) null uv_flag 0x1UW {align1}; +(f0.0) jmpi INTERLEAVED_UV; + +cmp.e.f0.0 (1) null uv_flag 0x2UW {align1}; +(f0.0) jmpi CONSTANT_UV; + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* emit sampler 'send' cmd */ + +/* sample U (Cr) */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +/* sample V (Cb) */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_b<1>UW /* readback */ + null + sampler (5,4,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +jmpi SAMPLE_Y; + +CONSTANT_UV: +mov (16) src_sample_g<1>f 0.5f { compr align1 mask_disable }; +mov (16) src_sample_b<1>f 0.5f { compr align1 mask_disable }; + +jmpi SAMPLE_Y; + +INTERLEAVED_UV: +mov (1) g0.8<1>UD 0x0000c000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample UV (CrCb) */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 4 { align1 }; /* required message len 5, readback len 8 */ + + +SAMPLE_Y: +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample Y */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_r<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8b new file mode 100644 index 000000000..f29cfe4bf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g8b @@ -0,0 +1,20 @@ + { 0x01000010, 0x200012e0, 0x160000c0, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x01000010, 0x200012e0, 0x160000c0, 0x00020002 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22000a48, 0x0e000820, 0x0a2c0203 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22400a48, 0x0e000820, 0x0a2c0405 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x00800001, 0x22003eec, 0x38000000, 0x3f000000 }, + { 0x00800001, 0x22403eec, 0x38000000, 0x3f000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000c000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22000a48, 0x0e000820, 0x0a4c0203 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c00a48, 0x0e000820, 0x0a2c0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9a new file mode 100644 index 000000000..f5369cae5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9a @@ -0,0 +1,105 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + * Zhao Yakui + */ + +/* Sample the src surface in planar format */ + +include(`exa_wm.g4i') + +/* Ivybridge uses GRFs in SEND instruction */ +define(`src_msg_gen8', `g65') +define(`src_msg_ind_gen8',`65') +/* UV flag */ +define(`uv_flag', `g6.0<0,1,0>UW') + +/* prepare sampler read back gX register, which would be written back to output */ + +/* use simd16 sampler, param 0 is u, param 1 is v. */ +/* 'payload' loading, assuming tex coord start from g4 */ +cmp.e.f0.0 (1) null uv_flag 0x1UW {align1}; +(f0.0) jmpi INTERLEAVED_UV; + +cmp.e.f0.0 (1) null uv_flag 0x2UW {align1}; +(f0.0) jmpi CONSTANT_UV; + +/* load r */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* emit sampler 'send' cmd */ + +/* sample U (Cr) */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +/* sample V (Cb) */ +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_b<1>UW /* readback */ + null + sampler (5,4,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ + +jmpi SAMPLE_Y; + +CONSTANT_UV: +mov (16) src_sample_g<1>f 0.5f { compr align1 mask_disable }; +mov (16) src_sample_b<1>f 0.5f { compr align1 mask_disable }; + +jmpi SAMPLE_Y; + +INTERLEAVED_UV: +mov (1) g0.8<1>UD 0x0000c000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample UV (CrCb) */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_g<1>UW /* readback */ + null + sampler (3,2,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 4 { align1 }; /* required message len 5, readback len 8 */ + + +SAMPLE_Y: +mov (1) g0.8<1>UD 0x0000e000UD { align1 mask_disable }; +mov (8) src_msg_gen8<1>UD g0<8,8,1>UD { align1 mask_disable }; + +/* sample Y */ +send (16) src_msg_ind_gen8 /* msg reg index */ + src_sample_r<1>UW /* readback */ + null + sampler (1,0,F) /* sampler message description, (binding_table,sampler_index,datatype) + /* here(src->dst) we should use src_sampler and src_surface */ + mlen 5 rlen 2 { align1 }; /* required message len 5, readback len 8 */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9b new file mode 100644 index 000000000..45e28b0a6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_src_sample_planar.g9b @@ -0,0 +1,20 @@ + { 0x01000010, 0x200012e0, 0x160000c0, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x01000010, 0x200012e0, 0x160000c0, 0x00020002 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22000a48, 0x06000820, 0x0a2c0203 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22400a48, 0x06000820, 0x0a2c0405 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x00800001, 0x22003eec, 0x38000000, 0x3f000000 }, + { 0x00800001, 0x22403eec, 0x38000000, 0x3f000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000c000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x22000a48, 0x06000820, 0x0a4c0203 }, + { 0x00000001, 0x2008060c, 0x00000000, 0x0000e000 }, + { 0x00600001, 0x2820020c, 0x008d0000, 0x00000000 }, + { 0x02800031, 0x21c00a48, 0x06000820, 0x0a2c0001 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4a new file mode 100644 index 000000000..2cb3d89c7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4a @@ -0,0 +1,85 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +include(`exa_wm.g4i') + +/* + * Prepare data in m2-m5 for subspan(1,0), m6-m9 for subspan(3,2), + * + * Note that the SIMD16 write message takes data for the first + * two sub-spans followed by the data for the second two sub-spans + * instead of having the two sub-spans interleaved by channel. Weird. + */ + +mov (8) data_port_r_01<1>F g14<8,8,1>F { align1 }; +mov (8) data_port_g_01<1>F g16<8,8,1>F { align1 }; +mov (8) data_port_b_01<1>F g18<8,8,1>F { align1 }; +mov (8) data_port_a_01<1>F src_sample_a_01<8,8,1>F { align1 }; + +mov (8) data_port_r_23<1>F src_sample_r_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_g_23<1>F src_sample_g_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_b_23<1>F src_sample_b_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_a_23<1>F src_sample_a_23<8,8,1>F { sechalf align1 }; + + +mov (8) data_port_r_01<1>F src_sample_r_01<8,8,1>F { align1 }; +mov (8) data_port_g_01<1>F src_sample_g_01<8,8,1>F { align1 }; +mov (8) data_port_b_01<1>F src_sample_b_01<8,8,1>F { align1 }; +mov (8) data_port_a_01<1>F src_sample_a_01<8,8,1>F { align1 }; + +mov (8) data_port_r_23<1>F src_sample_r_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_g_23<1>F src_sample_g_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_b_23<1>F src_sample_b_23<8,8,1>F { sechalf align1 }; +mov (8) data_port_a_23<1>F src_sample_a_23<8,8,1>F { sechalf align1 }; + +/* m0, m1 are all direct passed by PS thread payload */ +mov (8) data_port_msg_1<1>UD g1<8,8,1>UD { mask_disable align1 }; + +/* write */ +send (16) + data_port_msg_0_ind + acc0<1>UW + g0<8,8,1>UW + write ( + 0, /* binding_table */ + 8, /* pixel scordboard clear, msg type simd16 single source */ + 4, /* render target write */ + 0 /* no write commit message */ + ) + mlen 10 + rlen 0 + { align1 EOT }; + +nop; +nop; +nop; +nop; +nop; +nop; +nop; +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b new file mode 100644 index 000000000..b7dcd1617 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b @@ -0,0 +1,26 @@ + { 0x00600001, 0x204003be, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x206003be, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x208003be, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20a003be, 0x008d0280, 0x00000000 }, + { 0x00601001, 0x20c003be, 0x008d01e0, 0x00000000 }, + { 0x00601001, 0x20e003be, 0x008d0220, 0x00000000 }, + { 0x00601001, 0x210003be, 0x008d0260, 0x00000000 }, + { 0x00601001, 0x212003be, 0x008d02a0, 0x00000000 }, + { 0x00600001, 0x204003be, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x206003be, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x208003be, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20a003be, 0x008d0280, 0x00000000 }, + { 0x00601001, 0x20c003be, 0x008d01e0, 0x00000000 }, + { 0x00601001, 0x20e003be, 0x008d0220, 0x00000000 }, + { 0x00601001, 0x210003be, 0x008d0260, 0x00000000 }, + { 0x00601001, 0x212003be, 0x008d02a0, 0x00000000 }, + { 0x00600201, 0x20200022, 0x008d0020, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x85a04800 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b.gen5 new file mode 100644 index 000000000..14c1dae0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g4b.gen5 @@ -0,0 +1,26 @@ + { 0x00600001, 0x204003be, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x206003be, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x208003be, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20a003be, 0x008d0280, 0x00000000 }, + { 0x00601001, 0x20c003be, 0x008d01e0, 0x00000000 }, + { 0x00601001, 0x20e003be, 0x008d0220, 0x00000000 }, + { 0x00601001, 0x210003be, 0x008d0260, 0x00000000 }, + { 0x00601001, 0x212003be, 0x008d02a0, 0x00000000 }, + { 0x00600001, 0x204003be, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x206003be, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x208003be, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20a003be, 0x008d0280, 0x00000000 }, + { 0x00601001, 0x20c003be, 0x008d01e0, 0x00000000 }, + { 0x00601001, 0x20e003be, 0x008d0220, 0x00000000 }, + { 0x00601001, 0x210003be, 0x008d0260, 0x00000000 }, + { 0x00601001, 0x212003be, 0x008d02a0, 0x00000000 }, + { 0x00600201, 0x20200022, 0x008d0020, 0x00000000 }, + { 0x00800031, 0x24001d28, 0x548d0000, 0x94084800 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6a new file mode 100644 index 000000000..c0f3cc13a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6a @@ -0,0 +1,77 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +include(`exa_wm.g4i') + +/* + * Prepare data in m2-m3 for Red channel, m4-m5 for Green channel, + * m6-m7 for Blue and m8-m9 for Alpha channel + */ +define(`slot_r_00', `m2') +define(`slot_r_01', `m3') +define(`slot_g_00', `m4') +define(`slot_g_01', `m5') +define(`slot_b_00', `m6') +define(`slot_b_01', `m7') +define(`slot_a_00', `m8') +define(`slot_a_01', `m9') +define(`data_port_msg_2_ind', `2') + +mov (8) slot_r_00<1>F src_sample_r_01<8,8,1>F { align1 }; +mov (8) slot_r_01<1>F src_sample_r_23<8,8,1>F { align1 }; + +mov (8) slot_g_00<1>F src_sample_g_01<8,8,1>F { align1 }; +mov (8) slot_g_01<1>F src_sample_g_23<8,8,1>F { align1 }; + +mov (8) slot_b_00<1>F src_sample_b_01<8,8,1>F { align1 }; +mov (8) slot_b_01<1>F src_sample_b_23<8,8,1>F { align1 }; + +mov (8) slot_a_00<1>F src_sample_a_01<8,8,1>F { align1 }; +mov (8) slot_a_01<1>F src_sample_a_23<8,8,1>F { align1 }; + +/* write */ +send (16) + data_port_msg_2_ind + acc0<1>UW + null + write ( + 0, /* binding_table */ + 16, /* pixel scordboard clear, msg type simd16 single source */ + 12, /* render target write */ + 0, /* no write commit message */ + 0 /* headerless render target write */ + ) + mlen 8 + rlen 0 + { align1 EOT }; + +nop; +nop; +nop; +nop; +nop; +nop; +nop; +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6b new file mode 100644 index 000000000..3cb6bff38 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g6b @@ -0,0 +1,17 @@ + { 0x00600001, 0x204003be, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x206003be, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x208003be, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x20a003be, 0x008d0220, 0x00000000 }, + { 0x00600001, 0x20c003be, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x20e003be, 0x008d0260, 0x00000000 }, + { 0x00600001, 0x210003be, 0x008d0280, 0x00000000 }, + { 0x00600001, 0x212003be, 0x008d02a0, 0x00000000 }, + { 0x05800031, 0x24001cc8, 0x00000040, 0x90019000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7a new file mode 100644 index 000000000..f2eb0eaae --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7a @@ -0,0 +1,26 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +include(`exa_wm.g4i') +include(`exa_wm_write.g7i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7b new file mode 100644 index 000000000..b0a1d075c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7b @@ -0,0 +1,19 @@ + { 0x00600201, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x00600201, 0x2e200021, 0x008d0020, 0x00000000 }, + { 0x00600201, 0x2e4003bd, 0x008d01c0, 0x00000000 }, + { 0x00600201, 0x2e6003bd, 0x008d01e0, 0x00000000 }, + { 0x00600201, 0x2e8003bd, 0x008d0200, 0x00000000 }, + { 0x00600201, 0x2ea003bd, 0x008d0220, 0x00000000 }, + { 0x00600201, 0x2ec003bd, 0x008d0240, 0x00000000 }, + { 0x00600201, 0x2ee003bd, 0x008d0260, 0x00000000 }, + { 0x00600201, 0x2f0003bd, 0x008d0280, 0x00000000 }, + { 0x00600201, 0x2f2003bd, 0x008d02a0, 0x00000000 }, + { 0x05800031, 0x20001ca8, 0x00000e00, 0x940b1000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7i new file mode 100644 index 000000000..3fbb43202 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g7i @@ -0,0 +1,80 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +/* header */ +define(`data_port_msg_2_0', `g112') +define(`data_port_msg_2_1', `g113') +define(`data_port_msg_2_ind', `112') + +mov (8) data_port_msg_2_0<1>UD g0<8,8,1>UD {align1 mask_disable}; +mov (8) data_port_msg_2_1<1>UD g1<8,8,1>UD {align1 mask_disable}; + +/* + * Prepare data in g114-g115 for Red channel, g116-g117 for Green channel, + * g118-g119 for Blue and g120-g121 for Alpha channel + */ +define(`slot_r_00', `g114') +define(`slot_r_01', `g115') +define(`slot_g_00', `g116') +define(`slot_g_01', `g117') +define(`slot_b_00', `g118') +define(`slot_b_01', `g119') +define(`slot_a_00', `g120') +define(`slot_a_01', `g121') + +mov (8) slot_r_00<1>F src_sample_r_01<8,8,1>F { align1 mask_disable }; +mov (8) slot_r_01<1>F src_sample_r_23<8,8,1>F { align1 mask_disable }; + +mov (8) slot_g_00<1>F src_sample_g_01<8,8,1>F { align1 mask_disable }; +mov (8) slot_g_01<1>F src_sample_g_23<8,8,1>F { align1 mask_disable }; + +mov (8) slot_b_00<1>F src_sample_b_01<8,8,1>F { align1 mask_disable }; +mov (8) slot_b_01<1>F src_sample_b_23<8,8,1>F { align1 mask_disable }; + +mov (8) slot_a_00<1>F src_sample_a_01<8,8,1>F { align1 mask_disable }; +mov (8) slot_a_01<1>F src_sample_a_23<8,8,1>F { align1 mask_disable }; + +send (16) + data_port_msg_2_ind + null<1>UW + null + write ( + 0, /* binding table index */ + 16, /* last render target(1) + slots 15:0(0) + msg type simd16 single source(000) */ + 12, /* render target write */ + 0, /* ignore for Ivybridge */ + 1 /* header present */ + ) + mlen 10 + rlen 0 + { align1 EOT }; + +nop; +nop; +nop; +nop; +nop; +nop; +nop; +nop; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8a new file mode 100644 index 000000000..6c386af1d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8a @@ -0,0 +1,26 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +include(`exa_wm.g4i') +include(`exa_wm_write.g7i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8b new file mode 100644 index 000000000..a320f46ec --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g8b @@ -0,0 +1,19 @@ + { 0x00600001, 0x2e00020c, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x2e20020c, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x2e403aec, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x2e603aec, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x2e803aec, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x2ea03aec, 0x008d0220, 0x00000000 }, + { 0x00600001, 0x2ec03aec, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x2ee03aec, 0x008d0260, 0x00000000 }, + { 0x00600001, 0x2f003aec, 0x008d0280, 0x00000000 }, + { 0x00600001, 0x2f203aec, 0x008d02a0, 0x00000000 }, + { 0x05800031, 0x20000a40, 0x0e000e00, 0x940b1000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9a new file mode 100644 index 000000000..d735efdf0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9a @@ -0,0 +1,26 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +include(`exa_wm.g4i') +include(`exa_wm_write.g7i') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9b new file mode 100644 index 000000000..e625b9d09 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_write.g9b @@ -0,0 +1,19 @@ + { 0x00600001, 0x2e00020c, 0x008d0000, 0x00000000 }, + { 0x00600001, 0x2e20020c, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x2e403aec, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x2e603aec, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x2e803aec, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x2ea03aec, 0x008d0220, 0x00000000 }, + { 0x00600001, 0x2ec03aec, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x2ee03aec, 0x008d0260, 0x00000000 }, + { 0x00600001, 0x2f003aec, 0x008d0280, 0x00000000 }, + { 0x00600001, 0x2f203aec, 0x008d02a0, 0x00000000 }, + { 0x05800031, 0x20000a40, 0x06000e00, 0x940b1000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4a new file mode 100644 index 000000000..e99f5ac19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4a @@ -0,0 +1,52 @@ +/* + * Copyright © 2006 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Wang Zhenyu + * Keith Packard + */ + +/* + * Register assignments: + * + * x g6/g7 + * y g8/g9 + * + * temp x g10/g11 + * temp y g12/g13 + * + * src w g14/g15 + * src u m1/m2 + * src v m3/m4 + */ + +/* Fragment to compute per-pixel XY values */ + +include(`exa_wm.g4i') + + /* Load X and Y coordinates and compute per-pixel coordinates */ +add (16) temp_x_uw<1>UW dst_x_uw 0x10101010V { align1 }; +add (16) temp_y_uw<1>UW dst_y_uw 0x11001100V { align1 }; + + /* subtract screen-space origin of vertex 0 */ +add (16) dst_x<1>F temp_x_uw<8,8,1>UW -screen_x0 { compr align1 }; +add (16) dst_y<1>F temp_y_uw<8,8,1>UW -screen_y0 { compr align1 }; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b new file mode 100644 index 000000000..2b3b235f6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b @@ -0,0 +1,4 @@ + { 0x00800040, 0x23c06d29, 0x00480028, 0x10101010 }, + { 0x00800040, 0x23806d29, 0x0048002a, 0x11001100 }, + { 0x00802040, 0x2540753d, 0x008d03c0, 0x00004020 }, + { 0x00802040, 0x2580753d, 0x008d0380, 0x00004024 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b.gen5 new file mode 100644 index 000000000..2b3b235f6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_xy.g4b.gen5 @@ -0,0 +1,4 @@ + { 0x00800040, 0x23c06d29, 0x00480028, 0x10101010 }, + { 0x00800040, 0x23806d29, 0x0048002a, 0x11001100 }, + { 0x00802040, 0x2540753d, 0x008d03c0, 0x00004020 }, + { 0x00802040, 0x2580753d, 0x008d0380, 0x00004024 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4a new file mode 100644 index 000000000..33ba67a91 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4a @@ -0,0 +1,38 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * + */ + +include(`exa_wm.g4i') + +/* Color Balance parameters */ +define(`skip_color_balance', `g2.2<0,1,0>uw') +define(`contrast', `g2.16<0,1,0>f') +define(`brightness', `g2.20<0,1,0>f') +define(`cos_c_s', `g2.24<0,1,0>f') +define(`sin_c_s', `g2.28<0,1,0>f') +define(`sin_c_s_t', `g2.28') + +include(`exa_wm_yuv_color_balance.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b new file mode 100644 index 000000000..cba9aca8f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b @@ -0,0 +1,15 @@ + { 0x01000010, 0x20002d3c, 0x00000042, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000d }, + { 0x00802040, 0x24007fbd, 0x008d01c0, 0xbd808081 }, + { 0x00802041, 0x240077bd, 0x008d0400, 0x00000050 }, + { 0x00802040, 0x240077bd, 0x008d0400, 0x00000054 }, + { 0x00802040, 0x21c07fbd, 0x008d0400, 0x3d808081 }, + { 0x00802040, 0x24807fbd, 0x008d0200, 0xbf008084 }, + { 0x00802040, 0x24407fbd, 0x008d0240, 0xbf008084 }, + { 0x00802001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00802048, 0x240077bc, 0x008d0440, 0x0000005c }, + { 0x00802048, 0x220077bd, 0x008d0480, 0x00000058 }, + { 0x00000041, 0x205c7fbd, 0x0000005c, 0xbf800000 }, + { 0x00802001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00802048, 0x240077bc, 0x008d0480, 0x0000005c }, + { 0x00802048, 0x224077bd, 0x008d0440, 0x00000058 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b.gen5 new file mode 100644 index 000000000..5a24a0e8a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g4b.gen5 @@ -0,0 +1,15 @@ + { 0x01000010, 0x20002d3c, 0x00000042, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00802040, 0x24007fbd, 0x008d01c0, 0xbd808081 }, + { 0x00802041, 0x240077bd, 0x008d0400, 0x00000050 }, + { 0x00802040, 0x240077bd, 0x008d0400, 0x00000054 }, + { 0x00802040, 0x21c07fbd, 0x008d0400, 0x3d808081 }, + { 0x00802040, 0x24807fbd, 0x008d0200, 0xbf008084 }, + { 0x00802040, 0x24407fbd, 0x008d0240, 0xbf008084 }, + { 0x00802001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00802048, 0x240077bc, 0x008d0440, 0x0000005c }, + { 0x00802048, 0x220077bd, 0x008d0480, 0x00000058 }, + { 0x00000041, 0x205c7fbd, 0x0000005c, 0xbf800000 }, + { 0x00802001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00802048, 0x240077bc, 0x008d0480, 0x0000005c }, + { 0x00802048, 0x224077bd, 0x008d0440, 0x00000058 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6a new file mode 100644 index 000000000..69063575d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6a @@ -0,0 +1,38 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * + */ + +include(`exa_wm.g4i') + +/* Color Balance parameters */ +define(`skip_color_balance', `g6.2<0,1,0>uw') +define(`contrast', `g6.16<0,1,0>f') +define(`brightness', `g6.20<0,1,0>f') +define(`cos_c_s', `g6.24<0,1,0>f') +define(`sin_c_s', `g6.28<0,1,0>f') +define(`sin_c_s_t', `g6.28') + +include(`exa_wm_yuv_color_balance.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6b new file mode 100644 index 000000000..0a9e6b926 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g6b @@ -0,0 +1,15 @@ + { 0x01000010, 0x20002d3c, 0x000000c2, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00800040, 0x24007fbd, 0x008d01c0, 0xbd808081 }, + { 0x00800041, 0x240077bd, 0x008d0400, 0x000000d0 }, + { 0x00800040, 0x240077bd, 0x008d0400, 0x000000d4 }, + { 0x00800040, 0x21c07fbd, 0x008d0400, 0x3d808081 }, + { 0x00800040, 0x24807fbd, 0x008d0200, 0xbf008084 }, + { 0x00800040, 0x24407fbd, 0x008d0240, 0xbf008084 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0440, 0x000000dc }, + { 0x00800048, 0x220077bd, 0x008d0480, 0x000000d8 }, + { 0x00000041, 0x20dc7fbd, 0x000000dc, 0xbf800000 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0480, 0x000000dc }, + { 0x00800048, 0x224077bd, 0x008d0440, 0x000000d8 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7a new file mode 100644 index 000000000..69063575d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7a @@ -0,0 +1,38 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * + */ + +include(`exa_wm.g4i') + +/* Color Balance parameters */ +define(`skip_color_balance', `g6.2<0,1,0>uw') +define(`contrast', `g6.16<0,1,0>f') +define(`brightness', `g6.20<0,1,0>f') +define(`cos_c_s', `g6.24<0,1,0>f') +define(`sin_c_s', `g6.28<0,1,0>f') +define(`sin_c_s_t', `g6.28') + +include(`exa_wm_yuv_color_balance.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b new file mode 100644 index 000000000..0a9e6b926 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b @@ -0,0 +1,15 @@ + { 0x01000010, 0x20002d3c, 0x000000c2, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00800040, 0x24007fbd, 0x008d01c0, 0xbd808081 }, + { 0x00800041, 0x240077bd, 0x008d0400, 0x000000d0 }, + { 0x00800040, 0x240077bd, 0x008d0400, 0x000000d4 }, + { 0x00800040, 0x21c07fbd, 0x008d0400, 0x3d808081 }, + { 0x00800040, 0x24807fbd, 0x008d0200, 0xbf008084 }, + { 0x00800040, 0x24407fbd, 0x008d0240, 0xbf008084 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0440, 0x000000dc }, + { 0x00800048, 0x220077bd, 0x008d0480, 0x000000d8 }, + { 0x00000041, 0x20dc7fbd, 0x000000dc, 0xbf800000 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0480, 0x000000dc }, + { 0x00800048, 0x224077bd, 0x008d0440, 0x000000d8 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b.haswell b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b.haswell new file mode 100644 index 000000000..2780c08a0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g7b.haswell @@ -0,0 +1,15 @@ + { 0x01000010, 0x20002d3c, 0x000000c2, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d0 }, + { 0x00800040, 0x24007fbd, 0x008d01c0, 0xbd808081 }, + { 0x00800041, 0x240077bd, 0x008d0400, 0x000000d0 }, + { 0x00800040, 0x240077bd, 0x008d0400, 0x000000d4 }, + { 0x00800040, 0x21c07fbd, 0x008d0400, 0x3d808081 }, + { 0x00800040, 0x24807fbd, 0x008d0200, 0xbf008084 }, + { 0x00800040, 0x24407fbd, 0x008d0240, 0xbf008084 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0440, 0x000000dc }, + { 0x00800048, 0x220077bd, 0x008d0480, 0x000000d8 }, + { 0x00000041, 0x20dc7fbd, 0x000000dc, 0xbf800000 }, + { 0x00800001, 0x240003fc, 0x00000000, 0x3f008084 }, + { 0x00800048, 0x240077bc, 0x008d0480, 0x000000dc }, + { 0x00800048, 0x224077bd, 0x008d0440, 0x000000d8 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8a new file mode 100644 index 000000000..f3cc28f5f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8a @@ -0,0 +1,39 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * Zhao Yakui + * + */ + +include(`exa_wm.g4i') + +/* Color Balance parameters */ +define(`skip_color_balance', `g6.2<0,1,0>uw') +define(`contrast', `g6.16<0,1,0>f') +define(`brightness', `g6.20<0,1,0>f') +define(`cos_c_s', `g6.24<0,1,0>f') +define(`sin_c_s', `g6.28<0,1,0>f') +define(`sin_c_s_t', `g6.28') + +include(`exa_wm_yuv_color_balance.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8b new file mode 100644 index 000000000..5dc2c8bce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g8b @@ -0,0 +1,15 @@ + { 0x01000010, 0x200012e0, 0x160000c2, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000d0 }, + { 0x00800040, 0x24003ae8, 0x3e8d01c0, 0xbd808081 }, + { 0x00800041, 0x24003ae8, 0x3a8d0400, 0x000000d0 }, + { 0x00800040, 0x24003ae8, 0x3a8d0400, 0x000000d4 }, + { 0x00800040, 0x21c03ae8, 0x3e8d0400, 0x3d808081 }, + { 0x00800040, 0x24803ae8, 0x3e8d0200, 0xbf008084 }, + { 0x00800040, 0x24403ae8, 0x3e8d0240, 0xbf008084 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x3f008084 }, + { 0x00800048, 0x24003ae0, 0x3a8d0440, 0x000000dc }, + { 0x00800048, 0x22003ae8, 0x3a8d0480, 0x000000d8 }, + { 0x00000041, 0x20dc3ae8, 0x3e0000dc, 0xbf800000 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x3f008084 }, + { 0x00800048, 0x24003ae0, 0x3a8d0480, 0x000000dc }, + { 0x00800048, 0x22403ae8, 0x3a8d0440, 0x000000d8 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9a new file mode 100644 index 000000000..511e3f31f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9a @@ -0,0 +1,39 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * Zhao Yakui + * + */ + +include(`exa_wm.g4i') + +/* Color Balance parameters */ +define(`skip_color_balance', `g6.2<0,1,0>uw') +define(`contrast', `g6.16<0,1,0>f') +define(`brightness', `g6.20<0,1,0>f') +define(`cos_c_s', `g6.24<0,1,0>f') +define(`sin_c_s', `g6.28<0,1,0>f') +define(`sin_c_s_t', `g6.28') + +include(`exa_wm_yuv_color_balance.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9b new file mode 100644 index 000000000..5dc2c8bce --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.g9b @@ -0,0 +1,15 @@ + { 0x01000010, 0x200012e0, 0x160000c2, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000d0 }, + { 0x00800040, 0x24003ae8, 0x3e8d01c0, 0xbd808081 }, + { 0x00800041, 0x24003ae8, 0x3a8d0400, 0x000000d0 }, + { 0x00800040, 0x24003ae8, 0x3a8d0400, 0x000000d4 }, + { 0x00800040, 0x21c03ae8, 0x3e8d0400, 0x3d808081 }, + { 0x00800040, 0x24803ae8, 0x3e8d0200, 0xbf008084 }, + { 0x00800040, 0x24403ae8, 0x3e8d0240, 0xbf008084 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x3f008084 }, + { 0x00800048, 0x24003ae0, 0x3a8d0440, 0x000000dc }, + { 0x00800048, 0x22003ae8, 0x3a8d0480, 0x000000d8 }, + { 0x00000041, 0x20dc3ae8, 0x3e0000dc, 0xbf800000 }, + { 0x00800001, 0x24003ee0, 0x38000000, 0x3f008084 }, + { 0x00800048, 0x24003ae0, 0x3a8d0480, 0x000000dc }, + { 0x00800048, 0x22403ae8, 0x3a8d0440, 0x000000d8 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.gxa b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.gxa new file mode 100644 index 000000000..948067cfd --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_color_balance.gxa @@ -0,0 +1,75 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Haihao Xiang + * + */ + +define(`Cr', `src_sample_b') +define(`Cr_01', `src_sample_b_01') +define(`Cr_23', `src_sample_b_23') + +define(`Y', `src_sample_r') +define(`Y_01', `src_sample_r_01') +define(`Y_23', `src_sample_r_23') + +define(`Cb', `src_sample_g') +define(`Cb_01', `src_sample_g_01') +define(`Cb_23', `src_sample_g_23') + +define(`Crn', `color_balance_g') +define(`Crn_01', `color_balance_g_01') +define(`Crn_23', `color_balance_g_23') + +define(`Yn', `color_balance_r') +define(`Yn_01', `color_balance_r_01') +define(`Yn_23', `color_balance_r_23') + +define(`Cbn', `color_balance_b') +define(`Cbn_01', `color_balance_b_01') +define(`Cbn_23', `color_balance_b_23') + +cmp.e.f0.0 (1) null skip_color_balance 0x1uw {align1}; +(f0.0) jmpi _DONE_COLOR_BALANCE; + +/* Yout = (Yin - 16 / 255) * contrast + brightness + 16 / 255 */ +add (16) Yn<1>F Y<8,8,1>F -0.0627451F { compr align1 }; +mul (16) Yn<1>F Yn<8,8,1>F contrast { compr align1 }; +add (16) Yn<1>F Yn<8,8,1>F brightness { compr align1 }; +add (16) Y<1>F Yn<8,8,1>F 0.0627451F { compr align1 }; + +/* Uout = (Uin - 128 / 255) * cos_c_s + (Vin - 128 / 255) * sin_c_s + 128 / 255 */ +/* Vout = (Vin - 128 / 255) * cos_c_s - (Uin - 128 / 255) * sin_c_s + 128 / 255 */ +add (16) Cbn<1>F Cb<8,8,1>F -0.501961F { compr align1 }; +add (16) Crn<1>F Cr<8,8,1>F -0.501961F { compr align1 }; + +mov (16) acc0<1>F 0.501961F { compr align1 }; +mac (16) acc0<1>F Crn<8,8,1>F sin_c_s { compr align1 }; +mac (16) Cb<1>F Cbn<8,8,1>F cos_c_s { compr align1 }; + +mul (1) sin_c_s_t<1>F sin_c_s -1.0F { align1}; +mov (16) acc0<1>F 0.501961F { compr align1 }; +mac (16) acc0<1>F Cbn<8,8,1>F sin_c_s { compr align1 }; +mac (16) Cr<1>F Crn<8,8,1>F cos_c_s { compr align1 }; + +_DONE_COLOR_BALANCE: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4a new file mode 100644 index 000000000..e3d24640d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4a @@ -0,0 +1,32 @@ +/* + * Copyright © 2006-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * + */ + +include(`exa_wm.g4i') +include(`exa_yuv_gen4.g4i') +include(`exa_yuv_rgb.gxa') + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b new file mode 100644 index 000000000..b116ece6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b @@ -0,0 +1,13 @@ + { 0x00802040, 0x22c077bd, 0x008d01c0, 0x0000006c }, + { 0x00802040, 0x230077bd, 0x008d0200, 0x0000007c }, + { 0x00802040, 0x234077bd, 0x008d0240, 0x0000008c }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000060 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000064 }, + { 0x80802048, 0x21c077bd, 0x008d0340, 0x00000068 }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000070 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000074 }, + { 0x80802048, 0x220077bd, 0x008d0340, 0x00000078 }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000080 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000084 }, + { 0x80802048, 0x224077bd, 0x008d0340, 0x00000088 }, + { 0x00802001, 0x228003fd, 0x00000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b.gen5 b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b.gen5 new file mode 100644 index 000000000..b116ece6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g4b.gen5 @@ -0,0 +1,13 @@ + { 0x00802040, 0x22c077bd, 0x008d01c0, 0x0000006c }, + { 0x00802040, 0x230077bd, 0x008d0200, 0x0000007c }, + { 0x00802040, 0x234077bd, 0x008d0240, 0x0000008c }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000060 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000064 }, + { 0x80802048, 0x21c077bd, 0x008d0340, 0x00000068 }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000070 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000074 }, + { 0x80802048, 0x220077bd, 0x008d0340, 0x00000078 }, + { 0x00802041, 0x240077bc, 0x008d02c0, 0x00000080 }, + { 0x00802048, 0x240077bc, 0x008d0300, 0x00000084 }, + { 0x80802048, 0x224077bd, 0x008d0340, 0x00000088 }, + { 0x00802001, 0x228003fd, 0x00000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6a new file mode 100644 index 000000000..ede0298af --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6a @@ -0,0 +1,31 @@ +/* + * Copyright © 2006-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * + */ + +include(`exa_wm.g4i') +include(`exa_yuv_gen6.g4i') +include(`exa_yuv_rgb.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6b new file mode 100644 index 000000000..d09ae00e7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g6b @@ -0,0 +1,13 @@ + { 0x00800040, 0x22c077bd, 0x008d01c0, 0x000000ec }, + { 0x00800040, 0x230077bd, 0x008d0200, 0x000000fc }, + { 0x00800040, 0x234077bd, 0x008d0240, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x000000e4 }, + { 0x80800048, 0x21c077bd, 0x008d0340, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x000000f4 }, + { 0x80800048, 0x220077bd, 0x008d0340, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x00000104 }, + { 0x80800048, 0x224077bd, 0x008d0340, 0x00000108 }, + { 0x00800001, 0x228003fd, 0x00000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7a new file mode 100644 index 000000000..ede0298af --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7a @@ -0,0 +1,31 @@ +/* + * Copyright © 2006-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * + */ + +include(`exa_wm.g4i') +include(`exa_yuv_gen6.g4i') +include(`exa_yuv_rgb.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7b new file mode 100644 index 000000000..d09ae00e7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g7b @@ -0,0 +1,13 @@ + { 0x00800040, 0x22c077bd, 0x008d01c0, 0x000000ec }, + { 0x00800040, 0x230077bd, 0x008d0200, 0x000000fc }, + { 0x00800040, 0x234077bd, 0x008d0240, 0x0000010c }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x000000e0 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x000000e4 }, + { 0x80800048, 0x21c077bd, 0x008d0340, 0x000000e8 }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x000000f0 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x000000f4 }, + { 0x80800048, 0x220077bd, 0x008d0340, 0x000000f8 }, + { 0x00800041, 0x240077bc, 0x008d02c0, 0x00000100 }, + { 0x00800048, 0x240077bc, 0x008d0300, 0x00000104 }, + { 0x80800048, 0x224077bd, 0x008d0340, 0x00000108 }, + { 0x00800001, 0x228003fd, 0x00000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8a new file mode 100644 index 000000000..9da53c8c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8a @@ -0,0 +1,32 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * Zhao Yakui + * + */ + +include(`exa_wm.g4i') +include(`exa_yuv_gen6.g4i') +include(`exa_yuv_rgb.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8b new file mode 100644 index 000000000..6b6b4d1c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g8b @@ -0,0 +1,13 @@ + { 0x00800040, 0x22c03ae8, 0x3a8d01c0, 0x000000ec }, + { 0x00800040, 0x23003ae8, 0x3a8d0200, 0x000000fc }, + { 0x00800040, 0x23403ae8, 0x3a8d0240, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x000000e4 }, + { 0x80800048, 0x21c03ae8, 0x3a8d0340, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x000000f4 }, + { 0x80800048, 0x22003ae8, 0x3a8d0340, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x00000104 }, + { 0x80800048, 0x22403ae8, 0x3a8d0340, 0x00000108 }, + { 0x00800001, 0x22803ee8, 0x38000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9a new file mode 100644 index 000000000..e5f82c65b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9a @@ -0,0 +1,32 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Keith Packard + * Eric Anholt + * Zhao Yakui + * + */ + +include(`exa_wm.g4i') +include(`exa_yuv_gen6.g4i') +include(`exa_yuv_rgb.gxa') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9b new file mode 100644 index 000000000..6b6b4d1c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_wm_yuv_rgb.g9b @@ -0,0 +1,13 @@ + { 0x00800040, 0x22c03ae8, 0x3a8d01c0, 0x000000ec }, + { 0x00800040, 0x23003ae8, 0x3a8d0200, 0x000000fc }, + { 0x00800040, 0x23403ae8, 0x3a8d0240, 0x0000010c }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x000000e0 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x000000e4 }, + { 0x80800048, 0x21c03ae8, 0x3a8d0340, 0x000000e8 }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x000000f0 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x000000f4 }, + { 0x80800048, 0x22003ae8, 0x3a8d0340, 0x000000f8 }, + { 0x00800041, 0x24003ae0, 0x3a8d02c0, 0x00000100 }, + { 0x00800048, 0x24003ae0, 0x3a8d0300, 0x00000104 }, + { 0x80800048, 0x22403ae8, 0x3a8d0340, 0x00000108 }, + { 0x00800001, 0x22803ee8, 0x38000000, 0x3f800000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen4.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen4.g4i new file mode 100644 index 000000000..5a66616fc --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen4.g4i @@ -0,0 +1,42 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ + +/* YUV to RGB matrix coeff */ + +define(`coef_ry', `g3.0<0,1,0>F') +define(`coef_ru', `g3.4<0,1,0>F') +define(`coef_rv', `g3.8<0,1,0>F') +define(`coef_yd', `g3.12<0,1,0>F') + +define(`coef_gy', `g3.16<0,1,0>F') +define(`coef_gu', `g3.20<0,1,0>F') +define(`coef_gv', `g3.24<0,1,0>F') +define(`coef_ud', `g3.28<0,1,0>F') + +define(`coef_by', `g4.0<0,1,0>F') +define(`coef_bu', `g4.4<0,1,0>F') +define(`coef_bv', `g4.8<0,1,0>F') +define(`coef_vd', `g4.12<0,1,0>F') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen6.g4i b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen6.g4i new file mode 100644 index 000000000..a8d69ee19 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_gen6.g4i @@ -0,0 +1,42 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ +/* YUV to RGB matrix coeff */ + + +define(`coef_ry', `g7.0<0,1,0>F') +define(`coef_ru', `g7.4<0,1,0>F') +define(`coef_rv', `g7.8<0,1,0>F') +define(`coef_yd', `g7.12<0,1,0>F') + +define(`coef_gy', `g7.16<0,1,0>F') +define(`coef_gu', `g7.20<0,1,0>F') +define(`coef_gv', `g7.24<0,1,0>F') +define(`coef_ud', `g7.28<0,1,0>F') + +define(`coef_by', `g8.0<0,1,0>F') +define(`coef_bu', `g8.4<0,1,0>F') +define(`coef_bv', `g8.8<0,1,0>F') +define(`coef_vd', `g8.12<0,1,0>F') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_rgb.gxa b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_rgb.gxa new file mode 100644 index 000000000..656ae73b5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/render/exa_yuv_rgb.gxa @@ -0,0 +1,74 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ + +define(`YCbCr_base', `src_sample_base') + +define(`Cr', `src_sample_b') +define(`Cr_01', `src_sample_b_01') +define(`Cr_23', `src_sample_b_23') + +define(`Y', `src_sample_r') +define(`Y_01', `src_sample_r_01') +define(`Y_23', `src_sample_r_23') + +define(`Cb', `src_sample_g') +define(`Cb_01', `src_sample_g_01') +define(`Cb_23', `src_sample_g_23') + +define(`Crn', `mask_sample_b') +define(`Crn_01', `mask_sample_b_01') +define(`Crn_23', `mask_sample_b_23') + +define(`Yn', `mask_sample_r') +define(`Yn_01', `mask_sample_r_01') +define(`Yn_23', `mask_sample_r_23') + +define(`Cbn', `mask_sample_g') +define(`Cbn_01', `mask_sample_g_01') +define(`Cbn_23', `mask_sample_g_23') + +add (16) Yn<1>F Y<8,8,1>F coef_yd { compr align1 }; + +add (16) Cbn<1>F Cb<8,8,1>F coef_ud { compr align1 }; + +add (16) Crn<1>F Cr<8,8,1>F coef_vd { compr align1 }; + +mul (16) acc0<1>F Yn<8,8,1>F coef_ry { compr align1 }; +mac (16) acc0<1>F Cbn<8,8,1>F coef_ru { compr align1 }; +mac.sat (16) src_sample_r<1>F Crn<8,8,1>F coef_rv { compr align1 }; + +mul (16) acc0<1>F Yn<8,8,1>F coef_gy { compr align1 }; +mac (16) acc0<1>F Cbn<8,8,1>F coef_gu { compr align1 }; +mac.sat(16) src_sample_g<1>F Crn<8,8,1>F coef_gv { compr align1 }; + +mul (16) acc0<1>F Yn<8,8,1>F coef_by { compr align1 }; +mac (16) acc0<1>F Cbn<8,8,1>F coef_bu { compr align1 }; +mac.sat(16) src_sample_b<1>F Crn<8,8,1>F coef_bv { compr align1 }; + + /* + * A = 1.0 + */ +mov (16) src_sample_a<1>F 1.0F { compr align1 }; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.am new file mode 100644 index 000000000..4a5d89d75 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.am @@ -0,0 +1,100 @@ +MFC_CORE = \ + end_thread.asm \ + mfc_batchbuffer_head.asm \ + mfc_batchbuffer_tail.asm +MFC_CORE_AVC = \ + mfc_batchbuffer_avc_intra.asm \ + mfc_batchbuffer_avc_inter.asm + +MFC_CORE_HSW = \ + mfc_batchbuffer_hsw.asm + +INTEL_G6B = mfc_batchbuffer_avc_intra.g6b mfc_batchbuffer_avc_inter.g6b +INTEL_G6A = mfc_batchbuffer_avc_intra.g6a mfc_batchbuffer_avc_inter.g6a +INTEL_GEN6_INC = mfc_batchbuffer.inc +INTEL_GEN6_ASM = $(INTEL_G6A:%.g6a=%.gen6.asm) + +INTEL_G7B = mfc_batchbuffer_avc_intra.g7b mfc_batchbuffer_avc_inter.g7b +INTEL_G7A = mfc_batchbuffer_avc_intra.g7a mfc_batchbuffer_avc_inter.g7a +INTEL_GEN7_INC = mfc_batchbuffer.inc +INTEL_GEN7_ASM = $(INTEL_G7A:%.g7a=%.gen7.asm) + +INTEL_G75B = mfc_batchbuffer_hsw.g75b +INTEL_G75A = mfc_batchbuffer_hsw.g75a +INTEL_GEN75_INC = mfc_batchbuffer_hsw.inc +INTEL_GEN75_ASM = $(INTEL_G75A:%.g75a=%.gen75.asm) + +INTEL_G9B = mfc_batchbuffer_avc_intra.g9b mfc_batchbuffer_avc_inter.g9b +INTEL_G9A = mfc_batchbuffer_avc_intra.g9a mfc_batchbuffer_avc_inter.g9a +INTEL_GEN9_INC = mfc_batchbuffer.inc +INTEL_GEN9_ASM = $(INTEL_G9A:%.g9a=%.gen9.asm) + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_G6B) +TARGETS += $(INTEL_G7B) +TARGETS += $(INTEL_G75B) +TARGETS += $(INTEL_G9B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g9a .g9b .gen9.asm + +if HAVE_GEN4ASM +$(INTEL_GEN6_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN6_INC) +.g6a.gen6.asm: + $(AM_V_GEN)cpp -P -DDEV_SNB $< > _mfc0.$@ && \ + m4 _mfc0.$@ > $@ && \ + rm _mfc0.$@ +.gen6.asm.g6b: + $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +$(INTEL_GEN7_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN7_INC) +.g7a.gen7.asm: + $(AM_V_GEN)cpp -P -DDEV_IVB $< > _mfc0.$@ && \ + m4 _mfc0.$@ > $@ && \ + rm _mfc0.$@ +.gen7.asm.g7b: + $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< + +$(INTEL_GEN75_ASM): $(MFC_CORE_HSW) $(INTEL_GEN75_INC) +.g75a.gen75.asm: + $(AM_V_GEN)cpp -P $< > _mfc0.$@ && \ + m4 _mfc0.$@ > $@ && \ + rm _mfc0.$@ +.gen75.asm.g75b: + $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + +$(INTEL_GEN9_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN9_INC) +.g9a.gen9.asm: + $(AM_V_GEN)cpp -P -DDEV_IVB $< > _mfc0.$@ && \ + m4 _mfc0.$@ > $@ && \ + rm _mfc0.$@ +.gen9.asm.g9b: + $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +endif + +CLEANFILES = $(INTEL_GEN6_ASM) $(INTEL_GEN7_ASM) $(INTEL_GEN75_ASM) $(INTEL_GEN9_ASM) + +EXTRA_DIST = \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G75A) \ + $(INTEL_G75B) \ + $(INTEL_GEN6_INC) \ + $(INTEL_GEN7_INC) \ + $(INTEL_GEN75_INC) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(INTEL_GEN9_INC) \ + $(MFC_CORE) \ + $(MFC_CORE_AVC) \ + $(MFC_CORE_HSW) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.in new file mode 100644 index 000000000..851571e24 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/Makefile.in @@ -0,0 +1,540 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_G6B) $(INTEL_G7B) \ +@HAVE_GEN4ASM_TRUE@ $(INTEL_G75B) $(INTEL_G9B) +subdir = src/shaders/utils +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +MFC_CORE = \ + end_thread.asm \ + mfc_batchbuffer_head.asm \ + mfc_batchbuffer_tail.asm + +MFC_CORE_AVC = \ + mfc_batchbuffer_avc_intra.asm \ + mfc_batchbuffer_avc_inter.asm + +MFC_CORE_HSW = \ + mfc_batchbuffer_hsw.asm + +INTEL_G6B = mfc_batchbuffer_avc_intra.g6b mfc_batchbuffer_avc_inter.g6b +INTEL_G6A = mfc_batchbuffer_avc_intra.g6a mfc_batchbuffer_avc_inter.g6a +INTEL_GEN6_INC = mfc_batchbuffer.inc +INTEL_GEN6_ASM = $(INTEL_G6A:%.g6a=%.gen6.asm) +INTEL_G7B = mfc_batchbuffer_avc_intra.g7b mfc_batchbuffer_avc_inter.g7b +INTEL_G7A = mfc_batchbuffer_avc_intra.g7a mfc_batchbuffer_avc_inter.g7a +INTEL_GEN7_INC = mfc_batchbuffer.inc +INTEL_GEN7_ASM = $(INTEL_G7A:%.g7a=%.gen7.asm) +INTEL_G75B = mfc_batchbuffer_hsw.g75b +INTEL_G75A = mfc_batchbuffer_hsw.g75a +INTEL_GEN75_INC = mfc_batchbuffer_hsw.inc +INTEL_GEN75_ASM = $(INTEL_G75A:%.g75a=%.gen75.asm) +INTEL_G9B = mfc_batchbuffer_avc_intra.g9b mfc_batchbuffer_avc_inter.g9b +INTEL_G9A = mfc_batchbuffer_avc_intra.g9a mfc_batchbuffer_avc_inter.g9a +INTEL_GEN9_INC = mfc_batchbuffer.inc +INTEL_GEN9_ASM = $(INTEL_G9A:%.g9a=%.gen9.asm) +TARGETS = $(am__append_1) +SUFFIXES = .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g9a .g9b .gen9.asm +CLEANFILES = $(INTEL_GEN6_ASM) $(INTEL_GEN7_ASM) $(INTEL_GEN75_ASM) $(INTEL_GEN9_ASM) +EXTRA_DIST = \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G75A) \ + $(INTEL_G75B) \ + $(INTEL_GEN6_INC) \ + $(INTEL_GEN7_INC) \ + $(INTEL_GEN75_INC) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(INTEL_GEN9_INC) \ + $(MFC_CORE) \ + $(MFC_CORE_AVC) \ + $(MFC_CORE_HSW) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g9a .g9b .gen9.asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/utils/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/utils/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN6_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN6_INC) +@HAVE_GEN4ASM_TRUE@.g6a.gen6.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P -DDEV_SNB $< > _mfc0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _mfc0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _mfc0.$@ +@HAVE_GEN4ASM_TRUE@.gen6.asm.g6b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN7_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN7_INC) +@HAVE_GEN4ASM_TRUE@.g7a.gen7.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P -DDEV_IVB $< > _mfc0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _mfc0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _mfc0.$@ +@HAVE_GEN4ASM_TRUE@.gen7.asm.g7b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN75_ASM): $(MFC_CORE_HSW) $(INTEL_GEN75_INC) +@HAVE_GEN4ASM_TRUE@.g75a.gen75.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P $< > _mfc0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _mfc0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _mfc0.$@ +@HAVE_GEN4ASM_TRUE@.gen75.asm.g75b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN9_ASM): $(MFC_CORE) $(MFC_CORE_AVC) $(INTEL_GEN9_INC) +@HAVE_GEN4ASM_TRUE@.g9a.gen9.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P -DDEV_IVB $< > _mfc0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _mfc0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _mfc0.$@ +@HAVE_GEN4ASM_TRUE@.gen9.asm.g9b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/end_thread.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/end_thread.asm new file mode 100644 index 000000000..c299d28b2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/end_thread.asm @@ -0,0 +1,29 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +__EXIT: + mov (8) msg_reg0<1>:ud r0<8,8,1>:ud {align1} ; + send (16) msg_ind acc0<1>ud null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT} ; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer.inc new file mode 100644 index 000000000..c3a0fec6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer.inc @@ -0,0 +1,246 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +define(`BIND_IDX_VME_OUTPUT', `0') +define(`BIND_IDX_MFC_SLICE_HEADER', `1') +define(`BIND_IDX_MFC_BATCHBUFFER', `2') + +define(`INTRAMBFLAG_MASK', `0x00002000') + +#ifdef DEV_SNB + +define(`OB_CACHE_TYPE', `5') + +#else + +define(`OB_CACHE_TYPE', `10') + +#endif + +define(`OB_READ', `0') +define(`OB_WRITE', `8') + +define(`OB_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OB_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OB_CONTROL_2', `2') /* 2 OWords */ +define(`OB_CONTROL_3', `3') /* 4 OWords */ +define(`OB_CONTROL_4', `4') /* 8 OWords */ + +#ifdef DEV_SNB + +define(`OB_WRITE_COMMIT_CATEGORY', `1') /* write commit on Sandybrige */ + +#else + +define(`OB_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + +#endif + +define(`OB_HEADER_PRESENT', `1') + +define(`INTER_VME_OUTPUT_IN_BYTES', `160') +define(`INTER_VME_OUTPUT_IN_OWS', `10') +define(`INTER_VME_OUTPUT_MV_IN_OWS', `8') + +define(`MFC_AVC_PAK_OBJECT_INTRA_DW0', `0x71490009:UD') +define(`MFC_AVC_PAK_OBJECT_INTRA_DW3', `0x000e0000:UD') /* CbpDC (1 << 19 | 1 << 18 | 1 << 17) */ +define(`MFC_AVC_PAK_OBJECT_INTRA_DW4', `0xFFFF0000:UD') /* CBP for Y */ +define(`MFC_AVC_PAK_OBJECT_INTRA_DW5', `0x000F000F:UD') +define(`MFC_AVC_PAK_OBJECT_INTRA_DW6', `0x04000000:UD') /* the flag of the last macroblock */ + +define(`MFC_AVC_PAK_OBJECT_INTER_DW0', `MFC_AVC_PAK_OBJECT_INTRA_DW0') +define(`MFC_AVC_PAK_OBJECT_INTER_DW1', `0x20:UD') /* 32 MVs */ +define(`MFC_AVC_PAK_OBJECT_INTER_DW2', `INTER_VME_OUTPUT_IN_BYTES:UD') /* offset, in bytes */ +define(`MFC_AVC_PAK_OBJECT_INTER_DW3', `0x014e0000:UD') /* + * (1 << 24) | PackedMvNum, Debug + * (4 << 20) | 8 MV, SNB don't use it + * (1 << 19) | CbpDcY + * (1 << 18) | CbpDcU + * (1 << 17) | CbpDcV + * (0 << 15) | Transform8x8Flag = 0 + * (0 << 14) | Frame based + * (0 << 13) | Inter MB + * (1 << 8) | MbType = P_L0_16x16 + * (0 << 7) | MBZ for frame + * (0 << 6) | MBZ + * (2 << 4) | MBZ for inter + * (0 << 3) | MBZ + * (0 << 2) | SkipMbFlag + * (0 << 0) InterMbMode + */ +define(`MFC_AVC_PAK_OBJECT_INTER_DW4', `MFC_AVC_PAK_OBJECT_INTRA_DW4') +define(`MFC_AVC_PAK_OBJECT_INTER_DW5', `MFC_AVC_PAK_OBJECT_INTRA_DW5') +define(`MFC_AVC_PAK_OBJECT_INTER_DW6', `MFC_AVC_PAK_OBJECT_INTRA_DW6') + +define(`MI_BATCH_BUFFER_END', `0x05000000:UD') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r7 reserved + * r8~r15 temporary registers + * r16 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +define(`FLAG_MASK_LAST_SLICE', `0x0001:uw') +define(`FLAG_MASK_LAST_OBJECT', `0x0002:uw') +define(`FLAG_MASK_FIRST_OBJECT', `0x0004:uw') + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`head_offset', `inline_reg0.0') /* :ud, in units of Owords */ +define(`batchbuffer_offset', `inline_reg0.4') /* :ud, in units of Owords */ +define(`tail_size', `inline_reg0.8') /* :w, in units of Owords */ +define(`head_size', `inline_reg0.10') /* :w, in units of Owords */ +define(`flags', `inline_reg0.12') /* :uw, + * bit0 the flag of the last slice + * bit1 the flag of the last object in a slice + * bit2 the flag of the first object in a slice + */ +define(`total_mbs', `inline_reg0.14') /* :w, the number of macroblock commands + * being processed by the kernel + */ +define(`mb_x', `inline_reg0.16') /* :ub, */ +define(`mb_y', `inline_reg0.17') /* :ub, */ +define(`mb_xy', `inline_reg0.16') /* :uw, */ +define(`width_in_mb', `inline_reg0.20') /* :uw, the picture width in macroblocks */ +define(`qp', `inline_reg0.22') /* :ub, */ +define(`ref_idx0', `inline_reg0.24') /* :ud */ +define(`ref_idx1', `inline_reg0.28') /* :ud */ + +/* + * GRF 8~15 -- temporary registers + */ +define(`tmp_reg0', `r8') +define(`tmp_reg1', `r9') +define(`tmp_reg2', `r10') +define(`tmp_reg3', `r11') +define(`tmp_reg4', `r12') +define(`tmp_reg5', `r13') +define(`tmp_reg6', `r14') +define(`tmp_reg7', `r15') + +define(`tmp_vme_output', `tmp_reg0') +define(`tmp_slice_header', `tmp_reg1') +define(`tmp_mfc_batchbuffer', `tmp_reg2') +define(`tmp_offset', `tmp_reg7') +/* + * GRF 16~23 write back for Oword Block Read message + */ +define(`ob_read_wb', `r16<1>:uw') +define(`ob_read_wb0', `r16') +define(`ob_read_wb1', `r17') +define(`ob_read_wb2', `r18') +define(`ob_read_wb3', `r19') +define(`ob_read_wb4', `r20') +define(`ob_read_wb5', `r21') +define(`ob_read_wb6', `r22') +define(`ob_read_wb7', `r23') + +define(`ob_read_wb_len_slice_header', `1') +define(`ob_read_wb_len_vme_intra', `1') +define(`ob_read_wb_len_vme_inter', `1') + +#ifdef DEV_SNB + +/* + * GRF 24~25 write back for Oword Block Write message + */ + +define(`ob_write_wb', `r24') +define(`ob_write_wb_length', `1') + +#else + +/* + * GRF 24~25 -- reserved + */ +define(`ob_write_wb', `null<1>:W') +define(`ob_write_wb_length', `0') + +#endif + +/* + * GRF 26~27 + */ +define(`pak_object_ud', `r26.0') +define(`pak_object0_ud', `r26.0') +define(`pak_object1_ud', `r26.4') +define(`pak_object2_ud', `r26.8') +define(`pak_object3_ud', `r26.12') +define(`pak_object4_ud', `r26.16') +define(`pak_object5_ud', `r26.20') +define(`pak_object6_ud', `r26.24') +define(`pak_object7_ud', `r26.28') +define(`pak_object8_ud', `r27.0') +define(`pak_object9_ud', `r27.4') +define(`pak_object10_ud', `r27.8') +define(`pak_object11_ud', `r27.12') + +#ifdef DEV_SNB + +/* + * Message Payload registers + */ +define(`msg_ind', `0') +define(`msg_reg0', `m0') +define(`msg_reg1', `m1') +define(`msg_reg2', `m2') +define(`msg_reg3', `m3') +define(`msg_reg4', `m4') +define(`msg_reg5', `m5') +define(`msg_reg6', `m6') +define(`msg_reg7', `m7') +define(`msg_reg8', `m8') + +#else + +/* + * Message Payload registers + */ +define(`msg_ind', `64') +define(`msg_reg0', `g64') +define(`msg_reg1', `g65') +define(`msg_reg2', `g66') +define(`msg_reg3', `g67') +define(`msg_reg4', `g68') +define(`msg_reg5', `g69') +define(`msg_reg6', `g70') +define(`msg_reg7', `g71') +define(`msg_reg8', `g72') + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.asm new file mode 100644 index 000000000..549f0213b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.asm @@ -0,0 +1,178 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +__PAK_OBJECT: + mul (1) tmp_offset.0<1>:ud width_in_mb<0,1,0>:uw mb_y<0,1,0>:ub {align1}; + add (1) tmp_offset.0<1>:ud tmp_offset.0<0,1,0>:ud mb_x<0,1,0>:ub {align1}; + /* + * The layout of VME output + * ++++++++++++++++++++++++++++++++++++++++++++++ + * | MV(128bytes) | other info (32bytes) | + * ++++++++++++++++++++++++++++++++++++++++++++++ + */ + mul (1) tmp_vme_output.8<1>:ud tmp_offset.0<0,1,0>:ud INTER_VME_OUTPUT_IN_OWS:ud {align1} ; /* point to output buffer */ + add (1) tmp_vme_output.8<1>:ud tmp_vme_output.8<0,1,0>:ud INTER_VME_OUTPUT_MV_IN_OWS:uw {align1}; /* point to other info */ + +__PAK_OBJECT_LOOP: + /* + * Read other info + */ + mov (8) msg_reg0.0<1>:ud tmp_vme_output<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_read_wb + null + data_port( + OB_CACHE_TYPE, + OB_READ, + OB_CONTROL_2, + BIND_IDX_VME_OUTPUT, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 1 + rlen ob_read_wb_len_vme_inter + {align1}; + + + /* + * Fill the command + */ + mov (16) pak_object_ud<1>:ud 0x0:ud {align1} ; + + and.z.f0.1 (1) null<1>:uw flags<0,1,0>:uw FLAG_MASK_LAST_OBJECT {align1}; + + and.z.f0.0 (1) null<1>:ud ob_read_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; + + (-f0.0)jmpi (1) __FILL_INTRA_PAK_COMMAND ; + +__FILL_INTER_PAK_COMMAND: + /* DW0 */ + mov (1) pak_object0_ud<1>:ud MFC_AVC_PAK_OBJECT_INTER_DW0 ; + + /* DW2 */ + mul (1) pak_object2_ud<1>:ud tmp_offset.0<0,1,0>:ud INTER_VME_OUTPUT_IN_BYTES:ud {align1} ; + + /* DW5 */ + mov (1) pak_object5_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW5 ; + + /* DW1 must be 32 for 8 MVs and 128 for 32 MVs !!! */ + mov (1) pak_object1_ud<1>:ud ob_read_wb0.8<0,1,0>:ud {align1} ; + + /* DW3 */ + mov (1) pak_object3_ud<1>:ud ob_read_wb0.0<0,1,0>:ud {align1} ; + + /* DW4 */ + add (1) pak_object4_ud<1>:ud mb_xy<0,1,0>:uw MFC_AVC_PAK_OBJECT_INTER_DW4 {align1} ; + add (1) mb_x<1>:ub mb_x<0,1,0>:ub 1:uw {align1}; + cmp.e.f0.0 (1) null<1>:uw width_in_mb<0,1,0>:uw mb_x<0,1,0>:ub {align1}; + (f0.0)mov (1) mb_x<1>:ub 0:uw {align1} ; + (f0.0)add (1) mb_y<1>:ub mb_y<0,1,0>:ub 1:uw {align1} ; + + /* DW6 */ + mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + (-f0.1)mov (1) pak_object6_ud<1>:ud MFC_AVC_PAK_OBJECT_INTER_DW6 {align1} ; + cmp.e.f0.0 (1) null<1>:uw total_mbs<0,1,0>:uw 1:uw {align1}; + (-f0.0)mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + add (1) pak_object6_ud<1>:ud pak_object6_ud<0,1,0>:ud qp<0,1,0>:ub {align1} ; + + /* DW7 */ + mov (1) pak_object7_ud<1>:ud ob_read_wb0.4<0,1,0>:ud {align1} ; + + /* DW8 */ + mov (1) pak_object8_ud<1>:ud ref_idx0<0,1,0>:ud {align1} ; + + /* DW9 */ + mov (1) pak_object9_ud<1>:ud ref_idx1<0,1,0>:ud {align1} ; + + jmpi (1) __OUTPUT_PAK_COMMAND ; + +__FILL_INTRA_PAK_COMMAND: + /* DW0 */ + mov (1) pak_object0_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW0 ; + + /* DW5 */ + mov (1) pak_object5_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW5 ; + + /* DW4 */ + add (1) pak_object4_ud<1>:ud mb_xy<0,1,0>:uw MFC_AVC_PAK_OBJECT_INTRA_DW4 {align1} ; + add (1) mb_x<1>:ub mb_x<0,1,0>:ub 1:uw {align1}; + cmp.e.f0.0 (1) null<1>:uw width_in_mb<0,1,0>:uw mb_x<0,1,0>:ub {align1}; + (f0.0)mov (1) mb_x<1>:ub 0:uw {align1} ; + (f0.0)add (1) mb_y<1>:ub mb_y<0,1,0>:ub 1:uw {align1} ; + + /* DW6 */ + mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + (-f0.1)mov (1) pak_object6_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW6 {align1} ; + cmp.e.f0.0 (1) null<1>:uw total_mbs<0,1,0>:uw 1:uw {align1}; + (-f0.0)mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + add (1) pak_object6_ud<1>:ud pak_object6_ud<0,1,0>:ud qp<0,1,0>:ub {align1} ; + + /* DW3 */ + and (1) pak_object3_ud<1>:ud ob_read_wb0.0<0,1,0>:ud 0xFFFF {align1} ; + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud MFC_AVC_PAK_OBJECT_INTRA_DW3 {align1} ; + + /* DW7 */ + mov (1) pak_object7_ud<1>:ud ob_read_wb0.4<0,1,0>:ud {align1} ; + + /* DW8 */ + mov (1) pak_object8_ud<1>:ud ob_read_wb0.8<0,1,0>:ud {align1} ; + + /* DW9 */ + and (1) pak_object9_ud<1>:ud ob_read_wb0.12<0,1,0>:ud 0xFC:ud {align1} ; + +__OUTPUT_PAK_COMMAND: + mov (8) msg_reg0.0<1>:ud tmp_mfc_batchbuffer<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud pak_object_ud<8,8,1>:ud {align1} ; + mov (8) msg_reg2.0<1>:ud pak_object8_ud<8,8,1>:ud {align1} ; + + /* point to the next other info block */ + add (1) tmp_vme_output.8<1>:ud tmp_vme_output.8<0,1,0>:ud INTER_VME_OUTPUT_IN_OWS:ud {align1} ; + +send (16) + msg_ind + ob_write_wb + null + data_port( + OB_CACHE_TYPE, + OB_WRITE, + OB_CONTROL_3, + BIND_IDX_MFC_BATCHBUFFER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 3 + rlen ob_write_wb_length + {align1}; + + /* the new offset */ + add (1) tmp_mfc_batchbuffer.8<1>:ud tmp_mfc_batchbuffer.8<0,1,0>:ud 4:ud {align1} ; + add (1) tmp_offset.0<1>:ud tmp_offset.0<0,1,0>:ud 1:ud {align1}; + + add.z.f0.0 (1) total_mbs<1>:w total_mbs<0,1,0>:w -1:w {align1}; + (-f0.0)jmpi (1) __PAK_OBJECT_LOOP ; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6a new file mode 100644 index 000000000..bef586a7e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6a @@ -0,0 +1,32 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_inter.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6b new file mode 100644 index 000000000..24b268f59 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g6b @@ -0,0 +1,90 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21340231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280021, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480021, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00600001, 0x20000022, 0x008d0120, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x00000041, 0x21e04521, 0x000000b4, 0x000000b1 }, + { 0x00000040, 0x21e04421, 0x000001e0, 0x000000b0 }, + { 0x00000041, 0x21080c21, 0x000001e0, 0x0000000a }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00080008 }, + { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0200 }, + { 0x00800001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 }, + { 0x01000005, 0x20000c20, 0x00000200, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x00000001, 0x23440021, 0x00000208, 0x00000000 }, + { 0x00000001, 0x234c0021, 0x00000200, 0x00000000 }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x000000b8, 0x00000000 }, + { 0x00000001, 0x23640021, 0x000000bc, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e0000 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640c21, 0x0000020c, 0x000000fc }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080c21, 0x00000108, 0x0000000a }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x061b0302 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 }, + { 0x00000040, 0x21e00c21, 0x000001e0, 0x00000001 }, + { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00600001, 0x20000022, 0x008d0120, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20a83dad, 0x000000a8, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x20200062, 0x00000000, 0x00000000 }, + { 0x00000001, 0x20240062, 0x00000000, 0x05000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00600001, 0x20000022, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001cc0, 0x00000000, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7a new file mode 100644 index 000000000..bef586a7e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7a @@ -0,0 +1,32 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_inter.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7b new file mode 100644 index 000000000..f0e20128b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g7b @@ -0,0 +1,90 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21340231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280021, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480021, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00600001, 0x28000021, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x00000041, 0x21e04521, 0x000000b4, 0x000000b1 }, + { 0x00000040, 0x21e04421, 0x000001e0, 0x000000b0 }, + { 0x00000041, 0x21080c21, 0x000001e0, 0x0000000a }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00080008 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180200 }, + { 0x00800001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 }, + { 0x01000005, 0x20000c20, 0x00000200, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x00000001, 0x23440021, 0x00000208, 0x00000000 }, + { 0x00000001, 0x234c0021, 0x00000200, 0x00000000 }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x000000b8, 0x00000000 }, + { 0x00000001, 0x23640021, 0x000000bc, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e0000 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640c21, 0x0000020c, 0x000000fc }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080c21, 0x00000108, 0x0000000a }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x060a0302 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 }, + { 0x00000040, 0x21e00c21, 0x000001e0, 0x00000001 }, + { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00600001, 0x28000021, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20a83dad, 0x000000a8, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240061, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca0, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9a new file mode 100644 index 000000000..ebc884ceb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9a @@ -0,0 +1,33 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Li Zhong + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_inter.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9b new file mode 100644 index 000000000..dfea91634 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_inter.g9b @@ -0,0 +1,90 @@ + { 0x00800001, 0x21000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21342288, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280208, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21542288, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480208, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000ac, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000090 }, + { 0x00600001, 0x28000208, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180001 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00000040, 0x21280208, 0x06000128, 0x00000001 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000001 }, + { 0x01000040, 0x20aa1a68, 0x1e0000aa, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xffffff70 }, + { 0x00000041, 0x21e01208, 0x220000b4, 0x000000b1 }, + { 0x00000040, 0x21e00208, 0x220001e0, 0x000000b0 }, + { 0x00000041, 0x21080208, 0x060001e0, 0x0000000a }, + { 0x00000040, 0x21080208, 0x16000108, 0x00080008 }, + { 0x00600001, 0x28000208, 0x008d0100, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180200 }, + { 0x00800001, 0x23400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001241, 0x160000ac, 0x00020002 }, + { 0x01000005, 0x20000200, 0x06000200, 0x00002000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00000001, 0x23400608, 0x00000000, 0x71490009 }, + { 0x00000041, 0x23480208, 0x060001e0, 0x000000a0 }, + { 0x00000001, 0x23540608, 0x00000000, 0x000f000f }, + { 0x00000001, 0x23440208, 0x00000208, 0x00000000 }, + { 0x00000001, 0x234c0208, 0x00000200, 0x00000000 }, + { 0x00000040, 0x23501208, 0x060000b0, 0xffff0000 }, + { 0x00000040, 0x20b02288, 0x160000b0, 0x00010001 }, + { 0x01000010, 0x20001240, 0x220000b4, 0x000000b0 }, + { 0x00010001, 0x20b01688, 0x10000000, 0x00000000 }, + { 0x00010040, 0x20b12288, 0x160000b1, 0x00010001 }, + { 0x00000001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580609, 0x00000000, 0x04000000 }, + { 0x01000010, 0x20001240, 0x160000ae, 0x00010001 }, + { 0x00110001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23580208, 0x22000358, 0x000000b6 }, + { 0x00000001, 0x235c0208, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600208, 0x000000b8, 0x00000000 }, + { 0x00000001, 0x23640208, 0x000000bc, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x23400608, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540608, 0x00000000, 0x000f000f }, + { 0x00000040, 0x23501208, 0x060000b0, 0xffff0000 }, + { 0x00000040, 0x20b02288, 0x160000b0, 0x00010001 }, + { 0x01000010, 0x20001240, 0x220000b4, 0x000000b0 }, + { 0x00010001, 0x20b01688, 0x10000000, 0x00000000 }, + { 0x00010040, 0x20b12288, 0x160000b1, 0x00010001 }, + { 0x00000001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580609, 0x00000000, 0x04000000 }, + { 0x01000010, 0x20001240, 0x160000ae, 0x00010001 }, + { 0x00110001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23580208, 0x22000358, 0x000000b6 }, + { 0x00000005, 0x234c0208, 0x0e000200, 0x0000ffff }, + { 0x00000040, 0x234c0208, 0x0600034c, 0x000e0000 }, + { 0x00000001, 0x235c0208, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600208, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640208, 0x0600020c, 0x000000fc }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080208, 0x06000108, 0x0000000a }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x060a0302 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000004 }, + { 0x00000040, 0x21e00208, 0x060001e0, 0x00000001 }, + { 0x01000040, 0x20ae1a68, 0x1e0000ae, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xfffffcd0 }, + { 0x00010020, 0x34000001, 0x0e001400, 0x000000f0 }, + { 0x00600001, 0x28000208, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180001 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00000040, 0x21280208, 0x06000128, 0x00000001 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000001 }, + { 0x01000040, 0x20a81a68, 0x1e0000a8, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xffffff70 }, + { 0x01000005, 0x20001240, 0x160000ac, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x28200608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240608, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00600001, 0x28000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a00, 0x06000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.asm new file mode 100644 index 000000000..838ab131b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.asm @@ -0,0 +1,111 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +__PAK_OBJECT: + mul (1) tmp_vme_output.8<1>:ud width_in_mb<0,1,0>:uw mb_y<0,1,0>:ub {align1}; + add (1) tmp_vme_output.8<1>:ud tmp_vme_output.8<0,1,0>:ud mb_x<0,1,0>:ub {align1}; + + mov (16) pak_object_ud<1>:ud 0x0:ud {align1} ; + mov (1) pak_object0_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW0 ; + mov (1) pak_object5_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW5 ; + + and.z.f0.1 (1) null<1>:uw flags<0,1,0>:uw FLAG_MASK_LAST_OBJECT {align1}; + +__PAK_OBJECT_LOOP: + mov (8) msg_reg0.0<1>:ud tmp_vme_output<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_read_wb + null + data_port( + OB_CACHE_TYPE, + OB_READ, + OB_CONTROL_0, + BIND_IDX_VME_OUTPUT, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 1 + rlen ob_read_wb_len_vme_intra + {align1}; + + /* DW4 */ + add (1) pak_object4_ud<1>:ud mb_xy<0,1,0>:uw MFC_AVC_PAK_OBJECT_INTRA_DW4 {align1} ; + add (1) mb_x<1>:ub mb_x<0,1,0>:ub 1:uw {align1}; + cmp.e.f0.0 (1) null<1>:uw width_in_mb<0,1,0>:uw mb_x<0,1,0>:ub {align1}; + (f0.0)mov (1) mb_x<1>:ub 0:uw {align1} ; + (f0.0)add (1) mb_y<1>:ub mb_y<0,1,0>:ub 1:uw {align1} ; + + /* DW6 */ + mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + (-f0.1)mov (1) pak_object6_ud<1>:ud MFC_AVC_PAK_OBJECT_INTRA_DW6 {align1} ; + cmp.e.f0.0 (1) null<1>:uw total_mbs<0,1,0>:uw 1:uw {align1}; + (-f0.0)mov (1) pak_object6_ud<1>:ud 0x0:ud {align1} ; + add (1) pak_object6_ud<1>:ud pak_object6_ud<0,1,0>:ud qp<0,1,0>:ub {align1} ; + + /* DW3 */ + and (1) pak_object3_ud<1>:ud ob_read_wb0.0<0,1,0>:ud 0xFFFF {align1} ; + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud MFC_AVC_PAK_OBJECT_INTRA_DW3 {align1} ; + + /* DW7 */ + mov (1) pak_object7_ud<1>:ud ob_read_wb0.4<0,1,0>:ud {align1} ; + + /* DW8 */ + mov (1) pak_object8_ud<1>:ud ob_read_wb0.8<0,1,0>:ud {align1} ; + + /* DW9 */ + and (1) pak_object9_ud<1>:ud ob_read_wb0.12<0,1,0>:ud 0xFC:ud {align1} ; + + mov (8) msg_reg0.0<1>:ud tmp_mfc_batchbuffer<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud pak_object_ud<8,8,1>:ud {align1} ; + mov (8) msg_reg2.0<1>:ud pak_object8_ud<8,8,1>:ud {align1} ; + + /* the new offset */ + add (1) tmp_vme_output.8<1>:ud tmp_vme_output.8<0,1,0>:ud 1:ud {align1} ; + +send (16) + msg_ind + ob_write_wb + null + data_port( + OB_CACHE_TYPE, + OB_WRITE, + OB_CONTROL_3, + BIND_IDX_MFC_BATCHBUFFER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 3 + rlen ob_write_wb_length + {align1}; + + /* the new offset */ + add (1) tmp_mfc_batchbuffer.8<1>:ud tmp_mfc_batchbuffer.8<0,1,0>:ud 4:ud {align1} ; + + add.z.f0.0 (1) total_mbs<1>:w total_mbs<0,1,0>:w -1:w {align1}; + (-f0.0)jmpi (1) __PAK_OBJECT_LOOP ; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6a new file mode 100644 index 000000000..fba9bd516 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6a @@ -0,0 +1,32 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_intra.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6b new file mode 100644 index 000000000..3222bd6c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g6b @@ -0,0 +1,66 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21340231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280021, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480021, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00600001, 0x20000022, 0x008d0120, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x00000041, 0x21084521, 0x000000b4, 0x000000b1 }, + { 0x00000040, 0x21084421, 0x00000108, 0x000000b0 }, + { 0x00800001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 }, + { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0000 }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e0000 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640c21, 0x0000020c, 0x000000fc }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080c21, 0x00000108, 0x00000001 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x061b0302 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 }, + { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffce }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00600001, 0x20000022, 0x008d0120, 0x00000000 }, + { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20a83dad, 0x000000a8, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x20200062, 0x00000000, 0x00000000 }, + { 0x00000001, 0x20240062, 0x00000000, 0x05000000 }, + { 0x05800031, 0x23001cdd, 0x00000000, 0x041b0002 }, + { 0x00600001, 0x20000022, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001cc0, 0x00000000, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7a new file mode 100644 index 000000000..fba9bd516 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7a @@ -0,0 +1,32 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_intra.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7b new file mode 100644 index 000000000..2bf1612e9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g7b @@ -0,0 +1,66 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21340231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280021, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480021, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00600001, 0x28000021, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x00000041, 0x21084521, 0x000000b4, 0x000000b1 }, + { 0x00000040, 0x21084421, 0x00000108, 0x000000b0 }, + { 0x00800001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23400061, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180000 }, + { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 }, + { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 }, + { 0x00010001, 0x20b00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20b12e31, 0x000000b1, 0x00010001 }, + { 0x00000001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580061, 0x02000000, 0x04000000 }, + { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 }, + { 0x00110001, 0x23580061, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 }, + { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e0000 }, + { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600021, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640c21, 0x0000020c, 0x000000fc }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080c21, 0x00000108, 0x00000001 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x060a0302 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 }, + { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffce }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e }, + { 0x00600001, 0x28000021, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00000040, 0x21280c21, 0x00000128, 0x00000001 }, + { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 }, + { 0x01000040, 0x20a83dad, 0x000000a8, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee }, + { 0x01000005, 0x20002d28, 0x000000ac, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240061, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca0, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9a new file mode 100644 index 000000000..22d2ce751 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9a @@ -0,0 +1,33 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + * Li Zhong + */ + +#include "mfc_batchbuffer.inc" +#include "mfc_batchbuffer_head.asm" +#include "mfc_batchbuffer_avc_intra.asm" +#include "mfc_batchbuffer_tail.asm" +#include "end_thread.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9b new file mode 100644 index 000000000..8f4d9167f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_avc_intra.g9b @@ -0,0 +1,66 @@ + { 0x00800001, 0x21000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21342288, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21280208, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21542288, 0x00000014, 0x00000000 }, + { 0x00000001, 0x21480208, 0x000000a4, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000ac, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000090 }, + { 0x00600001, 0x28000208, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180001 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00000040, 0x21280208, 0x06000128, 0x00000001 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000001 }, + { 0x01000040, 0x20aa1a68, 0x1e0000aa, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xffffff70 }, + { 0x00000041, 0x21081208, 0x220000b4, 0x000000b1 }, + { 0x00000040, 0x21080208, 0x22000108, 0x000000b0 }, + { 0x00800001, 0x23400608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23400608, 0x00000000, 0x71490009 }, + { 0x00000001, 0x23540608, 0x00000000, 0x000f000f }, + { 0x01000005, 0x20001241, 0x160000ac, 0x00020002 }, + { 0x00600001, 0x28000208, 0x008d0100, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180000 }, + { 0x00000040, 0x23501208, 0x060000b0, 0xffff0000 }, + { 0x00000040, 0x20b02288, 0x160000b0, 0x00010001 }, + { 0x01000010, 0x20001240, 0x220000b4, 0x000000b0 }, + { 0x00010001, 0x20b01688, 0x10000000, 0x00000000 }, + { 0x00010040, 0x20b12288, 0x160000b1, 0x00010001 }, + { 0x00000001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00110001, 0x23580609, 0x00000000, 0x04000000 }, + { 0x01000010, 0x20001240, 0x160000ae, 0x00010001 }, + { 0x00110001, 0x23580608, 0x00000000, 0x00000000 }, + { 0x00000040, 0x23580208, 0x22000358, 0x000000b6 }, + { 0x00000005, 0x234c0208, 0x0e000200, 0x0000ffff }, + { 0x00000040, 0x234c0208, 0x0600034c, 0x000e0000 }, + { 0x00000001, 0x235c0208, 0x00000204, 0x00000000 }, + { 0x00000001, 0x23600208, 0x00000208, 0x00000000 }, + { 0x00000005, 0x23640208, 0x0600020c, 0x000000fc }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0340, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0360, 0x00000000 }, + { 0x00000040, 0x21080208, 0x06000108, 0x00000001 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x060a0302 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000004 }, + { 0x01000040, 0x20ae1a68, 0x1e0000ae, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xfffffe70 }, + { 0x00010020, 0x34000001, 0x0e001400, 0x000000f0 }, + { 0x00600001, 0x28000208, 0x008d0120, 0x00000000 }, + { 0x0a800031, 0x22000a48, 0x06000800, 0x02180001 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00000040, 0x21280208, 0x06000128, 0x00000001 }, + { 0x00000040, 0x21480208, 0x06000148, 0x00000001 }, + { 0x01000040, 0x20a81a68, 0x1e0000a8, 0xffffffff }, + { 0x00110020, 0x34000000, 0x0e001400, 0xffffff70 }, + { 0x01000005, 0x20001240, 0x160000ac, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00600001, 0x28000208, 0x008d0140, 0x00000000 }, + { 0x00400001, 0x28200608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240608, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0002 }, + { 0x00600001, 0x28000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a00, 0x06000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_head.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_head.asm new file mode 100644 index 000000000..fe9744fee --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_head.asm @@ -0,0 +1,87 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +/* + * __START + */ +__START: + mov (16) tmp_reg0<1>:ud 0x0:ud {align1} ; + mov (16) tmp_reg2<1>:ud 0x0:ud {align1} ; + + mov (1) tmp_slice_header.20<1>:ub thread_id_ub {align1}; /* dispatch id */ + mov (1) tmp_slice_header.8<1>:ud head_offset<0,1,0>:ud {align1}; + mov (1) tmp_mfc_batchbuffer.20<1>:ub thread_id_ub {align1}; /* dispatch id */ + mov (1) tmp_mfc_batchbuffer.8<1>:ud batchbuffer_offset<0,1,0>:ud {align1}; + +__HEAD: + and.z.f0.0 (1) null<1>:uw flags<0,1,0>:uw FLAG_MASK_FIRST_OBJECT {align1}; + (f0.0)jmpi (1) __PAK_OBJECT ; + +__HEAD_LOOP: + mov (8) msg_reg0.0<1>:ud tmp_slice_header<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_read_wb + null + data_port( + OB_CACHE_TYPE, + OB_READ, + OB_CONTROL_0, + BIND_IDX_MFC_SLICE_HEADER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 1 + rlen ob_read_wb_len_slice_header + {align1}; + + mov (8) msg_reg0.0<1>:ud tmp_mfc_batchbuffer<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud ob_read_wb0<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_write_wb + null + data_port( + OB_CACHE_TYPE, + OB_WRITE, + OB_CONTROL_0, + BIND_IDX_MFC_BATCHBUFFER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 2 + rlen ob_write_wb_length + {align1}; + + /* the new offset */ + add (1) tmp_slice_header.8<1>:ud tmp_slice_header.8<0,1,0>:ud 1:ud {align1} ; + add (1) tmp_mfc_batchbuffer.8<1>:ud tmp_mfc_batchbuffer.8<0,1,0>:ud 1:ud {align1} ; + + add.z.f0.0 (1) head_size<1>:w head_size<0,1,0>:w -1:w {align1}; + (-f0.0)jmpi (1) __HEAD_LOOP ; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.asm new file mode 100644 index 000000000..c34e93474 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.asm @@ -0,0 +1,296 @@ +/* + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ + +START: + mov (16) pak_object_reg0.0<1>:ud 0x0:ud {align1}; + mov (8) obw_m0.0<1>:ud 0x0:ud {align1}; + mov (8) mb_cur_msg.0<1>:ud 0x0:ud {align1}; + mov (16) mb_temp.0<1>:ud 0x0:ud {align1}; + mov (1) cur_mb_x<1>:uw mb_x<0,1,0>:ub {align1}; + mov (1) cur_mb_y<1>:uw mb_y<0,1,0>:ub {align1}; + mov (1) end_mb_x<1>:uw slice_end_x<0,1,0>:ub {align1}; + mov (1) end_mb_y<1>:uw slice_end_y<0,1,0>:ub {align1}; + mov (1) end_loop_count<1>:uw total_mbs<0,1,0>:uw {align1}; + mov (1) vme_len<1>:ud 2:ud {align1}; + and.z.f0.0 (1) null:uw mb_flag<0,1,0>:ub INTRA_SLICE:uw {align1}; + (f0.0) mov (1) vme_len<1>:ud 24:ud {align1}; + + mov (1) obw_m0.8<1>:UD buffer_offset<0,1,0>:ud {align1}; + mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + + mul (1) mb_cur_msg.8<1>:UD width_in_mbs<0,1,0>:UW cur_mb_y<0,1,0>:UW {align1}; + add (1) mb_cur_msg.8<1>:UD mb_cur_msg.8<0,1,0>:UD cur_mb_x<0,1,0>:uw {align1}; + mul (1) mb_cur_msg.8<1>:UD mb_cur_msg.8<0,1,0>:UD vme_len<0,1,0>:UD {align1}; + mov (1) mb_cur_msg.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + mov (1) pak_object0_ud<1>:ud MFC_AVC_PAK_OBJECT_DW0:ud {align1}; + mov (1) pak_object5_ud<1>:ud MFC_AVC_PAK_OBJECT_DW5:ud {align1}; + mov (1) pak_object10_ud<1>:ud MFC_AVC_PAK_OBJECT_DW10:ud {align1}; + mov (1) pak_object6_ud<1>:ub qp_flag<0,1,0>:ub {align1}; + +pak_object_loop: + mov (8) mb_msg0.0<1>:ud mb_cur_msg.0<8,8,1>:ud {align1}; + mov (1) pak_object4_ud<1>:ud MFC_AVC_PAK_OBJECT_DW4:ud {align1}; + mov (1) tmp_reg0.0<1>:ub cur_mb_x<0,1,0>:ub {align1}; + mov (1) tmp_reg0.1<1>:ub cur_mb_y<0,1,0>:ub {align1}; + mov (1) pak_object4_ud<1>:uw tmp_reg0.0<0,1,0>:uw {align1}; + /* pak_object6_ud */ + mov (1) pak_object_reg0.26<1>:uw 0x0:uw {align1}; + + cmp.e.f0.0 (1) null:uw cur_mb_x<0,1,0>:uw end_mb_x<0,1,0>:uw {align1}; + (-f0.0) jmpi (1) start_mb_flag; + cmp.e.f0.0 (1) null:uw cur_mb_y<0,1,0>:uw end_mb_y<0,1,0>:uw {align1}; + (f0.0) mov (1) pak_object_reg0.26<1>:uw MFC_AVC_PAK_LAST_MB:uw {align1}; +start_mb_flag: + and.z.f0.0 (1) null:uw mb_flag<0,1,0>:ub INTRA_SLICE:uw {align1}; + (f0.0) jmpi (1) inter_frame_start; + +/* bind index 0, read 2 oword (32bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + null + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + MV_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + jmpi (1) intra_pak_command; + +nop; +nop; +inter_frame_start: +/* bind index 0, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + null + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + MV_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) jmpi (1) intra_pak_command; + +/* MV len and MV mode */ + and (1) pak_object3_ud<1>:ud mb_inter_wb.0<0,1,0>:ud MFC_AVC_INTER_MASK_DW3:ud {align1}; + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud MFC_AVC_PAK_CBP:ud {align1}; + and (1) tmp_reg0.0<1>:uw mb_inter_wb.0<0,1,0>:uw INTER_MASK:uw {align1}; + mov (1) pak_object1_ud<1>:ud 32:ud {align1}; + cmp.e.f0.0 (1) null:uw tmp_reg0.0<0,1,0>:uw INTER_8X8MODE:uw {align1}; + (-f0.0) add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud INTER_MV8:ud {align1}; + (-f0.0) jmpi (1) inter_mv_check; + and.nz.f0.0 (1) null:ud mb_inter_wb.4<0,1,0>:uw SUBSHAPE_MASK:uw {align1}; + (f0.0) mov (1) pak_object1_ud<1>:ud 128:ud {align1}; + (f0.0) add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud INTER_MV32:ud {align1}; + (f0.0) jmpi (1) mv_check_end; + + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud INTER_MV8:ud {align1}; + +inter_mv_check: + and (1) tmp_reg0.0<1>:uw mb_inter_wb.0<0,1,0>:uw INTER_MASK:uw {align1}; + cmp.e.f0.0 (1) null:uw tmp_reg0.0<0,1,0>:uw INTER_16X16MODE:uw {align1}; + (f0.0) jmpi (1) mv_check_end; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 0, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + null + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + MV_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ + + mov (2) mb_mv0.8<1>:ud mb_mv1.0<2,2,1>:ud {align1}; + mov (2) mb_mv0.16<1>:ud mb_mv2.0<2,2,1>:ud {align1}; + mov (2) mb_mv0.24<1>:ud mb_mv3.0<2,2,1>:ud {align1}; + + mov (8) msg_reg0.0<1>:ud mb_msg0.0<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud mb_mv0.0<8,8,1>:ud {align1} ; +/* Write MV for MB A */ +/* bind index 0, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + MV_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +mv_check_end: + +/* ref list */ + mov (1) pak_object8_ud<1>:ud fwd_ref<0,1,0>:ud {align1}; + mov (1) pak_object9_ud<1>:ud bwd_ref<0,1,0>:ud {align1}; +/* inter_mode. pak_object7_ud */ + mov (1) pak_object7_ud<1>:ud 0x0:ud {align1}; + mov (1) pak_object_reg0.28<1>:ub mb_inter_wb.5<0,1,0>:ub {align1}; + mov (1) pak_object_reg0.29<1>:ub mb_inter_wb.6<0,1,0>:ub {align1}; + +/* mv start address */ + add (1) tmp_reg0.4<1>:ud mb_cur_msg.8<0,1,0>:ud 3:ud {align1}; + mul (1) pak_object2_ud<1>:ud tmp_reg0.4<0,1,0>:ud 16:ud {align1}; + + jmpi (1) write_pak_command; + +intra_pak_command: + /* object 1/2 is set to zero */ + mov (2) pak_object1_ud<1>:ud 0x0:ud {align1}; + /* object 7/8 intra mode */ + mov (1) pak_object7_ud<1>:ud mb_intra_wb.4<0,1,0>:ud {align1}; + mov (1) pak_object8_ud<1>:ud mb_intra_wb.8<0,1,0>:ud {align1}; + /* object 9 Intra structure */ + mov (1) pak_object9_ud<1>:ud 0x0:ud {align1}; + mov (1) pak_object9_ud<1>:ub mb_intra_wb.12<0,1,0>:ub {align1}; + + and (1) pak_object3_ud<1>:ud mb_intra_wb.0<0,1,0>:ud MFC_AVC_INTRA_MASK_DW3:ud {align1}; + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud MFC_AVC_INTRA_FLAG + MFC_AVC_PAK_CBP:ud {align1}; + + mov (1) tmp_reg0.0<1>:ud 0:ud {align1}; + mov (1) tmp_reg0.1<1>:ub mb_intra_wb.2<0,1,0>:ub {align1}; + and (1) tmp_reg0.0<1>:uw tmp_reg0.0<0,1,0>:uw AVC_INTRA_MASK:uw {align1}; + add (1) pak_object3_ud<1>:ud pak_object3_ud<0,1,0>:ud tmp_reg0.0<0,1,0>:ud {align1}; + +/* Write the pak command into the batchbuffer */ +write_pak_command: + mov (8) msg_reg0.0<1>:ud obw_m0.0<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud pak_object_reg0.0<8,8,1>:ud {align1} ; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + MFC_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + add (1) msg_reg0.8<1>:ud msg_reg0.8<0,1,0>:ud 2:ud {align1}; + mov (8) msg_reg1.0<1>:ud pak_object_reg1.0<8,8,1>:ud {align1}; + +/* bind index 3, write 1 oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + MFC_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +/* Check the next mb */ +add (1) cur_loop_count<1>:uw cur_loop_count<0,1,0>:uw 1:uw {align1}; +cmp.e.f0.0 (1) null:uw cur_loop_count<0,1,0>:uw end_loop_count<0,1,0>:uw {align1}; +(f0.0) jmpi (1) pak_loop_end; +/* the buffer offset for next block */ +add (1) obw_m0.8<1>:ud obw_m0.8<0,1,0>:ud 3:uw {align1}; +add (1) mb_cur_msg.8<1>:ud mb_cur_msg.8<0,1,0>:ud vme_len<0,1,0>:ud {align1}; +add (1) cur_mb_x<1>:uw cur_mb_x<0,1,0>:uw 1:uw {align1}; +/* Check whether it is already equal to width in mbs */ +cmp.e.f0.0 (1) null:uw cur_mb_x<0,1,0>:uw width_in_mbs<0,1,0>:uw {align1}; +(f0.0) add (1) cur_mb_y<1>:uw cur_mb_y<0,1,0>:uw 1:uw {align1}; +(f0.0) mov (1) cur_mb_x<1>:uw 0:uw {align1}; + +/* continue the pak command for next mb */ +jmpi (1) pak_object_loop; +nop; +nop; +pak_loop_end: +/* Issue message fence so that the previous write message is committed */ +send (16) + msg_ind + mb_wb.0<1>:ud + null + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + MFC_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (1) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75a new file mode 100644 index 000000000..4a9675487 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75a @@ -0,0 +1,29 @@ +/* + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ + +#include "mfc_batchbuffer_hsw.inc" +#include "mfc_batchbuffer_hsw.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75b new file mode 100644 index 000000000..2f42643f2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.g75b @@ -0,0 +1,105 @@ + { 0x00800001, 0x23400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x21e00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x2ac00229, 0x000000a8, 0x00000000 }, + { 0x00000001, 0x2ac20229, 0x000000a9, 0x00000000 }, + { 0x00000001, 0x2ae00229, 0x000000b0, 0x00000000 }, + { 0x00000001, 0x2ae20229, 0x000000b1, 0x00000000 }, + { 0x00000001, 0x2ae40129, 0x000000ac, 0x00000000 }, + { 0x00000001, 0x2ae80061, 0x00000000, 0x00000002 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x2ae80061, 0x00000000, 0x00000018 }, + { 0x00000001, 0x21e80021, 0x000000a0, 0x00000000 }, + { 0x00000001, 0x21f40231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x2b082521, 0x000000aa, 0x00000ac2 }, + { 0x00000040, 0x2b082421, 0x00000b08, 0x00000ac0 }, + { 0x00000041, 0x2b080421, 0x00000b08, 0x00000ae8 }, + { 0x00000001, 0x2b140231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x23400061, 0x00000000, 0x7149000a }, + { 0x00000001, 0x23540061, 0x00000000, 0x000f000f }, + { 0x00000001, 0x23680061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23580231, 0x000000a6, 0x00000000 }, + { 0x00600001, 0x2b400021, 0x008d0b00, 0x00000000 }, + { 0x00000001, 0x23500061, 0x00000000, 0xffff0000 }, + { 0x00000001, 0x21000231, 0x00000ac0, 0x00000000 }, + { 0x00000001, 0x21010231, 0x00000ac2, 0x00000000 }, + { 0x00000001, 0x23500129, 0x00000100, 0x00000000 }, + { 0x00000001, 0x235a0169, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20002528, 0x00000ac0, 0x00000ae0 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x01000010, 0x20002528, 0x00000ac2, 0x00000ae2 }, + { 0x00010001, 0x235a0169, 0x00000000, 0x04000400 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02180200 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000240 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280300 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000001f0 }, + { 0x00000005, 0x234c0c21, 0x00000b80, 0x1f00ffff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e0000 }, + { 0x00000005, 0x21002d29, 0x00000b80, 0x00030003 }, + { 0x00000001, 0x23440061, 0x00000000, 0x00000020 }, + { 0x01000010, 0x20002d28, 0x00000100, 0x00030003 }, + { 0x00110040, 0x234c0c21, 0x0000034c, 0x00400000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000050 }, + { 0x02000005, 0x20002d20, 0x00000b84, 0xff00ff00 }, + { 0x00010001, 0x23440061, 0x00000000, 0x00000080 }, + { 0x00010040, 0x234c0c21, 0x0000034c, 0x00600000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x00400000 }, + { 0x00000005, 0x21002d29, 0x00000b80, 0x00030003 }, + { 0x01000010, 0x20002d28, 0x00000100, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480400 }, + { 0x00200001, 0x2ba80021, 0x00450bc0, 0x00000000 }, + { 0x00200001, 0x2bb00021, 0x00450be0, 0x00000000 }, + { 0x00200001, 0x2bb80021, 0x00450c00, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0b40, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0ba0, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0200 }, + { 0x00000001, 0x23600021, 0x000000b4, 0x00000000 }, + { 0x00000001, 0x23640021, 0x000000b8, 0x00000000 }, + { 0x00000001, 0x235c0061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x235c0231, 0x00000b85, 0x00000000 }, + { 0x00000001, 0x235d0231, 0x00000b86, 0x00000000 }, + { 0x00000040, 0x21040c21, 0x00000b08, 0x00000003 }, + { 0x00000041, 0x23480c21, 0x00000104, 0x00000010 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000b0 }, + { 0x00200001, 0x23440061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x235c0021, 0x00000b64, 0x00000000 }, + { 0x00000001, 0x23600021, 0x00000b68, 0x00000000 }, + { 0x00000001, 0x23640061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23640231, 0x00000b6c, 0x00000000 }, + { 0x00000005, 0x234c0c21, 0x00000b60, 0x0000c0ff }, + { 0x00000040, 0x234c0c21, 0x0000034c, 0x000e2000 }, + { 0x00000001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21010231, 0x00000b62, 0x00000000 }, + { 0x00000005, 0x21002d29, 0x00000100, 0x1f001f00 }, + { 0x00000040, 0x234c0421, 0x0000034c, 0x00000100 }, + { 0x00600001, 0x28000021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0340, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0202 }, + { 0x00000040, 0x28080c21, 0x00000808, 0x00000002 }, + { 0x00600001, 0x28200021, 0x008d0360, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0002 }, + { 0x00000040, 0x2ac42d29, 0x00000ac4, 0x00010001 }, + { 0x01000010, 0x20002528, 0x00000ac4, 0x00000ae4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000090 }, + { 0x00000040, 0x21e82c21, 0x000001e8, 0x00030003 }, + { 0x00000040, 0x2b080421, 0x00000b08, 0x00000ae8 }, + { 0x00000040, 0x2ac02d29, 0x00000ac0, 0x00010001 }, + { 0x01000010, 0x20002528, 0x00000ac0, 0x000000aa }, + { 0x00010040, 0x2ac22d29, 0x00000ac2, 0x00010001 }, + { 0x00010001, 0x2ac00169, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0xfffffb30 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000800, 0x0219e002 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07000031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.inc new file mode 100644 index 000000000..588006e9a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_hsw.inc @@ -0,0 +1,195 @@ +/* + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + */ + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r7 reserved + * r8~r15 temporary registers + * r16 write back of Oword Block Write + */ + +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +define(`inline_reg0', `r5') +define(`buffer_offset', `inline_reg0.0') /* :ud, in units of Owords */ +/* :ub, + * bit0 indicates the frame type. 1 is the I-frame. 0 is P-B frame + */ +define(`mb_flag', `inline_reg0.4') +define(`qp_flag', `inline_reg0.6') /* :ub */ + +define(`mb_x', `inline_reg0.8') /* :ub, */ +define(`mb_y', `inline_reg0.9') /* :ub, */ +define(`mb_xy', `inline_reg0.8') /* :uw, */ +/* :uw, the picture width in macroblocks */ +define(`width_in_mbs', `inline_reg0.10') +/* :w, the number of macroblock commands being processed by the kernel */ +define(`total_mbs', `inline_reg0.12') +/* ub, the mb x/y of the last mb in slice */ +define(`slice_end_x', `inline_reg0.16') +define(`slice_end_y', `inline_reg0.17') + +/* :ud the forward reference picture list */ +define(`fwd_ref', `inline_reg0.20') +/* :ud the backward reference picture list */ +define(`bwd_ref', `inline_reg0.24') + +/* + * GRF 8~15 -- temporary registers + */ +define(`tmp_reg0', `r8') +define(`tmp_reg1', `r9') +define(`tmp_reg2', `r10') +define(`tmp_reg3', `r11') +define(`tmp_reg4', `r12') +define(`tmp_reg5', `r13') +define(`tmp_reg6', `r14') +define(`tmp_reg7', `r15') + +define(`obw_m0', `tmp_reg7') + +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + +/* + * GRF 26~27 + */ +define(`pak_object_reg0', `r26') +define(`pak_object0_ud', `r26.0') +define(`pak_object1_ud', `r26.4') +define(`pak_object2_ud', `r26.8') +define(`pak_object3_ud', `r26.12') +define(`pak_object4_ud', `r26.16') +define(`pak_object5_ud', `r26.20') +define(`pak_object6_ud', `r26.24') +define(`pak_object7_ud', `r26.28') + +define(`pak_object_reg1', `r27') +define(`pak_object8_ud', `r27.0') +define(`pak_object9_ud', `r27.4') +define(`pak_object10_ud', `r27.8') +define(`pak_object11_ud', `r27.12') + +/* + * Message Payload registers + */ +define(`msg_ind', `64') +define(`msg_reg0', `g64') +define(`msg_reg1', `g65') +define(`msg_reg2', `g66') +define(`msg_reg3', `g67') +define(`msg_reg4', `g68') +define(`msg_reg5', `g69') +define(`msg_reg6', `g70') +define(`msg_reg7', `g71') +define(`msg_reg8', `g72') + +define(`MV_BIND_IDX', `0') +define(`MFC_BIND_IDX', `2') + +define(`ts_msg_ind', `112') +define(`ts_msg_reg0', `r112') + + +define(`MFC_AVC_PAK_OBJECT_DW0', `0x7149000a') +define(`MFC_AVC_PAK_OBJECT_DW4', `0xFFFF0000') /* CBP for Y */ +define(`MFC_AVC_PAK_OBJECT_DW5', `0x000F000F') +define(`MFC_AVC_PAK_OBJECT_DW10', `0x0000000') + +define(`OBR_MESSAGE_TYPE', `0') +define(`OBR_CACHE_TYPE', `10') + +define(`OBR_MESSAGE_FENCE', `7') +define(`OBR_MF_NOCOMMIT', `0') +define(`OBR_MF_COMMIT', `0x20') + +define(`OBR_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBR_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBR_CONTROL_2', `2') /* 2 OWords */ +define(`OBR_CONTROL_4', `3') /* 4 OWords */ +define(`OBR_CONTROL_8', `4') /* 8 OWords */ + +define(`OBR_HEADER_PRESENT', `1') +define(`OBR_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + +define(`OBW_CACHE_TYPE', `10') + + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_4', `3') /* 4 OWords */ +define(`OBW_CONTROL_8', `4') /* 8 OWords */ +define(`OBW_HEADER_PRESENT', `1') + +define(`INTER_MASK', `0x03') +define(`INTER_16X16MODE', `0x0') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') +define(`INTER_8X8MODE', `0x03') +define(`SUBSHAPE_MASK', `0xFF00') + +define(`mb_ind', `90') +define(`mb_msg0', `r90') +define(`mb_wb', `r91') +define(`mb_intra_wb', `r91') +define(`mb_inter_wb', `r92') +define(`mb_mv0', `r93') +define(`mb_mv1', `r94') +define(`mb_mv2', `r95') +define(`mb_mv3', `r96') + +define(`mb_temp', `r86') +define(`cur_mb_x', `mb_temp.0') /* :uw, */ +define(`cur_mb_y', `mb_temp.2') /* :uw, */ +define(`cur_loop_count', `mb_temp.4') /* :uw, */ +define(`mb_end', `r87') +define(`end_mb_x', `mb_end.0') /* :uw, */ +define(`end_mb_y', `mb_end.2') /* :uw, */ +define(`end_loop_count', `mb_end.4') /* :uw, */ +/* :ud the length of VME predict result for every mb. Units in owords */ +define(`vme_len', `mb_end.8') +define(`mb_cur_msg', `r88') + +define(`INTRA_SLICE', `0x0001') +define(`MFC_AVC_PAK_LAST_MB', `0x0400') + +define(`MFC_AVC_INTER_MASK_DW3', `0x1F00FFFF') +define(`MFC_AVC_INTRA_MASK_DW3', `0x0000C0FF') +define(`INTER_MV8', `0x00400000') +define(`INTER_MV32', `0x00600000') +define(`MFC_AVC_PAK_CBP', `0x000E0000') +define(`MFC_AVC_INTRA_FLAG', `0x00002000') +define(`AVC_INTRA_MASK', `0x1F00') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_tail.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_tail.asm new file mode 100644 index 000000000..155bbdb7b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/utils/mfc_batchbuffer_tail.asm @@ -0,0 +1,100 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +__TAIL: + (f0.1)jmpi (1) __EXIT ; + +__TAIL_LOOP: + mov (8) msg_reg0.0<1>:ud tmp_slice_header<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_read_wb + null + data_port( + OB_CACHE_TYPE, + OB_READ, + OB_CONTROL_0, + BIND_IDX_MFC_SLICE_HEADER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 1 + rlen ob_read_wb_len_slice_header + {align1}; + + mov (8) msg_reg0.0<1>:ud tmp_mfc_batchbuffer<8,8,1>:ud {align1} ; + mov (8) msg_reg1.0<1>:ud ob_read_wb0<8,8,1>:ud {align1} ; + +send (16) + msg_ind + ob_write_wb + null + data_port( + OB_CACHE_TYPE, + OB_WRITE, + OB_CONTROL_0, + BIND_IDX_MFC_BATCHBUFFER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 2 + rlen ob_write_wb_length + {align1}; + + /* the new offset */ + add (1) tmp_slice_header.8<1>:ud tmp_slice_header.8<0,1,0>:ud 1:ud {align1} ; + add (1) tmp_mfc_batchbuffer.8<1>:ud tmp_mfc_batchbuffer.8<0,1,0>:ud 1:ud {align1} ; + + add.z.f0.0 (1) tail_size<1>:w tail_size<0,1,0>:w -1:w {align1}; + (-f0.0)jmpi (1) __TAIL_LOOP ; + + +__DONE: + + and.z.f0.0 (1) null<1>:uw flags<0,1,0>:uw FLAG_MASK_LAST_SLICE {align1}; + (f0.0)jmpi (1) __EXIT ; + +/* bind index 5, write 1 oword, msg type: 8(OWord Block Write) */ + mov (8) msg_reg0.0<1>:ud tmp_mfc_batchbuffer<8,8,1>:ud {align1} ; + mov (4) msg_reg1.0<1>:ud 0x0:ud {align1} ; + mov (1) msg_reg1.4<1>:ud MI_BATCH_BUFFER_END {align1} ; + +send (16) + msg_ind + ob_write_wb + null + data_port( + OB_CACHE_TYPE, + OB_WRITE, + OB_CONTROL_0, + BIND_IDX_MFC_BATCHBUFFER, + OB_WRITE_COMMIT_CATEGORY, + OB_HEADER_PRESENT + ) + mlen 2 + rlen ob_write_wb_length + {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.am new file mode 100644 index 000000000..83d337aa0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.am @@ -0,0 +1,118 @@ +VME_CORE = batchbuffer.asm intra_frame.asm inter_frame.asm +VME7_CORE = batchbuffer.asm intra_frame_ivb.asm inter_frame_ivb.asm inter_bframe_ivb.asm mpeg2_inter_ivb.asm +VME75_CORE = batchbuffer.asm intra_frame_haswell.asm inter_frame_haswell.asm inter_bframe_haswell.asm mpeg2_inter_haswell.asm +VME8_CORE = intra_frame_gen8.asm inter_frame_gen8.asm inter_bframe_gen8.asm mpeg2_inter_gen8.asm vp8_intra_frame_gen8.asm vp8_inter_frame_gen8.asm +VME9_CORE = $(VME8_CORE) + +INTEL_G6B = batchbuffer.g6b intra_frame.g6b inter_frame.g6b +INTEL_G6A = batchbuffer.g6a intra_frame.g6a inter_frame.g6a +INTEL_GEN6_INC = batchbuffer.inc vme.inc +INTEL_GEN6_ASM = $(INTEL_G6A:%.g6a=%.gen6.asm) + +INTEL_G7B = batchbuffer.g7b intra_frame.g7b inter_frame.g7b intra_frame_ivb.g7b inter_frame_ivb.g7b inter_bframe_ivb.g7b mpeg2_inter_ivb.g7b +INTEL_G7A = batchbuffer.g7a intra_frame.g7a inter_frame.g7a intra_frame_ivb.g7a inter_frame_ivb.g7a inter_bframe_ivb.g7a mpeg2_inter_ivb.g7a +INTEL_GEN7_INC = batchbuffer.inc vme.inc vme7_mpeg2.inc vme7.inc +INTEL_GEN7_ASM = $(INTEL_G7A:%.g7a=%.gen7.asm) + +INTEL_G75B = batchbuffer.g75b intra_frame_haswell.g75b inter_frame_haswell.g75b inter_bframe_haswell.g75b mpeg2_inter_haswell.g75b +INTEL_G75A = batchbuffer.g75a intra_frame_haswell.g75a inter_frame_haswell.g75a inter_bframe_haswell.g75a mpeg2_inter_haswell.g75a +INTEL_GEN75_INC = batchbuffer.inc vme75.inc vme75_mpeg2.inc +INTEL_GEN75_ASM = $(INTEL_G75A:%.g75a=%.gen75.asm) + + +INTEL_G8B = intra_frame_gen8.g8b inter_frame_gen8.g8b inter_bframe_gen8.g8b mpeg2_inter_gen8.g8b vp8_intra_frame_gen8.g8b vp8_inter_frame_gen8.g8b +INTEL_G8A = intra_frame_gen8.g8a inter_frame_gen8.g8a inter_bframe_gen8.g8a mpeg2_inter_gen8.g8a vp8_intra_frame_gen8.g8a vp8_inter_frame_gen8.g8a +INTEL_GEN8_INC = vme8.inc vme75_mpeg2.inc +INTEL_GEN8_ASM = $(INTEL_G8A:%.g8a=%.gen8.asm) + + +INTEL_G9B = intra_frame_gen9.g9b inter_frame_gen9.g9b inter_bframe_gen9.g9b mpeg2_inter_gen9.g9b vp8_intra_frame_gen9.g9b vp8_inter_frame_gen9.g9b +INTEL_G9A = intra_frame_gen9.g9a inter_frame_gen9.g9a inter_bframe_gen9.g9a mpeg2_inter_gen9.g9a vp8_intra_frame_gen9.g9a vp8_inter_frame_gen9.g9a +INTEL_GEN9_INC = $(INTEL_GEN8_INC) +INTEL_GEN9_ASM = $(INTEL_G9A:%.g9a=%.gen9.asm) + + +TARGETS = +if HAVE_GEN4ASM +TARGETS += $(INTEL_G6B) +TARGETS += $(INTEL_G7B) +TARGETS += $(INTEL_G75B) +TARGETS += $(INTEL_G8B) +TARGETS += $(INTEL_G9B) +endif + +all-local: $(TARGETS) + +SUFFIXES = .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g8a .g8b .gen8.asm .g9a .g9b .gen9.asm + +if HAVE_GEN4ASM +$(INTEL_GEN6_ASM): $(VME_CORE) $(INTEL_GEN6_INC) +.g6a.gen6.asm: + $(AM_V_GEN)cpp -P -DDEV_SNB $< > _vme0.$@ && \ + m4 _vme0.$@ > $@ && \ + rm _vme0.$@ +.gen6.asm.g6b: + $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +$(INTEL_GEN7_ASM): $(VME7_CORE) $(INTEL_GEN7_INC) +.g7a.gen7.asm: + $(AM_V_GEN)cpp -P -DDEV_IVB $< > _vme0.$@ && \ + m4 _vme0.$@ > $@ && \ + rm _vme0.$@ +.gen7.asm.g7b: + $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< + + +$(INTEL_GEN75_ASM): $(VME75_CORE) $(INTEL_GEN75_INC) +.g75a.gen75.asm: + $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ + m4 _vme0.$@ > $@ && \ + rm _vme0.$@ +.gen75.asm.g75b: + $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + +$(INTEL_GEN8_ASM): $(VME8_CORE) $(INTEL_GEN8_INC) +.g8a.gen8.asm: + $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ + m4 _vme0.$@ > $@ && \ + rm _vme0.$@ +.gen8.asm.g8b: + $(AM_V_GEN)$(GEN4ASM) -g 8 -o $@ $< + +$(INTEL_GEN9_ASM): $(VME9_CORE) $(INTEL_GEN9_INC) +.g9a.gen9.asm: + $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ + m4 _vme0.$@ > $@ && \ + rm _vme0.$@ +.gen9.asm.g9b: + $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +endif + +CLEANFILES = $(INTEL_GEN6_ASM) $(INTEL_GEN7_ASM) $(INTEL_GEN75_ASM) $(INTEL_GEN8_ASM) $(INTEL_GEN9_ASM) + +EXTRA_DIST = \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G75A) \ + $(INTEL_G75B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G8A) \ + $(INTEL_G8B) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(INTEL_GEN6_INC) \ + $(INTEL_GEN75_INC) \ + $(INTEL_GEN7_INC) \ + $(INTEL_GEN8_INC) \ + $(INTEL_GEN9_INC) \ + $(VME75_CORE) \ + $(VME7_CORE) \ + $(VME8_CORE) \ + $(VME9_CORE) \ + $(VME_CORE) \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.in new file mode 100644 index 000000000..6ca9589aa --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/Makefile.in @@ -0,0 +1,550 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GEN4ASM_TRUE@am__append_1 = $(INTEL_G6B) $(INTEL_G7B) \ +@HAVE_GEN4ASM_TRUE@ $(INTEL_G75B) $(INTEL_G8B) $(INTEL_G9B) +subdir = src/shaders/vme +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +VME_CORE = batchbuffer.asm intra_frame.asm inter_frame.asm +VME7_CORE = batchbuffer.asm intra_frame_ivb.asm inter_frame_ivb.asm inter_bframe_ivb.asm mpeg2_inter_ivb.asm +VME75_CORE = batchbuffer.asm intra_frame_haswell.asm inter_frame_haswell.asm inter_bframe_haswell.asm mpeg2_inter_haswell.asm +VME8_CORE = intra_frame_gen8.asm inter_frame_gen8.asm inter_bframe_gen8.asm mpeg2_inter_gen8.asm vp8_intra_frame_gen8.asm vp8_inter_frame_gen8.asm +VME9_CORE = $(VME8_CORE) +INTEL_G6B = batchbuffer.g6b intra_frame.g6b inter_frame.g6b +INTEL_G6A = batchbuffer.g6a intra_frame.g6a inter_frame.g6a +INTEL_GEN6_INC = batchbuffer.inc vme.inc +INTEL_GEN6_ASM = $(INTEL_G6A:%.g6a=%.gen6.asm) +INTEL_G7B = batchbuffer.g7b intra_frame.g7b inter_frame.g7b intra_frame_ivb.g7b inter_frame_ivb.g7b inter_bframe_ivb.g7b mpeg2_inter_ivb.g7b +INTEL_G7A = batchbuffer.g7a intra_frame.g7a inter_frame.g7a intra_frame_ivb.g7a inter_frame_ivb.g7a inter_bframe_ivb.g7a mpeg2_inter_ivb.g7a +INTEL_GEN7_INC = batchbuffer.inc vme.inc vme7_mpeg2.inc vme7.inc +INTEL_GEN7_ASM = $(INTEL_G7A:%.g7a=%.gen7.asm) +INTEL_G75B = batchbuffer.g75b intra_frame_haswell.g75b inter_frame_haswell.g75b inter_bframe_haswell.g75b mpeg2_inter_haswell.g75b +INTEL_G75A = batchbuffer.g75a intra_frame_haswell.g75a inter_frame_haswell.g75a inter_bframe_haswell.g75a mpeg2_inter_haswell.g75a +INTEL_GEN75_INC = batchbuffer.inc vme75.inc vme75_mpeg2.inc +INTEL_GEN75_ASM = $(INTEL_G75A:%.g75a=%.gen75.asm) +INTEL_G8B = intra_frame_gen8.g8b inter_frame_gen8.g8b inter_bframe_gen8.g8b mpeg2_inter_gen8.g8b vp8_intra_frame_gen8.g8b vp8_inter_frame_gen8.g8b +INTEL_G8A = intra_frame_gen8.g8a inter_frame_gen8.g8a inter_bframe_gen8.g8a mpeg2_inter_gen8.g8a vp8_intra_frame_gen8.g8a vp8_inter_frame_gen8.g8a +INTEL_GEN8_INC = vme8.inc vme75_mpeg2.inc +INTEL_GEN8_ASM = $(INTEL_G8A:%.g8a=%.gen8.asm) +INTEL_G9B = intra_frame_gen9.g9b inter_frame_gen9.g9b inter_bframe_gen9.g9b mpeg2_inter_gen9.g9b vp8_intra_frame_gen9.g9b vp8_inter_frame_gen9.g9b +INTEL_G9A = intra_frame_gen9.g9a inter_frame_gen9.g9a inter_bframe_gen9.g9a mpeg2_inter_gen9.g9a vp8_intra_frame_gen9.g9a vp8_inter_frame_gen9.g9a +INTEL_GEN9_INC = $(INTEL_GEN8_INC) +INTEL_GEN9_ASM = $(INTEL_G9A:%.g9a=%.gen9.asm) +TARGETS = $(am__append_1) +SUFFIXES = .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g8a .g8b .gen8.asm .g9a .g9b .gen9.asm +CLEANFILES = $(INTEL_GEN6_ASM) $(INTEL_GEN7_ASM) $(INTEL_GEN75_ASM) $(INTEL_GEN8_ASM) $(INTEL_GEN9_ASM) +EXTRA_DIST = \ + $(INTEL_G6A) \ + $(INTEL_G6B) \ + $(INTEL_G75A) \ + $(INTEL_G75B) \ + $(INTEL_G7A) \ + $(INTEL_G7B) \ + $(INTEL_G8A) \ + $(INTEL_G8B) \ + $(INTEL_G9A) \ + $(INTEL_G9B) \ + $(INTEL_GEN6_INC) \ + $(INTEL_GEN75_INC) \ + $(INTEL_GEN7_INC) \ + $(INTEL_GEN8_INC) \ + $(INTEL_GEN9_INC) \ + $(VME75_CORE) \ + $(VME7_CORE) \ + $(VME8_CORE) \ + $(VME9_CORE) \ + $(VME_CORE) \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .g6a .g6b .g7a .g7b .gen6.asm .gen7.asm .g75a .g75b .gen75.asm .g8a .g8b .gen8.asm .g9a .g9b .gen9.asm +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/shaders/vme/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/shaders/vme/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am + + +all-local: $(TARGETS) + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN6_ASM): $(VME_CORE) $(INTEL_GEN6_INC) +@HAVE_GEN4ASM_TRUE@.g6a.gen6.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P -DDEV_SNB $< > _vme0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _vme0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _vme0.$@ +@HAVE_GEN4ASM_TRUE@.gen6.asm.g6b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 6 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN7_ASM): $(VME7_CORE) $(INTEL_GEN7_INC) +@HAVE_GEN4ASM_TRUE@.g7a.gen7.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P -DDEV_IVB $< > _vme0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _vme0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _vme0.$@ +@HAVE_GEN4ASM_TRUE@.gen7.asm.g7b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN75_ASM): $(VME75_CORE) $(INTEL_GEN75_INC) +@HAVE_GEN4ASM_TRUE@.g75a.gen75.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _vme0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _vme0.$@ +@HAVE_GEN4ASM_TRUE@.gen75.asm.g75b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 7.5 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN8_ASM): $(VME8_CORE) $(INTEL_GEN8_INC) +@HAVE_GEN4ASM_TRUE@.g8a.gen8.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _vme0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _vme0.$@ +@HAVE_GEN4ASM_TRUE@.gen8.asm.g8b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 8 -o $@ $< + +@HAVE_GEN4ASM_TRUE@$(INTEL_GEN9_ASM): $(VME9_CORE) $(INTEL_GEN9_INC) +@HAVE_GEN4ASM_TRUE@.g9a.gen9.asm: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)cpp -P $< > _vme0.$@ && \ +@HAVE_GEN4ASM_TRUE@ m4 _vme0.$@ > $@ && \ +@HAVE_GEN4ASM_TRUE@ rm _vme0.$@ +@HAVE_GEN4ASM_TRUE@.gen9.asm.g9b: +@HAVE_GEN4ASM_TRUE@ $(AM_V_GEN)$(GEN4ASM) -g 9 -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.asm new file mode 100644 index 000000000..b8ba3b20b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.asm @@ -0,0 +1,133 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +/* + * __START + */ +__START: + mov (16) tmp_reg0<1>:ud 0x0:ud {align1} ; + mov (16) tmp_reg2<1>:ud 0x0:ud {align1} ; + mov (1) obw_header.20<1>:ub thread_id_ub {align1}; /* dispatch id */ + + mov (8) media_object_ud<1>:ud 0x0:ud {align1} ; + mov (1) media_object0_ud<1>:ud CMD_MEDIA_OBJECT {align1} ; + mov (1) media_object1_ud<1>:ud mtype_ub<0,1,0>ub {align1}; + mov (1) media_object6_width<1>:uw width_in_mb<0,1,0>:uw {align1}; + mov (1) media_object7_flag<1>:uw transform_8x8_ub<0,1,0>ub {align1}; + mov (1) media_object7_num_mbs<1>:uw NUM_MACROBLOCKS_PER_COMMAND:uw {align1} ; + + mov (1) width_per_row<1>:ud width_in_mb<0,1,0>:uw {align1} ; + and.z.f0.1 (1) remainder_cmds<1>:ud total_mbs<0,1,0>:ud (NUM_MACROBLOCKS_PER_COMMAND - 1):ud {align1} ; + and.z.f0.0 (1) total_mbs<1>:ud total_mbs<0,1,0>:ud -NUM_MACROBLOCKS_PER_COMMAND:ud {align1} ; + + (f0.0)jmpi (1) __REMAINDER ; + +__CMD_LOOP: + mov (8) msg_reg0.0<1>:ud obw_header<8,8,1>:ud {align1}; + mov (8) msg_reg1<1>:ud media_object_ud<8,8,1>:ud {align1}; + +/* bind index 5, write 2 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + /* (x, y) of the first macroblock */ + add (1) count<1>:ud count<0,1,0>:ud NUM_MACROBLOCKS_PER_COMMAND:uw {align1} ; + math (1) quotient<1>:ud count<0,1,0>:ud width_per_row<0,1,0>:ud intdivmod {align1} ; + shl (1) quotient<1>:ud quotient<0,1,0>:ud 8:uw {align1} ; + add (1) quotient<1>:ud quotient<0,1,0>:ud remainder<0,1,0>:ud {align1} ; + mov (1) media_object6_xy<1>:uw quotient<0,1,0>:uw {align1} ; + + /* the new offset */ + add (1) obw_header.8<1>:ud obw_header.8<0,1,0>:ud 2:uw {align1} ; + + add.z.f0.0 (1) total_mbs<1>:w total_mbs<0,1,0>:w -NUM_MACROBLOCKS_PER_COMMAND:w {align1} ; + (-f0.0)jmpi (1) __CMD_LOOP ; + +__REMAINDER: + (f0.1)jmpi (1) __DONE ; + + mov (1) media_object7_num_mbs<1>:uw remainder_cmds<0,1,0>:uw {align1} ; + mov (8) msg_reg0.0<1>:ud obw_header<8,8,1>:ud {align1}; + mov (8) msg_reg1<1>:ud media_object_ud<8,8,1>:ud {align1}; + +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + /* the new offset */ + add (1) obw_header.8<1>:ud obw_header.8<0,1,0>:ud 2:uw {align1} ; + +__DONE: + +/* bind index 5, write 1 oword, msg type: 8(OWord Block Write) */ + mov (8) msg_reg0.0<1>:ud obw_header<8,8,1>:ud {align1} ; + mov (4) msg_reg1.0<1>:ud 0x0:ud {align1} ; + mov (1) msg_reg1.4<1>:ud MI_BATCH_BUFFER_END {align1} ; + +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +__EXIT: + mov (8) msg_reg0<1>:ud r0<8,8,1>:ud {align1} ; + send (16) msg_ind acc0<1>ud null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT} ; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6a new file mode 100644 index 000000000..08ec2bc2d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6a @@ -0,0 +1,29 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "batchbuffer.inc" +#include "batchbuffer.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6b new file mode 100644 index 000000000..cd3e8cc93 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g6b @@ -0,0 +1,36 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21140231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22000061, 0x00000000, 0x71000006 }, + { 0x00000001, 0x22040221, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x221a0129, 0x000000a6, 0x00000000 }, + { 0x00000001, 0x221c0229, 0x000000a4, 0x00000000 }, + { 0x00000001, 0x221e0169, 0x00000000, 0x02000200 }, + { 0x00000001, 0x21280121, 0x000000a6, 0x00000000 }, + { 0x01000005, 0x21240c21, 0x020000a0, 0x000001ff }, + { 0x01000005, 0x20a00c21, 0x000000a0, 0xfffffe00 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x22401cdd, 0x00000000, 0x041b0205 }, + { 0x00000040, 0x21202c21, 0x00000120, 0x02000200 }, + { 0x0b000038, 0x21400421, 0x00000120, 0x00000128 }, + { 0x00000009, 0x21402c21, 0x00000140, 0x00080008 }, + { 0x00000040, 0x21400421, 0x00000140, 0x00000160 }, + { 0x00000001, 0x22180129, 0x00000140, 0x00000000 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x01000040, 0x20a03dad, 0x000000a0, 0xfe00fe00 }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffea }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000000a }, + { 0x00000001, 0x221e0129, 0x00000124, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x20200022, 0x008d0200, 0x00000000 }, + { 0x05800031, 0x22401cdd, 0x00000000, 0x041b0205 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 }, + { 0x00400001, 0x20200062, 0x00000000, 0x00000000 }, + { 0x00000001, 0x20240062, 0x00000000, 0x05000000 }, + { 0x05800031, 0x22401cdd, 0x00000000, 0x041b0005 }, + { 0x00600001, 0x20000022, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001cc0, 0x00000000, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75a new file mode 100644 index 000000000..9a4c31aa5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75a @@ -0,0 +1,2 @@ +#include "batchbuffer.inc" +#include "batchbuffer.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75b new file mode 100644 index 000000000..41b020384 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g75b @@ -0,0 +1,36 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21140231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22000061, 0x00000000, 0x71000006 }, + { 0x00000001, 0x22040221, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x221a0129, 0x000000a6, 0x00000000 }, + { 0x00000001, 0x221c0229, 0x000000a4, 0x00000000 }, + { 0x00000001, 0x221e0169, 0x00000000, 0x02000200 }, + { 0x00000001, 0x21280121, 0x000000a6, 0x00000000 }, + { 0x01000005, 0x21240c21, 0x020000a0, 0x000001ff }, + { 0x01000005, 0x20a00c21, 0x000000a0, 0xfffffe00 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000b0 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0205 }, + { 0x00000040, 0x21202c21, 0x00000120, 0x02000200 }, + { 0x0b000038, 0x21400421, 0x00000120, 0x00000128 }, + { 0x00000009, 0x21402c21, 0x00000140, 0x00080008 }, + { 0x00000040, 0x21400421, 0x00000140, 0x00000160 }, + { 0x00000001, 0x22180129, 0x00000140, 0x00000000 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x01000040, 0x20a03dad, 0x000000a0, 0xfe00fe00 }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffff50 }, + { 0x00010020, 0x34001c00, 0x02001400, 0x00000050 }, + { 0x00000001, 0x221e0129, 0x00000124, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0205 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00400001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240061, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0005 }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca0, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7a new file mode 100644 index 000000000..08ec2bc2d --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7a @@ -0,0 +1,29 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +#include "batchbuffer.inc" +#include "batchbuffer.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7b new file mode 100644 index 000000000..1bbbe0918 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.g7b @@ -0,0 +1,36 @@ + { 0x00800001, 0x21000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x21400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x21140231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x22000061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22000061, 0x00000000, 0x71000006 }, + { 0x00000001, 0x22040221, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x221a0129, 0x000000a6, 0x00000000 }, + { 0x00000001, 0x221c0229, 0x000000a4, 0x00000000 }, + { 0x00000001, 0x221e0169, 0x00000000, 0x02000200 }, + { 0x00000001, 0x21280121, 0x000000a6, 0x00000000 }, + { 0x01000005, 0x21240c21, 0x020000a0, 0x000001ff }, + { 0x01000005, 0x20a00c21, 0x000000a0, 0xfffffe00 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000016 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0205 }, + { 0x00000040, 0x21202c21, 0x00000120, 0x02000200 }, + { 0x0b000038, 0x21400421, 0x00000120, 0x00000128 }, + { 0x00000009, 0x21402c21, 0x00000140, 0x00080008 }, + { 0x00000040, 0x21400421, 0x00000140, 0x00000160 }, + { 0x00000001, 0x22180129, 0x00000140, 0x00000000 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x01000040, 0x20a03dad, 0x000000a0, 0xfe00fe00 }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffffea }, + { 0x00010020, 0x34001c00, 0x02001400, 0x0000000a }, + { 0x00000001, 0x221e0129, 0x00000124, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0205 }, + { 0x00000040, 0x21082c21, 0x00000108, 0x00020002 }, + { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 }, + { 0x00400001, 0x28200061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28240061, 0x00000000, 0x05000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0005 }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca0, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.inc new file mode 100644 index 000000000..5cb86ab95 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/batchbuffer.inc @@ -0,0 +1,184 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Xiang Haihao + */ + +define(`BIND_IDX_VME', `0') +define(`BIND_IDX_VME_REF0', `1') +define(`BIND_IDX_VME_REF1', `2') +define(`BIND_IDX_OUTPUT', `3') +define(`BIND_IDX_INEP', `4') +define(`BIND_IDX_VME_BATCHBUFFER', `5') + +#ifdef DEV_SNB + +define(`OBW_CACHE_TYPE', `5') + +#else + +define(`OBW_CACHE_TYPE', `10') + +#endif + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_BIND_IDX', `BIND_IDX_VME_BATCHBUFFER') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_3', `3') /* 4 OWords */ +define(`OBW_CONTROL_4', `4') /* 8 OWords */ + +#ifdef DEV_SNB + +define(`OBW_WRITE_COMMIT_CATEGORY', `1') /* write commit on Sandybrige */ + +#else + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + +#endif + +define(`OBW_HEADER_PRESENT', `1') + +define(`CMD_MEDIA_OBJECT', `0x71000006:UD') +define(`MI_BATCH_BUFFER_END', `0x05000000:UD') + +define(`NUM_MACROBLOCKS_PER_COMMAND', `512') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r7 reserved + * r8~r15 temporary registers + * r16 media object command + * r17 + * r18 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`total_mbs', `inline_reg0.0') /* the number of macroblocks in a picture */ +define(`transform_8x8_ub', `inline_reg0.4') /* transform_8x8 flag */ +define(`mtype_ub', `inline_reg0.5') /* 0: INTRA, 1: INTER */ +define(`width_in_mb', `inline_reg0.6') /* the picture width in macroblocks */ + +/* + * GRF 8~15 -- temporary registers + */ +define(`tmp_reg0', `r8') +define(`obw_header', `tmp_reg0') +define(`tmp_reg1', `r9') +define(`count', `tmp_reg1.0') +define(`remainder_cmds', `tmp_reg1.4') +define(`width_per_row', `tmp_reg1.8') +define(`tmp_reg2', `r10') +define(`quotient', `tmp_reg2') +define(`tmp_reg3', `r11') +define(`remainder', `tmp_reg3') +define(`tmp_reg4', `r12') +define(`tmp_reg5', `r13') +define(`tmp_reg6', `r14') +define(`tmp_reg7', `r15') + +/* + * GRF 16 + */ +define(`media_object_ud', `r16.0') +define(`media_object0_ud', `r16.0') +define(`media_object1_ud', `r16.4') +define(`media_object2_ud', `r16.8') +define(`media_object3_ud', `r16.12') +define(`media_object4_ud', `r16.16') +define(`media_object5_ud', `r16.20') +define(`media_object6_ud', `r16.24') +define(`media_object6_xy', `r16.24') +define(`media_object6_x', `r16.24') +define(`media_object6_y', `r16.25') +define(`media_object6_width', `r16.26') +define(`media_object7_ud', `r16.28') +define(`media_object7_flag', `r16.28') +define(`media_object7_num_mbs', `r16.30') + +/* + * GRF 18 write back for Oword Block Write message + */ + +#if DEV_SNB + +define(`obw_wb', `r18') +define(`obw_wb_length', `1') + +#else + +/* + * write commit is removed on Ivybridge + */ +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + +#endif + +/* + * Message Payload registers + */ +#if DEV_SNB + +define(`msg_ind', `0') +define(`msg_reg0', `m0') +define(`msg_reg1', `m1') +define(`msg_reg2', `m2') +define(`msg_reg3', `m3') +define(`msg_reg4', `m4') +define(`msg_reg5', `m5') +define(`msg_reg6', `m6') +define(`msg_reg7', `m7') +define(`msg_reg8', `m8') + +#else + +define(`msg_ind', `64') +define(`msg_reg0', `g64') +define(`msg_reg1', `g65') +define(`msg_reg2', `g66') +define(`msg_reg3', `g67') +define(`msg_reg4', `g68') +define(`msg_reg5', `g69') +define(`msg_reg6', `g70') +define(`msg_reg7', `g71') +define(`msg_reg8', `g72') + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.asm new file mode 100644 index 000000000..b37cd7f42 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.asm @@ -0,0 +1,891 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Authors: Zhao Yakui + */ +// Modual name: Inter_bframe_haswell.asm +// +// Make inter predition estimation for Inter frame for B-frame +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +mov (8) vme_m1.0<1>:ud 0:ud {align1}; +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (2) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (2) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK1:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.20<1>:w 0:w {align1}; +(f0.0) mov (1) mba_result.4<1>:ud mb_mv1.8<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mbb_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mba_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.22<1>:w 0:w {align1}; +(f0.0) mov (1) mba_result.8<1>:ud mb_mv1.12<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mbb_start; +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (2) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mba_result.20<1>:w 0:w {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (2) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (2) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.20<1>:w 0:w {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mb_mv2.16<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mbc_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbb_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.22<1>:w 0:w {align1}; +(f0.0) mov (1) mbb_result.8<1>:ud mb_mv2.20<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mbc_start; +mov (2) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbb_result.20<1>:w 0:w {align1}; +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (2) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mb_mv2.16<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) mov (1) mbc_result.8<1>:ud mb_mv2.20<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (2) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (2) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK3:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mb_mv3.24<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) mov (1) mbc_result.8<1>:ud mb_mv3.28<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (2) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (2) mbb_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbc_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbb_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mb_mvp_ref.0<1>:ud mba_result.4<2,2,1>:ud {align1}; +(-f0.0) mov (2) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* forward_MVP */ +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mvp_backward; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + + +mvp_backward: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.22<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.22<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.22<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.8<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.4<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.8<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.4<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.10<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.6<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (4) mb_ref_win.0<1>:w mb_mvp_ref.0<4,4,1>:w 2:w {align1}; +add (4) mb_ref_win.8<1>:w mb_ref_win.0<4,4,1>:w 3:w {align1}; +and (4) mb_ref_win.16<1>:uw mb_ref_win.8<4,4,1>:uw 0xFFFC:uw {align1}; +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; +/* m3 cost center */ +mov (8) vme_m3.0<1>:ud 0x0:ud {align1}; +mov (8) vme_msg_3<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* m4. skip center */ +mov (8) vme_msg_4<1>:ud 0x0:ud {align1}; + +/* m5 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_5<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; +/* Use the Luma mode */ +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +mov (1) vme_msg_5.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_6.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_6.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m7 */ + +mov (4) vme_msg_7.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_7.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * SIC VME message + */ +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m0 */ +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_DUAL_REFERENCE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW DREF_REGION_SIZE {align1}; +/* Dual Reference Width&Height,32x32 */ + +mov (1) vme_m0.0<1>:UD vme_m0.8<0,1,0>:UD {align1}; + +/* Reference = (x-8,y-8)-(x+8,y+8) */ +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W -8:W {align1}; +add (1) vme_m0.2<1>:W vme_m0.2<0,1,0>:W -8:W {align1}; + +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.4<1>:w vme_m0.4<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.6<1>:w vme_m0.6<0,1,0>:w 4:w {align1}; + +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.20<2,2,1>:w {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD DSTART_CENTER + DSEARCH_PATH_LEN:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + + +/* Setup the Cost center */ +/* currently four 8x8 share the same cost center */ +mov (4) vme_m3.0<2>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (4) vme_m3.4<2>:ud mb_mvp_ref.4<0,1,0>:ud {align1}; + +/* M4/M5 search path */ + +mov (1) vme_msg_4.0<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_4.16<1>:UD 0x0:UD {align1}; +mov (8) vme_msg_5.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_4.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_7.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + + /* 16x16 Source, 1/4 pixel, harr, BME ENABLE */ +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER + FBR_BME_ENABLE:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) tmp_reg0.0<1>:uw BI_WEIGHT {align1}; +mov (1) vme_m1.6<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; +mov (8) vme_msg_3.0<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +mb_pred_func: + mov (8) TEMP_VAR0.0<1>:ud 0:ud {align1}; + mov (1) TEMP_VAR0.0<1>:ub INPUT_ARG0.2<0,1,0>:ub {align1}; + and (1) TEMP_VAR0.4<1>:uw INPUT_ARG0.4<0,1,0>:uw INTER_MASK:uw {align1}; + /* INTER16x16 mode. The bit1-0 is the prediction mode */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<0,1,0>:uw INTER_16X16MODE:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + /* Check whether it is INTER8x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<0,1,0>:uw INTER_8X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_8; + + /* Check whether it is INTER16x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<0,1,0>:uw INTER_16X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_168; +mb_pred_func_816: + /* Block 0/2 uses the bit1-0. Block 1/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + and.z.f0.0 (1) null:uw TEMP_VAR0.8<0,1,0>:uw INTER_BLOCK1:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<0,1,0>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_168: + /* Block 0/1 uses the bit1-0. Block 2/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + cmp.l.f0.0 (1) null:uw TEMP_VAR0.8<0,1,0>:uw INTER_BLOCK2:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<0,1,0>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_8: + /* 8X8 mode. Every block uses two bits as the prediction mode. */ + mul (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw 2:uw {align1}; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw TEMP_VAR0.8<0,1,0>:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<0,1,0>:uw PRED_MASK {align1}; +end_mb_pred: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8a new file mode 100644 index 000000000..8aff32edb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "inter_bframe_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8b new file mode 100644 index 000000000..ca6614cbf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen8.g8b @@ -0,0 +1,423 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23800a88, 0x0e000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a00a88, 0x0e000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26000a88, 0x0e000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26200a88, 0x0e000800, 0x02190006 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000d60 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000210 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000001 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00001490 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2af01e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2af41e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2ae40208, 0x00000bc8, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2af21e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2af61e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2ae80208, 0x00000bcc, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00200001, 0x2af01e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2af41e68, 0x18000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000006c0 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00001230 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b101e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b141e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000bf0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b121e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b161e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b080208, 0x00000bf4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2b101e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b141e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000230 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000003c0 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000fe0 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000bf0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000002e0 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b321e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b361e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b280208, 0x00000bf4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000290 }, + { 0x00200001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000250 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000210 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000003 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000d80 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000c18, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b321e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b361e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b280208, 0x00000c1c, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02200010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00210001, 0x2b040208, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b240208, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b141248, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2b341248, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2ac00208, 0x00450ae4, 0x00000000 }, + { 0x00310001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000320 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000009d0 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000970 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af6, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae8, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b16, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b08, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b36, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b28, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac40208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae8, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b08, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b28, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000840 }, + { 0x00000001, 0x2ac41a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000aea, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b0a, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b2a, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000007e0 }, + { 0x00000001, 0x2ac61a68, 0x00000fe4, 0x00000000 }, + { 0x0040000c, 0x2a801a68, 0x1e690ac0, 0x00020002 }, + { 0x00400040, 0x2a881a68, 0x1e690a80, 0x00030003 }, + { 0x00400005, 0x2a901248, 0x16690a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x25800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200700 }, + { 0x00000001, 0x24561648, 0x10000000, 0x20202020 }, + { 0x00000001, 0x24400208, 0x00000448, 0x00000000 }, + { 0x00000040, 0x24401a68, 0x1e000440, 0xfff8fff8 }, + { 0x00000040, 0x24421a68, 0x1e000442, 0xfff8fff8 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x00040004 }, + { 0x00010040, 0x24441a68, 0x1e000444, 0x00040004 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00040004 }, + { 0x00010040, 0x24461a68, 0x1e000446, 0x00040004 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a94 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x00001212 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac4, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28880608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x288c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x0e000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00203000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x24662288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x00600001, 0x2f600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x2f602288, 0x00000fa2, 0x00000000 }, + { 0x00000005, 0x2f641248, 0x16000fa4, 0x00030003 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00000000 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000150 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000100 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x00000001, 0x2f681248, 0x00000fa8, 0x00000000 }, + { 0x01000005, 0x20001240, 0x16000f68, 0x00010001 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000d0 }, + { 0x00000008, 0x2f701248, 0x16000f60, 0x00020002 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x00000001, 0x2f681248, 0x00000fa8, 0x00000000 }, + { 0x05000010, 0x20001240, 0x16000f68, 0x00020002 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x00000008, 0x2f701248, 0x16000f60, 0x00020002 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00000041, 0x2f681248, 0x16000fa8, 0x00020002 }, + { 0x00000008, 0x2f701248, 0x12000f60, 0x00000f68 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9a new file mode 100644 index 000000000..8aff32edb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "inter_bframe_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9b new file mode 100644 index 000000000..26e077ae8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_gen9.g9b @@ -0,0 +1,423 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x23800a88, 0x06000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x23a00a88, 0x06000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x26000a88, 0x06000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x26200a88, 0x06000800, 0x02190006 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000d60 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000210 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000001 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00001490 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2af01e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2af41e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2ae40208, 0x00000bc8, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2af21e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2af61e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2ae80208, 0x00000bcc, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00200001, 0x2af01e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2af41e68, 0x18000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000006c0 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00001230 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b101e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b141e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000bf0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b121e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b161e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b080208, 0x00000bf4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2b101e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b141e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000230 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000003c0 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000fe0 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000bf0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000002e0 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b321e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b361e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b280208, 0x00000bf4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000290 }, + { 0x00200001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000250 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01200005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000210 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05200010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00000001, 0x2fa00208, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40208, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80608, 0x00000000, 0x00000003 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000d80 }, + { 0x00000001, 0x2aa01248, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00000000 }, + { 0x00010001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000c18, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x01000010, 0x20001240, 0x16000aa0, 0x00010001 }, + { 0x00010001, 0x2b321e48, 0x18000000, 0x00010001 }, + { 0x00010001, 0x2b361e68, 0x18000000, 0x00000000 }, + { 0x00010001, 0x2b280208, 0x00000c1c, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00200001, 0x2b301e48, 0x18000000, 0x00010001 }, + { 0x00200001, 0x2b341e68, 0x18000000, 0x00000000 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02200010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00210001, 0x2b040208, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b240208, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b141248, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2b341248, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2ac00208, 0x00450ae4, 0x00000000 }, + { 0x00310001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000320 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000009d0 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000970 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af6, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae8, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b16, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b08, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b36, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b28, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac40208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae8, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b08, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b28, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000840 }, + { 0x00000001, 0x2ac41a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000aea, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b0a, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b2a, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000007e0 }, + { 0x00000001, 0x2ac61a68, 0x00000fe4, 0x00000000 }, + { 0x0040000c, 0x2a801a68, 0x1e690ac0, 0x00020002 }, + { 0x00400040, 0x2a881a68, 0x1e690a80, 0x00030003 }, + { 0x00400005, 0x2a901248, 0x16690a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x25800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200700 }, + { 0x00000001, 0x24561648, 0x10000000, 0x20202020 }, + { 0x00000001, 0x24400208, 0x00000448, 0x00000000 }, + { 0x00000040, 0x24401a68, 0x1e000440, 0xfff8fff8 }, + { 0x00000040, 0x24421a68, 0x1e000442, 0xfff8fff8 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x00040004 }, + { 0x00010040, 0x24441a68, 0x1e000444, 0x00040004 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00040004 }, + { 0x00010040, 0x24461a68, 0x1e000446, 0x00040004 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a94 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x00001212 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac4, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28880608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x288c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x06000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00203000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x24662288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x00600001, 0x2f600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x2f602288, 0x00000fa2, 0x00000000 }, + { 0x00000005, 0x2f641248, 0x16000fa4, 0x00030003 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00000000 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000150 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000100 }, + { 0x01000010, 0x20001240, 0x16000f64, 0x00010001 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x00000001, 0x2f681248, 0x00000fa8, 0x00000000 }, + { 0x01000005, 0x20001240, 0x16000f68, 0x00010001 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000d0 }, + { 0x00000008, 0x2f701248, 0x16000f60, 0x00020002 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x00000001, 0x2f681248, 0x00000fa8, 0x00000000 }, + { 0x05000010, 0x20001240, 0x16000f68, 0x00020002 }, + { 0x00010005, 0x2fe41248, 0x16000f60, 0x00030003 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x00000008, 0x2f701248, 0x16000f60, 0x00020002 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x00000041, 0x2f681248, 0x16000fa8, 0x00020002 }, + { 0x00000008, 0x2f701248, 0x12000f60, 0x00000f68 }, + { 0x00000005, 0x2fe41248, 0x16000f70, 0x00030003 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.asm new file mode 100644 index 000000000..ff9148742 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.asm @@ -0,0 +1,878 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Authors: Zhao Yakui + */ +// Modual name: Inter_bframe_haswell.asm +// +// Make inter predition estimation for Inter frame for B-frame +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +mov (8) vme_m1.0<1>:ud 0:ud {align1}; +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (2) mba_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK1:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbb_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mba_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (2) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mba_result.20<1>:w 0:w {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (2) mbb_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbc_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbb_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbc_start; +mov (2) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbb_result.20<1>:w 0:w {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_inter_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_inter_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK3:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +mov (1) mbc_result.18<1>:w MB_PRED_FLAG {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (2) mbb_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbc_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbb_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mb_mvp_ref.0<1>:ud mba_result.4<2,2,1>:ud {align1}; +(-f0.0) mov (2) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* forward_MVP */ +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mvp_backward; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + + +mvp_backward: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.8<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.4<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.8<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.4<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.10<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.6<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (4) mb_ref_win.0<1>:w mb_mvp_ref.0<4,4,1>:w 2:w {align1}; +add (4) mb_ref_win.8<1>:w mb_ref_win.0<4,4,1>:w 3:w {align1}; +and (4) mb_ref_win.16<1>:uw mb_ref_win.8<4,4,1>:uw 0xFFFC:uw {align1}; +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_4<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m5 */ +mov (8) vme_msg_5<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_5.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_5.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_5.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_5.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m6 */ + +mov (4) vme_msg_6.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_6.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * SIC VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +/* Use the Luma mode */ +mov (1) vme_msg_4.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_DUAL_REFERENCE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW DREF_REGION_SIZE {align1}; +/* Dual Reference Width&Height,32x32 */ + +mov (1) vme_m0.0<1>:UD vme_m0.8<0,1,0>:UD {align1}; + +/* Reference = (x-8,y-8)-(x+8,y+8) */ +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W -8:W {align1}; +add (1) vme_m0.2<1>:W vme_m0.2<0,1,0>:W -8:W {align1}; + +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.4<1>:w vme_m0.4<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.6<1>:w vme_m0.6<0,1,0>:w 4:w {align1}; + +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.20<2,2,1>:w {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD DSTART_CENTER + DSEARCH_PATH_LEN:UD {align1}; +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mb_mvp_ref.4<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; +/* M3/M4 search path */ + +mov (1) vme_msg_3.0<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_3.16<1>:UD 0x0:UD {align1}; +mov (8) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_3.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_4.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + + /* 16x16 Source, 1/4 pixel, harr, BME ENABLE */ +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER + FBR_BME_ENABLE:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) tmp_reg0.0<1>:uw BI_WEIGHT {align1}; +mov (1) vme_m1.6<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + obw_wb + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +mb_pred_func: + mov (8) TEMP_VAR0.0<1>:ud 0:ud {align1}; + mov (1) TEMP_VAR0.0<1>:ub INPUT_ARG0.2<0,1,0>:ub {align1}; + and (1) TEMP_VAR0.4<1>:uw INPUT_ARG0.4<0,1,0>:uw INTER_MASK:uw {align1}; + /* INTER16x16 mode. The bit1-0 is the prediction mode */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X16MODE:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + /* Check whether it is INTER8x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_8X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_8; + + /* Check whether it is INTER16x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_168; +mb_pred_func_816: + /* Block 0/2 uses the bit1-0. Block 1/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + and.z.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK1:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_168: + /* Block 0/1 uses the bit1-0. Block 2/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + cmp.l.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK2:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_8: + /* 8X8 mode. Every block uses two bits as the prediction mode. */ + mul (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw 2:uw {align1}; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw TEMP_VAR0.8<0,1,0>:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; +end_mb_pred: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75a new file mode 100644 index 000000000..b5eca7e38 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75a @@ -0,0 +1,2 @@ +#include "vme75.inc" +#include "inter_bframe_haswell.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75b new file mode 100644 index 000000000..cabef2011 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_haswell.g75b @@ -0,0 +1,413 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x00000018 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24003ca5, 0x00000400, 0x00020002 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26001cb1, 0x00000800, 0x02190006 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24203ca5, 0x00000420, 0x00020002 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x00070003 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26201cb1, 0x00000800, 0x02190006 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000ce0 }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000001f0 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000140 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2ae40021, 0x00450bc8, 0x00000000 }, + { 0x00200001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000001 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000013e0 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2af001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2af401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2af201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2af601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00200001, 0x2af001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2af401ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000660 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000140 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b040021, 0x00450bf0, 0x00000000 }, + { 0x00200001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000011a0 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b1001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b1401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b1201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b1601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00200001, 0x2b1001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2b1401ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000210 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000380 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450bf0, 0x00000000 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000f70 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000002a0 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b3201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000260 }, + { 0x00200001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000230 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000200 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000150 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450c18, 0x00000000 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000003 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000d40 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2b3201ed, 0x00000000, 0x00010001 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b3201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00200001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00210001, 0x2b040021, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b240021, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b140129, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2b340129, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2ac00021, 0x00450ae4, 0x00000000 }, + { 0x00310001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000320 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000009b0 }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000950 }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af6, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae8, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b16, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b08, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b36, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b28, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac40021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x00000001, 0x2fa001ad, 0x00000ae8, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b08, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b28, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000820 }, + { 0x00000001, 0x2ac401ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000aea, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b0a, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b2a, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000007c0 }, + { 0x00000001, 0x2ac601ad, 0x00000fe4, 0x00000000 }, + { 0x0040000c, 0x2a803dad, 0x00690ac0, 0x00020002 }, + { 0x00400040, 0x2a883dad, 0x00690a80, 0x00030003 }, + { 0x00400005, 0x2a902d29, 0x00690a88, 0xfffcfffc }, + { 0x00600001, 0x25600021, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28800021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28a00231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28b00061, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28bc0061, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28b40129, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28d00021, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28c00129, 0x00ae0622, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00010001 }, + { 0x00000001, 0x28850231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00200020 }, + { 0x00000001, 0x247e0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e782000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300129, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0021, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00200700 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x24400021, 0x00000448, 0x00000000 }, + { 0x00000040, 0x24403dad, 0x00000440, 0xfff8fff8 }, + { 0x00000040, 0x24423dad, 0x00000442, 0xfff8fff8 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x00040004 }, + { 0x00010040, 0x24443dad, 0x00000444, 0x00040004 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00040004 }, + { 0x00010040, 0x24463dad, 0x00000446, 0x00040004 }, + { 0x00200040, 0x244035ad, 0x00450440, 0x00450a90 }, + { 0x00200040, 0x244435ad, 0x00450444, 0x00450a94 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x00001212 }, + { 0x00000001, 0x24700021, 0x00000ac0, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000ac4, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28600061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28640061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28680061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x286c0061, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28700061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28900061, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21801ca1, 0x00000800, 0x0a784000 }, + { 0x00000001, 0x25740061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25750231, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25760231, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24002d29, 0x00000180, 0x00030003 }, + { 0x00000001, 0x25740231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00203000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00200020 }, + { 0x00000001, 0x24660231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e786000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000002 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000001 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x0a0a0403 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0a800031, 0x20001cac, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000a0 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x00600001, 0x2f600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x2f600231, 0x00000fa2, 0x00000000 }, + { 0x00000005, 0x2f642d29, 0x00000fa4, 0x00030003 }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00000000 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000150 }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000100 }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x00000001, 0x2f680129, 0x00000fa8, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x00200f68, 0x00010001 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d0 }, + { 0x00000008, 0x2f702d29, 0x00000f60, 0x00020002 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000a0 }, + { 0x00000001, 0x2f680129, 0x00000fa8, 0x00000000 }, + { 0x05000010, 0x20002d28, 0x00200f68, 0x00020002 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x00000008, 0x2f702d29, 0x00000f60, 0x00020002 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x00000041, 0x2f682d29, 0x00000fa8, 0x00020002 }, + { 0x00000008, 0x2f702529, 0x00000f60, 0x00000f68 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.asm new file mode 100644 index 000000000..e7be377f1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.asm @@ -0,0 +1,759 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Authors: Zhao Yakui + * + */ +// Modual name: InterFrame_ivy.asm +// +// Make intra predition estimation for Inter-B frame +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 1 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbb_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (2) mba_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK1:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbb_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mba_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mba_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (2) mba_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mba_result.20<1>:w 0:w {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbc_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ + +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (2) mbb_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbc_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbb_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbb_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mbc_start; +mov (2) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; + +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (2) mbc_result.20<1>:w -1:w {align1}; +mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK3:ud {align1}; +SAVE_RET {align1}; +jmpi (1) mb_pred_func; +mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; +mov (1) mbc_result.18<1>:w MB_PRED_FLAG {align1}; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; +(f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; +(f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; +(f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; +mov (2) mbc_result.20<1>:w 0:w {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are invailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (2) mbb_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbc_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; +(f0.0) mov (2) mbb_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; +(f0.0) mov (2) mb_mvp_ref.0<1>:ud mba_result.4<2,2,1>:ud {align1}; +(-f0.0) mov (2) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* forward_MVP */ +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) mvp_backward; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + + +mvp_backward: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.8<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.22<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.8<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.4<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.8<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.8<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.4<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.10<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.10<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.6<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (4) mb_ref_win.0<1>:w mb_mvp_ref.0<4,4,1>:w 2:w {align1}; +add (4) mb_ref_win.8<1>:w mb_ref_win.0<4,4,1>:w 3:w {align1}; +and (4) mb_ref_win.16<1>:uw mb_ref_win.8<4,4,1>:uw 0xFFFC:uw {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0 {align1}; +mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + + +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE:uw {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + + +/* M0 */ +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_DUAL_REFERENCE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER:UD {align1}; +/* 16x16 Source, 1/4 pixel, harr */ +mov (1) vme_m0.22<1>:UW DREF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.0<1>:UD vme_m0.8<0,1,0>:UD {align1}; + +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.4<1>:w vme_m0.4<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; +(f0.0) add (1) vme_m0.6<1>:w vme_m0.6<0,1,0>:w 4:w {align1}; + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.20<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* MV num is passed by constant buffer. R4.28 */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +add (1) vme_m1.4<1>:UD vme_m1.4<0,1,0>:UD FB_PRUNING_ENABLE:UD {align1}; +add (1) vme_m1.6<1>:uw vme_m1.6<0,1,0>:uw BI_WEIGHT {align1}; + + +mov (1) vme_m1.8<1>:UD DSTART_CENTER + DSEARCH_PATH_LEN:UD {align1}; + +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mb_mvp_ref.4<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_MIXED + ) + mlen vme_msg_length + rlen vme_inter_wb_length + {align1}; + +and.z.f0.0 (1) null<1>:ud vme_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; + +(-f0.0)jmpi (1) __INTRA_INFO ; + +__INTER_INFO: +/* Write MV pairs */ +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; + +mov (8) msg_reg2.0<1>:UD vme_wb2.0<8,8,1>:UD {align1}; + +mov (8) msg_reg3.0<1>:UD vme_wb3.0<8,8,1>:UD {align1}; + +mov (8) msg_reg4.0<1>:UD vme_wb4.0<8,8,1>:UD {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +mov (1) tmp_uw1<1>:uw 0:uw {align1} ; +mov (1) tmp_ud1<1>:ud 0:ud {align1} ; +and (1) tmp_uw1<1>:uw vme_wb0.2<0,1,0>:uw MV32_BIT_MASK:uw {align1} ; +shr (1) tmp_uw1<1>:uw tmp_uw1<1>:uw MV32_BIT_SHIFT:uw {align1} ; +mul (1) tmp_ud1<1>:ud tmp_uw1<0,1,0>:uw 96:uw {align1} ; +add (1) tmp_ud1<1>:ud tmp_ud1<0,1,0>:ud 32:uw {align1} ; +shl (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MFC_MV32_BIT_SHIFT:uw {align1} ; +add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MVSIZE_UW_BASE:uw {align1} ; +add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw CBP_DC_YUV_UW:uw {align1} ; + +mov (1) msg_reg1.0<1>:uw vme_wb0.0<0,1,0>:uw {align1} ; +mov (1) msg_reg1.2<1>:uw tmp_uw1<0,1,0>:uw {align1} ; +mov (1) msg_reg1.4<1>:UD vme_wb0.28<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:ud tmp_ud1<0,1,0>:ud {align1} ; +mov (1) msg_reg1.12<1>:ud vme_wb0.0<0,1,0>:ud {align1} ; +mov (1) msg_reg1.16<1>:ud 0x25:ud {align1} ; +jmpi (1) __OUTPUT_INFO; + +__INTRA_INFO: +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; +mov (1) msg_reg1.16<1>:ud 0x35:ud {align1} ; + +__OUTPUT_INFO: + +mov (1) msg_reg1.20<1>:ud obw_m0.8<0,1,0>:ud {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +mov (8) msg_reg0.0<1>:ud obw_m0.0<8,8,1>:ud {align1}; + + +/* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +NOP; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +/* This is to get the prediction mode for the correspongding partions/sub-mb + * Parameter description: + ARG0.0: INTER_SHAPE/PRED_MODE + ARG0.4: INTER_MODE(16x16, 16x8, 8x16 or 8X8) + ARG0.8: sub-mb block number(block 0/1/2/3) +*/ + +mb_pred_func: + mov (8) TEMP_VAR0.0<1>:ud 0:ud {align1}; + mov (1) TEMP_VAR0.0<1>:ub INPUT_ARG0.1<0,1,0>:ub {align1}; + and (1) TEMP_VAR0.4<1>:uw INPUT_ARG0.4<0,1,0>:uw INTER_MASK:uw {align1}; + /* INTER16x16 mode. The bit1-0 is the prediction mode */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X16MODE:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + /* Check whether it is INTER8x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_8X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_8; + + /* Check whether it is INTER16x8 mode. */ + cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X8MODE:uw {align1}; + (f0.0) jmpi (1) mb_pred_func_168; +mb_pred_func_816: + /* Block 0/2 uses the bit1-0. Block 1/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + and.z.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK1:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_168: + /* Block 0/1 uses the bit1-0. Block 2/3 uses the bit3-2 */ + mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; + cmp.l.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK2:uw {align1}; + (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; + (f0.0) jmpi (1) end_mb_pred; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; + jmpi (1) end_mb_pred; + +mb_pred_func_8: + /* 8X8 mode. Every block uses two bits as the prediction mode. */ + mul (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw 2:uw {align1}; + shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw TEMP_VAR0.8<0,1,0>:uw {align1}; + and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; +end_mb_pred: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7a new file mode 100644 index 000000000..e7ae9c438 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7a @@ -0,0 +1,2 @@ +#include "vme7.inc" +#include "inter_bframe_ivb.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7b new file mode 100644 index 000000000..adcb39076 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_bframe_ivb.g7b @@ -0,0 +1,376 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x0000000a }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000001aa }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000042 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2ae40021, 0x00450bc8, 0x00000000 }, + { 0x00200001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000001 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000248 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2af001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2af401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2af201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2af601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00200001, 0x2af001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2af401ed, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000d6 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b040021, 0x00450bf0, 0x00000000 }, + { 0x00200001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000001fc }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b1001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b1401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b1201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b1601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00200001, 0x2b1001e9, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000046 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000074 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450bf0, 0x00000000 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000002 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000001b4 }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000058 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b3201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000050 }, + { 0x00200001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000044 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450c18, 0x00000000 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00000001, 0x2fa00021, 0x00000b84, 0x00000000 }, + { 0x00000001, 0x2fa40021, 0x00000b80, 0x00000000 }, + { 0x00000001, 0x2fa80061, 0x00000000, 0x00000003 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000016a }, + { 0x00000001, 0x2aa00129, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2b3201ed, 0x00000000, 0x00010001 }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00000000 }, + { 0x00010001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x01000010, 0x20002d28, 0x00000aa0, 0x00010001 }, + { 0x00010001, 0x2b3201e9, 0x00000000, 0x00010001 }, + { 0x00010001, 0x2b3601ed, 0x00000000, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00200001, 0x2b3001e9, 0x00000000, 0x00010001 }, + { 0x00200001, 0x2b3401ed, 0x00000000, 0x00000000 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00210001, 0x2b040021, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b240021, 0x00450ae4, 0x00000000 }, + { 0x00210001, 0x2b140129, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2b340129, 0x00450af4, 0x00000000 }, + { 0x00210001, 0x2ac00021, 0x00450ae4, 0x00000000 }, + { 0x00310001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000064 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000f8 }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000ec }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af6, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae8, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b16, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b08, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b36, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b28, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac40021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x2fa001ad, 0x00000ae8, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b08, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b28, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000c6 }, + { 0x00000001, 0x2ac401ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000aea, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b0a, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b2a, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000ba }, + { 0x00000001, 0x2ac601ad, 0x00000fe4, 0x00000000 }, + { 0x0040000c, 0x2a803dad, 0x00690ac0, 0x00020002 }, + { 0x00400040, 0x2a883dad, 0x00690a80, 0x00030003 }, + { 0x00400005, 0x2a902d29, 0x00690a88, 0xfffcfffc }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28600021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x288000e1, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28800231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c0171, 0x00000000, 0x00020002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00203700 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x24400021, 0x00000448, 0x00000000 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x00040004 }, + { 0x00010040, 0x24443dad, 0x00000444, 0x00040004 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00040004 }, + { 0x00010040, 0x24463dad, 0x00000446, 0x00040004 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00200040, 0x244035ad, 0x00450440, 0x00450a90 }, + { 0x00200040, 0x244435ad, 0x00450444, 0x00450a94 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000040, 0x24640c21, 0x00000464, 0x40000000 }, + { 0x00000040, 0x24662d29, 0x00000466, 0x00200020 }, + { 0x00000001, 0x24680061, 0x00000000, 0x00001212 }, + { 0x00000001, 0x24700021, 0x00000ac0, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000ac4, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a686000 }, + { 0x01000005, 0x20000c20, 0x00000180, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x0a0a0403 }, + { 0x00000001, 0x25420169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25440061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x25422d29, 0x00000182, 0x00200020 }, + { 0x00000008, 0x25422d29, 0x00200542, 0x00050005 }, + { 0x00000041, 0x25442d21, 0x00000542, 0x00600060 }, + { 0x00000040, 0x25442c21, 0x00000544, 0x00200020 }, + { 0x00000009, 0x25422d29, 0x00000542, 0x00050005 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x00400040 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x000e000e }, + { 0x00000001, 0x28200129, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28220129, 0x00000542, 0x00000000 }, + { 0x00000001, 0x28240021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000544, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000025 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000035 }, + { 0x00000001, 0x28340021, 0x00000488, 0x00000000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x00600001, 0x2f600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x2f600231, 0x00000fa1, 0x00000000 }, + { 0x00000005, 0x2f642d29, 0x00000fa4, 0x00030003 }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00000000 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000002a }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x01000010, 0x20002d28, 0x00200f64, 0x00010001 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00000001, 0x2f680129, 0x00000fa8, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x00200f68, 0x00010001 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000001a }, + { 0x00000008, 0x2f702d29, 0x00000f60, 0x00020002 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x00000001, 0x2f680129, 0x00000fa8, 0x00000000 }, + { 0x05000010, 0x20002d28, 0x00200f68, 0x00020002 }, + { 0x00010005, 0x2fe42d29, 0x00000f60, 0x00030003 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000008, 0x2f702d29, 0x00000f60, 0x00020002 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x00000041, 0x2f682d29, 0x00000fa8, 0x00020002 }, + { 0x00000008, 0x2f702529, 0x00000f60, 0x00000f68 }, + { 0x00000005, 0x2fe42d29, 0x00200f70, 0x00030003 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.asm new file mode 100644 index 000000000..1f0a4b9f1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.asm @@ -0,0 +1,307 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: IntraFrame.asm +// +// Make intra predition estimation for Intra frame +// + +// +// Now, begin source code.... +// + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg3.0<1>:UD 0x0:UD {align1}; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* Source = (x, y) * 16 */ + +cmp.z.f0.0 (1) null<1>:uw quality_level_ub<0,1,0>:ub LOW_QUALITY_LEVEL:uw {align1}; +(f0.0) jmpi (1) __low_quality_search; + +__high_quality_search: +#ifdef DEV_SNB +shl (2) vme_m0.0<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W -16:W {align1}; /* Reference = (x-16,y-12)-(x+32,y+24) */ +add (1) vme_m0.2<1>:W vme_m0.2<0,1,0>:W -12:W {align1}; +#else +mov (1) vme_m0.0<1>:W -16:W {align1} ; /* Reference = (x-16,y-12)-(x+32,y+24) */ +mov (1) vme_m0.2<1>:W -12:W {align1} ; +#endif + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER:UD {align1}; /* 16x16 Source, 1/4 pixel, harr */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ +jmpi __vme_msg1; + + +__low_quality_search: +#ifdef DEV_SNB +shl (2) vme_m0.0<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W -8:W {align1}; +add (1) vme_m0.2<1>:W vme_m0.2<0,1,0>:W -8:W {align1}; +#else +mov (1) vme_m0.0<1>:W -8:W {align1} ; +mov (1) vme_m0.2<1>:W -8:W {align1} ; +#endif + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_HALF:UD {align1}; /* 16x16 Source, 1/2 pixel, harr */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) vme_m0.22<1>:UW MIN_REF_REGION_SIZE {align1}; /* Reference Width&Height, 32x32 */ + +__vme_msg1: +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +mov (1) vme_m1.4<1>:UD FB_PRUNING_ENABLE:UD {align1}; +/* MV num is passed by constant buffer. R4.28 */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +__VME_LOOP: + +/* + * Media Read Message -- fetch neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +cmp.nz.f0.0 (1) null<1>:UW orig_x_ub<0,1,0>:UB 0:UW {align1}; /* X != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_AE {align1}; /* A */ + +cmp.nz.f0.0 (1) null<1>:UW orig_y_ub<0,1,0>:UB 0:UW {align1}; /* Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_B {align1}; /* B */ + +mul.nz.f0.0 (1) null<1>:UW orig_x_ub<0,1,0>:UB orig_y_ub<0,1,0>:UB {align1}; /* X * Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_D {align1}; /* D */ + +add (1) tmp_x_w<1>:W orig_x_ub<0,1,0>:UB 1:UW {align1}; /* X + 1 */ +add (1) tmp_x_w<1>:W w_in_mb_uw<0,1,0>:UW -tmp_x_w<0,1,0>:W {align1}; /* width - (X + 1) */ +mul.nz.f0.0 (1) null<1>:UD tmp_x_w<0,1,0>:W orig_y_ub<0,1,0>:UB {align1}; /* (width - (X + 1)) * Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_C {align1}; /* C */ + +and.nz.f0.0 (1) null<1>:UW slice_edge_ub<0,1,0>:UB 2:UW {align1}; +(f0.0) and (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB 0xE0 {align1}; /* slice edge disable B,C,D*/ + +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0 {align1}; +mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_MIXED + ) + mlen vme_msg_length + rlen vme_inter_wb_length + {align1}; +/* + * Oword Block Write message + */ + +/* MV pairs */ +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + +#ifdef DEV_SNB +mov (16) obw_m1.0<1>:UW vme_wb1.0<16,16,1>:UB {align1}; +add (8) obw_m1.0<2>:W obw_m1.0<16,8,2>:W -64:W {align1}; +add (8) obw_m1.2<2>:W obw_m1.2<16,8,2>:W -48:W {align1}; +mov (16) obw_m2.0<1>:UW vme_wb1.16<16,16,1>:UB {align1}; +add (8) obw_m2.0<2>:W obw_m2.0<16,8,2>:W -64:W {align1}; +add (8) obw_m2.2<2>:W obw_m2.2<16,8,2>:W -48:W {align1}; +mov (16) obw_m3.0<1>:UW vme_wb2.0<16,16,1>:UB {align1}; +add (8) obw_m3.0<2>:W obw_m3.0<16,8,2>:W -64:W {align1}; +add (8) obw_m3.2<2>:W obw_m3.2<16,8,2>:W -48:W {align1}; +mov (16) obw_m4.0<1>:UW vme_wb2.16<16,16,1>:UB {align1}; +add (8) obw_m4.0<2>:W obw_m4.0<16,8,2>:W -64:W {align1}; +add (8) obw_m4.2<2>:W obw_m4.2<16,8,2>:W -48:W {align1}; +#else +mov (8) obw_m1.0<1>:ud vme_wb1.0<8,8,1>:ud {align1}; +mov (8) obw_m2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) obw_m3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) obw_m4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +#endif + +mov (8) msg_reg1.0<1>:UD obw_m1.0<8,8,1>:UD {align1}; + +mov (8) msg_reg2.0<1>:UD obw_m2.0<8,8,1>:UD {align1}; + +mov (8) msg_reg3.0<1>:UD obw_m3.0<8,8,1>:UD {align1}; + +mov (8) msg_reg4.0<1>:UD obw_m4.0<8,8,1>:UD {align1}; + +/* bind index 3, write 8 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_4, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* other info */ +add (1) msg_reg0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1} ; + +and.z.f0.0 (1) null<1>:ud vme_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; + +(-f0.0)jmpi (1) __INTRA_INFO ; + +__INTER_INFO: +mov (1) tmp_uw1<1>:uw 0:uw {align1} ; +mov (1) tmp_ud1<1>:ud 0:ud {align1} ; +(f0.0)and (1) tmp_uw1<1>:uw vme_wb0.2<0,1,0>:uw MV32_BIT_MASK:uw {align1} ; +(f0.0)shr (1) tmp_uw1<1>:uw tmp_uw1<1>:uw MV32_BIT_SHIFT:uw {align1} ; +(f0.0)mul (1) tmp_ud1<1>:ud tmp_uw1<0,1,0>:uw 96:uw {align1} ; +(f0.0)add (1) tmp_ud1<1>:ud tmp_ud1<0,1,0>:ud 32:uw {align1} ; +(f0.0)shl (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MFC_MV32_BIT_SHIFT:uw {align1} ; +(f0.0)add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MVSIZE_UW_BASE:uw {align1} ; +add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw CBP_DC_YUV_UW:uw {align1} ; + +mov (1) msg_reg1.0<1>:uw vme_wb0.0<0,1,0>:uw {align1} ; +mov (1) msg_reg1.2<1>:uw tmp_uw1<0,1,0>:uw {align1} ; +mov (1) msg_reg1.4<1>:UD vme_wb0.28<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:ud tmp_ud1<0,1,0>:ud {align1} ; + +jmpi (1) __OUTPUT_INFO ; + +__INTRA_INFO: +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +__OUTPUT_INFO: +/* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +add (1) orig_x_ub<1>:ub orig_x_ub<0,1,0>:ub 1:uw {align1} ; +add (1) vme_m0.8<1>:UW vme_m0.8<0,1,0>:UW 16:UW {align1}; /* X += 16 */ +#ifdef DEV_SNB +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W 16:W {align1}; /* X += 16 */ +#endif + +cmp.e.f0.0 (1) null<1>:uw w_in_mb_uw<0,1,0>:uw orig_x_ub<0,1,0>:ub {align1}; +/* (0, y + 1) */ +(f0.0)mov (1) orig_x_ub<1>:ub 0:uw {align1} ; +(f0.0)add (1) orig_y_ub<1>:ub orig_y_ub<0,1,0>:ub 1:uw {align1} ; +(f0.0)mov (1) vme_m0.8<1>:uw 0:uw {align1} ; +(f0.0)add (1) vme_m0.10<1>:uw vme_m0.10<0,1,0>:uw 16:uw {align1} ; +#ifdef DEV_SNB +(f0.0)mov (1) vme_m0.0<1>:w -16:W {align1}; /* Reference = (x-16,y-12)-(x+32,y+24) */ +(f0.0)add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 16:w {align1}; +#endif + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* Source = (x, y) * 16 */ + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UW {align1} ; + +add.z.f0.1 (1) num_macroblocks<1>:w num_macroblocks<0,1,0>:w -1:w {align1} ; +(-f0.1)jmpi (1) __VME_LOOP ; + +__EXIT: + +/* + * kill thread + */ +mov (8) msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6a new file mode 100644 index 000000000..7568a0178 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6a @@ -0,0 +1,2 @@ +#include "vme.inc" +#include "inter_frame.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6b new file mode 100644 index 000000000..bc7cd4363 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g6b @@ -0,0 +1,126 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x01000010, 0x20002e28, 0x000000a8, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x00200009, 0x24402e29, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24403dad, 0x00000440, 0xfff0fff0 }, + { 0x00000040, 0x24423dad, 0x00000442, 0xfff4fff4 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00203000 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00200009, 0x24402e29, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24403dad, 0x00000440, 0xfff8fff8 }, + { 0x00000040, 0x24423dad, 0x00000442, 0xfff8fff8 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00201000 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640061, 0x00000000, 0x40000000 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x0000000a }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x22401cd1, 0x00000000, 0x02188004 }, + { 0x00600001, 0x20000022, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x22801cd1, 0x00000000, 0x02288004 }, + { 0x00600001, 0x20000022, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x02000010, 0x20002e28, 0x000000a0, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000060 }, + { 0x02000010, 0x20002e28, 0x000000a1, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000010 }, + { 0x02000041, 0x20004628, 0x000000a0, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000004 }, + { 0x00000040, 0x25202e2d, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x2520352d, 0x000000a2, 0x00004520 }, + { 0x02000041, 0x200045a0, 0x00000520, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000008 }, + { 0x02000005, 0x20002e28, 0x000000a4, 0x00020002 }, + { 0x00010005, 0x247d1e31, 0x0000047d, 0x000000e0 }, + { 0x00600001, 0x20200022, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x20400062, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x22440c21, 0x00000244, 0xff000000 }, + { 0x00600001, 0x20400022, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x206000e2, 0x00000000, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00cf0283, 0x00000000 }, + { 0x00000001, 0x20700062, 0x00000000, 0x11111111 }, + { 0x08600031, 0x21801cdd, 0x00000000, 0x08486000 }, + { 0x00600001, 0x20000022, 0x008d0480, 0x00000000 }, + { 0x00800001, 0x24a00229, 0x00b101a0, 0x00000000 }, + { 0x00600040, 0x44a03dad, 0x00ae04a0, 0xffc0ffc0 }, + { 0x00600040, 0x44a23dad, 0x00ae04a2, 0xffd0ffd0 }, + { 0x00800001, 0x24c00229, 0x00b101b0, 0x00000000 }, + { 0x00600040, 0x44c03dad, 0x00ae04c0, 0xffc0ffc0 }, + { 0x00600040, 0x44c23dad, 0x00ae04c2, 0xffd0ffd0 }, + { 0x00800001, 0x24e00229, 0x00b101c0, 0x00000000 }, + { 0x00600040, 0x44e03dad, 0x00ae04e0, 0xffc0ffc0 }, + { 0x00600040, 0x44e23dad, 0x00ae04e2, 0xffd0ffd0 }, + { 0x00800001, 0x25000229, 0x00b101d0, 0x00000000 }, + { 0x00600040, 0x45003dad, 0x00ae0500, 0xffc0ffc0 }, + { 0x00600040, 0x45023dad, 0x00ae0502, 0xffd0ffd0 }, + { 0x00600001, 0x20200022, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x20400022, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x20600022, 0x008d04e0, 0x00000000 }, + { 0x00600001, 0x20800022, 0x008d0500, 0x00000000 }, + { 0x05800031, 0x22001cdd, 0x00000000, 0x0a1b0403 }, + { 0x00000040, 0x20080c22, 0x00000488, 0x00000008 }, + { 0x01000005, 0x20000c20, 0x00000180, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x0000001c }, + { 0x00000001, 0x25420169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25440061, 0x00000000, 0x00000000 }, + { 0x00010005, 0x25422d29, 0x00000182, 0x00100010 }, + { 0x00010008, 0x25422d29, 0x00200542, 0x00040004 }, + { 0x00010041, 0x25442d21, 0x00000542, 0x00600060 }, + { 0x00010040, 0x25442c21, 0x00000544, 0x00200020 }, + { 0x00010009, 0x25422d29, 0x00000542, 0x00050005 }, + { 0x00010040, 0x25422d29, 0x00000542, 0x00400040 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x000e000e }, + { 0x00000001, 0x2020012a, 0x00000180, 0x00000000 }, + { 0x00000001, 0x2022012a, 0x00000542, 0x00000000 }, + { 0x00000001, 0x20240022, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x20280022, 0x00000544, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x20200022, 0x00000180, 0x00000000 }, + { 0x00000001, 0x20240022, 0x00000190, 0x00000000 }, + { 0x00000001, 0x20280022, 0x00000194, 0x00000000 }, + { 0x00000001, 0x202c0022, 0x00000198, 0x00000000 }, + { 0x05800031, 0x22001cdd, 0x00000000, 0x041b0003 }, + { 0x00000040, 0x20a02e31, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x24482d29, 0x00000448, 0x00100010 }, + { 0x00000040, 0x24403dad, 0x00000440, 0x00100010 }, + { 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 }, + { 0x00010001, 0x20a00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 }, + { 0x00010001, 0x24480169, 0x00000000, 0x00000000 }, + { 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 }, + { 0x00010001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00100010 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24882c21, 0x00000488, 0x000a000a }, + { 0x01000040, 0x20a63dad, 0x020000a6, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x02001400, 0xffffff50 }, + { 0x00600001, 0x20000022, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001cc8, 0x00000000, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7a new file mode 100644 index 000000000..7568a0178 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7a @@ -0,0 +1,2 @@ +#include "vme.inc" +#include "inter_frame.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7b new file mode 100644 index 000000000..2a349273f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame.g7b @@ -0,0 +1,113 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x01000010, 0x20002e28, 0x000000a8, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00203000 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00201000 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640061, 0x00000000, 0x40000000 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x0000000a }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x22401cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x22801cb1, 0x00000800, 0x02290004 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x02000010, 0x20002e28, 0x000000a0, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000060 }, + { 0x02000010, 0x20002e28, 0x000000a1, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000010 }, + { 0x02000041, 0x20004628, 0x000000a0, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000004 }, + { 0x00000040, 0x25202e2d, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x2520352d, 0x000000a2, 0x00004520 }, + { 0x02000041, 0x200045a0, 0x00000520, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000008 }, + { 0x02000005, 0x20002e28, 0x000000a4, 0x00020002 }, + { 0x00010005, 0x247d1e31, 0x0000047d, 0x000000e0 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x22440c21, 0x00000244, 0xff000000 }, + { 0x00600001, 0x28600021, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x288000e1, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28800231, 0x00cf0283, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a686000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x24a00021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x24c00021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x24e00021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x25000021, 0x008d0200, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d04a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d04c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d04e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0500, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x0a0a0403 }, + { 0x00000040, 0x28080c21, 0x00000488, 0x00000008 }, + { 0x01000005, 0x20000c20, 0x00000180, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x0000001c }, + { 0x00000001, 0x25420169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25440061, 0x00000000, 0x00000000 }, + { 0x00010005, 0x25422d29, 0x00000182, 0x00200020 }, + { 0x00010008, 0x25422d29, 0x00200542, 0x00050005 }, + { 0x00010041, 0x25442d21, 0x00000542, 0x00600060 }, + { 0x00010040, 0x25442c21, 0x00000544, 0x00200020 }, + { 0x00010009, 0x25422d29, 0x00000542, 0x00050005 }, + { 0x00010040, 0x25422d29, 0x00000542, 0x00400040 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x000e000e }, + { 0x00000001, 0x28200129, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28220129, 0x00000542, 0x00000000 }, + { 0x00000001, 0x28240021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000544, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00000040, 0x20a02e31, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x24482d29, 0x00000448, 0x00100010 }, + { 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 }, + { 0x00010001, 0x20a00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 }, + { 0x00010001, 0x24480169, 0x00000000, 0x00000000 }, + { 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24882c21, 0x00000488, 0x000a000a }, + { 0x01000040, 0x20a63dad, 0x020000a6, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x02001400, 0xffffff66 }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.asm new file mode 100644 index 000000000..17bc412b8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.asm @@ -0,0 +1,776 @@ +/* + * Copyright © <2013>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: Inter_frame_gen8.asm +// +// Make inter predition estimation for Inter-frame on gen8 +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 FWD/BWD cost center*/ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 skip center*/ +mov (8) vme_msg_4<1>:UD 0x0:UD {align1}; + +/* m5 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_5<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + + +/* Use the Luma mode */ +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +mov (1) vme_msg_5.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_6.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_6.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m7 */ + +mov (4) vme_msg_7.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_7.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * SIC VME message + */ + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m0 */ +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +cmp.z.f0.0 (1) null<1>:uw quality_level_ub<0,1,0>:ub LOW_QUALITY_LEVEL:uw {align1}; +(f0.0) jmpi (1) __low_quality_search; + +__high_quality_search: +/* M3/M4 search path */ +mov (1) vme_msg_3.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.28<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x000F0F0F:UD {align1}; +mov (4) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 12:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 8:w {align1}; +jmpi (1) __vme_msg; + +__low_quality_search: +/* M3/M4 search path */ +mov (1) vme_msg_3.0<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x000F0F0F:UD {align1}; +mov (4) vme_msg_3.16<1>:UD 0x0:UD {align1}; +mov (8) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW MIN_REF_REGION_SIZE {align1}; /* Reference Width&Height, 32x32 */ +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; + +__vme_msg: +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* Setup the Cost center */ +/* currently four 8x8 share the same cost center */ +mov (4) vme_m3.0<2>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (4) vme_m3.4<2>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; + +mov (8) vme_msg_3<1>:UD vme_m3.0<8,8,1>:UD {align1}; +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* M4/M5 search path */ +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_5.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_5.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_5.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_5.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_5.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_4.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_7.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/4 pixel, harr, BME disable */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; +mov (8) vme_msg_3.0<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8a new file mode 100644 index 000000000..f514dd370 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "inter_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8b new file mode 100644 index 000000000..d0cc25d7f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen8.g8b @@ -0,0 +1,327 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23800a88, 0x0e000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a00a88, 0x0e000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26000a88, 0x0e000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26200a88, 0x0e000800, 0x02190006 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000750 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000a20 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000009c0 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x01000010, 0x20002240, 0x160000a7, 0x00020002 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000001, 0x28600608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28640608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28680608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x286c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28700608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28740608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28780608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x287c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x000c000c }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00080008 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000000e0 }, + { 0x00000001, 0x28600608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28640608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28680608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x286c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28700608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x20202020 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff8fff8 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x00040004 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00040004 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a90 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x0e000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00243000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9a new file mode 100644 index 000000000..f514dd370 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "inter_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9b new file mode 100644 index 000000000..b79042c91 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_gen9.g9b @@ -0,0 +1,327 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x23800a88, 0x06000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x23a00a88, 0x06000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x26000a88, 0x06000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x26200a88, 0x06000800, 0x02190006 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000750 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000a20 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000009c0 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x01000010, 0x20002240, 0x160000a7, 0x00020002 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000160 }, + { 0x00000001, 0x28600608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28640608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28680608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x286c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28700608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28740608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28780608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x287c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x000c000c }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00080008 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000000e0 }, + { 0x00000001, 0x28600608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28640608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28680608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x286c0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28700608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28900608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x20202020 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff8fff8 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff8fff8 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x00040004 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00040004 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a90 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x06000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00243000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.asm new file mode 100644 index 000000000..8a829f62f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.asm @@ -0,0 +1,750 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: Inter_frame_haswell.asm +// +// Make inter predition estimation for Inter-frame on Haswell +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; + +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_4<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m5 */ +mov (8) vme_msg_5<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_5.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_5.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_5.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_5.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m6 */ +mov (4) vme_msg_6.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_6.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * SIC VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +/* Use the Luma mode */ +mov (1) vme_msg_4.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +cmp.z.f0.0 (1) null<1>:uw quality_level_ub<0,1,0>:ub LOW_QUALITY_LEVEL:uw {align1}; +(f0.0) jmpi (1) __low_quality_search; + +__high_quality_search: +/* M3/M4 search path */ +mov (1) vme_msg_3.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.28<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x000F0F0F:UD {align1}; +mov (4) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 12:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 8:w {align1}; + +jmpi (1) __vme_msg; + +__low_quality_search: +/* M3/M4 search path */ +mov (1) vme_msg_3.0<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x000F0F0F:UD {align1}; +mov (4) vme_msg_3.16<1>:UD 0x0:UD {align1}; +mov (8) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW MIN_REF_REGION_SIZE {align1}; /* Reference Width&Height, 32x32 */ +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; + +__vme_msg: +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_3.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_4.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/4 pixel, harr, BME disable */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75a new file mode 100644 index 000000000..e95ed935e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75a @@ -0,0 +1,2 @@ +#include "vme75.inc" +#include "inter_frame_haswell.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75b new file mode 100644 index 000000000..1a60c511a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_haswell.g75b @@ -0,0 +1,311 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x00000018 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24003ca5, 0x00000400, 0x00020002 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26001cb1, 0x00000800, 0x02190006 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24203ca5, 0x00000420, 0x00020002 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x00070003 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26201cb1, 0x00000800, 0x02190006 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000740 }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2ae40021, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000350 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b040021, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b1001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000110 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000170 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00010001, 0x2b040021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b140129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b340129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00021, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000190 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000930 }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000008d0 }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a803dad, 0x00450ac0, 0x00020002 }, + { 0x00200040, 0x2a883dad, 0x00450a80, 0x00030003 }, + { 0x00200005, 0x2a902d29, 0x00450a88, 0xfffcfffc }, + { 0x00600001, 0x25600021, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28800021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28a00231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28b00061, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28bc0061, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28b40129, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28d00021, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28c00129, 0x00ae0622, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00010001 }, + { 0x00000001, 0x28850231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00200020 }, + { 0x00000001, 0x247e0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e782000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300129, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0021, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x01000010, 0x20002e28, 0x000000a7, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000160 }, + { 0x00000001, 0x28600061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28640061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28680061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x286c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28700061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28740061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28780061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x287c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28800061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0061, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x000c000c }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00080008 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000e0 }, + { 0x00000001, 0x28600061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28640061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28680061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x286c0061, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28700061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28900061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00200000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff8fff8 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x00040004 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00040004 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00200040, 0x244035ad, 0x00450440, 0x00450a90 }, + { 0x00200040, 0x244435ad, 0x00450444, 0x00450a90 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24700021, 0x00000ac0, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x08600031, 0x21801ca1, 0x00000800, 0x0a784000 }, + { 0x00000001, 0x25740061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25750231, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25760231, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24002d29, 0x00000180, 0x00030003 }, + { 0x00000001, 0x25740231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00243000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e786000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000002 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000001 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x0a0a0403 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000a0 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.asm new file mode 100644 index 000000000..501257a31 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.asm @@ -0,0 +1,622 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Authors: Zhao Yakui + * + */ +// Modual name: InterFrame_ivy.asm +// +// Make inter predition estimation for Inter frame on Ivy +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 1 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbb_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbc_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; + +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are invailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0 {align1}; +mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + + +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE:uw {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + + +/* M0 */ +/* IME search */ +cmp.z.f0.0 (1) null<1>:uw quality_level_ub<0,1,0>:ub LOW_QUALITY_LEVEL:uw {align1}; +(f0.0) jmpi (1) __low_quality_search; + +__high_quality_search: +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER:UD {align1}; +/* 16x16 Source, 1/4 pixel, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 12:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 8:w {align1}; + +jmpi __vme_msg; + +__low_quality_search: +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_HALF:UD {align1}; +/* 16x16 Source, 1/2 pixel, harr */ +mov (1) vme_m0.22<1>:UW MIN_REF_REGION_SIZE {align1}; /* Reference Width&Height, 32x32 */ + +mov (1) vme_m0.0<1>:W -8:W {align1}; +mov (1) vme_m0.2<1>:W -8:W {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; + +__vme_msg: +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* MV num is passed by constant buffer. R4.28 */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +add (1) vme_m1.4<1>:UD vme_m1.4<0,1,0>:UD FB_PRUNING_DISABLE:UD {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; + +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_MIXED + ) + mlen vme_msg_length + rlen vme_inter_wb_length + {align1}; + +and.z.f0.0 (1) null<1>:ud vme_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; + +(-f0.0)jmpi (1) __INTRA_INFO ; + +__INTER_INFO: +/* Write MV pairs */ +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; + +mov (8) msg_reg2.0<1>:UD vme_wb2.0<8,8,1>:UD {align1}; + +mov (8) msg_reg3.0<1>:UD vme_wb3.0<8,8,1>:UD {align1}; + +mov (8) msg_reg4.0<1>:UD vme_wb4.0<8,8,1>:UD {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +mov (1) tmp_uw1<1>:uw 0:uw {align1} ; +mov (1) tmp_ud1<1>:ud 0:ud {align1} ; +and (1) tmp_uw1<1>:uw vme_wb0.2<0,1,0>:uw MV32_BIT_MASK:uw {align1} ; +shr (1) tmp_uw1<1>:uw tmp_uw1<1>:uw MV32_BIT_SHIFT:uw {align1} ; +mul (1) tmp_ud1<1>:ud tmp_uw1<0,1,0>:uw 96:uw {align1} ; +add (1) tmp_ud1<1>:ud tmp_ud1<0,1,0>:ud 32:uw {align1} ; +shl (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MFC_MV32_BIT_SHIFT:uw {align1} ; +add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MVSIZE_UW_BASE:uw {align1} ; +add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw CBP_DC_YUV_UW:uw {align1} ; + +mov (1) msg_reg1.0<1>:uw vme_wb0.0<0,1,0>:uw {align1} ; +mov (1) msg_reg1.2<1>:uw tmp_uw1<0,1,0>:uw {align1} ; +mov (1) msg_reg1.4<1>:UD vme_wb0.28<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:ud tmp_ud1<0,1,0>:ud {align1} ; +mov (1) msg_reg1.12<1>:ud vme_wb0.0<0,1,0>:ud {align1} ; +mov (1) msg_reg1.16<1>:ud 0x25:ud {align1} ; +jmpi (1) __OUTPUT_INFO; + +__INTRA_INFO: +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; +mov (1) msg_reg1.16<1>:ud 0x35:ud {align1} ; + +__OUTPUT_INFO: + +mov (1) msg_reg1.20<1>:ud obw_m0.8<0,1,0>:ud {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +mov (8) msg_reg0.0<1>:ud obw_m0.0<8,8,1>:ud {align1}; + + +/* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7a new file mode 100644 index 000000000..77293eec0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7a @@ -0,0 +1,2 @@ +#include "vme7.inc" +#include "inter_frame_ivb.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7b new file mode 100644 index 000000000..7ed38c5ef --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/inter_frame_ivb.g7b @@ -0,0 +1,264 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x0000000a }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f8 }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2ae40021, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b040021, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b1001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02480403 }, + { 0x00200001, 0x2b240021, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00010001, 0x2b040021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b140129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b340129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00021, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000d0 }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x000000c4 }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a803dad, 0x00450ac0, 0x00020002 }, + { 0x00200040, 0x2a883dad, 0x00450a80, 0x00030003 }, + { 0x00200005, 0x2a902d29, 0x00450a88, 0xfffcfffc }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28600021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x288000e1, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28800231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c0171, 0x00000000, 0x00020002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x01000010, 0x20002e28, 0x000000a7, 0x00020002 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00203000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x000c000c }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00080008 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00201000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x20202020 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff8fff8 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff8fff8 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00010040, 0x24403dad, 0x00000440, 0x00040004 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00010040, 0x24423dad, 0x00000442, 0x00040004 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00200040, 0x244035ad, 0x00450440, 0x00450a90 }, + { 0x00200040, 0x244435ad, 0x00450444, 0x00450a90 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000040, 0x24640c21, 0x00000464, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24700021, 0x00000ac0, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a686000 }, + { 0x01000005, 0x20000c20, 0x00000180, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x0000002c }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x0a0a0403 }, + { 0x00000001, 0x25420169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25440061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x25422d29, 0x00000182, 0x00200020 }, + { 0x00000008, 0x25422d29, 0x00200542, 0x00050005 }, + { 0x00000041, 0x25442d21, 0x00000542, 0x00600060 }, + { 0x00000040, 0x25442c21, 0x00000544, 0x00200020 }, + { 0x00000009, 0x25422d29, 0x00000542, 0x00050005 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x00400040 }, + { 0x00000040, 0x25422d29, 0x00000542, 0x000e000e }, + { 0x00000001, 0x28200129, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28220129, 0x00000542, 0x00000000 }, + { 0x00000001, 0x28240021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000544, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000025 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000035 }, + { 0x00000001, 0x28340021, 0x00000488, 0x00000000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f6001ad, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f6001ad, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.asm new file mode 100644 index 000000000..a83362315 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.asm @@ -0,0 +1,182 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: IntraFrame.asm +// +// Make intra predition estimation for Intra frame +// + +// +// Now, begin source code.... +// + +/* + * __START + */ +__INTRA_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch neighbor edge pixels + */ +/* ROW */ +__INTRA_LOOP: +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +cmp.nz.f0.0 (1) null<1>:UW orig_x_ub<0,1,0>:UB 0:UW {align1}; /* X != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_AE {align1}; /* A */ + +cmp.nz.f0.0 (1) null<1>:UW orig_y_ub<0,1,0>:UB 0:UW {align1}; /* Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_B {align1}; /* B */ + +mul.nz.f0.0 (1) null<1>:UW orig_x_ub<0,1,0>:UB orig_y_ub<0,1,0>:UB {align1}; /* X * Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_D {align1}; /* D */ + +add (1) tmp_x_w<1>:W orig_x_ub<0,1,0>:UB 1:UW {align1}; /* X + 1 */ +add (1) tmp_x_w<1>:W w_in_mb_uw<0,1,0>:UW -tmp_x_w<0,1,0>:W {align1}; /* width - (X + 1) */ +mul.nz.f0.0 (1) null<1>:UD tmp_x_w<0,1,0>:W orig_y_ub<0,1,0>:UB {align1}; /* (width - (X + 1)) * Y != 0 */ +(f0.0) add (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB INTRA_PRED_AVAIL_FLAG_C {align1}; /* C */ + +and.nz.f0.0 (1) null<1>:UW slice_edge_ub<0,1,0>:UB 2:UW {align1}; +(f0.0) and (1) mb_intra_struct_ub<1>:UB mb_intra_struct_ub<0,1,0>:UB 0xE0 {align1}; /* slice edge disable B,C,D*/ + + +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0 {align1}; +mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_INTRA + ) + mlen vme_msg_length + rlen vme_intra_wb_length + {align1}; + +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 16:W {align1}; /* X offset: X += 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 16:W {align1}; /* X offset: X += 16 */ +add (1) vme_m0.8<1>:UW vme_m0.8<0,1,0>:UW 16:UW {align1}; /* Y = Y, X += 16 */ + +add (1) orig_x_ub<1>:ub orig_x_ub<0,1,0>:ub 1:uw {align1} ; +cmp.e.f0.0 (1) null<1>:uw w_in_mb_uw<0,1,0>:uw orig_x_ub<0,1,0>:ub {align1}; +(f0.0)mov (1) orig_x_ub<1>:ub 0:uw {align1} ; +(f0.0)add (1) orig_y_ub<1>:ub orig_y_ub<0,1,0>:ub 1:uw {align1} ; +(f0.0)mov (1) read0_header.0<1>:D -8:W {align1}; /* X offset */ +(f0.0)add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D 16:W {align1}; /* Y offset */ +(f0.0)mov (1) read1_header.0<1>:D -4:W {align1}; /* X offset */ +(f0.0)add (1) read1_header.4<1>:D read1_header.4<0,1,0>:D 16:W {align1}; /* Y offset */ +/* X = 0, Y += 16 */ +(f0.0)mov (1) vme_m0.8<1>:UW 0:UW {align1}; +(f0.0)add (1) vme_m0.10<1>:UW vme_m0.10<0,1,0>:UW 16:UW {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 1:uw {align1}; /* the new offset */ + +add.z.f0.0 (1) num_macroblocks<1>:w num_macroblocks<0,1,0>:w -1:w {align1} ; +(-f0.0)jmpi (1) __INTRA_LOOP ; + +__EXIT: +/* + * kill thread + */ +mov (8) msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6a new file mode 100644 index 000000000..10c4f98df --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6a @@ -0,0 +1,3 @@ +#include "vme.inc" +#include "intra_frame.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6b new file mode 100644 index 000000000..9edfef7bf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g6b @@ -0,0 +1,70 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x20000022, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x22401cd1, 0x00000000, 0x02188004 }, + { 0x00600001, 0x20000022, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x22801cd1, 0x00000000, 0x02288004 }, + { 0x00600001, 0x20000022, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x02000010, 0x20002e28, 0x000000a0, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000060 }, + { 0x02000010, 0x20002e28, 0x000000a1, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000010 }, + { 0x02000041, 0x20004628, 0x000000a0, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000004 }, + { 0x00000040, 0x25202e2d, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x2520352d, 0x000000a2, 0x00004520 }, + { 0x02000041, 0x200045a0, 0x00000520, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000008 }, + { 0x02000005, 0x20002e28, 0x000000a4, 0x00020002 }, + { 0x00010005, 0x247d1e31, 0x0000047d, 0x000000e0 }, + { 0x00600001, 0x20200022, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x20400062, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x22440c21, 0x00000244, 0xff000000 }, + { 0x00600001, 0x20400022, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x206000e2, 0x00000000, 0x00000000 }, + { 0x00800001, 0x20600232, 0x00cf0283, 0x00000000 }, + { 0x00000001, 0x20700062, 0x00000000, 0x11111111 }, + { 0x08600031, 0x21801cdd, 0x00000000, 0x08184000 }, + { 0x00600001, 0x20000022, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x20200022, 0x00000180, 0x00000000 }, + { 0x00000001, 0x20240022, 0x00000190, 0x00000000 }, + { 0x00000001, 0x20280022, 0x00000194, 0x00000000 }, + { 0x00000001, 0x202c0022, 0x00000198, 0x00000000 }, + { 0x05800031, 0x22001cdd, 0x00000000, 0x041b0003 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0x00100010 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0x00100010 }, + { 0x00000040, 0x24482d29, 0x00000448, 0x00100010 }, + { 0x00000040, 0x20a02e31, 0x000000a0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 }, + { 0x00010001, 0x20a00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 }, + { 0x00010001, 0x240001e5, 0x00000000, 0xfff8fff8 }, + { 0x00010040, 0x24043ca5, 0x00000404, 0x00100010 }, + { 0x00010001, 0x242001e5, 0x00000000, 0xfffcfffc }, + { 0x00010040, 0x24243ca5, 0x00000424, 0x00100010 }, + { 0x00010001, 0x24480169, 0x00000000, 0x00000000 }, + { 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 }, + { 0x00000040, 0x24882c21, 0x00000488, 0x00010001 }, + { 0x01000040, 0x20a63dad, 0x000000a6, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a }, + { 0x00600001, 0x20000022, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001cc8, 0x00000000, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7a new file mode 100644 index 000000000..10c4f98df --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7a @@ -0,0 +1,3 @@ +#include "vme.inc" +#include "intra_frame.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7b new file mode 100644 index 000000000..b25778418 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame.g7b @@ -0,0 +1,70 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x22401cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x22801cb1, 0x00000800, 0x02290004 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x02000010, 0x20002e28, 0x000000a0, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000060 }, + { 0x02000010, 0x20002e28, 0x000000a1, 0x00000000 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000010 }, + { 0x02000041, 0x20004628, 0x000000a0, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000004 }, + { 0x00000040, 0x25202e2d, 0x000000a0, 0x00010001 }, + { 0x00000040, 0x2520352d, 0x000000a2, 0x00004520 }, + { 0x02000041, 0x200045a0, 0x00000520, 0x000000a1 }, + { 0x00010040, 0x247d1e31, 0x0000047d, 0x00000008 }, + { 0x02000005, 0x20002e28, 0x000000a4, 0x00020002 }, + { 0x00010005, 0x247d1e31, 0x0000047d, 0x000000e0 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x22400061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x22440c21, 0x00000244, 0xff000000 }, + { 0x00600001, 0x28600021, 0x008d0240, 0x00000000 }, + { 0x00600001, 0x288000e1, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28800231, 0x00cf0283, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a184000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0x00100010 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0x00100010 }, + { 0x00000040, 0x24482d29, 0x00000448, 0x00100010 }, + { 0x00000040, 0x20a02e31, 0x000000a0, 0x00010001 }, + { 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 }, + { 0x00010001, 0x20a00171, 0x00000000, 0x00000000 }, + { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 }, + { 0x00010001, 0x240001e5, 0x00000000, 0xfff8fff8 }, + { 0x00010040, 0x24043ca5, 0x00000404, 0x00100010 }, + { 0x00010001, 0x242001e5, 0x00000000, 0xfffcfffc }, + { 0x00010040, 0x24243ca5, 0x00000424, 0x00100010 }, + { 0x00010001, 0x24480169, 0x00000000, 0x00000000 }, + { 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 }, + { 0x00000040, 0x24882c21, 0x00000488, 0x00010001 }, + { 0x01000040, 0x20a63dad, 0x000000a6, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a }, + { 0x00600001, 0x28000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000800, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.asm new file mode 100644 index 000000000..15b260ef1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.asm @@ -0,0 +1,201 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: IntraFrame_gen8.asm +// +// Make intra predition estimation for Intra frame on Gen8 +// + +// +// Now, begin source code.... +// + +/* + * __START + */ +__INTRA_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* m2, get the MV/Mb cost passed by constant buffer +when creating EU thread by MEDIA_OBJECT */ +mov (8) vme_msg_2<1>:UD r1.0<8,8,1>:UD {align1}; + +/* m3. This is changed for FWD/BWD cost center */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4.*/ +mov (8) vme_msg_4<1>:ud 0x0:ud {align1}; + +/* m5 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_5<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +mov (1) tmp_reg0.0<1>:UW LUMA_CHROMA_MODE:UW {align1}; +/* Use the Luma mode */ +mov (1) vme_msg_5.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_6.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_6.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m7 */ + +mov (4) vme_msg_7.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_7.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * VME message + */ + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; +/* m0 */ +/* 16x16 Source, Intra_harr */ +add (1) vme_m0.12<1>:UD vme_m0.12<0,1,0>:ud INTRA_SAD_HAAR:UD {align1}; +mov (8) vme_msg_0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8a new file mode 100644 index 000000000..859c72cf8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "intra_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8b new file mode 100644 index 000000000..56c7283b4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen8.g8b @@ -0,0 +1,72 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23800a88, 0x0e000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a00a88, 0x0e000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26000a88, 0x0e000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26200a88, 0x0e000800, 0x02190006 }, + { 0x00600001, 0x28400208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000040, 0x244c0208, 0x0600044c, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9a new file mode 100644 index 000000000..859c72cf8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "intra_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9b new file mode 100644 index 000000000..63d7455c0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_gen9.g9b @@ -0,0 +1,72 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x23800a88, 0x06000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x23a00a88, 0x06000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x26000a88, 0x06000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x26200a88, 0x06000800, 0x02190006 }, + { 0x00600001, 0x28400208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a4, 0x00010001 }, + { 0x00010001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000040, 0x244c0208, 0x0600044c, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.asm new file mode 100644 index 000000000..c4cb76cff --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.asm @@ -0,0 +1,196 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: IntraFrame.asm +// +// Make intra predition estimation for Intra frame +// + +// +// Now, begin source code.... +// + +/* + * __START + */ +__INTRA_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* m2, get the MV/Mb cost passed by constant buffer +when creating EU thread by MEDIA_OBJECT */ +mov (8) vme_msg_2<1>:UD r1.0<8,8,1>:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_4<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m5 */ +mov (8) vme_msg_5<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_5.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_5.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_5.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_5.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m6 */ + +mov (4) vme_msg_6.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_6.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (1) tmp_reg0.0<1>:UW LUMA_CHROMA_MODE:UW {align1}; +/* Use the Luma mode */ +mov (1) vme_msg_4.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75a new file mode 100644 index 000000000..a690fdd35 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75a @@ -0,0 +1,2 @@ +#include "vme75.inc" +#include "intra_frame_haswell.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75b new file mode 100644 index 000000000..4bb8ad92a --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_haswell.g75b @@ -0,0 +1,71 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x00000002 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24003ca5, 0x00000400, 0x00020002 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26001cb1, 0x00000800, 0x02190006 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00030003 }, + { 0x00000041, 0x24203ca5, 0x00000420, 0x00020002 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x00070003 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26201cb1, 0x00000800, 0x02190006 }, + { 0x00600001, 0x28400021, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28800021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28a00231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28b00061, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28bc0061, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28b40129, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28d00021, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28c00129, 0x00ae0622, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28850231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c00f1, 0x00000000, 0x00000002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00200020 }, + { 0x00000001, 0x247e0231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e782000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300129, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0021, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.asm new file mode 100644 index 000000000..6a009ccde --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.asm @@ -0,0 +1,154 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: IntraFrame.asm +// +// Make intra predition estimation for Intra frame +// + +// +// Now, begin source code.... +// + +/* + * __START + */ +__INTRA_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* + * VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; +and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; +(f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE:uw {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0 {align1}; +mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_INTRA + ) + mlen vme_msg_length + rlen vme_intra_wb_length + {align1}; + + +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7a new file mode 100644 index 000000000..a1b195a0c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7a @@ -0,0 +1,3 @@ +#include "vme7.inc" +#include "intra_frame_ivb.asm" + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7b new file mode 100644 index 000000000..748cfdf87 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/intra_frame_ivb.g7b @@ -0,0 +1,46 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 }, + { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff }, + { 0x00000001, 0x240800e1, 0x00000000, 0x0000001f }, + { 0x00000001, 0x24140231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 }, + { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc }, + { 0x00000001, 0x242800e1, 0x00000000, 0x000f0003 }, + { 0x00000001, 0x24340231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23801cb1, 0x00000800, 0x02190004 }, + { 0x00600001, 0x28000021, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a01cb1, 0x00000800, 0x02290004 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a4, 0x00010001 }, + { 0x00010001, 0x247c0171, 0x00000000, 0x00020002 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800061, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840c21, 0x00000384, 0xff000000 }, + { 0x00600001, 0x28600021, 0x008d0380, 0x00000000 }, + { 0x00600001, 0x288000e1, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28800231, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a184000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.asm new file mode 100644 index 000000000..8297a5526 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.asm @@ -0,0 +1,884 @@ +/* + * Copyright © <2013>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: mpeg2_inter_gen8.asm +// +// Make inter predition estimation for MPEG2 Inter-frame on gen8 +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + + +shl (2) pic_ref.0<1>:uw r4.24<2,2,1>:uw 4:uw {align1}; +mov (2) pic_ref.16<1>:uw r4.20<2,2,1>:uw {align1}; +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; + +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 2 oword (32 bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 2 oword (32bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 2 oword (32bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 2 oword (32bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: + +mov (2) mv_cc_ref.0<1>:w mba_result.4<2,2,1>:w {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +mov (1) INPUT_ARG0.0<1>:ud vme_m0.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud vme_m0.8<0,1,0>:ud {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 FWD/BWD cost center*/ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 skip center*/ +mov (8) vme_msg_4<1>:UD 0x0:UD {align1}; + +/* m5 */ +mov (8) vme_msg_5<1>:UD 0x0:UD {align1}; + + +/* Use the Luma mode */ +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +mov (1) vme_msg_5.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (1) tmp_reg0.0<1>:UW INTRA16_DC_PRED:UW {align1}; +mov (1) vme_msg_5.4<1>:ub tmp_reg0.0<0,1,0>:UB {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; + + +/* m7 */ + +mov (8) vme_msg_7.0<1>:ud 0x0:ud {align1}; + +/* + * SIC VME message + */ + +/* Disable Intra8x8/Intra4x4 Intra-prediction */ +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:UD {align1}; + +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +mov (1) tmp_reg0.0<1>:uw LUMA_INTRA_8x8_DISABLE:uw {align1}; +add (1) tmp_reg0.0<1>:uw tmp_reg0.0<0,1,0>:uw LUMA_INTRA_4x4_DISABLE:uw {align1}; +mov (1) intra_part_mask_ub<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Enable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_ENABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m0 */ +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* Setup the Cost center */ +/* currently four 8x8 share the same cost center */ +mov (4) vme_m3.0<2>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (4) vme_m3.4<2>:ud mv_cc_ref.0<0,1,0>:ud {align1}; + +mov (8) vme_msg_3<1>:UD vme_m3.0<8,8,1>:UD {align1}; +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* M4/M5 search path */ +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_5.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_5.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_5.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_5.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_5.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_4.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_7.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_HALF + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/2 pixel, harr, BME disable */ +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; +mov (8) vme_msg_3.0<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(-f0.0) jmpi (1) vme_run_again; +nop; +vme_mv_output: + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 2 oword (32 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +nop; +nop; +ref_boundary_check: + +/* The left/up coordinate of reference window */ +add (2) TEMP_VAR0.0<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG0.0<2,2,1>:w {align1}; +/* The right/bottom coordinate of reference window */ +add (1) TEMP_VAR0.16<1>:w TEMP_VAR0.0<0,1,0>:w 48:w {align1}; +add (1) TEMP_VAR0.18<1>:w TEMP_VAR0.2<0,1,0>:w 40:w {align1}; + +/* Firstly the MV range is checked */ +mul (2) TEMP_VAR1.16<1>:w INPUT_ARG1.16<2,2,1>:w -1:w {align1}; +add (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w TEMP_VAR1.16<2,2,1>:w {align1}; +add (2) TEMP_VAR1.4<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG1.16<2,2,1>:w {align1}; + +cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w TEMP_VAR1.0<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.0<1>:w TEMP_VAR1.0<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w TEMP_VAR1.4<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.0<1>:w TEMP_VAR1.4<0,1,0>:w -48:w {align1}; +cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w TEMP_VAR1.2<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.2<1>:w TEMP_VAR1.2<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w TEMP_VAR1.6<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.2<1>:w TEMP_VAR1.6<0,1,0>:w -40:w {align1}; + +x_left_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) x_right_cmp; + (f0.0) mov (1) TEMP_VAR0.0<1>:w 0:w {align1}; + jmpi (1) y_top_cmp; +x_right_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w INPUT_ARG1.0<0,1,0>:w {align1}; + (-f0.0) jmpi (1) y_top_cmp; + (f0.0) add (1) TEMP_VAR0.0<1>:w INPUT_ARG1.0<0,1,0>:w -48:w {align1}; +y_top_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) y_bottom_cmp; + (f0.0) mov (1) TEMP_VAR0.2<1>:w 0:w {align1}; + jmpi (1) y_bottom_end; +y_bottom_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w INPUT_ARG1.2<0,1,0>:w {align1}; + (f0.0) add (1) TEMP_VAR0.2<1>:w INPUT_ARG1.2<0,1,0>:w -40:w {align1}; + +y_bottom_end: +mul (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w -1:w {align1}; +add (2) RET_ARG<1>:w TEMP_VAR0.0<2,2,1>:w TEMP_VAR1.0<2,2,1>:w {align1}; + RETURN {align1}; +nop; +nop; + +vme_run_again: + +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +mov (2) tmp_reg0.0<1>:w mb_ref_win.0<2,2,1>:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; + +cmp.l.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +cmp.l.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; + +cmp.ge.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; +cmp.ge.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; + +jmpi (1) vme_done; + +vme_start: + mov (8) tmp_vme_wb0.0<1>:ud vme_wb0.0<8,8,1>:ud {align1}; + mov (8) tmp_vme_wb1.0<1>:ud vme_wb1.0<8,8,1>:ud {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; +mov (1) INPUT_ARG0.8<1>:ud vme_m0.8<0,1,0>:ud {align1}; +add (2) INPUT_ARG0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (8) vme_m1.0<1>:ud 0x0:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* Setup the Cost center */ +/* currently four 8x8 share the same cost center */ +mov (4) vme_m3.0<2>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (4) vme_m3.4<2>:ud mv_cc_ref.0<0,1,0>:ud {align1}; + +mov (8) vme_msg_3<1>:UD vme_m3.0<8,8,1>:UD {align1}; +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* M4/M5 search path */ +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_5.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_5.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_5.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_5.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_5.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_4.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_7.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_HALF + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/2 pixel, harr, BME disable */ +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; +mov (8) vme_msg_3.0<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +cmp.l.f0.0 (1) null:uw vme_wb0.8<0,1,0>:uw tmp_vme_wb0.8<0,1,0>:uw {align1}; +(f0.0) jmpi (1) vme_done; +mov (8) vme_wb0.0<1>:ud tmp_vme_wb0.0<8,8,1>:ud {align1}; +mov (8) vme_wb1.0<1>:ud tmp_vme_wb1.0<8,8,1>:ud {align1}; + +vme_done: + jmpi (1) vme_mv_output; +nop; +nop; +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8a new file mode 100644 index 000000000..26f94a75b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8a @@ -0,0 +1,3 @@ +#include "vme8.inc" +#include "vme75_mpeg2.inc" +#include "mpeg2_inter_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8b new file mode 100644 index 000000000..6686c9f75 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen8.g8b @@ -0,0 +1,371 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x2a401248, 0x16450098, 0x00040004 }, + { 0x00200001, 0x2a501248, 0x00450094, 0x00000000 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000720 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02180203 }, + { 0x00200001, 0x2ae40208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02180203 }, + { 0x00200001, 0x2b040208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02180203 }, + { 0x00200001, 0x2b240208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x0e000b40, 0x02180203 }, + { 0x00200001, 0x2b240208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000780 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000720 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x00200001, 0x2a201a68, 0x00450ae4, 0x00000000 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa00208, 0x00000440, 0x00000000 }, + { 0x00000001, 0x2fa80208, 0x00000448, 0x00000000 }, + { 0x00600001, 0x2fc00208, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000007b0 }, + { 0x00200001, 0x24401a68, 0x00450fe4, 0x00000000 }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00bb00bb }, + { 0x00000001, 0x28a42288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00600001, 0x28e00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00020002 }, + { 0x00000040, 0x24001248, 0x16000400, 0x00040004 }, + { 0x00000001, 0x247c2288, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000a20, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x0e000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00040004 }, + { 0x00000040, 0x247e2288, 0x2200047e, 0x00000400 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10786000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x000004a0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00200040, 0x2f601a68, 0x1a450fa8, 0x00450fa0 }, + { 0x00000040, 0x2f701a68, 0x1e000f60, 0x00300030 }, + { 0x00000040, 0x2f721a68, 0x1e000f62, 0x00280028 }, + { 0x00200041, 0x2f901a68, 0x1e450fd0, 0xffffffff }, + { 0x00200040, 0x2f801a68, 0x1a450fa8, 0x00450f90 }, + { 0x00200040, 0x2f841a68, 0x1a450fa8, 0x00450fd0 }, + { 0x05000010, 0x20001a60, 0x1a000f60, 0x00000f80 }, + { 0x00010001, 0x2f601a68, 0x00000f80, 0x00000000 }, + { 0x03000010, 0x20001a60, 0x1a000f70, 0x00000f84 }, + { 0x00010040, 0x2f601a68, 0x1e000f84, 0xffd0ffd0 }, + { 0x05000010, 0x20001a60, 0x1a000f62, 0x00000f82 }, + { 0x00010001, 0x2f621a68, 0x00000f82, 0x00000000 }, + { 0x03000010, 0x20001a60, 0x1a000f72, 0x00000f86 }, + { 0x00010040, 0x2f621a68, 0x1e000f86, 0xffd8ffd8 }, + { 0x05000010, 0x20001a60, 0x1e000f60, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00010001, 0x2f601e68, 0x18000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x03000010, 0x20001a60, 0x1a000f70, 0x00000fc0 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000010 }, + { 0x00010040, 0x2f601a68, 0x1e000fc0, 0xffd0ffd0 }, + { 0x05000010, 0x20001a60, 0x1e000f62, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00010001, 0x2f621e68, 0x18000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x03000010, 0x20001a60, 0x1a000f72, 0x00000fc2 }, + { 0x00010040, 0x2f621a68, 0x1e000fc2, 0xffd8ffd8 }, + { 0x00200041, 0x2f801a68, 0x1e450fa8, 0xffffffff }, + { 0x00200040, 0x2fe41a68, 0x1a450f60, 0x00450f80 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200001, 0x24001a68, 0x00450a80, 0x00000000 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x05000010, 0x20001a60, 0x1e000400, 0x00000000 }, + { 0x00010041, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x05000010, 0x20001a60, 0x1e000402, 0x00000000 }, + { 0x00010041, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x04000010, 0x20001a60, 0x1e000400, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1e000402, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000010 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000003a0 }, + { 0x00600001, 0x2c800208, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x2ca00208, 0x008d01a0, 0x00000000 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa80208, 0x00000448, 0x00000000 }, + { 0x00200040, 0x2fa01a68, 0x1a450440, 0x00450a90 }, + { 0x00600001, 0x2fc00208, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0xfffffca0 }, + { 0x00200001, 0x24401a68, 0x00450fe4, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000a20, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x0e000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00040004 }, + { 0x00000040, 0x247e2288, 0x2200047e, 0x00000400 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10786000 }, + { 0x05000010, 0x20001240, 0x12000188, 0x00000c88 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00600001, 0x21800208, 0x008d0c80, 0x00000000 }, + { 0x00600001, 0x21a00208, 0x008d0ca0, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0xfffff6f0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9a new file mode 100644 index 000000000..26f94a75b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9a @@ -0,0 +1,3 @@ +#include "vme8.inc" +#include "vme75_mpeg2.inc" +#include "mpeg2_inter_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9b new file mode 100644 index 000000000..222da7c5f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_gen9.g9b @@ -0,0 +1,371 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x2a401248, 0x16450098, 0x00040004 }, + { 0x00200001, 0x2a501248, 0x00450094, 0x00000000 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000720 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02180203 }, + { 0x00200001, 0x2ae40208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02180203 }, + { 0x00200001, 0x2b040208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02180203 }, + { 0x00200001, 0x2b240208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x06000b40, 0x02180203 }, + { 0x00200001, 0x2b240208, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000780 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000720 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x00200001, 0x2a201a68, 0x00450ae4, 0x00000000 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa00208, 0x00000440, 0x00000000 }, + { 0x00000001, 0x2fa80208, 0x00000448, 0x00000000 }, + { 0x00600001, 0x2fc00208, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000007b0 }, + { 0x00200001, 0x24401a68, 0x00450fe4, 0x00000000 }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28a00608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00bb00bb }, + { 0x00000001, 0x28a42288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00600001, 0x28e00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00020002 }, + { 0x00000040, 0x24001248, 0x16000400, 0x00040004 }, + { 0x00000001, 0x247c2288, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000a20, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x06000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00040004 }, + { 0x00000040, 0x247e2288, 0x2200047e, 0x00000400 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10786000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x000004a0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00200040, 0x2f601a68, 0x1a450fa8, 0x00450fa0 }, + { 0x00000040, 0x2f701a68, 0x1e000f60, 0x00300030 }, + { 0x00000040, 0x2f721a68, 0x1e000f62, 0x00280028 }, + { 0x00200041, 0x2f901a68, 0x1e450fd0, 0xffffffff }, + { 0x00200040, 0x2f801a68, 0x1a450fa8, 0x00450f90 }, + { 0x00200040, 0x2f841a68, 0x1a450fa8, 0x00450fd0 }, + { 0x05000010, 0x20001a60, 0x1a000f60, 0x00000f80 }, + { 0x00010001, 0x2f601a68, 0x00000f80, 0x00000000 }, + { 0x03000010, 0x20001a60, 0x1a000f70, 0x00000f84 }, + { 0x00010040, 0x2f601a68, 0x1e000f84, 0xffd0ffd0 }, + { 0x05000010, 0x20001a60, 0x1a000f62, 0x00000f82 }, + { 0x00010001, 0x2f621a68, 0x00000f82, 0x00000000 }, + { 0x03000010, 0x20001a60, 0x1a000f72, 0x00000f86 }, + { 0x00010040, 0x2f621a68, 0x1e000f86, 0xffd8ffd8 }, + { 0x05000010, 0x20001a60, 0x1e000f60, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00010001, 0x2f601e68, 0x18000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x03000010, 0x20001a60, 0x1a000f70, 0x00000fc0 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000010 }, + { 0x00010040, 0x2f601a68, 0x1e000fc0, 0xffd0ffd0 }, + { 0x05000010, 0x20001a60, 0x1e000f62, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00010001, 0x2f621e68, 0x18000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x03000010, 0x20001a60, 0x1a000f72, 0x00000fc2 }, + { 0x00010040, 0x2f621a68, 0x1e000fc2, 0xffd8ffd8 }, + { 0x00200041, 0x2f801a68, 0x1e450fa8, 0xffffffff }, + { 0x00200040, 0x2fe41a68, 0x1a450f60, 0x00450f80 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200001, 0x24001a68, 0x00450a80, 0x00000000 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x05000010, 0x20001a60, 0x1e000400, 0x00000000 }, + { 0x00010041, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x05000010, 0x20001a60, 0x1e000402, 0x00000000 }, + { 0x00010041, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x04000010, 0x20001a60, 0x1e000400, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1e000402, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000010 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x000003a0 }, + { 0x00600001, 0x2c800208, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x2ca00208, 0x008d01a0, 0x00000000 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa80208, 0x00000448, 0x00000000 }, + { 0x00200040, 0x2fa01a68, 0x1a450440, 0x00450a90 }, + { 0x00600001, 0x2fc00208, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0xfffffca0 }, + { 0x00200001, 0x24401a68, 0x00450fe4, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x24600608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000a20, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x06000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00040004 }, + { 0x00000040, 0x247e2288, 0x2200047e, 0x00000400 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10786000 }, + { 0x05000010, 0x20001240, 0x12000188, 0x00000c88 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000020 }, + { 0x00600001, 0x21800208, 0x008d0c80, 0x00000000 }, + { 0x00600001, 0x21a00208, 0x008d0ca0, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0xfffff6f0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.asm new file mode 100644 index 000000000..04a8685d3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.asm @@ -0,0 +1,876 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Author : Zhao Yakui + */ +// Modual name: mpeg2_inter_haswell.asm +// +// Make MPEG2 inter predition estimation for Inter-frame on Haswell +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) pic_ref.0<1>:uw r4.24<2,2,1>:uw 4:uw {align1}; +mov (2) pic_ref.16<1>:uw r4.20<2,2,1>:uw {align1}; +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; + +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 2 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: + +mov (2) mv_cc_ref.0<1>:w mba_result.4<2,2,1>:w {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +mov (1) INPUT_ARG0.0<1>:ud vme_m0.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud vme_m0.8<0,1,0>:ud {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* the neighbour pixel is zero for MPEG2 Intra-prediction */ + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0:UD {align1}; +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +/* Use the Luma mode */ +mov (1) vme_msg_4.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; +mov (1) tmp_reg0.0<1>:UW INTRA16_DC_PRED:UW {align1}; +mov (1) vme_msg_4.4<1>:ub tmp_reg0.0<0,1,0>:UB {align1}; + +/* m5 */ +mov (8) vme_msg_5<1>:UD 0x0:UD {align1}; +mov (1) vme_msg_5.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_5.28<1>:UD 0x010101:UD {align1}; + + +/* m6 */ +mov (8) vme_msg_6.0<1>:UD 0:Ud {align1}; + +/* + * SIC VME message + */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* Disable Intra8x8/Intra4x4 Intra-prediction */ +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:UD {align1}; + +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +mov (1) tmp_reg0.0<1>:uw LUMA_INTRA_8x8_DISABLE:uw {align1}; +add (1) tmp_reg0.0<1>:uw tmp_reg0.0<0,1,0>:uw LUMA_INTRA_4x4_DISABLE:uw {align1}; +mov (1) intra_part_mask_ub<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Enable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_ENABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +/* m0 */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; + +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; + +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; +/* M3/M4 search path */ + +mov (1) vme_msg_3.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_3.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_4.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_HALF + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/2 pixel, harr, BME disable */ + +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(-f0.0) jmpi (1) vme_run_again; +nop; +vme_mv_output: + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + nop ; + nop ; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +nop; +nop; + +ref_boundary_check: + +/* The left/up coordinate of reference window */ +add (2) TEMP_VAR0.0<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG0.0<2,2,1>:w {align1}; +/* The right/bottom coordinate of reference window */ +add (1) TEMP_VAR0.16<1>:w TEMP_VAR0.0<0,1,0>:w 48:w {align1}; +add (1) TEMP_VAR0.18<1>:w TEMP_VAR0.2<0,1,0>:w 40:w {align1}; + +/* Firstly the MV range is checked */ +mul (2) TEMP_VAR1.16<1>:w INPUT_ARG1.16<2,2,1>:w -1:w {align1}; +add (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w TEMP_VAR1.16<2,2,1>:w {align1}; +add (2) TEMP_VAR1.4<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG1.16<2,2,1>:w {align1}; + +cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w TEMP_VAR1.0<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.0<1>:w TEMP_VAR1.0<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w TEMP_VAR1.4<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.0<1>:w TEMP_VAR1.4<0,1,0>:w -48:w {align1}; +cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w TEMP_VAR1.2<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.2<1>:w TEMP_VAR1.2<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w TEMP_VAR1.6<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.2<1>:w TEMP_VAR1.6<0,1,0>:w -40:w {align1}; + +x_left_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) x_right_cmp; + (f0.0) mov (1) TEMP_VAR0.0<1>:w 0:w {align1}; + jmpi (1) y_top_cmp; +x_right_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w INPUT_ARG1.0<0,1,0>:w {align1}; + (-f0.0) jmpi (1) y_top_cmp; + (f0.0) add (1) TEMP_VAR0.0<1>:w INPUT_ARG1.0<0,1,0>:w -48:w {align1}; +y_top_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) y_bottom_cmp; + (f0.0) mov (1) TEMP_VAR0.2<1>:w 0:w {align1}; + jmpi (1) y_bottom_end; +y_bottom_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w INPUT_ARG1.2<0,1,0>:w {align1}; + (f0.0) add (1) TEMP_VAR0.2<1>:w INPUT_ARG1.2<0,1,0>:w -40:w {align1}; + +y_bottom_end: +mul (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w -1:w {align1}; +add (2) RET_ARG<1>:w TEMP_VAR0.0<2,2,1>:w TEMP_VAR1.0<2,2,1>:w {align1}; + RETURN {align1}; +nop; +nop; + +vme_run_again: + +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +mov (2) tmp_reg0.0<1>:w mb_ref_win.0<2,2,1>:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; + +cmp.l.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +cmp.l.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; + +cmp.ge.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; +cmp.ge.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; + +jmpi (1) vme_done; + +vme_start: + mov (8) tmp_vme_wb0.0<1>:ud vme_wb0.0<8,8,1>:ud {align1}; + mov (8) tmp_vme_wb1.0<1>:ud vme_wb1.0<8,8,1>:ud {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; +mov (4) INPUT_ARG0.0<1>:ud vme_m0.0<4,4,1>:ud {align1}; +add (2) INPUT_ARG0.0<1>:w INPUT_ARG0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (8) vme_m1.0<1>:ud 0x0:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; +/* M3/M4 search path */ + +mov (1) vme_msg_3.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_3.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_3.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_3.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_3.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_4.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_3.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_4.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_HALF + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/2 pixel, harr, BME disable */ + +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +cmp.l.f0.0 (1) null:uw vme_wb0.8<0,1,0>:uw tmp_vme_wb0.8<0,1,0>:uw {align1}; +(f0.0) jmpi (1) vme_done; +mov (8) vme_wb0.0<1>:ud tmp_vme_wb0.0<8,8,1>:ud {align1}; +mov (8) vme_wb1.0<1>:ud tmp_vme_wb1.0<8,8,1>:ud {align1}; + +vme_done: + jmpi (1) vme_mv_output; +nop; +nop; +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75a new file mode 100644 index 000000000..355812c18 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75a @@ -0,0 +1,3 @@ +#include "vme75.inc" +#include "vme75_mpeg2.inc" +#include "mpeg2_inter_haswell.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75b new file mode 100644 index 000000000..25c629de1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_haswell.g75b @@ -0,0 +1,366 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x00000018 }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x2a402d29, 0x00450098, 0x00040004 }, + { 0x00200001, 0x2a500129, 0x00450094, 0x00000000 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000710 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2ae40021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2af001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000350 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b040021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b1001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000110 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000170 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b240021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000120 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f0 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x00000018 }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x02280303 }, + { 0x05000010, 0x2000252c, 0x00000b70, 0x00000b88 }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000040 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000003 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b240021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000080 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00010001, 0x2b040021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b140129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b340129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00021, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000190 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000c0 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000760 }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000700 }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x00200001, 0x2a2001ad, 0x00450ae4, 0x00000000 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa00021, 0x00000440, 0x00000000 }, + { 0x00000001, 0x2fa80021, 0x00000448, 0x00000000 }, + { 0x00600001, 0x2fc00021, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000790 }, + { 0x00200001, 0x244001ad, 0x00450fe4, 0x00000000 }, + { 0x00600001, 0x25600021, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00010001 }, + { 0x00000001, 0x28850231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00bb00bb }, + { 0x00000001, 0x28840231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28a00061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28b00061, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28bc0061, 0x00000000, 0x00010101 }, + { 0x00600001, 0x28c00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00020002 }, + { 0x00000040, 0x24002d29, 0x00000400, 0x00040004 }, + { 0x00000001, 0x247c0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247e0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e782000 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300129, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0021, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24700021, 0x00000a20, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28600061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28640061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28680061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x286c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28700061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28740061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28780061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x287c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28800061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0061, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900061, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21801ca1, 0x00000800, 0x0a784000 }, + { 0x00000001, 0x25740061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25750231, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25760231, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24002d29, 0x00000180, 0x00030003 }, + { 0x00000001, 0x25740231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00040004 }, + { 0x00000040, 0x247e4631, 0x0000047e, 0x00000400 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e786000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x000004a0 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000002 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0003 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000001 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0a800031, 0x2b601ca1, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000070 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000a0 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000060 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00200040, 0x2f6035ad, 0x00450fa8, 0x00450fa0 }, + { 0x00000040, 0x2f703dad, 0x00000f60, 0x00300030 }, + { 0x00000040, 0x2f723dad, 0x00000f62, 0x00280028 }, + { 0x00200041, 0x2f903dad, 0x00450fd0, 0xffffffff }, + { 0x00200040, 0x2f8035ad, 0x00450fa8, 0x00450f90 }, + { 0x00200040, 0x2f8435ad, 0x00450fa8, 0x00450fd0 }, + { 0x05000010, 0x200035ac, 0x00000f60, 0x00000f80 }, + { 0x00010001, 0x2f6001ad, 0x00000f80, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x00000f70, 0x00000f84 }, + { 0x00010040, 0x2f603dad, 0x00000f84, 0xffd0ffd0 }, + { 0x05000010, 0x200035ac, 0x00000f62, 0x00000f82 }, + { 0x00010001, 0x2f6201ad, 0x00000f82, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x00000f72, 0x00000f86 }, + { 0x00010040, 0x2f623dad, 0x00000f86, 0xffd8ffd8 }, + { 0x05000010, 0x20003dac, 0x00000f60, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00010001, 0x2f6001ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x03000010, 0x200035ac, 0x00000f70, 0x00000fc0 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00010040, 0x2f603dad, 0x00000fc0, 0xffd0ffd0 }, + { 0x05000010, 0x20003dac, 0x00000f62, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00010001, 0x2f6201ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x03000010, 0x200035ac, 0x00000f72, 0x00000fc2 }, + { 0x00010040, 0x2f623dad, 0x00000fc2, 0xffd8ffd8 }, + { 0x00200041, 0x2f803dad, 0x00450fa8, 0xffffffff }, + { 0x00200040, 0x2fe435ad, 0x00450f60, 0x00450f80 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0020000c, 0x2a803dad, 0x00450ac0, 0x00020002 }, + { 0x00200001, 0x240001ad, 0x00450a80, 0x00000000 }, + { 0x00200040, 0x2a883dad, 0x00450a80, 0x00030003 }, + { 0x00200005, 0x2a902d29, 0x00450a88, 0xfffcfffc }, + { 0x05000010, 0x20003dac, 0x00000400, 0x00000000 }, + { 0x00010041, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x05000010, 0x20003dac, 0x00000402, 0x00000000 }, + { 0x00010041, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x04000010, 0x20003dac, 0x00000400, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000030 }, + { 0x04000010, 0x20003dac, 0x00000402, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000380 }, + { 0x00600001, 0x2c800021, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x2ca00021, 0x008d01a0, 0x00000000 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x00400001, 0x2fa00021, 0x00690440, 0x00000000 }, + { 0x00200040, 0x2fa035ad, 0x00450fa0, 0x00450a90 }, + { 0x00600001, 0x2fc00021, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0xfffffca0 }, + { 0x00200001, 0x244001ad, 0x00450fe4, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24700021, 0x00000a20, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28600061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28640061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28680061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x286c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28700061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28740061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28780061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x287c0061, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28800061, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840061, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880061, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0061, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28900061, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21801ca1, 0x00000800, 0x0a784000 }, + { 0x00000001, 0x25740061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25750231, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25760231, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24002d29, 0x00000180, 0x00030003 }, + { 0x00000001, 0x25740231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28600021, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28800021, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28a00021, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28c00021, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x00241000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00040004 }, + { 0x00000040, 0x247e4631, 0x0000047e, 0x00000400 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400021, 0x008d0560, 0x00000000 }, + { 0x0d600031, 0x21801ca1, 0x00000800, 0x0e786000 }, + { 0x05000010, 0x20002528, 0x00000188, 0x00000c88 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000020 }, + { 0x00600001, 0x21800021, 0x008d0c80, 0x00000000 }, + { 0x00600001, 0x21a00021, 0x008d0ca0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0xfffff710 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.asm new file mode 100644 index 000000000..823b6e5a5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.asm @@ -0,0 +1,721 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * Authors: Zhao Yakui + * + */ +// Modual name: mpeg2_inter_ivb.asm +// +// Make inter predition estimation for Mpeg2 Inter frame on Ivy +// + +// +// Now, begin source code.... +// + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) pic_ref.0<1>:uw r4.24<2,2,1>:uw 4:uw {align1}; +mov (2) pic_ref.16<1>:uw r4.20<2,2,1>:uw {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 1 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbb_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 2 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mbc_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 2 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 2 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; + +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ +mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_0, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +and.z.f0.0 (1) null<1>:ud mb_mode_wb.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; +(-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(-f0.0) jmpi (1) mb_mvp_start; + +mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 2 oword (16bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_2, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv0.0<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are invailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: + +mov (2) mv_cc_ref.0<1>:w mba_result.4<2,2,1>:w {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; +mov (1) INPUT_ARG0.0<1>:ud vme_m0.0<0,1,0>:ud {align1}; +mov (1) INPUT_ARG0.8<1>:ud vme_m0.8<0,1,0>:ud {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; +/* Use the Luma mode */ +mov (1) tmp_reg0.0<1>:UW INTRA16_DC_PRED:UW {align1}; +mov (1) vme_msg_3.4<1>:ub tmp_reg0.0<0,1,0>:UB {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0:UD {align1}; +mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + + +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +mov (1) tmp_reg0.0<1>:uw LUMA_INTRA_8x8_DISABLE:uw {align1}; +add (1) tmp_reg0.0<1>:uw tmp_reg0.0<0,1,0>:uw LUMA_INTRA_4x4_DISABLE:uw {align1}; +mov (1) intra_part_mask_ub<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; +/* m1 */ +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + + +/* M0 */ +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_HALF:UD {align1}; +/* 16x16 Source, 1/2 pixel, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* MV num is passed by constant buffer. R4.28 */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +add (1) vme_m1.4<1>:UD vme_m1.4<0,1,0>:UD FB_PRUNING_DISABLE:UD {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; + +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_MIXED + ) + mlen vme_msg_length + rlen vme_inter_wb_length + {align1}; + +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(-f0.0) jmpi (1) vme_run_again; + +vme_mv_output: + +and.z.f0.0 (1) null<1>:ud vme_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; + +(-f0.0)jmpi (1) __INTRA_INFO ; + +__INTER_INFO: +/* Write MV pairs */ +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; + +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + + +mov (1) msg_reg1.0<1>:ud vme_wb0.0<0,1,0>:ud {align1} ; +mov (1) msg_reg1.4<1>:UD vme_wb0.28<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:ud tmp_ud1<0,1,0>:ud {align1} ; +mov (1) msg_reg1.12<1>:ud vme_wb0.0<0,1,0>:ud {align1} ; +mov (1) msg_reg1.16<1>:ud 0x25:ud {align1} ; +jmpi (1) __OUTPUT_INFO; + +__INTRA_INFO: +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; +mov (1) msg_reg1.16<1>:ud 0x35:ud {align1} ; + +__OUTPUT_INFO: + +mov (1) msg_reg1.20<1>:ud obw_m0.8<0,1,0>:ud {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; +mov (8) msg_reg0.0<1>:ud obw_m0.0<8,8,1>:ud {align1}; + + +/* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + +nop; +nop; + +ref_boundary_check: + +/* The left/up coordinate of reference window */ +add (2) TEMP_VAR0.0<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG0.0<2,2,1>:w {align1}; +/* The right/bottom coordinate of reference window */ +add (1) TEMP_VAR0.16<1>:w TEMP_VAR0.0<0,1,0>:w 48:w {align1}; +add (1) TEMP_VAR0.18<1>:w TEMP_VAR0.2<0,1,0>:w 40:w {align1}; + +/* Firstly the MV range is checked */ +mul (2) TEMP_VAR1.16<1>:w INPUT_ARG1.16<2,2,1>:w -1:w {align1}; +add (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w TEMP_VAR1.16<2,2,1>:w {align1}; +add (2) TEMP_VAR1.4<1>:w INPUT_ARG0.8<2,2,1>:w INPUT_ARG1.16<2,2,1>:w {align1}; + +cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w TEMP_VAR1.0<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.0<1>:w TEMP_VAR1.0<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w TEMP_VAR1.4<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.0<1>:w TEMP_VAR1.4<0,1,0>:w -48:w {align1}; +cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w TEMP_VAR1.2<0,1,0>:w {align1}; +(f0.0) mov (1) TEMP_VAR0.2<1>:w TEMP_VAR1.2<0,1,0>:w {align1}; +cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w TEMP_VAR1.6<0,1,0>:w {align1}; +(f0.0) add (1) TEMP_VAR0.2<1>:w TEMP_VAR1.6<0,1,0>:w -40:w {align1}; + + +x_left_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) x_right_cmp; + (f0.0) mov (1) TEMP_VAR0.0<1>:w 0:w {align1}; + jmpi (1) y_top_cmp; +x_right_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.16<0,1,0>:w INPUT_ARG1.0<0,1,0>:w {align1}; + (-f0.0) jmpi (1) y_top_cmp; + (f0.0) add (1) TEMP_VAR0.0<1>:w INPUT_ARG1.0<0,1,0>:w -48:w {align1}; +y_top_cmp: + cmp.l.f0.0 (1) null:w TEMP_VAR0.2<0,1,0>:w 0:w {align1}; + (-f0.0) jmpi (1) y_bottom_cmp; + (f0.0) mov (1) TEMP_VAR0.2<1>:w 0:w {align1}; + jmpi (1) y_bottom_end; +y_bottom_cmp: + cmp.g.f0.0 (1) null:w TEMP_VAR0.18<0,1,0>:w INPUT_ARG1.2<0,1,0>:w {align1}; + (f0.0) add (1) TEMP_VAR0.2<1>:w INPUT_ARG1.2<0,1,0>:w -40:w {align1}; + +y_bottom_end: +mul (2) TEMP_VAR1.0<1>:w INPUT_ARG0.8<2,2,1>:w -1:w {align1}; +add (2) RET_ARG<1>:w TEMP_VAR0.0<2,2,1>:w TEMP_VAR1.0<2,2,1>:w {align1}; + RETURN {align1}; +nop; +nop; + +vme_run_again: + +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +mov (2) tmp_reg0.0<1>:w mb_ref_win.0<2,2,1>:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; + +cmp.l.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +cmp.l.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 0:w {align1}; +(f0.0) mul (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; + +cmp.ge.f0.0 (1) null:w tmp_reg0.0<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; +cmp.ge.f0.0 (1) null:w tmp_reg0.2<0,1,0>:w 4:w {align1}; +(f0.0) jmpi (1) vme_start; + +jmpi (1) vme_done; + +vme_start: + mov (8) tmp_vme_wb0.0<1>:ud vme_wb0.0<8,8,1>:ud {align1}; + mov (8) tmp_vme_wb1.0<1>:ud vme_wb1.0<8,8,1>:ud {align1}; + +/* Calibrate the ref window for MPEG2 */ +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; +mov (1) INPUT_ARG0.8<1>:ud vme_m0.8<0,1,0>:ud {align1}; +add (2) INPUT_ARG0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) INPUT_ARG1.0<1>:ud pic_ref.0<8,8,1>:ud {align1}; + +SAVE_RET {align1}; +jmpi (1) ref_boundary_check; +mov (2) vme_m0.0<1>:w RET_ARG<2,2,1>:w {align1}; + +/* m2 */ +mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; + +/* m3 */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 */ +mov (8) vme_msg_4<1>:UD 0x0:UD {align1}; + + +/* m1 */ +mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; +mov (1) intra_flag<1>:UW 0x0:UW {align1} ; +mov (1) tmp_reg0.0<1>:uw LUMA_INTRA_8x8_DISABLE:uw {align1}; +add (1) tmp_reg0.0<1>:uw tmp_reg0.0<0,1,0>:uw LUMA_INTRA_4x4_DISABLE:uw {align1}; +mov (1) intra_part_mask_ub<1>:UB tmp_reg0.0<0,1,0>:ub {align1}; +/* m1 */ +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + + +/* M0 */ +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_HALF:UD {align1}; +/* 16x16 Source, 1/2 pixel, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* m1 */ + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* MV num is passed by constant buffer. R4.28 */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +add (1) vme_m1.4<1>:UD vme_m1.4<0,1,0>:UD FB_PRUNING_DISABLE:UD {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; + +/* Bilinear filter */ +mov (1) tmp_reg0.0<1>:uw 0x04:uw {align1}; +add (1) vme_m1.30<1>:ub vme_m1.30<0,1,0>:ub tmp_reg0.0<0,1,0>:ub {align1}; + +/* Set the MV cost center */ +mov (1) vme_m1.16<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (1) vme_m1.20<1>:ud mv_cc_ref.0<0,1,0>:ud {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + + +send (8) + vme_msg_ind + vme_wb + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_MESSAGE_TYPE_INTER + ) + mlen vme_msg_length + rlen vme_inter_wb_length + {align1}; + + +cmp.l.f0.0 (1) null:uw vme_wb0.6<0,1,0>:uw tmp_vme_wb0.6<0,1,0>:uw {align1}; +(f0.0) jmpi (1) vme_done; +mov (8) vme_wb0.0<1>:ud tmp_vme_wb0.0<8,8,1>:ud {align1}; +mov (8) vme_wb1.0<1>:ud tmp_vme_wb1.0<8,8,1>:ud {align1}; + +vme_done: + jmpi (1) vme_mv_output; +nop; +nop; +nop; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7a new file mode 100644 index 000000000..bf0cdb34e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7a @@ -0,0 +1,3 @@ +#include "vme7.inc" +#include "vme7_mpeg2.inc" +#include "mpeg2_inter_ivb.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7b new file mode 100644 index 000000000..1ffcdd5ad --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/mpeg2_inter_ivb.g7b @@ -0,0 +1,308 @@ + { 0x00800001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800061, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00061, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 }, + { 0x00000001, 0x24540231, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24884521, 0x000000a2, 0x000000a1 }, + { 0x00000040, 0x24884421, 0x00000488, 0x000000a0 }, + { 0x00000041, 0x24880c21, 0x00000488, 0x0000000a }, + { 0x00000001, 0x24940231, 0x00000014, 0x00000000 }, + { 0x00200009, 0x2a402d29, 0x00450098, 0x00040004 }, + { 0x00200001, 0x2a500129, 0x00450094, 0x00000000 }, + { 0x00600001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2ae00061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x000000f2 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00600060 }, + { 0x00210001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x2ae000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2af401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2ae40021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2af001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00100010 }, + { 0x00210001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00210001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000076 }, + { 0x00000001, 0x2b0000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b1401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b040021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b1001ed, 0x00000000, 0x00010001 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00080008 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000026 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x00000040, 0x24003dad, 0x00000400, 0x00010001 }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01ca1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b240021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000028 }, + { 0x00600001, 0x2b400061, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002e28, 0x000000a5, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000022 }, + { 0x00000001, 0x2b2000e5, 0x00000000, 0x00000001 }, + { 0x00200001, 0x24000229, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24003dad, 0x00450400, 0xffffffff }, + { 0x00000041, 0x2b482521, 0x000000a2, 0x00000402 }, + { 0x00000040, 0x2b482421, 0x00000b48, 0x00000400 }, + { 0x00000041, 0x2b480c21, 0x00000b48, 0x0000000a }, + { 0x00000001, 0x2b540231, 0x00000014, 0x00000000 }, + { 0x00000001, 0x2b680021, 0x00000b48, 0x00000000 }, + { 0x00000040, 0x2b480c21, 0x00000b48, 0x00000008 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x02180003 }, + { 0x01000005, 0x20000c20, 0x00000b80, 0x00002000 }, + { 0x00310001, 0x2b3401ed, 0x00000000, 0xffffffff }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000008 }, + { 0x00000001, 0x2b480021, 0x00000b68, 0x00000000 }, + { 0x0a800031, 0x2ba01cb1, 0x00000b40, 0x02180203 }, + { 0x00200001, 0x2b240021, 0x00450ba0, 0x00000000 }, + { 0x00000001, 0x2b3001ed, 0x00000000, 0x00010001 }, + { 0x00000040, 0x240014a5, 0x00000b00, 0x00000b20 }, + { 0x01000010, 0x20001ca4, 0x00000400, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000010 }, + { 0x02000010, 0x20001ca4, 0x00000ae0, 0x00000000 }, + { 0x00010001, 0x2b040021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240021, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b140129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b340129, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00021, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00061, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000032 }, + { 0x00600001, 0x24000061, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200af4, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b14, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200b34, 0x00000000 }, + { 0x00010040, 0x24003dad, 0x00200400, 0x00010001 }, + { 0x00010001, 0x24040021, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20003da4, 0x00200400, 0x00010001 }, + { 0x00010001, 0x2ac00021, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000018 }, + { 0x00000001, 0x2fa001ad, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000008e }, + { 0x00000001, 0x2ac001ad, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa001ad, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa401ad, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa801ad, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000082 }, + { 0x00000001, 0x2ac201ad, 0x00000fe4, 0x00000000 }, + { 0x00200001, 0x2a2001ad, 0x00450ae4, 0x00000000 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa00021, 0x00000440, 0x00000000 }, + { 0x00000001, 0x2fa80021, 0x00000448, 0x00000000 }, + { 0x00600001, 0x2fc00021, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000094 }, + { 0x00200001, 0x244001ad, 0x00450fe4, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00bb00bb }, + { 0x00000001, 0x28640231, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x28900061, 0x00000000, 0x11111111 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00020002 }, + { 0x00000040, 0x24002d29, 0x00000400, 0x00040004 }, + { 0x00000001, 0x247c0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x7e201000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00200040, 0x244035ad, 0x00450440, 0x00450a90 }, + { 0x00200040, 0x244435ad, 0x00450444, 0x00450a90 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000040, 0x24640c21, 0x00000464, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00040004 }, + { 0x00000040, 0x247e4631, 0x0000047e, 0x00000400 }, + { 0x00000001, 0x24700021, 0x00000a20, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a686000 }, + { 0x01000005, 0x20002d28, 0x000000a6, 0x00040004 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000096 }, + { 0x01000005, 0x20000c20, 0x00000180, 0x00002000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000012 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d01a0, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000544, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000025 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000a }, + { 0x00000001, 0x28200021, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240021, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280021, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0021, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28300061, 0x00000000, 0x00000035 }, + { 0x00000001, 0x28340021, 0x00000488, 0x00000000 }, + { 0x00000040, 0x24880c21, 0x00000488, 0x00000008 }, + { 0x00600001, 0x28000021, 0x008d0480, 0x00000000 }, + { 0x0a800031, 0x20001cac, 0x00000800, 0x040a0203 }, + { 0x0a800031, 0x2b801ca1, 0x00000b40, 0x0219e003 }, + { 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24001ca8, 0x00000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa4 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x0000000e }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000014 }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000000c }, + { 0x04000010, 0x200035ac, 0x00000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x04000010, 0x200035ac, 0x00000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe401ad, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe401ad, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00200040, 0x2f6035ad, 0x00450fa8, 0x00450fa0 }, + { 0x00000040, 0x2f703dad, 0x00000f60, 0x00300030 }, + { 0x00000040, 0x2f723dad, 0x00000f62, 0x00280028 }, + { 0x00200041, 0x2f903dad, 0x00450fd0, 0xffffffff }, + { 0x00200040, 0x2f8035ad, 0x00450fa8, 0x00450f90 }, + { 0x00200040, 0x2f8435ad, 0x00450fa8, 0x00450fd0 }, + { 0x05000010, 0x200035ac, 0x00000f60, 0x00000f80 }, + { 0x00010001, 0x2f6001ad, 0x00000f80, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x00000f70, 0x00000f84 }, + { 0x00010040, 0x2f603dad, 0x00000f84, 0xffd0ffd0 }, + { 0x05000010, 0x200035ac, 0x00000f62, 0x00000f82 }, + { 0x00010001, 0x2f6201ad, 0x00000f82, 0x00000000 }, + { 0x03000010, 0x200035ac, 0x00000f72, 0x00000f86 }, + { 0x00010040, 0x2f623dad, 0x00000f86, 0xffd8ffd8 }, + { 0x05000010, 0x20003dac, 0x00000f60, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00010001, 0x2f6001ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x03000010, 0x200035ac, 0x00000f70, 0x00000fc0 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00010040, 0x2f603dad, 0x00000fc0, 0xffd0ffd0 }, + { 0x05000010, 0x20003dac, 0x00000f62, 0x00000000 }, + { 0x00110020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00010001, 0x2f6201ed, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x03000010, 0x200035ac, 0x00000f72, 0x00000fc2 }, + { 0x00010040, 0x2f623dad, 0x00000fc2, 0xffd8ffd8 }, + { 0x00200041, 0x2f803dad, 0x00450fa8, 0xffffffff }, + { 0x00200040, 0x2fe435ad, 0x00450f60, 0x00450f80 }, + { 0x00000001, 0x34000020, 0x00000fe0, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0020000c, 0x2a803dad, 0x00450ac0, 0x00020002 }, + { 0x00200001, 0x240001ad, 0x00450a80, 0x00000000 }, + { 0x00200040, 0x2a883dad, 0x00450a80, 0x00030003 }, + { 0x00200005, 0x2a902d29, 0x00450a88, 0xfffcfffc }, + { 0x05000010, 0x20003dac, 0x00000400, 0x00000000 }, + { 0x00010041, 0x24003dad, 0x00000400, 0xffffffff }, + { 0x05000010, 0x20003dac, 0x00000402, 0x00000000 }, + { 0x00010041, 0x24023dad, 0x00000402, 0xffffffff }, + { 0x04000010, 0x20003dac, 0x00000400, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000006 }, + { 0x04000010, 0x20003dac, 0x00000402, 0x00040004 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000002 }, + { 0x00000020, 0x34001c00, 0x00001400, 0x0000004a }, + { 0x00600001, 0x2c800021, 0x008d0180, 0x00000000 }, + { 0x00600001, 0x2ca00021, 0x008d01a0, 0x00000000 }, + { 0x00000001, 0x244001ed, 0x00000000, 0xfff0fff0 }, + { 0x00000001, 0x244201ed, 0x00000000, 0xfff4fff4 }, + { 0x00000001, 0x2fa80021, 0x00000448, 0x00000000 }, + { 0x00200040, 0x2fa035ad, 0x00450440, 0x00450a90 }, + { 0x00600001, 0x2fc00021, 0x008d0a40, 0x00000000 }, + { 0x00000040, 0x2fe00c01, 0x00001400, 0x00000020 }, + { 0x00000020, 0x34001c00, 0x00001400, 0xffffff94 }, + { 0x00200001, 0x244001ad, 0x00450fe4, 0x00000000 }, + { 0x00600001, 0x28400061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28600061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800061, 0x00000000, 0x00000000 }, + { 0x00600001, 0x24600061, 0x00000000, 0x00000000 }, + { 0x00000001, 0x247c0169, 0x00000000, 0x00000000 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00020002 }, + { 0x00000040, 0x24002d29, 0x00000400, 0x00040004 }, + { 0x00000001, 0x247c0231, 0x00000400, 0x00000000 }, + { 0x00000001, 0x247d0231, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x244c0061, 0x00000000, 0x7e201000 }, + { 0x00000001, 0x24560169, 0x00000000, 0x28302830 }, + { 0x00000001, 0x24440021, 0x00000440, 0x00000000 }, + { 0x00600001, 0x28000021, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600061, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24640231, 0x0000009c, 0x00000000 }, + { 0x00000040, 0x24640c21, 0x00000464, 0x00000000 }, + { 0x00000001, 0x24680061, 0x00000000, 0x30003030 }, + { 0x00000001, 0x24000169, 0x00000000, 0x00040004 }, + { 0x00000040, 0x247e4631, 0x0000047e, 0x00000400 }, + { 0x00000001, 0x24700021, 0x00000a20, 0x00000000 }, + { 0x00000001, 0x24740021, 0x00000a20, 0x00000000 }, + { 0x00600001, 0x28200021, 0x008d0460, 0x00000000 }, + { 0x08600031, 0x21801cbd, 0x00000800, 0x0a682000 }, + { 0x05000010, 0x20002528, 0x00000186, 0x00000c86 }, + { 0x00010020, 0x34001c00, 0x00001400, 0x00000004 }, + { 0x00600001, 0x21800021, 0x008d0c80, 0x00000000 }, + { 0x00600001, 0x21a00021, 0x008d0ca0, 0x00000000 }, + { 0x00000020, 0x34001c00, 0x00001400, 0xffffff04 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme.inc new file mode 100644 index 000000000..50f990a8c --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme.inc @@ -0,0 +1,300 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc +// +// Global symbols define +// + +/* + * Constant + */ +define(`VME_MESSAGE_TYPE_INTER', `1') +define(`VME_MESSAGE_TYPE_INTRA', `2') +define(`VME_MESSAGE_TYPE_MIXED', `3') + +define(`BLOCK_32X1', `0x0000001F') +define(`BLOCK_4X16', `0x000F0003') + +define(`LUMA_INTRA_16x16_DISABLE', `0x1') +define(`LUMA_INTRA_8x8_DISABLE', `0x2') +define(`LUMA_INTRA_4x4_DISABLE', `0x4') + +define(`INTRA_PRED_AVAIL_FLAG_AE', `0x60') +define(`INTRA_PRED_AVAIL_FLAG_B', `0x10') +define(`INTRA_PRED_AVAIL_FLAG_C', `0x8') +define(`INTRA_PRED_AVAIL_FLAG_D', `0x4') + +define(`BIND_IDX_VME', `0') +define(`BIND_IDX_VME_REF0', `1') +define(`BIND_IDX_VME_REF1', `2') +define(`BIND_IDX_OUTPUT', `3') +define(`BIND_IDX_INEP', `4') + +define(`SUB_PEL_MODE_INTEGER', `0x00000000') +define(`SUB_PEL_MODE_HALF', `0x00001000') +define(`SUB_PEL_MODE_QUARTER', `0x00003000') + +define(`INTER_SAD_NONE', `0x00000000') +define(`INTER_SAD_HAAR', `0x00200000') + +define(`INTRA_SAD_NONE', `0x00000000') +define(`INTRA_SAD_HAAR', `0x00800000') + +define(`INTER_PART_MASK', `0x00000000') + +define(`SEARCH_CTRL_SINGLE', `0x00000000') +define(`SEARCH_CTRL_DUAL_START', `0x00000100') +define(`SEARCH_CTRL_DUAL_RECORD', `0x00000300') +define(`SEARCH_CTRL_DUAL_REFERENCE', `0x00000700') + +define(`REF_REGION_SIZE', `0x2830:UW') +define(`MIN_REF_REGION_SIZE', `0x2020:UW') + +define(`BI_SUB_MB_PART_MASK', `0x0c000000') +define(`MAX_NUM_MV', `0x00000020') +define(`FB_PRUNING_ENABLE', `0x40000000') + +define(`SEARCH_PATH_LEN', `0x00003030') +define(`START_CENTER', `0x30000000') + +define(`ADAPTIVE_SEARCH_ENABLE', `0x00000002') +define(`INTRA_PREDICTORE_MODE', `0x11111111:UD') + +define(`INTER_VME_OUTPUT_IN_OWS', `10') +define(`INTER_VME_OUTPUT_MV_IN_OWS', `8') + +define(`INTRAMBFLAG_MASK', `0x00002000') +define(`MVSIZE_UW_BASE', `0x0040') +define(`MFC_MV32_BIT_SHIFT', `5') +define(`CBP_DC_YUV_UW', `0x000E') + +#ifdef DEV_SNB + +define(`MV32_BIT_MASK', `0x0010') +define(`MV32_BIT_SHIFT', `4') + +define(`OBW_CACHE_TYPE', `5') + +#else + +define(`MV32_BIT_MASK', `0x0020') +define(`MV32_BIT_SHIFT', `5') + +define(`OBW_CACHE_TYPE', `10') + +#endif + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_3', `3') /* 4 OWords */ +define(`OBW_CONTROL_4', `4') /* 8 OWords */ + +#ifdef DEV_SNB + +define(`OBW_WRITE_COMMIT_CATEGORY', `1') /* write commit on Sandybrige */ + +#else + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + +#endif + + +define(`OBW_HEADER_PRESENT', `1') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r11 reserved + * r12 write back of VME message + * r13 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`w_in_mb_uw', `inline_reg0.2') +define(`orig_xy_ub', `inline_reg0.0') +define(`orig_x_ub', `inline_reg0.0') /* in macroblock */ +define(`orig_y_ub', `inline_reg0.1') +define(`transform_8x8_ub', `inline_reg0.4') +define(`slice_edge_ub', `inline_reg0.4') +define(`num_macroblocks', `inline_reg0.6') +define(`quality_level_ub', `inline_reg0.8') + +/* + * GRF 6~11 -- reserved + */ + +/* + * GRF 12~15 -- write back for VME message + */ +define(`vme_wb', `r12') +define(`vme_wb0', `r12') +define(`vme_wb1', `r13') +define(`vme_wb2', `r14') +define(`vme_wb3', `r15') + +#ifdef DEV_SNB +/* + * GRF 16 -- write back for Oword Block Write message with write commit bit + */ +define(`obw_wb', `r16') +define(`obw_wb_length', `1') + +#else + +/* + * GRF 16 -- write back for VME message + */ +define(`vme_wb4', `r16') +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + +#endif + +/* + * GRF 18~21 -- Intra Neighbor Edge Pixels + */ +define(`INEP_ROW', `r18') +define(`INEP_COL0', `r20') +define(`INEP_COL1', `r21') + +/* + * temporary registers + */ +define(`tmp_reg0', `r32') +define(`read0_header', `tmp_reg0') +define(`tmp_reg1', `r33') +define(`read1_header', `tmp_reg1') +define(`tmp_reg2', `r34') +define(`vme_m0', `tmp_reg2') +define(`tmp_reg3', `r35') +define(`vme_m1', `tmp_reg3') +define(`intra_flag', `vme_m1.28') +define(`intra_part_mask_ub', `vme_m1.28') +define(`mb_intra_struct_ub', `vme_m1.29') +define(`tmp_reg4', `r36') +define(`obw_m0', `tmp_reg4') +define(`tmp_reg5', `r37') +define(`obw_m1', `tmp_reg5') +define(`tmp_reg6', `r38') +define(`obw_m2', `tmp_reg6') +define(`tmp_reg7', `r39') +define(`obw_m3', `tmp_reg7') +define(`tmp_reg8', `r40') +define(`obw_m4', `tmp_reg8') +define(`tmp_reg9', `r41') +define(`tmp_x_w', `tmp_reg9.0') +define(`tmp_rega', `r42') +define(`tmp_ud0', `tmp_rega.0') +define(`tmp_ud1', `tmp_rega.4') +define(`tmp_ud2', `tmp_rega.8') +define(`tmp_ud3', `tmp_rega.12') +define(`tmp_uw0', `tmp_rega.0') +define(`tmp_uw1', `tmp_rega.2') +define(`tmp_uw2', `tmp_rega.4') +define(`tmp_uw3', `tmp_rega.6') +define(`tmp_uw4', `tmp_rega.8') +define(`tmp_uw5', `tmp_rega.10') +define(`tmp_uw6', `tmp_rega.12') +define(`tmp_uw7', `tmp_rega.14') + +/* + * MRF registers + */ +#ifdef DEV_SNB + +define(`msg_ind', `0') +define(`msg_reg0', `m0') /* m0 */ +define(`msg_reg1', `m1') /* m1 */ +define(`msg_reg2', `m2') /* m2 */ +define(`msg_reg3', `m3') /* m3 */ +define(`msg_reg4', `m4') /* m4 */ + +#else + +define(`msg_ind', `64') +define(`msg_reg0', `g64') +define(`msg_reg1', `g65') +define(`msg_reg2', `g66') +define(`msg_reg3', `g67') +define(`msg_reg4', `g68') + +#endif + +/* + * VME message payload + */ + +#ifdef DEV_SNB + +define(`vme_msg_length', `4') +define(`vme_inter_wb_length', `4') + +#else + +define(`vme_msg_length', `5') +define(`vme_inter_wb_length', `6') + +#endif + +define(`vme_intra_wb_length', `1') + +define(`vme_msg_ind', `msg_ind') +define(`vme_msg_0', `msg_reg0') +define(`vme_msg_1', `msg_reg1') +define(`vme_msg_2', `msg_reg2') + +#ifdef DEV_SNB + +define(`vme_msg_3', `vme_msg_2') +define(`vme_msg_4', `msg_reg3') + +#else + +define(`vme_msg_3', `msg_reg3') +define(`vme_msg_4', `msg_reg4') + +#endif + +define(`DEFAULT_QUALITY_LEVEL', `0x01') +define(`HIGH_QUALITY_LEVEL', `DEFAULT_QUALITY_LEVEL') +define(`LOW_QUALITY_LEVEL', `0x02') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7.inc new file mode 100644 index 000000000..acff81f7e --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7.inc @@ -0,0 +1,341 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc +// +// Global symbols define +// + +/* + * Constant + */ +define(`VME_MESSAGE_TYPE_INTER', `1') +define(`VME_MESSAGE_TYPE_INTRA', `2') +define(`VME_MESSAGE_TYPE_MIXED', `3') + +define(`BLOCK_32X1', `0x0000001F') +define(`BLOCK_4X16', `0x000F0003') + +define(`LUMA_INTRA_16x16_DISABLE', `0x1') +define(`LUMA_INTRA_8x8_DISABLE', `0x2') +define(`LUMA_INTRA_4x4_DISABLE', `0x4') + +define(`INTRA_PRED_AVAIL_FLAG_AE', `0x60') +define(`INTRA_PRED_AVAIL_FLAG_B', `0x10') +define(`INTRA_PRED_AVAIL_FLAG_C', `0x8') +define(`INTRA_PRED_AVAIL_FLAG_D', `0x4') + +define(`BIND_IDX_VME', `0') +define(`BIND_IDX_VME_REF0', `1') +define(`BIND_IDX_VME_REF1', `2') +define(`BIND_IDX_OUTPUT', `3') +define(`BIND_IDX_INEP', `4') + +define(`SUB_PEL_MODE_INTEGER', `0x00000000') +define(`SUB_PEL_MODE_HALF', `0x00001000') +define(`SUB_PEL_MODE_QUARTER', `0x00003000') + +define(`INTER_SAD_NONE', `0x00000000') +define(`INTER_SAD_HAAR', `0x00200000') + +define(`INTRA_SAD_NONE', `0x00000000') +define(`INTRA_SAD_HAAR', `0x00800000') + +define(`INTER_PART_MASK', `0x00000000') + +define(`SEARCH_CTRL_SINGLE', `0x00000000') +define(`SEARCH_CTRL_DUAL_START', `0x00000100') +define(`SEARCH_CTRL_DUAL_RECORD', `0x00000300') +define(`SEARCH_CTRL_DUAL_REFERENCE', `0x00000700') + +define(`REF_REGION_SIZE', `0x2830:UW') +define(`MIN_REF_REGION_SIZE', `0x2020:UW') +define(`DREF_REGION_SIZE', `0x2020:UW') + +define(`BI_SUB_MB_PART_MASK', `0x0c000000') +define(`MAX_NUM_MV', `0x00000020') +define(`FB_PRUNING_ENABLE', `0x40000000') +define(`FB_PRUNING_DISABLE', `0x00000000') + +define(`SEARCH_PATH_LEN', `0x00003030') +define(`START_CENTER', `0x30000000') + +define(`ADAPTIVE_SEARCH_ENABLE', `0x00000002') +define(`INTRA_PREDICTORE_MODE', `0x11111111:UD') + +define(`INTER_VME_OUTPUT_IN_OWS', `10') +define(`INTER_VME_OUTPUT_MV_IN_OWS', `8') + +define(`INTRAMBFLAG_MASK', `0x00002000') +define(`MVSIZE_UW_BASE', `0x0040') +define(`MFC_MV32_BIT_SHIFT', `5') +define(`CBP_DC_YUV_UW', `0x000E') + +define(`DC_HARR_ENABLE', `0x0000') +define(`DC_HARR_DISABLE', `0x0020') + +define(`MV32_BIT_MASK', `0x0020') +define(`MV32_BIT_SHIFT', `5') + +define(`OBW_CACHE_TYPE', `10') + + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_3', `3') /* 4 OWords */ +define(`OBW_CONTROL_8', `4') /* 8 OWords */ + +define(`FME_REPART_ENABLE', `0x80000000') +define(`FME_REPART_DISABLE', `0x00000000') +define(`FME_SINGLE_PARTION', `0x00000000') +define(`FME_MUL_PARTION', `0x00000008') + + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + + +define(`OBW_HEADER_PRESENT', `1') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r11 reserved + * r12 write back of VME message + * r13 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`w_in_mb_uw', `inline_reg0.2') +define(`orig_xy_ub', `inline_reg0.0') +define(`orig_x_ub', `inline_reg0.0') /* in macroblock */ +define(`orig_y_ub', `inline_reg0.1') +define(`transform_8x8_ub', `inline_reg0.4') +define(`input_mb_intra_ub', `inline_reg0.5') +define(`num_macroblocks', `inline_reg0.6') +define(`quality_level_ub', `inline_reg0.7') + +/* + * GRF 6~11 -- reserved + */ + +/* + * GRF 12~15 -- write back for VME message + */ +define(`vme_wb', `r12') +define(`vme_wb0', `r12') +define(`vme_wb1', `r13') +define(`vme_wb2', `r14') +define(`vme_wb3', `r15') +define(`vme_wb4', `r16') +define(`vme_wb5', `r17') +define(`vme_wb6', `r18') + + +/* + * GRF 24 -- write for VME output message + */ +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + + +/* + * GRF 28~30 -- Intra Neighbor Edge Pixels + */ +define(`INEP_ROW', `r28') +define(`INEP_COL0', `r29') +define(`INEP_COL1', `r30') + +/* + * temporary registers + */ +define(`tmp_reg0', `r32') +define(`read0_header', `tmp_reg0') +define(`tmp_reg1', `r33') +define(`read1_header', `tmp_reg1') +define(`tmp_reg2', `r34') +define(`vme_m0', `tmp_reg2') +define(`tmp_reg3', `r35') +define(`vme_m1', `tmp_reg3') +define(`intra_flag', `vme_m1.28') +define(`intra_part_mask_ub', `vme_m1.28') +define(`mb_intra_struct_ub', `vme_m1.29') +define(`tmp_reg4', `r36') +define(`obw_m0', `tmp_reg4') +define(`tmp_reg5', `r37') +define(`obw_m1', `tmp_reg5') +define(`tmp_reg6', `r38') +define(`obw_m2', `tmp_reg6') +define(`tmp_reg7', `r39') +define(`obw_m3', `tmp_reg7') +define(`tmp_reg8', `r40') +define(`obw_m4', `tmp_reg8') +define(`tmp_reg9', `r41') +define(`tmp_x_w', `tmp_reg9.0') +define(`tmp_rega', `r42') +define(`tmp_ud0', `tmp_rega.0') +define(`tmp_ud1', `tmp_rega.4') +define(`tmp_ud2', `tmp_rega.8') +define(`tmp_ud3', `tmp_rega.12') +define(`tmp_uw0', `tmp_rega.0') +define(`tmp_uw1', `tmp_rega.2') +define(`tmp_uw2', `tmp_rega.4') +define(`tmp_uw3', `tmp_rega.6') +define(`tmp_uw4', `tmp_rega.8') +define(`tmp_uw5', `tmp_rega.10') +define(`tmp_uw6', `tmp_rega.12') +define(`tmp_uw7', `tmp_rega.14') + +define(`vme_m2', `r43') +/* + * MRF registers + */ + +define(`msg_ind', `64') +define(`msg_reg0', `r64') +define(`msg_reg1', `r65') +define(`msg_reg2', `r66') +define(`msg_reg3', `r67') +define(`msg_reg4', `r68') +define(`msg_reg5', `r69') +define(`msg_reg6', `r70') +define(`msg_reg7', `r71') +define(`msg_reg8', `r72') +define(`msg_reg9', `r73') + +define(`ts_msg_ind', `112') +define(`ts_msg_reg0', `r112') +/* + * VME message payload + */ + +define(`vme_msg_length', `5') +define(`vme_inter_wb_length', `6') +define(`vme_intra_wb_length', `1') + +define(`vme_msg_ind', `msg_ind') +define(`vme_msg_0', `msg_reg0') +define(`vme_msg_1', `msg_reg1') +define(`vme_msg_2', `msg_reg2') + +define(`vme_msg_3', `msg_reg3') +define(`vme_msg_4', `msg_reg4') + + +define(`vme_msg_5', `msg_reg5') +define(`vme_msg_6', `msg_reg6') +define(`vme_msg_7', `msg_reg7') +define(`vme_msg_8', `msg_reg8') +define(`vme_msg_9', `msg_reg9') + +define(`RETURN_REG', `r127.0') +define(`RET_ARG', `r127.4') + +/* Now at most two registers are used for input parameter */ +define(`INPUT_ARG0', `r125') +define(`INPUT_ARG1', `r126') + +/* Two temporal registers are used in the function */ +define(`TEMP_VAR0', `r123') +define(`TEMP_VAR1', `r124') + + +define(`OBR_MESSAGE_TYPE', `0') +define(`OBR_CACHE_TYPE', `10') +define(`OBR_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBR_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBR_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBR_CONTROL_2', `2') /* 2 OWords */ +define(`OBR_CONTROL_4', `3') /* 4 OWords */ +define(`OBR_CONTROL_8', `4') /* 8 OWords */ +define(`OBR_WRITE_COMMIT_CATEGORY', `0') /* category on SNB+ for Data port */ +define(`OBR_HEADER_PRESENT', `1') + +define(`mb_hwdep', `r5.6') +define(`MB_AVAIL', `1:d') +define(`MB_PRED_FLAG', `1:w') + +define(`mb_pred_mode', `r85') +define(`mb_mvp_ref', `r86') +define(`mba_result', `r87') +define(`mbb_result', `r88') +define(`mbc_result', `r89') +define(`mb_ind', `90') +define(`mb_msg0', `r90') +define(`mb_msg_tmp', `r91') +define(`mb_wb', `r92') +define(`mb_mode_wb', `r92') +define(`mb_mv0', `r93') +define(`mb_mv1', `r94') +define(`mb_mv2', `r95') +define(`mb_mv3', `r96') +define(`mb_ref', `r97') +define(`mb_ref_win', `r84') + +define(`PRED_L0', `0x0':uw) +define(`PRED_L1', `0x1':uw) +define(`PRED_BI', `0x2':uw) +define(`PRED_DIRECT', `0x3':uw) +define(`PRED_MASK', `0x3':uw) + +/* The MAX search len per reference is 16 */ +define(`DSEARCH_PATH_LEN', `0x00001212') +define(`BI_WEIGHT', `0x20':uw) +define(`DSTART_CENTER', `0x00000000') +define(`INTER_MASK', `0x03') +define(`INTER_16X16MODE', `0x0') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') +define(`INTER_8X8MODE', `0x03') +define(`INTER_BLOCK0', `0x0') +define(`INTER_BLOCK1', `0x1') +define(`INTER_BLOCK2', `0x2') +define(`INTER_BLOCK3', `0x3') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') + +define(`OBR_MESSAGE_FENCE', `7') +define(`OBR_MF_NOCOMMIT', `0') +define(`OBR_MF_COMMIT', `0x20') + +define(`DEFAULT_QUALITY_LEVEL', `0x01') +define(`HIGH_QUALITY_LEVEL', `DEFAULT_QUALITY_LEVEL') +define(`LOW_QUALITY_LEVEL', `0x02') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75.inc new file mode 100644 index 000000000..75c461ebf --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75.inc @@ -0,0 +1,361 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc +// +// Global symbols define +// + +/* + * Constant + */ +define(`VME_MESSAGE_TYPE_INTER', `1') +define(`VME_MESSAGE_TYPE_INTRA', `2') +define(`VME_MESSAGE_TYPE_MIXED', `3') + +define(`VME_SIC_MESSAGE_TYPE', `1') +define(`VME_IME_MESSAGE_TYPE', `2') +define(`VME_FBR_MESSAGE_TYPE', `3') + +define(`BLOCK_32X1', `0x0000001F') +define(`BLOCK_4X16', `0x000F0003') +define(`BLOCK_8X4', `0x00070003') + +define(`LUMA_INTRA_16x16_DISABLE', `0x1') +define(`LUMA_INTRA_8x8_DISABLE', `0x2') +define(`LUMA_INTRA_4x4_DISABLE', `0x4') + +define(`INTRA_PRED_AVAIL_FLAG_AE', `0x60') +define(`INTRA_PRED_AVAIL_FLAG_B', `0x10') +define(`INTRA_PRED_AVAIL_FLAG_C', `0x8') +define(`INTRA_PRED_AVAIL_FLAG_D', `0x4') + +define(`BIND_IDX_VME', `0') +define(`BIND_IDX_VME_REF0', `1') +define(`BIND_IDX_VME_REF1', `2') +define(`BIND_IDX_OUTPUT', `3') +define(`BIND_IDX_INEP', `4') + +define(`SUB_PEL_MODE_INTEGER', `0x00000000') +define(`SUB_PEL_MODE_HALF', `0x00001000') +define(`SUB_PEL_MODE_QUARTER', `0x00003000') + +define(`INTER_SAD_NONE', `0x00000000') +define(`INTER_SAD_HAAR', `0x00200000') + +define(`INTRA_SAD_NONE', `0x00000000') +define(`INTRA_SAD_HAAR', `0x00800000') + +define(`INTER_PART_MASK', `0x00000000') + +define(`SEARCH_CTRL_SINGLE', `0x00000000') +define(`SEARCH_CTRL_DUAL_START', `0x00000100') +define(`SEARCH_CTRL_DUAL_RECORD', `0x00000300') +define(`SEARCH_CTRL_DUAL_REFERENCE', `0x00000700') + +define(`REF_REGION_SIZE', `0x2830:UW') +define(`MIN_REF_REGION_SIZE', `0x2020:UW') +define(`DREF_REGION_SIZE', `0x2020:UW') + +define(`BI_SUB_MB_PART_MASK', `0x0c000000') +define(`MAX_NUM_MV', `0x00000020') +define(`FB_PRUNING_ENABLE', `0x40000000') + +define(`SEARCH_PATH_LEN', `0x00003030') +define(`START_CENTER', `0x30000000') + +define(`ADAPTIVE_SEARCH_ENABLE', `0x00000002') +define(`INTRA_PREDICTORE_MODE', `0x11111111:UD') + +define(`INTER_VME_OUTPUT_IN_OWS', `10') +define(`INTER_VME_OUTPUT_MV_IN_OWS', `8') + +define(`INTRAMBFLAG_MASK', `0x00002000') +define(`MVSIZE_UW_BASE', `0x0040') +define(`MFC_MV32_BIT_SHIFT', `5') +define(`CBP_DC_YUV_UW', `0x000E') + +define(`DC_HARR_ENABLE', `0x0000') +define(`DC_HARR_DISABLE', `0x0020') + +define(`MV32_BIT_MASK', `0x0020') +define(`MV32_BIT_SHIFT', `5') + +define(`OBW_CACHE_TYPE', `10') + + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_3', `3') /* 4 OWords */ +define(`OBW_CONTROL_8', `4') /* 8 OWords */ + +define(`FBR_BME_ENABLE', `0x00000000') +define(`FBR_BME_DISABLE', `0x00040000') + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + + +define(`OBW_HEADER_PRESENT', `1') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r11 reserved + * r12 write back of VME message + * r13 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`w_in_mb_uw', `inline_reg0.2') +define(`orig_xy_ub', `inline_reg0.0') +define(`orig_x_ub', `inline_reg0.0') /* in macroblock */ +define(`orig_y_ub', `inline_reg0.1') +define(`transform_8x8_ub', `inline_reg0.4') +define(`input_mb_intra_ub', `inline_reg0.5') +define(`num_macroblocks', `inline_reg0.6') +define(`quality_level_ub', `inline_reg0.7') + +/* + * GRF 6~11 -- reserved + */ + +/* + * GRF 12~15 -- write back for VME message + */ +define(`vme_wb', `r12') +define(`vme_wb0', `r12') +define(`vme_wb1', `r13') +define(`vme_wb2', `r14') +define(`vme_wb3', `r15') +define(`vme_wb4', `r16') +define(`vme_wb5', `r17') +define(`vme_wb6', `r18') +define(`vme_ime_wb7', `r19') +define(`vme_ime_wb8', `r20') +define(`vme_ime_wb9', `r21') +define(`vme_ime_wb10', `r22') + + +/* + * GRF 24 -- write for VME output message + */ +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + + +/* + * GRF 28~30 -- Intra Neighbor Edge Pixels + */ +define(`INEP_ROW', `r28') +define(`INEP_COL0', `r29') +define(`INEP_COL1', `r30') + +/* + * GRF 48~50 -- Chroma Neighbor Edge Pixels + */ +define(`CHROMA_ROW', `r48') +define(`CHROMA_COL', `r49') + +/* + * temporary registers + */ +define(`tmp_reg0', `r32') +define(`read0_header', `tmp_reg0') +define(`tmp_reg1', `r33') +define(`read1_header', `tmp_reg1') +define(`tmp_reg2', `r34') +define(`vme_m0', `tmp_reg2') +define(`tmp_reg3', `r35') +define(`vme_m1', `tmp_reg3') +define(`intra_flag', `vme_m1.28') +define(`intra_part_mask_ub', `vme_m1.28') +define(`mb_intra_struct_ub', `vme_m1.29') +define(`tmp_reg4', `r36') +define(`obw_m0', `tmp_reg4') +define(`tmp_reg5', `r37') +define(`obw_m1', `tmp_reg5') +define(`tmp_reg6', `r38') +define(`obw_m2', `tmp_reg6') +define(`tmp_reg7', `r39') +define(`obw_m3', `tmp_reg7') +define(`tmp_reg8', `r40') +define(`obw_m4', `tmp_reg8') +define(`tmp_reg9', `r41') +define(`tmp_x_w', `tmp_reg9.0') +define(`tmp_rega', `r42') +define(`tmp_ud0', `tmp_rega.0') +define(`tmp_ud1', `tmp_rega.4') +define(`tmp_ud2', `tmp_rega.8') +define(`tmp_ud3', `tmp_rega.12') +define(`tmp_uw0', `tmp_rega.0') +define(`tmp_uw1', `tmp_rega.2') +define(`tmp_uw2', `tmp_rega.4') +define(`tmp_uw3', `tmp_rega.6') +define(`tmp_uw4', `tmp_rega.8') +define(`tmp_uw5', `tmp_rega.10') +define(`tmp_uw6', `tmp_rega.12') +define(`tmp_uw7', `tmp_rega.14') + +define(`vme_m2', `r43') +/* + * MRF registers + */ + +define(`msg_ind', `64') +define(`msg_reg0', `r64') +define(`msg_reg1', `r65') +define(`msg_reg2', `r66') +define(`msg_reg3', `r67') +define(`msg_reg4', `r68') +define(`msg_reg5', `r69') +define(`msg_reg6', `r70') +define(`msg_reg7', `r71') +define(`msg_reg8', `r72') +define(`msg_reg9', `r73') + +define(`ts_msg_ind', `112') +define(`ts_msg_reg0', `r112') +/* + * VME message payload + */ + +define(`vme_intra_wb_length', `1') +define(`vme_wb_length', `7') +define(`sic_vme_msg_length', `7') +define(`fbr_vme_msg_length', `7') +define(`ime_vme_msg_length', `5') + +define(`vme_msg_ind', `msg_ind') +define(`vme_msg_0', `msg_reg0') +define(`vme_msg_1', `msg_reg1') +define(`vme_msg_2', `msg_reg2') + +define(`vme_msg_3', `msg_reg3') +define(`vme_msg_4', `msg_reg4') + + +define(`vme_msg_5', `msg_reg5') +define(`vme_msg_6', `msg_reg6') +define(`vme_msg_7', `msg_reg7') +define(`vme_msg_8', `msg_reg8') +define(`vme_msg_9', `msg_reg9') + +define(`BIND_IDX_CBCR', `6') + + +define(`LUMA_CHROMA_MODE', `0x0') +define(`LUMA_INTRA_MODE', `0x1') +define(`LUMA_INTRA_DISABLE', `0x2') + +define(`RETURN_REG', `r127.0') +define(`RET_ARG', `r127.4') + +/* Now at most two registers are used for input parameter */ +define(`INPUT_ARG0', `r125') +define(`INPUT_ARG1', `r126') + +/* Two temporal registers are used in the function */ +define(`TEMP_VAR0', `r123') +define(`TEMP_VAR1', `r124') + + +define(`OBR_MESSAGE_TYPE', `0') +define(`OBR_CACHE_TYPE', `10') +define(`OBR_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBR_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBR_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBR_CONTROL_2', `2') /* 2 OWords */ +define(`OBR_CONTROL_4', `3') /* 4 OWords */ +define(`OBR_CONTROL_8', `4') /* 8 OWords */ +define(`OBR_WRITE_COMMIT_CATEGORY', `0') /* category on SNB+ for Data port */ +define(`OBR_HEADER_PRESENT', `1') + +define(`mb_hwdep', `r5.6') +define(`MB_AVAIL', `1:d') +define(`MB_PRED_FLAG', `1:w') + +define(`mb_pred_mode', `r85') +define(`mb_mvp_ref', `r86') +define(`mba_result', `r87') +define(`mbb_result', `r88') +define(`mbc_result', `r89') +define(`mb_ind', `90') +define(`mb_msg0', `r90') +define(`mb_wb', `r91') +define(`mb_intra_wb', `r91') +define(`mb_inter_wb', `r92') +define(`mb_mv0', `r93') +define(`mb_mv1', `r94') +define(`mb_mv2', `r95') +define(`mb_mv3', `r96') +define(`mb_ref', `r97') +define(`mb_ref_win', `r84') + +define(`PRED_L0', `0x0':uw) +define(`PRED_L1', `0x1':uw) +define(`PRED_BI', `0x2':uw) +define(`PRED_DIRECT', `0x3':uw) +define(`PRED_MASK', `0x3':uw) + +/* The MAX search len per reference is 16 */ +define(`DSEARCH_PATH_LEN', `0x00001212') +define(`BI_WEIGHT', `0x20':uw) +define(`DSTART_CENTER', `0x00000000') +define(`INTER_MASK', `0x03') +define(`INTER_16X16MODE', `0x0') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') +define(`INTER_8X8MODE', `0x03') +define(`INTER_BLOCK0', `0x0') +define(`INTER_BLOCK1', `0x1') +define(`INTER_BLOCK2', `0x2') +define(`INTER_BLOCK3', `0x3') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') + +define(`OBR_MESSAGE_FENCE', `7') +define(`OBR_MF_NOCOMMIT', `0') +define(`OBR_MF_COMMIT', `0x20') + +define(`DEFAULT_QUALITY_LEVEL', `0x01') +define(`HIGH_QUALITY_LEVEL', `DEFAULT_QUALITY_LEVEL') +define(`LOW_QUALITY_LEVEL', `0x02') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75_mpeg2.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75_mpeg2.inc new file mode 100644 index 000000000..db08764fb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme75_mpeg2.inc @@ -0,0 +1,49 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc +// +// Global symbols define +// + +/* + * Constant + */ + +define(`INTER_PART_MASK', `0x7e000000') +define(`mpeg2_ref', `r83') +define(`pic_ref', `r82') +define(`INTRA16_DC_PRED', `0xBB') +/* Cost center ref */ +define(`mv_cc_ref', `r81') +define(`tmp_vme_wb0', `r100') +define(`tmp_vme_wb1', `r101') +define(`tmp_vme_wb2', `r102') +define(`tmp_vme_wb3', `r103') +define(`tmp_vme_wb4', `r104') +define(`tmp_vme_wb5', `r105') +define(`tmp_vme_wb6', `r106') +define(`tmp_vme_wb7', `r107') +define(`tmp_vme_wb8', `r108') +define(`tmp_vme_wb9', `r109') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7_mpeg2.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7_mpeg2.inc new file mode 100644 index 000000000..2cb9836b4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme7_mpeg2.inc @@ -0,0 +1,51 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc +// +// Global symbols define +// + +/* + * Constant + */ + +define(`INTER_PART_MASK', `0x7e000000') +define(`mpeg2_ref', `r83') +define(`pic_ref', `r82') +define(`INTRA16_DC_PRED', `0xBB') + +/* Cost center ref */ +define(`mv_cc_ref', `r81') + +define(`tmp_vme_wb0', `r100') +define(`tmp_vme_wb1', `r101') +define(`tmp_vme_wb2', `r102') +define(`tmp_vme_wb3', `r103') +define(`tmp_vme_wb4', `r104') +define(`tmp_vme_wb5', `r105') +define(`tmp_vme_wb6', `r106') +define(`tmp_vme_wb7', `r107') +define(`tmp_vme_wb8', `r108') +define(`tmp_vme_wb9', `r109') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme8.inc b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme8.inc new file mode 100644 index 000000000..5f05ef20f --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vme8.inc @@ -0,0 +1,369 @@ +/* + * Copyright © <2010>, Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +// Modual name: ME_header.inc for Gen8 +// +// Global symbols define +// + +/* + * Constant + */ +define(`VME_MESSAGE_TYPE_INTER', `1') +define(`VME_MESSAGE_TYPE_INTRA', `2') +define(`VME_MESSAGE_TYPE_MIXED', `3') + +define(`VME_SIC_MESSAGE_TYPE', `1') +define(`VME_IME_MESSAGE_TYPE', `2') +define(`VME_FBR_MESSAGE_TYPE', `3') + +define(`BLOCK_32X1', `0x0000001F') +define(`BLOCK_4X16', `0x000F0003') +define(`BLOCK_8X4', `0x00070003') + +define(`LUMA_INTRA_16x16_DISABLE', `0x1') +define(`LUMA_INTRA_8x8_DISABLE', `0x2') +define(`LUMA_INTRA_4x4_DISABLE', `0x4') + +define(`SUB_PART_8x4_DISABLE', `0x10') +define(`SUB_PART_4x8_DISABLE', `0x20') + +define(`INTRA_PRED_AVAIL_FLAG_AE', `0x60') +define(`INTRA_PRED_AVAIL_FLAG_B', `0x10') +define(`INTRA_PRED_AVAIL_FLAG_C', `0x8') +define(`INTRA_PRED_AVAIL_FLAG_D', `0x4') + +define(`BIND_IDX_VME', `0') +define(`BIND_IDX_VME_REF0', `1') +define(`BIND_IDX_VME_REF1', `2') +define(`BIND_IDX_OUTPUT', `3') +define(`BIND_IDX_INEP', `4') + +define(`SUB_PEL_MODE_INTEGER', `0x00000000') +define(`SUB_PEL_MODE_HALF', `0x00001000') +define(`SUB_PEL_MODE_QUARTER', `0x00003000') + +define(`INTER_SAD_NONE', `0x00000000') +define(`INTER_SAD_HAAR', `0x00200000') + +define(`INTRA_SAD_NONE', `0x00000000') +define(`INTRA_SAD_HAAR', `0x00800000') + +define(`INTER_PART_MASK', `0x00000000') +define(`VP8_INTER_PART_MASK', `0x7e000000') + +define(`SEARCH_CTRL_SINGLE', `0x00000000') +define(`SEARCH_CTRL_DUAL_START', `0x00000100') +define(`SEARCH_CTRL_DUAL_RECORD', `0x00000300') +define(`SEARCH_CTRL_DUAL_REFERENCE', `0x00000700') + +define(`REF_REGION_SIZE', `0x2830:UW') +define(`MIN_REF_REGION_SIZE', `0x2020:UW') +define(`DREF_REGION_SIZE', `0x2020:UW') + +define(`BI_SUB_MB_PART_MASK', `0x0c000000') +define(`MAX_NUM_MV', `0x00000020') +define(`FB_PRUNING_ENABLE', `0x40000000') + +define(`SEARCH_PATH_LEN', `0x00003030') +define(`START_CENTER', `0x30000000') + +define(`ADAPTIVE_SEARCH_ENABLE', `0x00000002') +define(`INTRA_PREDICTORE_MODE', `0x11111111:UD') + +define(`INTRA_PLANAR_MODE_MASK', `0x10001000:UD') + +define(`INTER_VME_OUTPUT_IN_OWS', `10') +define(`INTER_VME_OUTPUT_MV_IN_OWS', `8') + +define(`INTRAMBFLAG_MASK', `0x00002000') +define(`MVSIZE_UW_BASE', `0x0040') +define(`MFC_MV32_BIT_SHIFT', `5') +define(`CBP_DC_YUV_UW', `0x000E') + +define(`DC_HARR_ENABLE', `0x0000') +define(`DC_HARR_DISABLE', `0x0020') + +define(`MV32_BIT_MASK', `0x0020') +define(`MV32_BIT_SHIFT', `5') + +define(`OBW_CACHE_TYPE', `10') + + +define(`OBW_MESSAGE_TYPE', `8') + +define(`OBW_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBW_CONTROL_2', `2') /* 2 OWords */ +define(`OBW_CONTROL_3', `3') /* 4 OWords */ +define(`OBW_CONTROL_8', `4') /* 8 OWords */ + +define(`FBR_BME_ENABLE', `0x00000000') +define(`FBR_BME_DISABLE', `0x00040000') + +define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */ + + +define(`OBW_HEADER_PRESENT', `1') + +/* GRF registers + * r0 header + * r1~r4 constant buffer (reserved) + * r5 inline data + * r6~r11 reserved + * r12 write back of VME message + * r13 write back of Oword Block Write + */ +/* + * GRF 0 -- header + */ +define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */ + +/* + * GRF 1~4 -- Constant Buffer (reserved) + */ + +/* + * GRF 5 -- inline data + */ +define(`inline_reg0', `r5') +define(`w_in_mb_uw', `inline_reg0.2') +define(`orig_xy_ub', `inline_reg0.0') +define(`orig_x_ub', `inline_reg0.0') /* in macroblock */ +define(`orig_y_ub', `inline_reg0.1') +define(`transform_8x8_ub', `inline_reg0.4') +define(`input_mb_intra_ub', `inline_reg0.5') +define(`num_macroblocks', `inline_reg0.6') +define(`quality_level_ub', `inline_reg0.7') + +/* + * GRF 6~11 -- reserved + */ + +/* + * GRF 12~15 -- write back for VME message + */ +define(`vme_wb', `r12') +define(`vme_wb0', `r12') +define(`vme_wb1', `r13') +define(`vme_wb2', `r14') +define(`vme_wb3', `r15') +define(`vme_wb4', `r16') +define(`vme_wb5', `r17') +define(`vme_wb6', `r18') +define(`vme_ime_wb7', `r19') +define(`vme_ime_wb8', `r20') +define(`vme_ime_wb9', `r21') +define(`vme_ime_wb10', `r22') + + +/* + * GRF 24 -- write for VME output message + */ +define(`obw_wb', `null<1>:W') +define(`obw_wb_length', `0') + + +/* + * GRF 28~30 -- Intra Neighbor Edge Pixels + */ +define(`INEP_ROW', `r28') +define(`INEP_COL0', `r29') +define(`INEP_COL1', `r30') + +/* + * GRF 48~50 -- Chroma Neighbor Edge Pixels + */ +define(`CHROMA_ROW', `r48') +define(`CHROMA_COL', `r49') + +/* + * temporary registers + */ +define(`tmp_reg0', `r32') +define(`read0_header', `tmp_reg0') +define(`tmp_reg1', `r33') +define(`read1_header', `tmp_reg1') +define(`tmp_reg2', `r34') +define(`vme_m0', `tmp_reg2') +define(`tmp_reg3', `r35') +define(`vme_m1', `tmp_reg3') +define(`intra_flag', `vme_m1.28') +define(`intra_part_mask_ub', `vme_m1.28') +define(`mb_intra_struct_ub', `vme_m1.29') +define(`tmp_reg4', `r36') +define(`obw_m0', `tmp_reg4') +define(`tmp_reg5', `r37') +define(`obw_m1', `tmp_reg5') +define(`tmp_reg6', `r38') +define(`obw_m2', `tmp_reg6') +define(`tmp_reg7', `r39') +define(`obw_m3', `tmp_reg7') +define(`tmp_reg8', `r40') +define(`obw_m4', `tmp_reg8') +define(`tmp_reg9', `r41') +define(`tmp_x_w', `tmp_reg9.0') +define(`tmp_rega', `r42') +define(`tmp_ud0', `tmp_rega.0') +define(`tmp_ud1', `tmp_rega.4') +define(`tmp_ud2', `tmp_rega.8') +define(`tmp_ud3', `tmp_rega.12') +define(`tmp_uw0', `tmp_rega.0') +define(`tmp_uw1', `tmp_rega.2') +define(`tmp_uw2', `tmp_rega.4') +define(`tmp_uw3', `tmp_rega.6') +define(`tmp_uw4', `tmp_rega.8') +define(`tmp_uw5', `tmp_rega.10') +define(`tmp_uw6', `tmp_rega.12') +define(`tmp_uw7', `tmp_rega.14') + +define(`vme_m2', `r43') +define(`vme_m3', `r44') +/* + * MRF registers + */ + +define(`msg_ind', `64') +define(`msg_reg0', `r64') +define(`msg_reg1', `r65') +define(`msg_reg2', `r66') +define(`msg_reg3', `r67') +define(`msg_reg4', `r68') +define(`msg_reg5', `r69') +define(`msg_reg6', `r70') +define(`msg_reg7', `r71') +define(`msg_reg8', `r72') +define(`msg_reg9', `r73') + +define(`ts_msg_ind', `112') +define(`ts_msg_reg0', `r112') +/* + * VME message payload + */ + +define(`vme_intra_wb_length', `1') +define(`vme_wb_length', `7') +define(`sic_vme_msg_length', `8') +define(`fbr_vme_msg_length', `8') +define(`ime_vme_msg_length', `6') + +define(`vme_msg_ind', `msg_ind') +define(`vme_msg_0', `msg_reg0') +define(`vme_msg_1', `msg_reg1') +define(`vme_msg_2', `msg_reg2') + +define(`vme_msg_3', `msg_reg3') +define(`vme_msg_4', `msg_reg4') + + +define(`vme_msg_5', `msg_reg5') +define(`vme_msg_6', `msg_reg6') +define(`vme_msg_7', `msg_reg7') +define(`vme_msg_8', `msg_reg8') +define(`vme_msg_9', `msg_reg9') + +define(`BIND_IDX_CBCR', `6') + + +define(`LUMA_CHROMA_MODE', `0x0') +define(`LUMA_INTRA_MODE', `0x1') +define(`LUMA_INTRA_DISABLE', `0x2') + +define(`RETURN_REG', `r127.0') +define(`RET_ARG', `r127.4') + +/* Now at most two registers are used for input parameter */ +define(`INPUT_ARG0', `r125') +define(`INPUT_ARG1', `r126') + +/* Two temporal registers are used in the function */ +define(`TEMP_VAR0', `r123') +define(`TEMP_VAR1', `r124') + + +define(`OBR_MESSAGE_TYPE', `0') +define(`OBR_CACHE_TYPE', `10') +define(`OBR_BIND_IDX', `BIND_IDX_OUTPUT') + +define(`OBR_CONTROL_0', `0') /* 1 OWord, low 128 bits */ +define(`OBR_CONTROL_1', `1') /* 1 OWord, high 128 bits */ +define(`OBR_CONTROL_2', `2') /* 2 OWords */ +define(`OBR_CONTROL_4', `3') /* 4 OWords */ +define(`OBR_CONTROL_8', `4') /* 8 OWords */ +define(`OBR_WRITE_COMMIT_CATEGORY', `0') /* category on SNB+ for Data port */ +define(`OBR_HEADER_PRESENT', `1') + +define(`mb_hwdep', `r5.6') +define(`MB_AVAIL', `1:d') +define(`MB_PRED_FLAG', `1:w') + +define(`mb_pred_mode', `r85') +define(`mb_mvp_ref', `r86') +define(`mba_result', `r87') +define(`mbb_result', `r88') +define(`mbc_result', `r89') +define(`mb_ind', `90') +define(`mb_msg0', `r90') +define(`mb_wb', `r91') +define(`mb_intra_wb', `r91') +define(`mb_inter_wb', `r92') +define(`mb_mv0', `r93') +define(`mb_mv1', `r94') +define(`mb_mv2', `r95') +define(`mb_mv3', `r96') +define(`mb_ref', `r97') +define(`mb_ref_win', `r84') + +define(`PRED_L0', `0x0':uw) +define(`PRED_L1', `0x1':uw) +define(`PRED_BI', `0x2':uw) +define(`PRED_DIRECT', `0x3':uw) +define(`PRED_MASK', `0x3':uw) + +/* The MAX search len per reference is 16 */ +define(`DSEARCH_PATH_LEN', `0x00001212') +define(`BI_WEIGHT', `0x20':uw) +define(`DSTART_CENTER', `0x00000000') +define(`INTER_MASK', `0x03') +define(`INTER_16X16MODE', `0x0') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') +define(`INTER_8X8MODE', `0x03') +define(`INTER_BLOCK0', `0x0') +define(`INTER_BLOCK1', `0x1') +define(`INTER_BLOCK2', `0x2') +define(`INTER_BLOCK3', `0x3') +define(`INTER_16X8MODE', `0x01') +define(`INTER_8X16MODE', `0x02') + + +define(`OBR_MESSAGE_FENCE', `7') +define(`OBR_MF_NOCOMMIT', `0') +define(`OBR_MF_COMMIT', `0x20') + +define(`DEFAULT_QUALITY_LEVEL', `0x01') +define(`HIGH_QUALITY_LEVEL', `DEFAULT_QUALITY_LEVEL') +define(`LOW_QUALITY_LEVEL', `0x02') diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.asm new file mode 100644 index 000000000..d6608105b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.asm @@ -0,0 +1,739 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * Li Zhong + * + */ + +#define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud +#define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud + +/* + * __START + */ +__INTER_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 24:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; +mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; +/* read back the data for MB A */ +/* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), +* rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) +*/ +mov (8) mba_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; +mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; +mba_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +/* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; +mov (1) mba_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbb_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB A */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* MV */ +mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; +mov (1) mba_result.16<1>:w MB_PRED_FLAG {align1}; + +mbb_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +/* MB B doesn't exist. Zero MV. mba_flag is zero */ +/* If MB B doesn't exist, neither MB C nor D exists */ +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mbc_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB B */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbb_result.16<1>:w MB_PRED_FLAG {align1}; + +mbc_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; +/* MB C doesn't exist. Zero MV. mba_flag is zero */ +/* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ +(f0.0) jmpi (1) mbd_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; +add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +/* TODO: RefID is required after multi-references are added */ +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB C */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; +/* TODO: RefID is required after multi-references are added */ +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +jmpi (1) mb_mvp_start; +mbd_start: +mov (8) mb_msg0.0<1>:ud 0:ud {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; +mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; +mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; +add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; +mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; +mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD 24:UD {align1}; +mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_4, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 2 + {align1}; + +cmp.l.f0.0 (1) null:w mb_intra_wb.16<0,1,0>:uw mb_inter_wb.8<0,1,0>:uw {align1}; +(f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; +(f0.0) jmpi (1) mb_mvp_start; + +add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:ud 3:ud {align1}; +/* Read MV for MB D */ +/* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ +send (16) + mb_ind + mb_mv0.0<1>:ub + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_TYPE, + OBR_CONTROL_8, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 4 + {align1}; + +/* TODO: RefID is required after multi-references are added */ + +/* Forward MV */ +mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; +mov (1) mbc_result.16<1>:w MB_PRED_FLAG {align1}; + +mb_mvp_start: +/*TODO: Add the skip prediction */ +/* Check whether both MB B and C are inavailable */ +add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; +cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; +(-f0.0) jmpi (1) mb_median_start; +cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; +(f0.0) mov (1) mbb_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbc_result.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +(f0.0) mov (1) mbb_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mbc_result.20<1>:uw mba_result.20<0,1,0>:uw {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud mba_result.4<0,1,0>:ud {align1}; +(-f0.0) mov (1) mb_mvp_ref.0<1>:ud 0:ud {align1}; +jmpi (1) __mb_hwdep_end; + +mb_median_start: +/* check whether only one neighbour MB has the same ref ID with the current MB */ +mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; +cmp.z.f0.0 (1) null:d mba_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbb_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; +cmp.z.f0.0 (1) null:d mbc_result.20<0,1,0>:w 0:w {align1}; +(f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; +cmp.e.f0.0 (1) null:d tmp_reg0.0<0,1,0>:w 1:w {align1}; +(f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; +(f0.0) jmpi (1) __mb_hwdep_end; + +mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; +SAVE_RET {align1}; + jmpi (1) word_imedian; +mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; +mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; +SAVE_RET {align1}; +jmpi (1) word_imedian; +mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; + +__mb_hwdep_end: +asr (2) mb_ref_win.0<1>:w mb_mvp_ref.0<2,2,1>:w 2:w {align1}; +add (2) mb_ref_win.8<1>:w mb_ref_win.0<2,2,1>:w 3:w {align1}; +and (2) mb_ref_win.16<1>:uw mb_ref_win.8<2,2,1>:uw 0xFFFC:uw {align1}; +/* m2, get the MV/Mb cost passed from constant buffer when +spawning thread by MEDIA_OBJECT */ +mov (8) vme_m2<1>:UD r1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* m3 FWD/BWD cost center*/ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4 skip center*/ +mov (8) vme_msg_4<1>:UD 0x0:UD {align1}; + +/* m5 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_5<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + + +/* Use the Luma mode */ +mov (1) tmp_reg0.0<1>:UW LUMA_INTRA_MODE:UW {align1}; +mov (1) vme_msg_5.5<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_6.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_6.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m7 */ + +mov (4) vme_msg_7.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_7.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * SIC VME message + */ + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1}; +mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; /* vp8 don't support intra_8x8 mode*/ + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m0 */ +mov (1) vme_m0.12<1>:UD INTRA_SAD_HAAR:UD {align1}; /* 16x16 Source, Intra_harr */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* IME search */ +mov (1) vme_m0.12<1>:UD SEARCH_CTRL_SINGLE + VP8_INTER_PART_MASK + INTER_SAD_HAAR:UD {align1}; /* 16x16 Source, harr */ +mov (1) vme_m0.22<1>:UW REF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ + +mov (1) vme_m0.0<1>:UD vme_m0.8<0,1,0>:UD {align1}; + +add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W -16:W {align1}; /* Reference = (x-16,y-12)-(x+32,y+28) */ +add (1) vme_m0.2<1>:W vme_m0.2<0,1,0>:W -12:W {align1}; + +mov (1) vme_m0.0<1>:W -16:W {align1}; +mov (1) vme_m0.2<1>:W -12:W {align1}; + +mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; + +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; +(f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 12:w {align1}; +and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; +(f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 8:w {align1}; + +add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; +/* the Max MV number is passed by constant buffer */ +mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; +mov (1) vme_m1.8<1>:UD START_CENTER + SEARCH_PATH_LEN:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* Setup the Cost center */ +/* currently four 8x8 share the same cost center */ +mov (4) vme_m3.0<2>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; +mov (4) vme_m3.4<2>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; + +mov (8) vme_msg_3<1>:UD vme_m3.0<8,8,1>:UD {align1}; +mov (8) vme_msg_2<1>:UD vme_m2.0<8,8,1>:UD {align1}; + +/* M4/M5 search path */ +mov (1) vme_msg_4.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.12<1>:UD 0x100F0F0F:UD {align1}; +mov (1) vme_msg_4.16<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_4.20<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_4.24<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_4.28<1>:UD 0x100F0F0F:UD {align1}; + +mov (1) vme_msg_5.0<1>:UD 0x01010101:UD {align1}; +mov (1) vme_msg_5.4<1>:UD 0x10010101:UD {align1}; +mov (1) vme_msg_5.8<1>:UD 0x0F0F0F0F:UD {align1}; +mov (1) vme_msg_5.12<1>:UD 0x000F0F0F:UD {align1}; + +mov (4) vme_msg_5.16<1>:UD 0x0:UD {align1}; + +send (8) + vme_msg_ind + vme_wb<1>:UD + null + vme( + BIND_IDX_VME, + 0, + 0, + VME_IME_MESSAGE_TYPE + ) + mlen ime_vme_msg_length + rlen vme_wb_length {align1}; + +/* Set Macroblock-shape/mode for FBR */ + +mov (1) vme_m2.20<1>:UD 0x0:UD {align1}; +mov (1) vme_m2.21<1>:UB vme_wb.25<0,1,0>:UB {align1}; +mov (1) vme_m2.22<1>:UB vme_wb.26<0,1,0>:UB {align1}; + +and (1) tmp_reg0.0<1>:UW vme_wb.0<0,1,0>:UW 0x03:UW {align1}; +mov (1) vme_m2.20<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +/* Send FBR message into CRE */ + +mov (8) vme_msg_4.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) vme_msg_5.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) vme_msg_6.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) vme_msg_7.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; + +mov (1) vme_m0.12<1>:UD INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER + FBR_BME_DISABLE:UD {align1}; /* 16x16 Source, 1/4 pixel, harr, BME disable */ +mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; +mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +mov (8) vme_msg_2.0<1>:UD vme_m2.0<8,8,1>:UD {align1}; +mov (8) vme_msg_3.0<1>:UD vme_m3.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_FBR_MESSAGE_TYPE + ) + mlen fbr_vme_msg_length + rlen vme_wb_length + {align1}; + +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; +/* write FME info */ +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; + +mov (1) msg_reg1.4<1>:UD vme_wb.24<0,1,0>:UD {align1}; +/* Inter distortion of FME */ +mov (1) msg_reg1.8<1>:UD vme_wb.8<0,1,0>:UD {align1}; + +mov (1) msg_reg1.12<1>:UD vme_m2.20<0,1,0>:UD {align1}; + +/* bind index 3, write oword (16bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_0, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Write FME/BME MV */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x01:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; + + +mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; +mov (8) msg_reg2.0<1>:ud vme_wb2.0<8,8,1>:ud {align1}; +mov (8) msg_reg3.0<1>:ud vme_wb3.0<8,8,1>:ud {align1}; +mov (8) msg_reg4.0<1>:ud vme_wb4.0<8,8,1>:ud {align1}; +/* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_8, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 5 + rlen obw_wb_length + {align1}; + +/* Write FME/BME RefID */ +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x08:UD {align1}; +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (8) msg_reg1.0<1>:UD vme_wb6.0<8,8,1>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +/* Issue message fence so that the previous write message is committed */ +send (16) + mb_ind + mb_wb.0<1>:ud + NULL + data_port( + OBR_CACHE_TYPE, + OBR_MESSAGE_FENCE, + OBR_MF_COMMIT, + OBR_BIND_IDX, + OBR_WRITE_COMMIT_CATEGORY, + OBR_HEADER_PRESENT + ) + mlen 1 + rlen 1 + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; + + + nop ; + nop ; +/* Compare three word data to get the min value */ +word_imin: + cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +/* Compare three word data to get the max value */ +word_imax: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + RETURN {align1}; + +word_imedian: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_a_ge_b; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + jmpi (1) cmp_end; +cmp_a_ge_b: + cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; + (f0.0) jmpi (1) cmp_end; + cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; + (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; +cmp_end: + RETURN {align1}; + diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8a new file mode 100644 index 000000000..3b72c1cb5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "vp8_inter_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8b new file mode 100644 index 000000000..6377aae12 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen8.g8b @@ -0,0 +1,299 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23800a88, 0x0e000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a00a88, 0x0e000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26000a88, 0x0e000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26200a88, 0x0e000800, 0x02190006 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000750 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x0e000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000860 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000800 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24400208, 0x00000448, 0x00000000 }, + { 0x00000040, 0x24401a68, 0x1e000440, 0xfff0fff0 }, + { 0x00000040, 0x24421a68, 0x1e000442, 0xfff4fff4 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x000c000c }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00080008 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a90 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x0e000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00243000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x0e000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9a new file mode 100644 index 000000000..3b72c1cb5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "vp8_inter_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9b new file mode 100644 index 000000000..bf8ad1c29 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_inter_frame_gen9.g9b @@ -0,0 +1,299 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000018 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x23800a88, 0x06000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x23a00a88, 0x06000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x26000a88, 0x06000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x26200a88, 0x06000800, 0x02190006 }, + { 0x00600001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2a800608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20001240, 0x160000a6, 0x00040004 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000750 }, + { 0x00600001, 0x2ae00608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b000608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b200608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2ae00e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24001a68, 0x1e000400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2af41e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2ae40208, 0x00450bc8, 0x00000000 }, + { 0x00000001, 0x2af01e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000360 }, + { 0x00000001, 0x2b000e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b141e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b040208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b101e68, 0x18000000, 0x00010001 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00080008 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000110 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00000040, 0x24021a68, 0x1e000402, 0xffffffff }, + { 0x00000040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000180 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a08, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450bf0, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000130 }, + { 0x00600001, 0x2b400608, 0x00000000, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00040004 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000f0 }, + { 0x00000001, 0x2b200e28, 0x08000000, 0x00000001 }, + { 0x00200001, 0x24002248, 0x004500a0, 0x00000000 }, + { 0x00200040, 0x24001a68, 0x1e450400, 0xffffffff }, + { 0x00000041, 0x2b481208, 0x120000a2, 0x00000402 }, + { 0x00000040, 0x2b480208, 0x12000b48, 0x00000400 }, + { 0x00000041, 0x2b480208, 0x06000b48, 0x00000018 }, + { 0x00000001, 0x2b542288, 0x00000014, 0x00000000 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x02280303 }, + { 0x05000010, 0x20001260, 0x12000b70, 0x00000b88 }, + { 0x00210001, 0x2b341e68, 0x18000000, 0xffffffff }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000040 }, + { 0x00000040, 0x2b480208, 0x06000b48, 0x00000003 }, + { 0x0a800031, 0x2ba00a88, 0x06000b40, 0x02480403 }, + { 0x00200001, 0x2b240208, 0x00450c18, 0x00000000 }, + { 0x00000001, 0x2b301e68, 0x18000000, 0x00010001 }, + { 0x00000040, 0x24000a28, 0x0a000b00, 0x00000b20 }, + { 0x01000010, 0x20000a20, 0x0e000400, 0x00000000 }, + { 0x00110020, 0x34000000, 0x0e001400, 0x00000080 }, + { 0x02000010, 0x20000a20, 0x0e000ae0, 0x00000000 }, + { 0x00010001, 0x2b040208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b240208, 0x00000ae4, 0x00000000 }, + { 0x00010001, 0x2b141248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2b341248, 0x00000af4, 0x00000000 }, + { 0x00010001, 0x2ac00208, 0x00000ae4, 0x00000000 }, + { 0x00110001, 0x2ac00608, 0x00000000, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000190 }, + { 0x00600001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000af4, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000ae4, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b14, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b04, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000b34, 0x00000000 }, + { 0x00010040, 0x24001a68, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x24040208, 0x00000b24, 0x00000000 }, + { 0x01000010, 0x20001a20, 0x1e000400, 0x00010001 }, + { 0x00010001, 0x2ac00208, 0x00000404, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000c0 }, + { 0x00000001, 0x2fa01a68, 0x00000ae4, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b04, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b24, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000860 }, + { 0x00000001, 0x2ac01a68, 0x00000fe4, 0x00000000 }, + { 0x00000001, 0x2fa01a68, 0x00000ae6, 0x00000000 }, + { 0x00000001, 0x2fa41a68, 0x00000b06, 0x00000000 }, + { 0x00000001, 0x2fa81a68, 0x00000b26, 0x00000000 }, + { 0x00000040, 0x2fe00008, 0x06001400, 0x00000020 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000800 }, + { 0x00000001, 0x2ac21a68, 0x00000fe4, 0x00000000 }, + { 0x0020000c, 0x2a801a68, 0x1e450ac0, 0x00020002 }, + { 0x00200040, 0x2a881a68, 0x1e450a80, 0x00030003 }, + { 0x00200005, 0x2a901248, 0x16450a88, 0xfffcfffc }, + { 0x00600001, 0x25600208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00010001 }, + { 0x00000001, 0x28a52288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00800000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x7e200000 }, + { 0x00000001, 0x24561648, 0x10000000, 0x28302830 }, + { 0x00000001, 0x24400208, 0x00000448, 0x00000000 }, + { 0x00000040, 0x24401a68, 0x1e000440, 0xfff0fff0 }, + { 0x00000040, 0x24421a68, 0x1e000442, 0xfff4fff4 }, + { 0x00000001, 0x24401e68, 0x18000000, 0xfff0fff0 }, + { 0x00000001, 0x24421e68, 0x18000000, 0xfff4fff4 }, + { 0x00000001, 0x24440208, 0x00000440, 0x00000000 }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00600060 }, + { 0x00010040, 0x24401a68, 0x1e000440, 0x000c000c }, + { 0x01000005, 0x20002240, 0x160000a5, 0x00100010 }, + { 0x00010040, 0x24421a68, 0x1e000442, 0x00080008 }, + { 0x00200040, 0x24401a68, 0x1a450440, 0x00450a90 }, + { 0x00200040, 0x24441a68, 0x1a450444, 0x00450a90 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00000001, 0x24600608, 0x00000000, 0x00000002 }, + { 0x00000001, 0x24642288, 0x0000009c, 0x00000000 }, + { 0x00000001, 0x24680608, 0x00000000, 0x30003030 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00400001, 0x45800208, 0x00000ac0, 0x00000000 }, + { 0x00400001, 0x45840208, 0x00000ac0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00000001, 0x28800608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28840608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28880608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x288c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28900608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28940608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28980608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x289c0608, 0x00000000, 0x100f0f0f }, + { 0x00000001, 0x28a00608, 0x00000000, 0x01010101 }, + { 0x00000001, 0x28a40608, 0x00000000, 0x10010101 }, + { 0x00000001, 0x28a80608, 0x00000000, 0x0f0f0f0f }, + { 0x00000001, 0x28ac0608, 0x00000000, 0x000f0f0f }, + { 0x00400001, 0x28b00608, 0x00000000, 0x00000000 }, + { 0x08600031, 0x21800a08, 0x06000800, 0x0c784000 }, + { 0x00000001, 0x25740608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x25752288, 0x00000199, 0x00000000 }, + { 0x00000001, 0x25762288, 0x0000019a, 0x00000000 }, + { 0x00000005, 0x24001248, 0x16000180, 0x00030003 }, + { 0x00000001, 0x25742288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28a00208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28c00208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28e00208, 0x008d0200, 0x00000000 }, + { 0x00000001, 0x244c0608, 0x00000000, 0x00243000 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d0560, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d0580, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10786000 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000574, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0003 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000001 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d01a0, 0x00000000 }, + { 0x00600001, 0x28400208, 0x008d01c0, 0x00000000 }, + { 0x00600001, 0x28600208, 0x008d01e0, 0x00000000 }, + { 0x00600001, 0x28800208, 0x008d0200, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x0a0a0403 }, + { 0x00000040, 0x24880208, 0x06000488, 0x00000008 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0240, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x0a800031, 0x2b600a08, 0x06000b40, 0x0219e003 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x06000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010001, 0x2f601a68, 0x00000fa0, 0x00000000 }, + { 0x00110001, 0x2f601a68, 0x00000fa4, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000f60, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000f60, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa4 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000070 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x000000a0 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00000020, 0x34000000, 0x0e001400, 0x00000060 }, + { 0x04000010, 0x20001a60, 0x1a000fa4, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa4, 0x00000000 }, + { 0x00010020, 0x34000000, 0x0e001400, 0x00000030 }, + { 0x04000010, 0x20001a60, 0x1a000fa0, 0x00000fa8 }, + { 0x00010001, 0x2fe41a68, 0x00000fa8, 0x00000000 }, + { 0x00110001, 0x2fe41a68, 0x00000fa0, 0x00000000 }, + { 0x00000001, 0x34000200, 0x00000fe0, 0x00000000 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.asm b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.asm new file mode 100644 index 000000000..f1e789126 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.asm @@ -0,0 +1,200 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Zhao Yakui + * Xiang Haihao + * Li Zhong + * + */ + +/* + * __START + */ +__INTRA_START: +mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; +mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; +mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; + +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; +mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; +mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ +mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; +add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; +mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD 0x02:UD {align1}; +mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ + +/* + * Media Read Message -- fetch Luma neighbor edge pixels + */ +/* ROW */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; + +/* + * Media Read Message -- fetch Chroma neighbor edge pixels + */ +/* ROW */ +shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16 , y * 8 */ +mul (1) read0_header.0<1>:D read0_header.0<0,1,0>:D 2:W {align1}; +add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ +add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ +mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_ROW<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* COL */ +shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 3:UW {align1}; /* x * 16, y * 8 */ +mul (1) read1_header.0<1>:D read1_header.0<0,1,0>:D 2:W {align1}; +add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ +mov (1) read1_header.8<1>:UD BLOCK_8X4 {align1}; +mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; +send (8) msg_ind CHROMA_COL<1>:UB null read(BIND_IDX_CBCR, 0, 0, 4) mlen 1 rlen 1 {align1}; + +/* m2, get the MV/Mb cost passed by constant buffer +when creating EU thread by MEDIA_OBJECT */ +mov (8) vme_msg_2<1>:UD r1.0<8,8,1>:UD {align1}; + +/* m3. This is changed for FWD/BWD cost center */ +mov (8) vme_msg_3<1>:UD 0x0:UD {align1}; + +/* m4.*/ +mov (8) vme_msg_4<1>:ud 0x0:ud {align1}; + +/* m5 */ +mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; +and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; +mov (8) vme_msg_5<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; + +mov (1) tmp_reg0.0<1>:UB INTRA_PLANAR_MODE_MASK {align1}; /* vp8 don't support planar intra mode */ +mov (1) tmp_reg0.1<1>:UB LUMA_CHROMA_MODE {align1}; /* Intra type: Luma + Chroma */ + +/* Intra mode mask && Intra compute type */ +mov (1) vme_msg_5.4<1>:UW tmp_reg0.0<0,1,0>:UW {align1}; + +/* m6 */ +mov (8) vme_msg_6<1>:UD 0x0:UD {align1}; +mov (16) vme_msg_6.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; +mov (1) vme_msg_6.16<1>:UD INTRA_PREDICTORE_MODE {align1}; + +/* the penalty for Intra mode */ +mov (1) vme_msg_6.28<1>:UD 0x010101:UD {align1}; +mov (1) vme_msg_6.20<1>:UW CHROMA_ROW.6<0,1,0>:UW {align1}; + + +/* m7 */ + +mov (4) vme_msg_7.16<1>:UD CHROMA_ROW.8<4,4,1>:UD {align1}; +mov (8) vme_msg_7.0<1>:UW CHROMA_COL.2<16,8,2>:UW {align1}; + +/* + * VME message + */ + +/* m1 */ +mov (1) intra_flag<1>:UW 0x0:UW {align1}; +mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE {align1}; /* vp8 don't support intra_8x8 mode*/ + +/* assign MB intra struct from the thread payload*/ +mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; + +/* Disable DC HAAR component when calculating HARR SATD block */ +mov (1) tmp_reg0.0<1>:UW DC_HARR_DISABLE:UW {align1}; +mov (1) vme_m1.30<1>:UB tmp_reg0.0<0,1,0>:UB {align1}; + +mov (8) vme_msg_1<1>:UD vme_m1.0<8,8,1>:UD {align1}; + +/* m0 */ +add (1) vme_m0.12<1>:UD vme_m0.12<0,1,0>:ud INTRA_SAD_HAAR:UD {align1};/* 16x16 Source, Intra_harr */ +mov (1) vme_m0.15<1>:UB SUB_PART_8x4_DISABLE + SUB_PART_4x8_DISABLE {align1}; /* vp8 don't support 8x4 and 4x8 partion */ +mov (8) vme_msg_0<1>:UD vme_m0.0<8,8,1>:UD {align1}; + +/* after verification it will be passed by using payload */ +send (8) + vme_msg_ind + vme_wb<1>:UD + null + cre( + BIND_IDX_VME, + VME_SIC_MESSAGE_TYPE + ) + mlen sic_vme_msg_length + rlen vme_wb_length + {align1}; +/* + * Oword Block Write message + */ +mov (8) msg_reg0.0<1>:UD obw_m0<8,8,1>:UD {align1}; + +mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; +mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; +mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; +mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; + +/* Distortion, Intra (17-16), */ +mov (1) msg_reg1.16<1>:UW vme_wb.12<0,1,0>:UW {align1}; + +mov (1) msg_reg1.20<1>:UD vme_wb.8<0,1,0>:UD {align1}; +/* VME clock counts */ +mov (1) msg_reg1.24<1>:UD vme_wb.28<0,1,0>:UD {align1}; + +mov (1) msg_reg1.28<1>:UD obw_m0.8<0,1,0>:UD {align1}; + +/* bind index 3, write 2 oword (32bytes), msg type: 8(OWord Block Write) */ +send (16) + msg_ind + obw_wb + null + data_port( + OBW_CACHE_TYPE, + OBW_MESSAGE_TYPE, + OBW_CONTROL_2, + OBW_BIND_IDX, + OBW_WRITE_COMMIT_CATEGORY, + OBW_HEADER_PRESENT + ) + mlen 2 + rlen obw_wb_length + {align1}; + +__EXIT: +/* + * kill thread + */ +mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; +send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8a new file mode 100644 index 000000000..a445b1e63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "vp8_intra_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8b new file mode 100644 index 000000000..4dca617c8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen8.g8b @@ -0,0 +1,73 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x23800a88, 0x0e000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x23a00a88, 0x0e000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x04600031, 0x26000a88, 0x0e000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x04600031, 0x26200a88, 0x0e000800, 0x02190006 }, + { 0x00600001, 0x28400208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24000688, 0x00000000, 0x10001000 }, + { 0x00000001, 0x24010e88, 0x08000000, 0x00000000 }, + { 0x00000001, 0x28a41248, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000040, 0x244c0208, 0x0600044c, 0x00800000 }, + { 0x00000001, 0x244f0e88, 0x08000000, 0x00000030 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x0e000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x0e000800, 0x040a0203 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x0e000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9a b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9a new file mode 100644 index 000000000..a445b1e63 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9a @@ -0,0 +1,2 @@ +#include "vme8.inc" +#include "vp8_intra_frame_gen8.asm" diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9b b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9b new file mode 100644 index 000000000..f056f4f68 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/shaders/vme/vp8_intra_frame_gen9.g9b @@ -0,0 +1,73 @@ + { 0x00800001, 0x24000608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24400608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24800608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x24c00608, 0x00000000, 0x00000000 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00000001, 0x24080e08, 0x08000000, 0x0000001f }, + { 0x00000001, 0x24142288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00040004 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x000f0003 }, + { 0x00000001, 0x24342288, 0x00000014, 0x00000000 }, + { 0x00200009, 0x24482248, 0x164500a0, 0x00040004 }, + { 0x00000001, 0x24542288, 0x00000014, 0x00000000 }, + { 0x00000041, 0x24881208, 0x220000a2, 0x000000a1 }, + { 0x00000040, 0x24880208, 0x22000488, 0x000000a0 }, + { 0x00000041, 0x24880208, 0x06000488, 0x00000002 }, + { 0x00000001, 0x24942288, 0x00000014, 0x00000000 }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x23800a88, 0x06000800, 0x02190004 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x23a00a88, 0x06000800, 0x02290004 }, + { 0x00200009, 0x24002228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24000a28, 0x1e000400, 0x00020002 }, + { 0x00000040, 0x24000a28, 0x1e000400, 0xfff8fff8 }, + { 0x00000040, 0x24040a28, 0x1e000404, 0xffffffff }, + { 0x00600001, 0x28000208, 0x008d0400, 0x00000000 }, + { 0x0c600031, 0x26000a88, 0x06000800, 0x02190006 }, + { 0x00200009, 0x24202228, 0x164500a0, 0x00030003 }, + { 0x00000041, 0x24200a28, 0x1e000420, 0x00020002 }, + { 0x00000040, 0x24200a28, 0x1e000420, 0xfffcfffc }, + { 0x00000001, 0x24280e08, 0x08000000, 0x00070003 }, + { 0x00600001, 0x28000208, 0x008d0420, 0x00000000 }, + { 0x0c600031, 0x26200a88, 0x06000800, 0x02190006 }, + { 0x00600001, 0x28400208, 0x008d0020, 0x00000000 }, + { 0x00600001, 0x28600608, 0x00000000, 0x00000000 }, + { 0x00600001, 0x28800608, 0x00000000, 0x00000000 }, + { 0x00000001, 0x23800608, 0x00000000, 0x00000000 }, + { 0x00000005, 0x23840208, 0x06000384, 0xff000000 }, + { 0x00600001, 0x28a00208, 0x008d0380, 0x00000000 }, + { 0x00000001, 0x24000688, 0x00000000, 0x10001000 }, + { 0x00000001, 0x24010e88, 0x08000000, 0x00000000 }, + { 0x00000001, 0x28a41248, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28c00608, 0x00000000, 0x00000000 }, + { 0x00800001, 0x28c02288, 0x00cf03a3, 0x00000000 }, + { 0x00000001, 0x28d00608, 0x00000000, 0x11111111 }, + { 0x00000001, 0x28dc0608, 0x00000000, 0x00010101 }, + { 0x00000001, 0x28d41248, 0x00000606, 0x00000000 }, + { 0x00400001, 0x28f00208, 0x00690608, 0x00000000 }, + { 0x00600001, 0x28e01248, 0x00ae0622, 0x00000000 }, + { 0x00000001, 0x247c1648, 0x10000000, 0x00000000 }, + { 0x00000001, 0x247c0e88, 0x08000000, 0x00000002 }, + { 0x00000001, 0x247d2288, 0x000000a5, 0x00000000 }, + { 0x00000001, 0x24001648, 0x10000000, 0x00200020 }, + { 0x00000001, 0x247e2288, 0x00000400, 0x00000000 }, + { 0x00600001, 0x28200208, 0x008d0460, 0x00000000 }, + { 0x00000040, 0x244c0208, 0x0600044c, 0x00800000 }, + { 0x00000001, 0x244f0e88, 0x08000000, 0x00000030 }, + { 0x00600001, 0x28000208, 0x008d0440, 0x00000000 }, + { 0x0d600031, 0x21800a08, 0x06000800, 0x10782000 }, + { 0x00600001, 0x28000208, 0x008d0480, 0x00000000 }, + { 0x00000001, 0x28200208, 0x00000180, 0x00000000 }, + { 0x00000001, 0x28240208, 0x00000190, 0x00000000 }, + { 0x00000001, 0x28280208, 0x00000194, 0x00000000 }, + { 0x00000001, 0x282c0208, 0x00000198, 0x00000000 }, + { 0x00000001, 0x28301248, 0x0000018c, 0x00000000 }, + { 0x00000001, 0x28340208, 0x00000188, 0x00000000 }, + { 0x00000001, 0x28380208, 0x0000019c, 0x00000000 }, + { 0x00000001, 0x283c0208, 0x00000488, 0x00000000 }, + { 0x0a800031, 0x20000a60, 0x06000800, 0x040a0203 }, + { 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 }, + { 0x07800031, 0x24000a40, 0x06000e00, 0x82000010 }, diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/sysdeps.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/sysdeps.h new file mode 100644 index 000000000..71bfb4d5b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/sysdeps.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef SYSDEPS_H +#define SYSDEPS_H + +#ifdef ANDROID + +# include "config_android.h" + +#else + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#endif /* ANDROID */ + +#include +#include +#include +#include +#include +#include + +#endif /* SYSDEPS_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/va_backend_compat.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/va_backend_compat.h new file mode 100644 index 000000000..7f0a6079b --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/va_backend_compat.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_BACKEND_COMPAT_H +#define VA_BACKEND_COMPAT_H + +#include + +#if VA_CHECK_VERSION(0,33,0) +# include + +# define VA_CHECK_DRM_AUTH_TYPE(ctx, type) \ + (((struct drm_state *)(ctx)->drm_state)->auth_type == (type)) + +#else +# include + +# define VA_CHECK_DRM_AUTH_TYPE(ctx, type) \ + (((struct dri_state *)(ctx)->dri_state)->driConnectedFlag == (type)) + +# define drm_state dri_state +# define VA_DRM_AUTH_DRI1 VA_DRI1 +# define VA_DRM_AUTH_DRI2 VA_DRI2 +# define VA_DRM_AUTH_CUSTOM VA_DUMMY +#endif + +#if !VA_CHECK_VERSION(0,35,2) +# define VAProfileH264MultiviewHigh 15 +# define VAProfileH264StereoHigh 16 +#endif + +#if !VA_CHECK_VERSION(0,38,1) + +# define VA_RT_FORMAT_YUV420_10BPP 0x00000100 +# define VA_FOURCC_P010 0x30313050 +# define VA_FOURCC_P016 0x36313050 + +#endif + +#endif /* VA_BACKEND_COMPAT_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp8_probs.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp8_probs.h new file mode 100644 index 000000000..0206699fb --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp8_probs.h @@ -0,0 +1,339 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * This file defines some vp8 probability tables, and + * they are ported from libvpx (https://github.com/mrchapp/libvpx/). + * The original copyright and licence statement as below. + */ + +/* + * Copyright (c) 2010 The WebM project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef VP8_PROBS_H +#define VP8_PROBS_H + +static const unsigned char vp8_ymode_prob[4] = +{ + 112, 86, 140, 37 +}; + +static const unsigned char vp8_kf_ymode_prob[4] = +{ + 145, 156, 163, 128 +}; + +static const unsigned char vp8_uv_mode_prob[3] = +{ + 162, 101, 204 +}; + +static const unsigned char vp8_kf_uv_mode_prob[3] = +{ + 142, 114, 183 +}; + +static const unsigned char vp8_base_skip_false_prob[128] = +{ + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 251, 248, 244, 240, 236, 232, 229, 225, + 221, 217, 213, 208, 204, 199, 194, 190, + 187, 183, 179, 175, 172, 168, 164, 160, + 157, 153, 149, 145, 142, 138, 134, 130, + 127, 124, 120, 117, 114, 110, 107, 104, + 101, 98, 95, 92, 89, 86, 83, 80, + 77, 74, 71, 68, 65, 62, 59, 56, + 53, 50, 47, 44, 41, 38, 35, 32, + 30, 28, 26, 24, 22, 20, 18, 16, +}; + +static const unsigned char vp8_mv_update_probs[2][19] = +{ + { + 237, + 246, + 253, 253, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 250, 250, 252, 254, 254 + }, + { + 231, + 243, + 245, 253, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 251, 251, 254, 254, 254 + } +}; + +static const unsigned char vp8_default_mv_context[2][19] = +{ + { + 162, /* is short */ + 128, /* sign */ + 225, 146, 172, 147, 214, 39, 156, /* short tree */ + 128, 129, 132, 75, 145, 178, 206, 239, 254, 254 /* long bits */ + }, + + { + 164, + 128, + 204, 170, 119, 235, 140, 230, 228, + 128, 130, 130, 74, 148, 180, 203, 236, 254, 254 + + } +}; + +static const unsigned char vp8_default_coef_probs[4][8][3][11] = +{ + { /* Block Type ( 0 ) */ + { /* Coeff Band ( 0 )*/ + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 1 )*/ + { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, + { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, + { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 } + }, + { /* Coeff Band ( 2 )*/ + { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, + { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, + { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 } + }, + { /* Coeff Band ( 3 )*/ + { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, + { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, + { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 4 )*/ + { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, + { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, + { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 } + }, + { /* Coeff Band ( 5 )*/ + { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, + { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, + { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 6 )*/ + { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, + { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, + { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 7 )*/ + { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } + } + }, + { /* Block Type ( 1 ) */ + { /* Coeff Band ( 0 )*/ + { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, + { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, + { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 } + }, + { /* Coeff Band ( 1 )*/ + { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, + { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, + { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 } + }, + { /* Coeff Band ( 2 )*/ + { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, + { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, + { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 } + }, + { /* Coeff Band ( 3 )*/ + { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, + { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, + { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 } + }, + { /* Coeff Band ( 4 )*/ + { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, + { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, + { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 } + }, + { /* Coeff Band ( 5 )*/ + { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, + { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, + { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 } + }, + { /* Coeff Band ( 6 )*/ + { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, + { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, + { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 } + }, + { /* Coeff Band ( 7 )*/ + { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, + { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, + { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 } + } + }, + { /* Block Type ( 2 ) */ + { /* Coeff Band ( 0 )*/ + { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, + { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, + { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 } + }, + { /* Coeff Band ( 1 )*/ + { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, + { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, + { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 } + }, + { /* Coeff Band ( 2 )*/ + { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, + { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, + { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 } + }, + { /* Coeff Band ( 3 )*/ + { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, + { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, + { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 4 )*/ + { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, + { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, + { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 5 )*/ + { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 6 )*/ + { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, + { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, + { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 } + }, + { /* Coeff Band ( 7 )*/ + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } + } + }, + { /* Block Type ( 3 ) */ + { /* Coeff Band ( 0 )*/ + { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, + { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, + { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 } + }, + { /* Coeff Band ( 1 )*/ + { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, + { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, + { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 } + }, + { /* Coeff Band ( 2 )*/ + { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, + { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, + { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 } + }, + { /* Coeff Band ( 3 )*/ + { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, + { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, + { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 } + }, + { /* Coeff Band ( 4 )*/ + { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, + { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, + { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 } + }, + { /* Coeff Band ( 5 )*/ + { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, + { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, + { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 } + }, + { /* Coeff Band ( 6 )*/ + { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, + { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, + { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 } + }, + { /* Coeff Band ( 7 )*/ + { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, + { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } + } + } +}; + +/* Work in progress recalibration of baseline rate tables based on + * the assumption that bits per mb is inversely proportional to the + * quantizer value. + * Note: this table value multiplied by 512 + */ +static const int vp8_bits_per_mb[2][128] = +{ + /* Intra case 450000/Qintra */ + { + 1125000,900000, 750000, 642857, 562500, 500000, 450000, 450000, + 409090, 375000, 346153, 321428, 300000, 281250, 264705, 264705, + 250000, 236842, 225000, 225000, 214285, 214285, 204545, 204545, + 195652, 195652, 187500, 180000, 180000, 173076, 166666, 160714, + 155172, 150000, 145161, 140625, 136363, 132352, 128571, 125000, + 121621, 121621, 118421, 115384, 112500, 109756, 107142, 104651, + 102272, 100000, 97826, 97826, 95744, 93750, 91836, 90000, + 88235, 86538, 84905, 83333, 81818, 80357, 78947, 77586, + 76271, 75000, 73770, 72580, 71428, 70312, 69230, 68181, + 67164, 66176, 65217, 64285, 63380, 62500, 61643, 60810, + 60000, 59210, 59210, 58441, 57692, 56962, 56250, 55555, + 54878, 54216, 53571, 52941, 52325, 51724, 51136, 50561, + 49450, 48387, 47368, 46875, 45918, 45000, 44554, 44117, + 43269, 42452, 41666, 40909, 40178, 39473, 38793, 38135, + 36885, 36290, 35714, 35156, 34615, 34090, 33582, 33088, + 32608, 32142, 31468, 31034, 30405, 29801, 29220, 28662, + }, + + /* Inter case 285000/Qinter */ + { + 712500, 570000, 475000, 407142, 356250, 316666, 285000, 259090, + 237500, 219230, 203571, 190000, 178125, 167647, 158333, 150000, + 142500, 135714, 129545, 123913, 118750, 114000, 109615, 105555, + 101785, 98275, 95000, 91935, 89062, 86363, 83823, 81428, + 79166, 77027, 75000, 73076, 71250, 69512, 67857, 66279, + 64772, 63333, 61956, 60638, 59375, 58163, 57000, 55882, + 54807, 53773, 52777, 51818, 50892, 50000, 49137, 47500, + 45967, 44531, 43181, 41911, 40714, 39583, 38513, 37500, + 36538, 35625, 34756, 33928, 33139, 32386, 31666, 30978, + 30319, 29687, 29081, 28500, 27941, 27403, 26886, 26388, + 25909, 25446, 25000, 24568, 23949, 23360, 22800, 22265, + 21755, 21268, 20802, 20357, 19930, 19520, 19127, 18750, + 18387, 18037, 17701, 17378, 17065, 16764, 16473, 16101, + 15745, 15405, 15079, 14766, 14467, 14179, 13902, 13636, + 13380, 13133, 12895, 12666, 12445, 12179, 11924, 11632, + 11445, 11220, 11003, 10795, 10594, 10401, 10215, 10035, + } +}; + +#endif /* _VP8_PROBS_H_ */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp9_probs.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp9_probs.h new file mode 100644 index 000000000..757969fb9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/vp9_probs.h @@ -0,0 +1,640 @@ +/* + * Copyright © 2015 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +/* + * This file defines some vp9 probability tables, and + * they are ported from libvpx (https://github.com/webmproject/libvpx/). + * The original copyright and licence statement as below. + */ + +/* + * Copyright (c) 2010 The WebM project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef VP9_PROBS_H +#define VP9_PROBS_H + +#define TX_SIZE_CONTEXTS 2 +#define TX_SIZES 4 +#define PLANE_TYPES 2 +#define SKIP_CONTEXTS 3 +#define INTER_MODE_CONTEXTS 7 +#define INTER_MODES 4 +#define SWITCHABLE_FILTERS 3 +#define SWITCHABLE_FILTER_CONTEXTS (SWITCHABLE_FILTERS + 1) +#define MAX_SEGMENTS 8 +#define PREDICTION_PROBS 3 +#define SEG_TREE_PROBS (MAX_SEGMENTS-1) +#define MV_JOINTS 4 +#define INTRA_INTER_CONTEXTS 4 +#define COMP_INTER_CONTEXTS 5 +#define REF_CONTEXTS 5 +#define BLOCK_SIZE_GROUPS 4 +#define INTRA_MODES 10 +#define PARTITION_PLOFFSET 4 // number of probability models per block size +#define PARTITION_CONTEXTS (4 * PARTITION_PLOFFSET) +#define PARTITION_TYPES 4 +#define REF_TYPES 2 // intra=0, inter=1 +#define COEF_BANDS 6 +#define COEFF_CONTEXTS 6 +#define UNCONSTRAINED_NODES 3 +#define MV_CLASSES 11 +#define CLASS0_BITS 1 /* bits at integer precision for class 0 */ +#define CLASS0_SIZE (1 << CLASS0_BITS) +#define MV_OFFSET_BITS (MV_CLASSES + CLASS0_BITS - 2) +#define MV_MAX_BITS (MV_CLASSES + CLASS0_BITS + 2) +#define MV_FP_SIZE 4 +#define FRAME_CONTEXTS_LOG2 2 +#define FRAME_CONTEXTS (1 << FRAME_CONTEXTS_LOG2) + +#define COEFF_PROB_SIZE 132 +#define COEFF_PROB_NUM 3 + +#define TX_PROBS_IDX 0 +#define COEFF_PROBS_IDX 64 +#define INTRA_PROBS_IDX 1603 +#define SEG_PROBS_IDX 2010 + +typedef uint8_t vp9_prob; + +#define vpx_memset memset +#define vpx_memcpy memcpy + +#define vp9_zero(dest) memset(&dest, 0, sizeof(dest)) + +#define vp9_copy(dest, src) { \ + assert(sizeof(dest) == sizeof(src)); \ + vpx_memcpy(dest, src, sizeof(src)); \ +} + +struct tx_probs { + vp9_prob p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 3]; + vp9_prob p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 2]; + vp9_prob p32x32[TX_SIZE_CONTEXTS][TX_SIZES - 1]; +}; + +struct tx_counts { + unsigned int p32x32[TX_SIZE_CONTEXTS][TX_SIZES]; + unsigned int p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 1]; + unsigned int p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 2]; + unsigned int tx_totals[TX_SIZES]; +}; + +typedef struct { + vp9_prob sign; + vp9_prob classes[MV_CLASSES - 1]; + vp9_prob class0[CLASS0_SIZE - 1]; + vp9_prob bits[MV_OFFSET_BITS]; +} nmv_component; + +//Modified the nmv_context from libvpx to suit our HW needs +typedef struct { + vp9_prob joints[MV_JOINTS-1]; + nmv_component comps[2]; + vp9_prob class0_fp0[CLASS0_SIZE][MV_FP_SIZE - 1]; + vp9_prob fp0[MV_FP_SIZE - 1]; + vp9_prob class0_fp1[CLASS0_SIZE][MV_FP_SIZE - 1]; + vp9_prob fp1[MV_FP_SIZE - 1]; + vp9_prob class0_hp[2]; + vp9_prob hp[2]; +} nmv_context; + +//Modified the FRAME_CONTEXT from libvpx to suit our HW needs +typedef struct frame_contexts { + struct tx_probs tx_probs; + vp9_prob dummy1[52]; + vp9_prob coeff_probs4x4[COEFF_PROB_SIZE][COEFF_PROB_NUM]; + vp9_prob coeff_probs8x8[COEFF_PROB_SIZE][COEFF_PROB_NUM]; + vp9_prob coeff_probs16x16[COEFF_PROB_SIZE][COEFF_PROB_NUM]; + vp9_prob coeff_probs32x32[COEFF_PROB_SIZE][COEFF_PROB_NUM]; + vp9_prob dummy2[16]; + vp9_prob skip_probs[SKIP_CONTEXTS]; + vp9_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1]; + vp9_prob switchable_interp_prob[SWITCHABLE_FILTER_CONTEXTS] + [SWITCHABLE_FILTERS - 1]; + vp9_prob intra_inter_prob[INTRA_INTER_CONTEXTS]; + vp9_prob comp_inter_prob[COMP_INTER_CONTEXTS]; + vp9_prob single_ref_prob[REF_CONTEXTS][2]; + vp9_prob comp_ref_prob[REF_CONTEXTS]; + vp9_prob y_mode_prob[BLOCK_SIZE_GROUPS][INTRA_MODES - 1]; + vp9_prob partition_prob[PARTITION_CONTEXTS][PARTITION_TYPES - 1]; + nmv_context nmvc; + vp9_prob dummy3[47]; + vp9_prob uv_mode_prob[INTRA_MODES][INTRA_MODES - 1]; + vp9_prob seg_tree_probs[SEG_TREE_PROBS]; + vp9_prob seg_pred_probs[PREDICTION_PROBS]; + vp9_prob dummy4[28]; + int initialized; +} FRAME_CONTEXT; + + +static const struct tx_probs default_tx_probs = { + { { 100 }, + { 66 } }, + + { { 20, 152 }, + { 15, 101 } }, + + { { 3, 136, 37 }, + { 5, 52, 13 } }, +}; + +static const vp9_prob default_skip_probs[SKIP_CONTEXTS] = { + 192, 128, 64 +}; + +static const vp9_prob default_inter_mode_probs[INTER_MODE_CONTEXTS] + [INTER_MODES - 1] = { + {2, 173, 34}, // 0 = both zero mv + {7, 145, 85}, // 1 = one zero mv + one a predicted mv + {7, 166, 63}, // 2 = two predicted mvs + {7, 94, 66}, // 3 = one predicted/zero and one new mv + {8, 64, 46}, // 4 = two new mvs + {17, 81, 31}, // 5 = one intra neighbour + x + {25, 29, 30}, // 6 = two intra neighbours +}; + +static const vp9_prob default_switchable_interp_prob[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS - 1] = { + { 235, 162, }, + { 36, 255, }, + { 34, 3, }, + { 149, 144, }, +}; + +static const vp9_prob default_intra_inter_p[INTRA_INTER_CONTEXTS] = { + 9, 102, 187, 225 +}; + +static const vp9_prob default_comp_inter_p[COMP_INTER_CONTEXTS] = { + 239, 183, 119, 96, 41 +}; + +static const vp9_prob default_single_ref_p[REF_CONTEXTS][2] = { + { 33, 16 }, + { 77, 74 }, + { 142, 142 }, + { 172, 170 }, + { 238, 247 } +}; + +static const vp9_prob default_comp_ref_p[REF_CONTEXTS] = { + 50, 126, 123, 221, 226 +}; + +const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1] = { + { 144, 11, 54, 157, 195, 130, 46, 58, 108 }, // y = dc + { 118, 15, 123, 148, 131, 101, 44, 93, 131 }, // y = v + { 113, 12, 23, 188, 226, 142, 26, 32, 125 }, // y = h + { 120, 11, 50, 123, 163, 135, 64, 77, 103 }, // y = d45 + { 113, 9, 36, 155, 111, 157, 32, 44, 161 }, // y = d135 + { 116, 9, 55, 176, 76, 96, 37, 61, 149 }, // y = d117 + { 115, 9, 28, 141, 161, 167, 21, 25, 193 }, // y = d153 + { 120, 12, 32, 145, 195, 142, 32, 38, 86 }, // y = d207 + { 116, 12, 64, 120, 140, 125, 49, 115, 121 }, // y = d63 + { 102, 19, 66, 162, 182, 122, 35, 59, 128 } // y = tm +}; + +static const vp9_prob default_if_y_probs[BLOCK_SIZE_GROUPS][INTRA_MODES - 1] = { + { 65, 32, 18, 144, 162, 194, 41, 51, 98 }, // block_size < 8x8 + { 132, 68, 18, 165, 217, 196, 45, 40, 78 }, // block_size < 16x16 + { 173, 80, 19, 176, 240, 193, 64, 35, 46 }, // block_size < 32x32 + { 221, 135, 38, 194, 248, 121, 96, 85, 29 } // block_size >= 32x32 +}; + +static const vp9_prob default_if_uv_probs[INTRA_MODES][INTRA_MODES - 1] = { + { 120, 7, 76, 176, 208, 126, 28, 54, 103 }, // y = dc + { 48, 12, 154, 155, 139, 90, 34, 117, 119 }, // y = v + { 67, 6, 25, 204, 243, 158, 13, 21, 96 }, // y = h + { 97, 5, 44, 131, 176, 139, 48, 68, 97 }, // y = d45 + { 83, 5, 42, 156, 111, 152, 26, 49, 152 }, // y = d135 + { 80, 5, 58, 178, 74, 83, 33, 62, 145 }, // y = d117 + { 86, 5, 32, 154, 192, 168, 14, 22, 163 }, // y = d153 + { 85, 5, 32, 156, 216, 148, 19, 29, 73 }, // y = d207 + { 77, 7, 64, 116, 132, 122, 37, 126, 120 }, // y = d63 + { 101, 21, 107, 181, 192, 103, 19, 67, 125 } // y = tm +}; + +static const vp9_prob default_seg_tree_probs[SEG_TREE_PROBS] = { + 255, 255, 255, 255, 255, 255, 255 +}; + +static const vp9_prob default_seg_pred_probs[PREDICTION_PROBS] = { + 255, 255, 255 +}; + +const vp9_prob vp9_kf_partition_probs[PARTITION_CONTEXTS] + [PARTITION_TYPES - 1] = { + // 8x8 -> 4x4 + { 158, 97, 94 }, // a/l both not split + { 93, 24, 99 }, // a split, l not split + { 85, 119, 44 }, // l split, a not split + { 62, 59, 67 }, // a/l both split + // 16x16 -> 8x8 + { 149, 53, 53 }, // a/l both not split + { 94, 20, 48 }, // a split, l not split + { 83, 53, 24 }, // l split, a not split + { 52, 18, 18 }, // a/l both split + // 32x32 -> 16x16 + { 150, 40, 39 }, // a/l both not split + { 78, 12, 26 }, // a split, l not split + { 67, 33, 11 }, // l split, a not split + { 24, 7, 5 }, // a/l both split + // 64x64 -> 32x32 + { 174, 35, 49 }, // a/l both not split + { 68, 11, 27 }, // a split, l not split + { 57, 15, 9 }, // l split, a not split + { 12, 3, 3 }, // a/l both split +}; + +static const vp9_prob default_partition_probs[PARTITION_CONTEXTS] + [PARTITION_TYPES - 1] = { + // 8x8 -> 4x4 + { 199, 122, 141 }, // a/l both not split + { 147, 63, 159 }, // a split, l not split + { 148, 133, 118 }, // l split, a not split + { 121, 104, 114 }, // a/l both split + // 16x16 -> 8x8 + { 174, 73, 87 }, // a/l both not split + { 92, 41, 83 }, // a split, l not split + { 82, 99, 50 }, // l split, a not split + { 53, 39, 39 }, // a/l both split + // 32x32 -> 16x16 + { 177, 58, 59 }, // a/l both not split + { 68, 26, 63 }, // a split, l not split + { 52, 79, 25 }, // l split, a not split + { 17, 14, 12 }, // a/l both split + // 64x64 -> 32x32 + { 222, 34, 30 }, // a/l both not split + { 72, 16, 44 }, // a split, l not split + { 58, 32, 12 }, // l split, a not split + { 10, 7, 6 }, // a/l both split +}; + +//Rearranged the values for better usage +static const nmv_context default_nmv_context = { + {32, 64, 96}, + { + { // Vertical component + 128, // sign + {224, 144, 192, 168, 192, 176, 192, 198, 198, 245}, // class + {216}, // class0 + {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits + }, + { // Horizontal component + 128, // sign + {216, 128, 176, 160, 176, 176, 192, 198, 198, 208}, // class + {208}, // class0 + {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits + } + }, + {{128, 128, 64}, {96, 112, 64}}, // class0_fp0 + {64, 96, 64}, // fp0 + {{128, 128, 64}, {96, 112, 64}}, // class0_fp1 + {64, 96, 64}, // fp1 + {160, 128}, // class0_hp bit + {160, 128} // hp + +}; + +//Rearranged the coeff probs for better usage +static const vp9_prob default_coef_probs_4x4[COEFF_PROB_SIZE][COEFF_PROB_NUM] = { + // Y plane - Intra + // Band 0 + { 195, 29, 183 }, { 84, 49, 136 }, { 8, 42, 71 }, + // Band 1 + { 31, 107, 169 }, { 35, 99, 159 }, { 17, 82, 140 }, + { 8, 66, 114 }, { 2, 44, 76 }, { 1, 19, 32 }, + // Band 2 + { 40, 132, 201 }, { 29, 114, 187 }, { 13, 91, 157 }, + { 7, 75, 127 }, { 3, 58, 95 }, { 1, 28, 47 }, + // Band 3 + { 69, 142, 221 }, { 42, 122, 201 }, { 15, 91, 159 }, + { 6, 67, 121 }, { 1, 42, 77 }, { 1, 17, 31 }, + // Band 4 + { 102, 148, 228 }, { 67, 117, 204 }, { 17, 82, 154 }, + { 6, 59, 114 }, { 2, 39, 75 }, { 1, 15, 29 }, + // Band 5 + { 156, 57, 233 }, { 119, 57, 212 }, { 58, 48, 163 }, + { 29, 40, 124 }, { 12, 30, 81 }, { 3, 12, 31 }, + + // Y plane - Inter + // Band 0 + { 191, 107, 226 }, { 124, 117, 204 }, { 25, 99, 155 }, + // Band 1 + { 29, 148, 210 }, { 37, 126, 194 }, { 8, 93, 157 }, + { 2, 68, 118 }, { 1, 39, 69 }, { 1, 17, 33 }, + // Band 2 + { 41, 151, 213 }, { 27, 123, 193 }, { 3, 82, 144 }, + { 1, 58, 105 }, { 1, 32, 60 }, { 1, 13, 26 }, + // Band 3 + { 59, 159, 220 }, { 23, 126, 198 }, { 4, 88, 151 }, + { 1, 66, 114 }, { 1, 38, 71 }, { 1, 18, 34 }, + // Band 4 + { 114, 136, 232 }, { 51, 114, 207 }, { 11, 83, 155 }, + { 3, 56, 105 }, { 1, 33, 65 }, { 1, 17, 34 }, + // Band 5 + { 149, 65, 234 }, { 121, 57, 215 }, { 61, 49, 166 }, + { 28, 36, 114 }, { 12, 25, 76 }, { 3, 16, 42 }, + + // UV plane - Intra + // Band 0 + { 214, 49, 220 }, { 132, 63, 188 }, { 42, 65, 137 }, + // Band 1 + { 85, 137, 221 }, { 104, 131, 216 }, { 49, 111, 192 }, + { 21, 87, 155 }, { 2, 49, 87 }, { 1, 16, 28 }, + // Band 2 + { 89, 163, 230 }, { 90, 137, 220 }, { 29, 100, 183 }, + { 10, 70, 135 }, { 2, 42, 81 }, { 1, 17, 33 }, + // Band 3 + { 108, 167, 237 }, { 55, 133, 222 }, { 15, 97, 179 }, + { 4, 72, 135 }, { 1, 45, 85 }, { 1, 19, 38 }, + // Band 4 + { 124, 146, 240 }, { 66, 124, 224 }, { 17, 88, 175 }, + { 4, 58, 122 }, { 1, 36, 75 }, { 1, 18, 37 }, + // Band 5 + { 141, 79, 241 }, { 126, 70, 227 }, { 66, 58, 182 }, + { 30, 44, 136 }, { 12, 34, 96 }, { 2, 20, 47 }, + + // UV plane - Inter + // Band 0 + { 229, 99, 249 }, { 143, 111, 235 }, { 46, 109, 192 }, + // Band 1 + { 82, 158, 236 }, { 94, 146, 224 }, { 25, 117, 191 }, + { 9, 87, 149 }, { 3, 56, 99 }, { 1, 33, 57 }, + // Band 2 + { 83, 167, 237 }, { 68, 145, 222 }, { 10, 103, 177 }, + { 2, 72, 131 }, { 1, 41, 79 }, { 1, 20, 39 }, + // Band 3 + { 99, 167, 239 }, { 47, 141, 224 }, { 10, 104, 178 }, + { 2, 73, 133 }, { 1, 44, 85 }, { 1, 22, 47 }, + // Band 4 + { 127, 145, 243 }, { 71, 129, 228 }, { 17, 93, 177 }, + { 3, 61, 124 }, { 1, 41, 84 }, { 1, 21, 52 }, + // Band 5 + { 157, 78, 244 }, { 140, 72, 231 }, { 69, 58, 184 }, + { 31, 44, 137 }, { 14, 38, 105 }, { 8, 23, 61 } +}; + +static const vp9_prob default_coef_probs_8x8[COEFF_PROB_SIZE][COEFF_PROB_NUM] = { + // Y plane - Intra + // Band 0 + { 125, 34, 187 }, { 52, 41, 133 }, { 6, 31, 56 }, + // Band 1 + { 37, 109, 153 }, { 51, 102, 147 }, { 23, 87, 128 }, + { 8, 67, 101 }, { 1, 41, 63 }, { 1, 19, 29 }, + // Band 2 + { 31, 154, 185 }, { 17, 127, 175 }, { 6, 96, 145 }, + { 2, 73, 114 }, { 1, 51, 82 }, { 1, 28, 45 }, + // Band 3 + { 23, 163, 200 }, { 10, 131, 185 }, { 2, 93, 148 }, + { 1, 67, 111 }, { 1, 41, 69 }, { 1, 14, 24 }, + // Band 4 + { 29, 176, 217 }, { 12, 145, 201 }, { 3, 101, 156 }, + { 1, 69, 111 }, { 1, 39, 63 }, { 1, 14, 23 }, + // Band 5 + { 57, 192, 233 }, { 25, 154, 215 }, { 6, 109, 167 }, + { 3, 78, 118 }, { 1, 48, 69 }, { 1, 21, 29 }, + + // Y plane - Inter + // Band 0 + { 202, 105, 245 }, { 108, 106, 216 }, { 18, 90, 144 }, + // Band 1 + { 33, 172, 219 }, { 64, 149, 206 }, { 14, 117, 177 }, + { 5, 90, 141 }, { 2, 61, 95 }, { 1, 37, 57 }, + // Band 2 + { 33, 179, 220 }, { 11, 140, 198 }, { 1, 89, 148 }, + { 1, 60, 104 }, { 1, 33, 57 }, { 1, 12, 21 }, + // Band 3 + { 30, 181, 221 }, { 8, 141, 198 }, { 1, 87, 145 }, + { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 20 }, + // Band 4 + { 32, 186, 224 }, { 7, 142, 198 }, { 1, 86, 143 }, + { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 22 }, + // Band 5 + { 57, 192, 227 }, { 20, 143, 204 }, { 3, 96, 154 }, + { 1, 68, 112 }, { 1, 42, 69 }, { 1, 19, 32 }, + + // UV plane - Intra + // Band 0 + { 212, 35, 215 }, { 113, 47, 169 }, { 29, 48, 105 }, + // Band 1 + { 74, 129, 203 }, { 106, 120, 203 }, { 49, 107, 178 }, + { 19, 84, 144 }, { 4, 50, 84 }, { 1, 15, 25 }, + // Band 2 + { 71, 172, 217 }, { 44, 141, 209 }, { 15, 102, 173 }, + { 6, 76, 133 }, { 2, 51, 89 }, { 1, 24, 42 }, + // Band 3 + { 64, 185, 231 }, { 31, 148, 216 }, { 8, 103, 175 }, + { 3, 74, 131 }, { 1, 46, 81 }, { 1, 18, 30 }, + // Band 4 + { 65, 196, 235 }, { 25, 157, 221 }, { 5, 105, 174 }, + { 1, 67, 120 }, { 1, 38, 69 }, { 1, 15, 30 }, + // Band 5 + { 65, 204, 238 }, { 30, 156, 224 }, { 7, 107, 177 }, + { 2, 70, 124 }, { 1, 42, 73 }, { 1, 18, 34 }, + + // UV Plane - Inter + // Band 0 + { 225, 86, 251 }, { 144, 104, 235 }, { 42, 99, 181 }, + // Band 1 + { 85, 175, 239 }, { 112, 165, 229 }, { 29, 136, 200 }, + { 12, 103, 162 }, { 6, 77, 123 }, { 2, 53, 84 }, + // Band 2 + { 75, 183, 239 }, { 30, 155, 221 }, { 3, 106, 171 }, + { 1, 74, 128 }, { 1, 44, 76 }, { 1, 17, 28 }, + // Band 3 + { 73, 185, 240 }, { 27, 159, 222 }, { 2, 107, 172 }, + { 1, 75, 127 }, { 1, 42, 73 }, { 1, 17, 29 }, + // Band 4 + { 62, 190, 238 }, { 21, 159, 222 }, { 2, 107, 172 }, + { 1, 72, 122 }, { 1, 40, 71 }, { 1, 18, 32 }, + // Band 5 + { 61, 199, 240 }, { 27, 161, 226 }, { 4, 113, 180 }, + { 1, 76, 129 }, { 1, 46, 80 }, { 1, 23, 41 } +}; + +static const vp9_prob default_coef_probs_16x16[COEFF_PROB_SIZE][COEFF_PROB_NUM] = { + // Y plane - Intra + // Band 0 + { 7, 27, 153 }, { 5, 30, 95 }, { 1, 16, 30 }, + // Band 1 + { 50, 75, 127 }, { 57, 75, 124 }, { 27, 67, 108 }, + { 10, 54, 86 }, { 1, 33, 52 }, { 1, 12, 18 }, + // Band 2 + { 43, 125, 151 }, { 26, 108, 148 }, { 7, 83, 122 }, + { 2, 59, 89 }, { 1, 38, 60 }, { 1, 17, 27 }, + // Band 3 + { 23, 144, 163 }, { 13, 112, 154 }, { 2, 75, 117 }, + { 1, 50, 81 }, { 1, 31, 51 }, { 1, 14, 23 }, + // Band 4 + { 18, 162, 185 }, { 6, 123, 171 }, { 1, 78, 125 }, + { 1, 51, 86 }, { 1, 31, 54 }, { 1, 14, 23 }, + // Band 5 + { 15, 199, 227 }, { 3, 150, 204 }, { 1, 91, 146 }, + { 1, 55, 95 }, { 1, 30, 53 }, { 1, 11, 20 }, + + // Y plane - Inter + // Band 0 + { 19, 55, 240 }, { 19, 59, 196 }, { 3, 52, 105 }, + // Band 1 + { 41, 166, 207 }, { 104, 153, 199 }, { 31, 123, 181 }, + { 14, 101, 152 }, { 5, 72, 106 }, { 1, 36, 52 }, + // Band 2 + { 35, 176, 211 }, { 12, 131, 190 }, { 2, 88, 144 }, + { 1, 60, 101 }, { 1, 36, 60 }, { 1, 16, 28 }, + // Band 3 + { 28, 183, 213 }, { 8, 134, 191 }, { 1, 86, 142 }, + { 1, 56, 96 }, { 1, 30, 53 }, { 1, 12, 20 }, + // Band 4 + { 20, 190, 215 }, { 4, 135, 192 }, { 1, 84, 139 }, + { 1, 53, 91 }, { 1, 28, 49 }, { 1, 11, 20 }, + // Band 5 + { 13, 196, 216 }, { 2, 137, 192 }, { 1, 86, 143 }, + { 1, 57, 99 }, { 1, 32, 56 }, { 1, 13, 24 }, + + // UV plane - Intra + // Band 0 + { 211, 29, 217 }, { 96, 47, 156 }, { 22, 43, 87 }, + // Band 1 + { 78, 120, 193 }, { 111, 116, 186 }, { 46, 102, 164 }, + { 15, 80, 128 }, { 2, 49, 76 }, { 1, 18, 28 }, + // Band 2 + { 71, 161, 203 }, { 42, 132, 192 }, { 10, 98, 150 }, + { 3, 69, 109 }, { 1, 44, 70 }, { 1, 18, 29 }, + // Band 3 + { 57, 186, 211 }, { 30, 140, 196 }, { 4, 93, 146 }, + { 1, 62, 102 }, { 1, 38, 65 }, { 1, 16, 27 }, + // Band 4 + { 47, 199, 217 }, { 14, 145, 196 }, { 1, 88, 142 }, + { 1, 57, 98 }, { 1, 36, 62 }, { 1, 15, 26 }, + // Band 5 + { 26, 219, 229 }, { 5, 155, 207 }, { 1, 94, 151 }, + { 1, 60, 104 }, { 1, 36, 62 }, { 1, 16, 28 }, + + // UV plane - Inter + // Band 0 + { 233, 29, 248 }, { 146, 47, 220 }, { 43, 52, 140 }, + // Band 1 + { 100, 163, 232 }, { 179, 161, 222 }, { 63, 142, 204 }, + { 37, 113, 174 }, { 26, 89, 137 }, { 18, 68, 97 }, + // Band 2 + { 85, 181, 230 }, { 32, 146, 209 }, { 7, 100, 164 }, + { 3, 71, 121 }, { 1, 45, 77 }, { 1, 18, 30 }, + // Band 3 + { 65, 187, 230 }, { 20, 148, 207 }, { 2, 97, 159 }, + { 1, 68, 116 }, { 1, 40, 70 }, { 1, 14, 29 }, + // Band 4 + { 40, 194, 227 }, { 8, 147, 204 }, { 1, 94, 155 }, + { 1, 65, 112 }, { 1, 39, 66 }, { 1, 14, 26 }, + // Band 5 + { 16, 208, 228 }, { 3, 151, 207 }, { 1, 98, 160 }, + { 1, 67, 117 }, { 1, 41, 74 }, { 1, 17, 31 } +}; + +static const vp9_prob default_coef_probs_32x32[COEFF_PROB_SIZE][COEFF_PROB_NUM] = { + // Y plane - Intra + // Band 0 + { 17, 38, 140 }, { 7, 34, 80 }, { 1, 17, 29 }, + // Band 1 + { 37, 75, 128 }, { 41, 76, 128 }, { 26, 66, 116 }, + { 12, 52, 94 }, { 2, 32, 55 }, { 1, 10, 16 }, + // Band 2 + { 50, 127, 154 }, { 37, 109, 152 }, { 16, 82, 121 }, + { 5, 59, 85 }, { 1, 35, 54 }, { 1, 13, 20 }, + //Band 3 + { 40, 142, 167 }, { 17, 110, 157 }, { 2, 71, 112 }, + { 1, 44, 72 }, { 1, 27, 45 }, { 1, 11, 17 }, + // Band 4 + { 30, 175, 188 }, { 9, 124, 169 }, { 1, 74, 116 }, + { 1, 48, 78 }, { 1, 30, 49 }, { 1, 11, 18 }, + // Band 5 + { 10, 222, 223 }, { 2, 150, 194 }, { 1, 83, 128 }, + { 1, 48, 79 }, { 1, 27, 45 }, { 1, 11, 17 }, + + // Y plane - Inter + // Band 0 + { 36, 41, 235 }, { 29, 36, 193 }, { 10, 27, 111 }, + // Band 1 + { 85, 165, 222 }, { 177, 162, 215 }, { 110, 135, 195 }, + { 57, 113, 168 }, { 23, 83, 120 }, { 10, 49, 61 }, + // Band 2 + { 85, 190, 223 }, { 36, 139, 200 }, { 5, 90, 146 }, + { 1, 60, 103 }, { 1, 38, 65 }, { 1, 18, 30 }, + // Band 3 + { 72, 202, 223 }, { 23, 141, 199 }, { 2, 86, 140 }, + { 1, 56, 97 }, { 1, 36, 61 }, { 1, 16, 27 }, + // Band 4 + { 55, 218, 225 }, { 13, 145, 200 }, { 1, 86, 141 }, + { 1, 57, 99 }, { 1, 35, 61 }, { 1, 13, 22 }, + // Band 5 + { 15, 235, 212 }, { 1, 132, 184 }, { 1, 84, 139 }, + { 1, 57, 97 }, { 1, 34, 56 }, { 1, 14, 23 }, + + // UV plane - Intra + // Band 0 + { 181, 21, 201 }, { 61, 37, 123 }, { 10, 38, 71 }, + // Band 1 + { 47, 106, 172 }, { 95, 104, 173 }, { 42, 93, 159 }, + { 18, 77, 131 }, { 4, 50, 81 }, { 1, 17, 23 }, + // Band 2 + { 62, 147, 199 }, { 44, 130, 189 }, { 28, 102, 154 }, + { 18, 75, 115 }, { 2, 44, 65 }, { 1, 12, 19 }, + // Band 3 + { 55, 153, 210 }, { 24, 130, 194 }, { 3, 93, 146 }, + { 1, 61, 97 }, { 1, 31, 50 }, { 1, 10, 16 }, + // Band 4 + { 49, 186, 223 }, { 17, 148, 204 }, { 1, 96, 142 }, + { 1, 53, 83 }, { 1, 26, 44 }, { 1, 11, 17 }, + // Band 5 + { 13, 217, 212 }, { 2, 136, 180 }, { 1, 78, 124 }, + { 1, 50, 83 }, { 1, 29, 49 }, { 1, 14, 23 }, + + // UV plane - Inter + // Band 0 + { 197, 13, 247 }, { 82, 17, 222 }, { 25, 17, 162 }, + // Band 1 + { 126, 186, 247 }, { 234, 191, 243 }, { 176, 177, 234 }, + { 104, 158, 220 }, { 66, 128, 186 }, { 55, 90, 137 }, + // Band 2 + { 111, 197, 242 }, { 46, 158, 219 }, { 9, 104, 171 }, + { 2, 65, 125 }, { 1, 44, 80 }, { 1, 17, 91 }, + // Band 3 + { 104, 208, 245 }, { 39, 168, 224 }, { 3, 109, 162 }, + { 1, 79, 124 }, { 1, 50, 102 }, { 1, 43, 102 }, + // Band 4 + { 84, 220, 246 }, { 31, 177, 231 }, { 2, 115, 180 }, + { 1, 79, 134 }, { 1, 55, 77 }, { 1, 60, 79 }, + // Band 5 + { 43, 243, 240 }, { 8, 180, 217 }, { 1, 115, 166 }, + { 1, 84, 121 }, { 1, 51, 67 }, { 1, 16, 6 } + +}; + +#endif /*VP9_PROBS_H */ diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland-drm-client-protocol.h b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland-drm-client-protocol.h new file mode 100644 index 000000000..cba188ea8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland-drm-client-protocol.h @@ -0,0 +1,213 @@ +/* + * Copyright © 2008-2011 Kristian Høgsberg + * Copyright © 2010-2011 Intel Corporation + * + * Permission to use, copy, modify, distribute, and sell this + * software and its documentation for any purpose is hereby granted + * without fee, provided that\n the above copyright notice appear in + * all copies and that both that copyright notice and this permission + * notice appear in supporting documentation, and that the name of + * the copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + */ + +#ifndef DRM_CLIENT_PROTOCOL_H +#define DRM_CLIENT_PROTOCOL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "wayland-client.h" + +struct wl_client; +struct wl_resource; + +struct wl_drm; + +extern const struct wl_interface wl_drm_interface; + +#ifndef WL_DRM_ERROR_ENUM +#define WL_DRM_ERROR_ENUM +enum wl_drm_error { + WL_DRM_ERROR_AUTHENTICATE_FAIL = 0, + WL_DRM_ERROR_INVALID_FORMAT = 1, + WL_DRM_ERROR_INVALID_NAME = 2, +}; +#endif /* WL_DRM_ERROR_ENUM */ + +#ifndef WL_DRM_FORMAT_ENUM +#define WL_DRM_FORMAT_ENUM +enum wl_drm_format { + WL_DRM_FORMAT_C8 = 0x20203843, + WL_DRM_FORMAT_RGB332 = 0x38424752, + WL_DRM_FORMAT_BGR233 = 0x38524742, + WL_DRM_FORMAT_XRGB4444 = 0x32315258, + WL_DRM_FORMAT_XBGR4444 = 0x32314258, + WL_DRM_FORMAT_RGBX4444 = 0x32315852, + WL_DRM_FORMAT_BGRX4444 = 0x32315842, + WL_DRM_FORMAT_ARGB4444 = 0x32315241, + WL_DRM_FORMAT_ABGR4444 = 0x32314241, + WL_DRM_FORMAT_RGBA4444 = 0x32314152, + WL_DRM_FORMAT_BGRA4444 = 0x32314142, + WL_DRM_FORMAT_XRGB1555 = 0x35315258, + WL_DRM_FORMAT_XBGR1555 = 0x35314258, + WL_DRM_FORMAT_RGBX5551 = 0x35315852, + WL_DRM_FORMAT_BGRX5551 = 0x35315842, + WL_DRM_FORMAT_ARGB1555 = 0x35315241, + WL_DRM_FORMAT_ABGR1555 = 0x35314241, + WL_DRM_FORMAT_RGBA5551 = 0x35314152, + WL_DRM_FORMAT_BGRA5551 = 0x35314142, + WL_DRM_FORMAT_RGB565 = 0x36314752, + WL_DRM_FORMAT_BGR565 = 0x36314742, + WL_DRM_FORMAT_RGB888 = 0x34324752, + WL_DRM_FORMAT_BGR888 = 0x34324742, + WL_DRM_FORMAT_XRGB8888 = 0x34325258, + WL_DRM_FORMAT_XBGR8888 = 0x34324258, + WL_DRM_FORMAT_RGBX8888 = 0x34325852, + WL_DRM_FORMAT_BGRX8888 = 0x34325842, + WL_DRM_FORMAT_ARGB8888 = 0x34325241, + WL_DRM_FORMAT_ABGR8888 = 0x34324241, + WL_DRM_FORMAT_RGBA8888 = 0x34324152, + WL_DRM_FORMAT_BGRA8888 = 0x34324142, + WL_DRM_FORMAT_XRGB2101010 = 0x30335258, + WL_DRM_FORMAT_XBGR2101010 = 0x30334258, + WL_DRM_FORMAT_RGBX1010102 = 0x30335852, + WL_DRM_FORMAT_BGRX1010102 = 0x30335842, + WL_DRM_FORMAT_ARGB2101010 = 0x30335241, + WL_DRM_FORMAT_ABGR2101010 = 0x30334241, + WL_DRM_FORMAT_RGBA1010102 = 0x30334152, + WL_DRM_FORMAT_BGRA1010102 = 0x30334142, + WL_DRM_FORMAT_YUYV = 0x56595559, + WL_DRM_FORMAT_YVYU = 0x55595659, + WL_DRM_FORMAT_UYVY = 0x59565955, + WL_DRM_FORMAT_VYUY = 0x59555956, + WL_DRM_FORMAT_AYUV = 0x56555941, + WL_DRM_FORMAT_NV12 = 0x3231564e, + WL_DRM_FORMAT_NV21 = 0x3132564e, + WL_DRM_FORMAT_NV16 = 0x3631564e, + WL_DRM_FORMAT_NV61 = 0x3136564e, + WL_DRM_FORMAT_YUV410 = 0x39565559, + WL_DRM_FORMAT_YVU410 = 0x39555659, + WL_DRM_FORMAT_YUV411 = 0x31315559, + WL_DRM_FORMAT_YVU411 = 0x31315659, + WL_DRM_FORMAT_YUV420 = 0x32315559, + WL_DRM_FORMAT_YVU420 = 0x32315659, + WL_DRM_FORMAT_YUV422 = 0x36315559, + WL_DRM_FORMAT_YVU422 = 0x36315659, + WL_DRM_FORMAT_YUV444 = 0x34325559, + WL_DRM_FORMAT_YVU444 = 0x34325659, +}; +#endif /* WL_DRM_FORMAT_ENUM */ + +struct wl_drm_listener { + /** + * device - device + * @name: name + */ + void (*device)(void *data, + struct wl_drm *wl_drm, + const char *name); + /** + * format - format + * @format: format + */ + void (*format)(void *data, + struct wl_drm *wl_drm, + uint32_t format); + /** + * authenticated - authenticated + */ + void (*authenticated)(void *data, + struct wl_drm *wl_drm); +}; + +static inline int +wl_drm_add_listener(struct wl_drm *wl_drm, + const struct wl_drm_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) wl_drm, + (void (**)(void)) listener, data); +} + +#define WL_DRM_AUTHENTICATE 0 +#define WL_DRM_CREATE_BUFFER 1 +#define WL_DRM_CREATE_PLANAR_BUFFER 2 + +static inline void +wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data); +} + +static inline void * +wl_drm_get_user_data(struct wl_drm *wl_drm) +{ + return wl_proxy_get_user_data((struct wl_proxy *) wl_drm); +} + +static inline void +wl_drm_destroy(struct wl_drm *wl_drm) +{ + wl_proxy_destroy((struct wl_proxy *) wl_drm); +} + +static inline void +wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id) +{ + wl_proxy_marshal((struct wl_proxy *) wl_drm, + WL_DRM_AUTHENTICATE, id); +} + +static inline struct wl_buffer * +wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t stride, uint32_t format) +{ + struct wl_proxy *id; + + id = wl_proxy_create((struct wl_proxy *) wl_drm, + &wl_buffer_interface); + if (!id) + return NULL; + + wl_proxy_marshal((struct wl_proxy *) wl_drm, + WL_DRM_CREATE_BUFFER, id, name, width, height, stride, format); + + return (struct wl_buffer *) id; +} + +static inline struct wl_buffer * +wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2) +{ + struct wl_proxy *id; + + id = wl_proxy_create((struct wl_proxy *) wl_drm, + &wl_buffer_interface); + if (!id) + return NULL; + + wl_proxy_marshal((struct wl_proxy *) wl_drm, + WL_DRM_CREATE_PLANAR_BUFFER, id, name, width, height, format, offset0, stride0, offset1, stride1, offset2, stride2); + + return (struct wl_buffer *) id; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.am b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.am new file mode 100644 index 000000000..614d8a468 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.am @@ -0,0 +1,28 @@ +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +EXTRA_DIST = \ + wayland-drm.xml \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.in b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.in new file mode 100644 index 000000000..71f84ccc6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/Makefile.in @@ -0,0 +1,478 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/wayland +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GEN4ASM = @GEN4ASM@ +GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ +GEN4ASM_LIBS = @GEN4ASM_LIBS@ +GIT = @GIT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTEL_DRIVER_LT_LDFLAGS = @INTEL_DRIVER_LT_LDFLAGS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DEPS_CFLAGS = @LIBVA_DEPS_CFLAGS@ +LIBVA_DEPS_LIBS = @LIBVA_DEPS_LIBS@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_DRM_DEPS_CFLAGS = @LIBVA_DRM_DEPS_CFLAGS@ +LIBVA_DRM_DEPS_LIBS = @LIBVA_DRM_DEPS_LIBS@ +LIBVA_PACKAGE_VERSION = @LIBVA_PACKAGE_VERSION@ +LIBVA_WAYLAND_DEPS_CFLAGS = @LIBVA_WAYLAND_DEPS_CFLAGS@ +LIBVA_WAYLAND_DEPS_LIBS = @LIBVA_WAYLAND_DEPS_LIBS@ +LIBVA_X11_DEPS_CFLAGS = @LIBVA_X11_DEPS_CFLAGS@ +LIBVA_X11_DEPS_LIBS = @LIBVA_X11_DEPS_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PYTHON2 = @PYTHON2@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@ +WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +wayland_protocoldir = @wayland_protocoldir@ +wayland_scanner = @wayland_scanner@ +EXTRA_DIST = \ + wayland-drm.xml \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/wayland/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/wayland/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/wayland-drm.xml b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/wayland-drm.xml new file mode 100644 index 000000000..265d4f892 --- /dev/null +++ b/contrib/sdk/sources/vaapi/intel-driver-1.6.2/src/wayland/wayland-drm.xml @@ -0,0 +1,155 @@ + + + + + Copyright © 2008-2011 Kristian Høgsberg + Copyright © 2010-2011 Intel Corporation + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that\n the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/COPYING b/contrib/sdk/sources/vaapi/libva-1.6.2/COPYING new file mode 100644 index 000000000..900e77549 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/COPYING @@ -0,0 +1,19 @@ + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile new file mode 100644 index 000000000..c2d5d65bb --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile @@ -0,0 +1,54 @@ +LIBRARY = libva + +CC = kos32-gcc +AR = kos32-ar +LD = kos32-ld +STRIP = kos32-strip + +CFLAGS = -U_Win32 -U_WIN32 -U__MINGW32__ -c -O2 -Wall -Winline -fno-ident +CFLAGS+= -mno-ms-bitfields -fomit-frame-pointer -Wno-attributes -Wno-unused + +LDFLAGS = -shared -s -nostdlib -T ../../newlib/dll.lds --entry _DllStartup --image-base=0 +LDFLAGS+= --out-implib $(LIBRARY).dll.a + +ARFLAGS = crs + +INCLUDES= -I../../newlib/libc/include -I../../libdrm -I../../libdrm/intel -I../../libdrm/include/drm +INCLUDES+= -I. -I./va + +LIBPATH:= -L../../../lib -L/home/autobuild/tools/win32/mingw32/lib + +LIBS:= -ldll -ldrm -lc.dll -lgcc + +DEFINES:= -DHAVE_CONFIG_H + +SOURCES = \ + va/drm/va_drm.c \ + va/drm/va_drm_utils.c \ + va/va.c \ + va/va_compat.c \ + va/va_fool.c \ + va/va_tpi.c \ + va/va_trace.c + + +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) + +# targets + +all: $(LIBRARY).dll + +$(LIBRARY).dll: $(OBJECTS) Makefile + $(LD) $(LDFLAGS) $(LIBPATH) -o $@ $(OBJECTS) $(LIBS) + $(STRIP) $@ + mv -f $@ ../../../bin + mv -f $(LIBRARY).dll.a ../../../lib + + +%.o : %.c Makefile + $(CC) $(INCLUDES) $(CFLAGS) $(DEFINES) -o $@ $< + + +clean: + -rm -f *.o + \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.am new file mode 100644 index 000000000..beac7e964 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.am @@ -0,0 +1,47 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = va dummy_drv_video pkgconfig test debian.upstream doc + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = \ + aclocal.m4 compile config.guess config.sub \ + configure depcomp install-sh ltmain.sh \ + Makefile.in missing + +DEB_BUILDDIR = debian.build + +deb: + @[ -d debian ] || ln -s debian.upstream debian + dpkg-buildpackage -rfakeroot -uc -us + +deb.upstream: dist + -mkdir -p $(DEB_BUILDDIR) + cd $(DEB_BUILDDIR) && \ + rm -rf $(PACKAGE)-$(VERSION) && \ + tar zxvf ../$(PACKAGE)-$(VERSION).tar.gz && \ + cd $(PACKAGE)-$(VERSION) && \ + $(MAKE) deb -f Makefile.am diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.in new file mode 100644 index 000000000..8435b93b0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/Makefile.in @@ -0,0 +1,876 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/config.h.in COPYING NEWS compile config.guess \ + config.sub depcomp install-sh missing ltmain.sh +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +DIST_TARGETS = dist-bzip2 dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +AUTOMAKE_OPTIONS = foreign +SUBDIRS = va dummy_drv_video pkgconfig test debian.upstream doc + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = \ + aclocal.m4 compile config.guess config.sub \ + configure depcomp install-sh ltmain.sh \ + Makefile.in missing + +DEB_BUILDDIR = debian.build +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + + +deb: + @[ -d debian ] || ln -s debian.upstream debian + dpkg-buildpackage -rfakeroot -uc -us + +deb.upstream: dist + -mkdir -p $(DEB_BUILDDIR) + cd $(DEB_BUILDDIR) && \ + rm -rf $(PACKAGE)-$(VERSION) && \ + tar zxvf ../$(PACKAGE)-$(VERSION).tar.gz && \ + cd $(PACKAGE)-$(VERSION) && \ + $(MAKE) deb -f Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/NEWS b/contrib/sdk/sources/vaapi/libva-1.6.2/NEWS new file mode 100644 index 000000000..c3752de45 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/NEWS @@ -0,0 +1,129 @@ +libva NEWS -- summary of user visible changes. 2015-12-15 +Copyright (C) 2009-2015 Intel Corporation + +Version 1.6.2 - 15.Dec.2015 +* Bump VA API version to 0.38.1 +* Add new RT format for 16 bits per channel memory layout(P010,P016): VA_RT_FORMAT_YUV420_10BPP +* Add new fourcc codes: VA_FOURCC_P010, VA_FOURCC_P016, VA_FOURCC_YV16 +* Fix crash if user doesn't have right to access the DRI device +* Fix uninitialized x11_screen driver context member for X11 output + https://bugs.freedesktop.org/show_bug.cgi?id=61603 +* Fix the issue of not to use LIBVA_DRIVER_NAME + https://bugs.freedesktop.org/show_bug.cgi?id=72822 +* Fix build issue with wayland + https://bugs.freedesktop.org/show_bug.cgi?id=79478 +* vainfo: Add option '--display' + +Version 1.6.1 - 09.Sep.2015 +* Add support for VP9 decode and HEVC encode in VA trace module +* Add VP9 profile to vainfo +* Enhance VA trace to dump VP8 encode parameters + +Version 1.6.0 - 01.Jul.2015 +* Bump VA API version to 0.38 +* Add support for HEVC encode API +* Add support for VP9 decode API +* Add API (vaSetDriverName()) to allow the user to specify the loaded backend driver +* Add VAConfigAttribEncSkipFrame and corresponding structures to support + sending skip frame parameters to the backend driver. +* Add support for querying slice decoding mode supported by the backend driver +* Fix quality issue in the JPEG encode demo + +Version 1.5.1 - DD.Mar.2015 +* API: correct the comment for num_token_partitions in struct _VAEncPictureParameterBufferVP8 +* VA/x11: fix double Unlocks/SyncHandle to avoid segmentation fault + +Version 1.5.0 - 28.Dec.2014 +* API: add support for HEVC decoding +* API: extend JPEG encoding data structures and add configuration attribute for JPEG encoding +* Add a unit test for JPEG encoding (Sirisha Muppavarapu) +* Add support for HEVC decoding and JPEG encoding in VA trace utility +* Fix out of tree builds (Emil Velikov) +* VA/X11: fix BadDrawable issue when calling vaTerminate() after the pixmaps have been destroyed (Lionel Landwerlin) + +Version 1.4.1 - 24.Oct.2014 +* Add support for DRM Render-Nodes (Andrey Larionov) + +Version 1.4.0 - 30.Sep.2014 +* API: add support for VP8 encoding +* API: add H.264 MVC profiles for decoding and encoding +* API: add buffer export interfaces for interop with 3rdparty APIs (EGL, OCL) +* API: add suppor for encoder quality level +* API: add attribute usage hint flag +* Fix build on 64-bit versions of Android (Qiming Shi) +* Assorted fixes to the VA fool and trace modules (Austin Yuan) + +Version 1.3.1 - 09.May.2014 +* API: fix VA_ENC_PACKED_HEADER_RAW_DATA value +* API: add STE filter to the VPP pipeline +* Update doxygen tags in libva +* Fix doc/Makefile.am +* A workaround for https://bugs.freedesktop.org/show_bug.cgi?id=76755 + +Version 1.3.0 - 24.Mar.2014 +* API: add support for VP8 decoding +* API: drop VAEntrypointMax enumeration +* Enhancement for VA trace utility + +Version 1.2.1 - 27.Jun.2013 +* Fix https://bugs.freedesktop.org/show_bug.cgi?id=66221 +* Add back VA_DRIVER_INIT_FUNC definition for testing + +Version 1.2.0 - 25.Jun.2013 +* API: new H.264 encoding API for Main and High profiles +* API: add support for MPEG-2 encoding +* API: add video processing interfaces +* API: add vaQuerySurfaceAttributes() to query surface attributes supported by the underlying drivers. +* API: new version of vaCreateSurfaces() +* API: add new surface attributes to enable VA surface creation from external buffer +* API: add new RT formats and fourcc codes +* Refine VA trace utility +* Refine H.264 encoding test cases {avcenc, h264enc} +* A new test case for MPEG-2 encoding +* A lot of bug fixes + +Version 1.1.1 - 19.Mar.2013 +* Support wayland 1.0 protocol (Rob Bradford) +* Automake 1.13 fixups (Armin K) + +Version 1.1.0 - 04.Oct.2012 +* API: add Wayland support +* API: add raw DRM support for headless pipelines +* Fix generic VA/GLX implementation for newer cluttersink versions +* Fix threading issues in VA objects reference code (+Krzysztof Kotlenga) +* Fix build on Android Ice Cream Sandwich (+Haitao Huang, Daniel Charles) + +Version 1.0.16 - 02.Aug.2012 +* API: data structures for JPEG Baseline decoding +* API: clarify the definition of slice_data_bit_offset +* Add a simple test case for JPEG decoding + +Version 1.0.15 - 28.Oct.2011 +* API: make {Top,Bottom}FieldOrderCnt signed (Yi Wang) +* Add auto-generated Debian packaging +* Refine VA trace & VA fool utilities +* Move i965 driver to a specific repository (vaapi/intel-driver) +* Fix DSO link issue in tests +* Fix fglrx driver name detection +* Fix API vs. DSO vs. package versioning + +Version 1.0.14 - 28.Jul.2011 +* API: rename VA_DECODE_ERROR_TYPE to VADecodeErrorType +* Fix memory leaks (Edgar Hucek) +* Fix VA trace logs (Alexander Osin) +* Fix vaTerminate() with some applications, e.g. GStreamer + +Version 1.0.13 - 30.May.2011 +* API: fix VA_ROTATION_270 definition +* Add a simple H.264 encoder "avcenc" (Chang Zhou) +* Fix VA tracer (Alexander Osin) +* Fix vaBufferInfo() interface (Alexander Osin) + +Version 1.0.12 - 01.Apr.2011 +* API: add VARenderMode interface to select overlay or GPU rendering mode +* API: add VARenderDevice interface to allow rendering to an external device +* API: add VADisplayAttribOverlay{ColorKey,AutoPaintColorKey} interface +* Fix build issues on Android 2.3 + +Changes for older versions can be found in git log or previously +released packages. diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/aclocal.m4 b/contrib/sdk/sources/vaapi/libva-1.6.2/aclocal.m4 new file mode 100644 index 000000000..a80a6c172 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/aclocal.m4 @@ -0,0 +1,9911 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/compile b/contrib/sdk/sources/vaapi/libva-1.6.2/compile new file mode 100644 index 000000000..531136b06 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/config.guess b/contrib/sdk/sources/vaapi/libva-1.6.2/config.guess new file mode 100644 index 000000000..b79252d6b --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/config.guess @@ -0,0 +1,1558 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/config.h b/contrib/sdk/sources/vaapi/libva-1.6.2/config.h new file mode 100644 index 000000000..d4e726caa --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/config.h @@ -0,0 +1,104 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +//#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_EGL_EGL_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_GL_GLX_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_GL_GL_H 1 + +/* Defined to 1 if GCC visibility attribute is supported */ +#define HAVE_GNUC_VISIBILITY_ATTRIBUTE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Defined to 1 if VA/DRM API is built */ +#define HAVE_VA_DRM 1 + +/* Defined to 1 if VA/EGL API is built */ +//#define HAVE_VA_EGL 1 + +/* Defined to 1 if VA/GLX API is built */ +//#define HAVE_VA_GLX 1 + +/* Defined to 1 if VA/Wayland API is built */ +//#define HAVE_VA_WAYLAND 1 + +/* Defined to 1 if VA/X11 API is built */ +//#define HAVE_VA_X11 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libva" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "waldo.bastian@intel.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libva" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libva 1.6.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libva" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.6.2" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Defined to the versioned __vaDriverInit function name */ +#define VA_DRIVER_INIT_FUNC __vaDriverInit_0_38 + +/* Version number of package */ +#define VERSION "1.6.2" + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/config.h.in b/contrib/sdk/sources/vaapi/libva-1.6.2/config.h.in new file mode 100644 index 000000000..84c59bc4d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/config.h.in @@ -0,0 +1,103 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_EGL_EGL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLX_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GL_H + +/* Defined to 1 if GCC visibility attribute is supported */ +#undef HAVE_GNUC_VISIBILITY_ATTRIBUTE + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Defined to 1 if VA/DRM API is built */ +#undef HAVE_VA_DRM + +/* Defined to 1 if VA/EGL API is built */ +#undef HAVE_VA_EGL + +/* Defined to 1 if VA/GLX API is built */ +#undef HAVE_VA_GLX + +/* Defined to 1 if VA/Wayland API is built */ +#undef HAVE_VA_WAYLAND + +/* Defined to 1 if VA/X11 API is built */ +#undef HAVE_VA_X11 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Defined to the versioned __vaDriverInit function name */ +#undef VA_DRIVER_INIT_FUNC + +/* Version number of package */ +#undef VERSION + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/config.hh b/contrib/sdk/sources/vaapi/libva-1.6.2/config.hh new file mode 100644 index 000000000..71a19c090 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/config.hh @@ -0,0 +1,104 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +//#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_EGL_EGL_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_GL_GLX_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_GL_GL_H 1 + +/* Defined to 1 if GCC visibility attribute is supported */ +#define HAVE_GNUC_VISIBILITY_ATTRIBUTE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Defined to 1 if VA/DRM API is built */ +#define HAVE_VA_DRM 1 + +/* Defined to 1 if VA/EGL API is built */ +//#define HAVE_VA_EGL 1 + +/* Defined to 1 if VA/GLX API is built */ +//#define HAVE_VA_GLX 1 + +/* Defined to 1 if VA/Wayland API is built */ +//#define HAVE_VA_WAYLAND 1 + +/* Defined to 1 if VA/X11 API is built */ +//#define HAVE_VA_X11 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libva" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "waldo.bastian@intel.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libva" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libva 1.4.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libva" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.4.1" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Defined to the versioned __vaDriverInit function name */ +#define VA_DRIVER_INIT_FUNC __vaDriverInit_0_36 + +/* Version number of package */ +#define VERSION "1.4.1" + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/config.sub b/contrib/sdk/sources/vaapi/libva-1.6.2/config.sub new file mode 100644 index 000000000..9633db704 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/config.sub @@ -0,0 +1,1791 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-08-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 \ + | or1k | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or1k-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/configure b/contrib/sdk/sources/vaapi/libva-1.6.2/configure new file mode 100644 index 000000000..d8467222c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/configure @@ -0,0 +1,20239 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for libva 1.6.2. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: waldo.bastian@intel.com about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='libva' +PACKAGE_TARNAME='libva' +PACKAGE_VERSION='1.6.2' +PACKAGE_STRING='libva 1.6.2' +PACKAGE_BUGREPORT='waldo.bastian@intel.com' +PACKAGE_URL='' + +ac_unique_file="Makefile.am" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +pkgconfigdir +USE_WAYLAND_FALSE +USE_WAYLAND_TRUE +WAYLAND_SCANNER +WAYLAND_LIBS +WAYLAND_CFLAGS +WAYLAND_API_VERSION +USE_EGL_FALSE +USE_EGL_TRUE +EGL_LIBS +EGL_CFLAGS +USE_GLX_FALSE +USE_GLX_TRUE +GLX_LIBS +GLX_CFLAGS +USE_X11_FALSE +USE_X11_TRUE +XFIXES_LIBS +XFIXES_CFLAGS +XEXT_LIBS +XEXT_CFLAGS +X11_LIBS +X11_CFLAGS +USE_DRM_FALSE +USE_DRM_TRUE +LIBDRM_VERSION +DRM_LIBS +DRM_CFLAGS +ENABLE_DOCS_FALSE +ENABLE_DOCS_TRUE +DOXYGEN +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +CXXCPP +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +LIBVA_DRIVERS_PATH +BUILD_DUMMY_DRIVER_FALSE +BUILD_DUMMY_DRIVER_TRUE +LIBVA_LT_LDFLAGS +LIBVA_LT_VERSION +LIBVA_VERSION +LIBVA_MICRO_VERSION +LIBVA_MINOR_VERSION +LIBVA_MAJOR_VERSION +VA_API_VERSION +VA_API_MICRO_VERSION +VA_API_MINOR_VERSION +VA_API_MAJOR_VERSION +TODAY +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_docs +enable_drm +enable_x11 +enable_glx +enable_egl +enable_wayland +enable_dummy_driver +with_drivers_path +enable_static +enable_shared +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_largefile +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +DRM_CFLAGS +DRM_LIBS +X11_CFLAGS +X11_LIBS +XEXT_CFLAGS +XEXT_LIBS +XFIXES_CFLAGS +XFIXES_LIBS +GLX_CFLAGS +GLX_LIBS +EGL_CFLAGS +EGL_LIBS +WAYLAND_CFLAGS +WAYLAND_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libva 1.6.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libva] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libva 1.6.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-docs build Doxygen documentation [default=no] + --enable-drm build with VA/DRM API support [default=yes] + --enable-x11 build with VA/X11 API support [default=yes] + --enable-glx build with VA/GLX API support [default=yes] + --enable-egl build with VA/EGL API support [default=yes] + --enable-wayland build with VA/Wayland API support [default=yes] + --enable-dummy-driver build dummy video driver [default=yes] + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-drivers-path=[path] + drivers path + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + DRM_CFLAGS C compiler flags for DRM, overriding pkg-config + DRM_LIBS linker flags for DRM, overriding pkg-config + X11_CFLAGS C compiler flags for X11, overriding pkg-config + X11_LIBS linker flags for X11, overriding pkg-config + XEXT_CFLAGS C compiler flags for XEXT, overriding pkg-config + XEXT_LIBS linker flags for XEXT, overriding pkg-config + XFIXES_CFLAGS + C compiler flags for XFIXES, overriding pkg-config + XFIXES_LIBS linker flags for XFIXES, overriding pkg-config + GLX_CFLAGS C compiler flags for GLX, overriding pkg-config + GLX_LIBS linker flags for GLX, overriding pkg-config + EGL_CFLAGS C compiler flags for EGL, overriding pkg-config + EGL_LIBS linker flags for EGL, overriding pkg-config + WAYLAND_CFLAGS + C compiler flags for WAYLAND, overriding pkg-config + WAYLAND_LIBS + linker flags for WAYLAND, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +libva configure 1.6.2 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## -------------------------------------- ## +## Report this to waldo.bastian@intel.com ## +## -------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libva $as_me 1.6.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +am__api_version='1.14' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libva' + VERSION='1.6.2' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +ac_config_headers="$ac_config_headers config.h" + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +TODAY="`LC_ALL=C date +'%a, %d %b %Y %X %z'`" + + +VA_API_MAJOR_VERSION=0 +VA_API_MINOR_VERSION=38 +VA_API_MICRO_VERSION=1 +VA_API_VERSION=0.38.1 + + + + + +LIBVA_MAJOR_VERSION=1 +LIBVA_MINOR_VERSION=6 +LIBVA_MICRO_VERSION=2 +LIBVA_VERSION=1.6.2 + + + + + +LIBVA_LT_CURRENT=3802 +LIBVA_LT_REV=0 +LIBVA_LT_AGE=3801 +LIBVA_LT_VERSION="$LIBVA_LT_CURRENT:$LIBVA_LT_REV:$LIBVA_LT_AGE" +LIBVA_LT_LDFLAGS="-version-info $LIBVA_LT_VERSION" + + + +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; +else + enable_docs="no" +fi + + +# Check whether --enable-drm was given. +if test "${enable_drm+set}" = set; then : + enableval=$enable_drm; +else + enable_drm="yes" +fi + + +# Check whether --enable-x11 was given. +if test "${enable_x11+set}" = set; then : + enableval=$enable_x11; +else + enable_x11="yes" +fi + + +# Check whether --enable-glx was given. +if test "${enable_glx+set}" = set; then : + enableval=$enable_glx; +else + enable_glx="yes" +fi + + +# Check whether --enable-egl was given. +if test "${enable_egl+set}" = set; then : + enableval=$enable_egl; +else + enable_egl="yes" +fi + + +# Check whether --enable-wayland was given. +if test "${enable_wayland+set}" = set; then : + enableval=$enable_wayland; +else + enable_wayland="yes" +fi + + +# Check whether --enable-dummy-driver was given. +if test "${enable_dummy_driver+set}" = set; then : + enableval=$enable_dummy_driver; +else + enable_dummy_driver="yes" +fi + + if test x$enable_dummy_driver = xyes; then + BUILD_DUMMY_DRIVER_TRUE= + BUILD_DUMMY_DRIVER_FALSE='#' +else + BUILD_DUMMY_DRIVER_TRUE='#' + BUILD_DUMMY_DRIVER_FALSE= +fi + + + +# Check whether --with-drivers-path was given. +if test "${with_drivers_path+set}" = set; then : + withval=$with_drivers_path; +else + with_drivers_path="$libdir/dri" +fi + + +LIBVA_DRIVERS_PATH="$with_drivers_path" + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + + +# Check for Doxygen +if test "$enable_docs" = "yes"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. +set dummy ${ac_tool_prefix}doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DOXYGEN"; then + ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DOXYGEN="${ac_tool_prefix}doxygen" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DOXYGEN=$ac_cv_prog_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DOXYGEN"; then + ac_ct_DOXYGEN=$DOXYGEN + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DOXYGEN"; then + ac_cv_prog_ac_ct_DOXYGEN="$ac_ct_DOXYGEN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DOXYGEN="doxygen" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DOXYGEN=$ac_cv_prog_ac_ct_DOXYGEN +if test -n "$ac_ct_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DOXYGEN" >&5 +$as_echo "$ac_ct_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DOXYGEN" = x; then + DOXYGEN="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DOXYGEN=$ac_ct_DOXYGEN + fi +else + DOXYGEN="$ac_cv_prog_DOXYGEN" +fi + + if test "$DOXYGEN" = "no"; then + enable_docs="no" + fi +fi + if test "$enable_docs" = "yes"; then + ENABLE_DOCS_TRUE= + ENABLE_DOCS_FALSE='#' +else + ENABLE_DOCS_TRUE='#' + ENABLE_DOCS_FALSE= +fi + + +# Check for __attribute__((visibility())) +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((visibility())) is supported" >&5 +$as_echo_n "checking whether __attribute__((visibility())) is supported... " >&6; } +if ${ac_cv_have_gnuc_visibility_attribute+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c </dev/null 2>&1; then + if grep '\.hidden.*foo' conftest.s >/dev/null; then + if grep '\.protected.*bar' conftest.s >/dev/null; then + ac_cv_have_gnuc_visibility_attribute="yes" + fi + fi + fi + rm -f conftest.cs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_gnuc_visibility_attribute" >&5 +$as_echo "$ac_cv_have_gnuc_visibility_attribute" >&6; } +if test "$ac_cv_have_gnuc_visibility_attribute" = "yes"; then + +$as_echo "#define HAVE_GNUC_VISIBILITY_ATTRIBUTE 1" >>confdefs.h + +fi + +# Check for DRM (mandatory) +LIBDRM_VERSION=2.4 + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DRM" >&5 +$as_echo_n "checking for DRM... " >&6; } + +if test -n "$DRM_CFLAGS"; then + pkg_cv_DRM_CFLAGS="$DRM_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdrm >= \$LIBDRM_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdrm >= $LIBDRM_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DRM_CFLAGS=`$PKG_CONFIG --cflags "libdrm >= $LIBDRM_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DRM_LIBS"; then + pkg_cv_DRM_LIBS="$DRM_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdrm >= \$LIBDRM_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdrm >= $LIBDRM_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DRM_LIBS=`$PKG_CONFIG --libs "libdrm >= $LIBDRM_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DRM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdrm >= $LIBDRM_VERSION" 2>&1` + else + DRM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdrm >= $LIBDRM_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DRM_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libdrm >= $LIBDRM_VERSION) were not met: + +$DRM_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables DRM_CFLAGS +and DRM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables DRM_CFLAGS +and DRM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + DRM_CFLAGS=$pkg_cv_DRM_CFLAGS + DRM_LIBS=$pkg_cv_DRM_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + +USE_DRM="no" +if test "$enable_drm" = "yes"; then + USE_DRM="yes" + +$as_echo "#define HAVE_VA_DRM 1" >>confdefs.h + +fi + if test "$USE_DRM" = "yes"; then + USE_DRM_TRUE= + USE_DRM_FALSE='#' +else + USE_DRM_TRUE='#' + USE_DRM_FALSE= +fi + + +# Check for X11 +USE_X11="no" +if test "$enable_x11" = "yes"; then + USE_X11="yes" + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5 +$as_echo_n "checking for X11... " >&6; } + +if test -n "$X11_CFLAGS"; then + pkg_cv_X11_CFLAGS="$X11_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$X11_LIBS"; then + pkg_cv_X11_LIBS="$X11_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` + else + X11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$X11_PKG_ERRORS" >&5 + + USE_X11="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_X11="no" +else + X11_CFLAGS=$pkg_cv_X11_CFLAGS + X11_LIBS=$pkg_cv_X11_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XEXT" >&5 +$as_echo_n "checking for XEXT... " >&6; } + +if test -n "$XEXT_CFLAGS"; then + pkg_cv_XEXT_CFLAGS="$XEXT_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xext") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XEXT_CFLAGS=`$PKG_CONFIG --cflags "xext" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$XEXT_LIBS"; then + pkg_cv_XEXT_LIBS="$XEXT_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xext") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XEXT_LIBS=`$PKG_CONFIG --libs "xext" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + XEXT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xext" 2>&1` + else + XEXT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xext" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$XEXT_PKG_ERRORS" >&5 + + USE_X11="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_X11="no" +else + XEXT_CFLAGS=$pkg_cv_XEXT_CFLAGS + XEXT_LIBS=$pkg_cv_XEXT_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XFIXES" >&5 +$as_echo_n "checking for XFIXES... " >&6; } + +if test -n "$XFIXES_CFLAGS"; then + pkg_cv_XFIXES_CFLAGS="$XFIXES_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xfixes\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xfixes") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XFIXES_CFLAGS=`$PKG_CONFIG --cflags "xfixes" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$XFIXES_LIBS"; then + pkg_cv_XFIXES_LIBS="$XFIXES_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xfixes\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xfixes") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XFIXES_LIBS=`$PKG_CONFIG --libs "xfixes" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + XFIXES_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xfixes" 2>&1` + else + XFIXES_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xfixes" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$XFIXES_PKG_ERRORS" >&5 + + USE_X11="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USE_X11="no" +else + XFIXES_CFLAGS=$pkg_cv_XFIXES_CFLAGS + XFIXES_LIBS=$pkg_cv_XFIXES_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + if test "$USE_X11" = "yes"; then + +$as_echo "#define HAVE_VA_X11 1" >>confdefs.h + + fi +fi + if test "$USE_X11" = "yes"; then + USE_X11_TRUE= + USE_X11_FALSE='#' +else + USE_X11_TRUE='#' + USE_X11_FALSE= +fi + + +# Check for GLX +USE_GLX="no" +if test "$USE_X11:$enable_glx" = "yes:yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLX" >&5 +$as_echo_n "checking for GLX... " >&6; } + +if test -n "$GLX_CFLAGS"; then + pkg_cv_GLX_CFLAGS="$GLX_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gl x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLX_CFLAGS=`$PKG_CONFIG --cflags "gl x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GLX_LIBS"; then + pkg_cv_GLX_LIBS="$GLX_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gl x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLX_LIBS=`$PKG_CONFIG --libs "gl x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GLX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gl x11" 2>&1` + else + GLX_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gl x11" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GLX_PKG_ERRORS" >&5 + + : +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + : +else + GLX_CFLAGS=$pkg_cv_GLX_CFLAGS + GLX_LIBS=$pkg_cv_GLX_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_GLX="yes" +fi + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $GLX_CFLAGS" + LIBS="$LIBS $GLX_LIBS" + for ac_header in GL/gl.h GL/glx.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + : +else + USE_GLX="no" +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -lGL" >&5 +$as_echo_n "checking for glXCreateContext in -lGL... " >&6; } +if ${ac_cv_lib_GL_glXCreateContext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char glXCreateContext (); +int +main () +{ +return glXCreateContext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_GL_glXCreateContext=yes +else + ac_cv_lib_GL_glXCreateContext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glXCreateContext" >&5 +$as_echo "$ac_cv_lib_GL_glXCreateContext" >&6; } +if test "x$ac_cv_lib_GL_glXCreateContext" = xyes; then : + : USE_GLX="no" +fi + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + if test "$USE_GLX" = "yes"; then + +$as_echo "#define HAVE_VA_GLX 1" >>confdefs.h + + fi +fi + if test "$USE_GLX" = "yes"; then + USE_GLX_TRUE= + USE_GLX_FALSE='#' +else + USE_GLX_TRUE='#' + USE_GLX_FALSE= +fi + + +# Check for EGL +USE_EGL="no" +if test "$enable_egl" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGL" >&5 +$as_echo_n "checking for EGL... " >&6; } + +if test -n "$EGL_CFLAGS"; then + pkg_cv_EGL_CFLAGS="$EGL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGL_CFLAGS=`$PKG_CONFIG --cflags "egl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$EGL_LIBS"; then + pkg_cv_EGL_LIBS="$EGL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGL_LIBS=`$PKG_CONFIG --libs "egl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + EGL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "egl" 2>&1` + else + EGL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "egl" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$EGL_PKG_ERRORS" >&5 + + : +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + : +else + EGL_CFLAGS=$pkg_cv_EGL_CFLAGS + EGL_LIBS=$pkg_cv_EGL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_EGL="yes" +fi + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $EGL_CFLAGS" + LIBS="$LIBS $EGL_LIBS" + for ac_header in EGL/egl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default" +if test "x$ac_cv_header_EGL_egl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_EGL_EGL_H 1 +_ACEOF + : +else + USE_EGL="no" +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetDisplay in -lEGL" >&5 +$as_echo_n "checking for eglGetDisplay in -lEGL... " >&6; } +if ${ac_cv_lib_EGL_eglGetDisplay+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lEGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char eglGetDisplay (); +int +main () +{ +return eglGetDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_EGL_eglGetDisplay=yes +else + ac_cv_lib_EGL_eglGetDisplay=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetDisplay" >&5 +$as_echo "$ac_cv_lib_EGL_eglGetDisplay" >&6; } +if test "x$ac_cv_lib_EGL_eglGetDisplay" = xyes; then : + : +else + USE_EGL="no" +fi + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + if test "$USE_EGL" = "yes"; then + +$as_echo "#define HAVE_VA_EGL 1" >>confdefs.h + + fi +fi + if test "$USE_EGL" = "yes"; then + USE_EGL_TRUE= + USE_EGL_FALSE='#' +else + USE_EGL_TRUE='#' + USE_EGL_FALSE= +fi + + +# Check for Wayland +WAYLAND_API_VERSION=1.0.0 + + +USE_WAYLAND="no" +if test "$enable_wayland" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WAYLAND" >&5 +$as_echo_n "checking for WAYLAND... " >&6; } + +if test -n "$WAYLAND_CFLAGS"; then + pkg_cv_WAYLAND_CFLAGS="$WAYLAND_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$WAYLAND_LIBS"; then + pkg_cv_WAYLAND_LIBS="$WAYLAND_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "wayland-client >= 1.0.0" 2>&1` + else + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "wayland-client >= 1.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$WAYLAND_PKG_ERRORS" >&5 + + : +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + : +else + WAYLAND_CFLAGS=$pkg_cv_WAYLAND_CFLAGS + WAYLAND_LIBS=$pkg_cv_WAYLAND_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_WAYLAND="yes" +fi + if test "$USE_WAYLAND" = "yes"; then + + WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client` + # Extract the first word of "wayland-scanner", so it can be a program name with args. +set dummy wayland-scanner; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WAYLAND_SCANNER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WAYLAND_SCANNER in + [\\/]* | ?:[\\/]*) + ac_cv_path_WAYLAND_SCANNER="$WAYLAND_SCANNER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in ${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WAYLAND_SCANNER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WAYLAND_SCANNER=$ac_cv_path_WAYLAND_SCANNER +if test -n "$WAYLAND_SCANNER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WAYLAND_SCANNER" >&5 +$as_echo "$WAYLAND_SCANNER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +$as_echo "#define HAVE_VA_WAYLAND 1" >>confdefs.h + + fi +fi + + if test "$USE_WAYLAND" = "yes"; then + USE_WAYLAND_TRUE= + USE_WAYLAND_FALSE='#' +else + USE_WAYLAND_TRUE='#' + USE_WAYLAND_FALSE= +fi + + +pkgconfigdir=${libdir}/pkgconfig + + +# Check for builds without backend +if test "$USE_DRM:$USE_X11:$USE_WAYLAND" = "no:no:no"; then + as_fn_error $? "Please select at least one backend (DRM, X11, Wayland)" "$LINENO" 5 +fi + +# Define __vaDriverInit*() function name for dummy backend +VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_API_MAJOR_VERSION}_${VA_API_MINOR_VERSION}" + +cat >>confdefs.h <<_ACEOF +#define VA_DRIVER_INIT_FUNC $VA_DRIVER_INIT_FUNC +_ACEOF + + +ac_config_files="$ac_config_files Makefile debian.upstream/Makefile debian.upstream/changelog debian.upstream/control debian.upstream/libva$LIBVA_MAJOR_VERSION.install:debian.upstream/libva.install.in debian.upstream/libva-drm$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-drm.install.in debian.upstream/libva-egl$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-egl.install.in debian.upstream/libva-glx$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-glx.install.in debian.upstream/libva-wayland$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-wayland.install.in debian.upstream/libva-x11-$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-x11.install.in doc/Makefile dummy_drv_video/Makefile pkgconfig/Makefile pkgconfig/libva-drm.pc pkgconfig/libva-egl.pc pkgconfig/libva-glx.pc pkgconfig/libva-tpi.pc pkgconfig/libva-wayland.pc pkgconfig/libva-x11.pc pkgconfig/libva.pc test/Makefile test/basic/Makefile test/common/Makefile test/decode/Makefile test/encode/Makefile test/putsurface/Makefile test/vainfo/Makefile va/Makefile va/drm/Makefile va/egl/Makefile va/glx/Makefile va/va_version.h va/wayland/Makefile va/x11/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${BUILD_DUMMY_DRIVER_TRUE}" && test -z "${BUILD_DUMMY_DRIVER_FALSE}"; then + as_fn_error $? "conditional \"BUILD_DUMMY_DRIVER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_DOCS_TRUE}" && test -z "${ENABLE_DOCS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_DRM_TRUE}" && test -z "${USE_DRM_FALSE}"; then + as_fn_error $? "conditional \"USE_DRM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_X11_TRUE}" && test -z "${USE_X11_FALSE}"; then + as_fn_error $? "conditional \"USE_X11\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GLX_TRUE}" && test -z "${USE_GLX_FALSE}"; then + as_fn_error $? "conditional \"USE_GLX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_EGL_TRUE}" && test -z "${USE_EGL_FALSE}"; then + as_fn_error $? "conditional \"USE_EGL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_WAYLAND_TRUE}" && test -z "${USE_WAYLAND_FALSE}"; then + as_fn_error $? "conditional \"USE_WAYLAND\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libva $as_me 1.6.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +libva config.status 1.6.2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "debian.upstream/Makefile") CONFIG_FILES="$CONFIG_FILES debian.upstream/Makefile" ;; + "debian.upstream/changelog") CONFIG_FILES="$CONFIG_FILES debian.upstream/changelog" ;; + "debian.upstream/control") CONFIG_FILES="$CONFIG_FILES debian.upstream/control" ;; + "debian.upstream/libva$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva$LIBVA_MAJOR_VERSION.install:debian.upstream/libva.install.in" ;; + "debian.upstream/libva-drm$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva-drm$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-drm.install.in" ;; + "debian.upstream/libva-egl$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva-egl$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-egl.install.in" ;; + "debian.upstream/libva-glx$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva-glx$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-glx.install.in" ;; + "debian.upstream/libva-wayland$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva-wayland$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-wayland.install.in" ;; + "debian.upstream/libva-x11-$LIBVA_MAJOR_VERSION.install") CONFIG_FILES="$CONFIG_FILES debian.upstream/libva-x11-$LIBVA_MAJOR_VERSION.install:debian.upstream/libva-x11.install.in" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "dummy_drv_video/Makefile") CONFIG_FILES="$CONFIG_FILES dummy_drv_video/Makefile" ;; + "pkgconfig/Makefile") CONFIG_FILES="$CONFIG_FILES pkgconfig/Makefile" ;; + "pkgconfig/libva-drm.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-drm.pc" ;; + "pkgconfig/libva-egl.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-egl.pc" ;; + "pkgconfig/libva-glx.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-glx.pc" ;; + "pkgconfig/libva-tpi.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-tpi.pc" ;; + "pkgconfig/libva-wayland.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-wayland.pc" ;; + "pkgconfig/libva-x11.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva-x11.pc" ;; + "pkgconfig/libva.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/libva.pc" ;; + "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "test/basic/Makefile") CONFIG_FILES="$CONFIG_FILES test/basic/Makefile" ;; + "test/common/Makefile") CONFIG_FILES="$CONFIG_FILES test/common/Makefile" ;; + "test/decode/Makefile") CONFIG_FILES="$CONFIG_FILES test/decode/Makefile" ;; + "test/encode/Makefile") CONFIG_FILES="$CONFIG_FILES test/encode/Makefile" ;; + "test/putsurface/Makefile") CONFIG_FILES="$CONFIG_FILES test/putsurface/Makefile" ;; + "test/vainfo/Makefile") CONFIG_FILES="$CONFIG_FILES test/vainfo/Makefile" ;; + "va/Makefile") CONFIG_FILES="$CONFIG_FILES va/Makefile" ;; + "va/drm/Makefile") CONFIG_FILES="$CONFIG_FILES va/drm/Makefile" ;; + "va/egl/Makefile") CONFIG_FILES="$CONFIG_FILES va/egl/Makefile" ;; + "va/glx/Makefile") CONFIG_FILES="$CONFIG_FILES va/glx/Makefile" ;; + "va/va_version.h") CONFIG_FILES="$CONFIG_FILES va/va_version.h" ;; + "va/wayland/Makefile") CONFIG_FILES="$CONFIG_FILES va/wayland/Makefile" ;; + "va/x11/Makefile") CONFIG_FILES="$CONFIG_FILES va/x11/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# Print a small summary +BACKENDS="" +if test x$USE_DRM = xyes; then : + BACKENDS="$BACKENDS drm" +fi +if test x$USE_X11 = xyes; then : + BACKENDS="$BACKENDS x11" +fi +if test x$USE_GLX = xyes; then : + BACKENDS="$BACKENDS glx" +fi +if test x$USE_EGL = xyes; then : + BACKENDS="$BACKENDS egl" +fi +if test x$USE_WAYLAND = xyes; then : + BACKENDS="$BACKENDS wayland" +fi + +echo +echo "libva - ${LIBVA_VERSION} (VA-API ${VA_API_VERSION})" +echo +echo Installation prefix .............. : $prefix +echo Default driver path .............. : $LIBVA_DRIVERS_PATH +echo Extra window systems ............. : $BACKENDS +echo Build dummy driver ............... : $enable_dummy_driver +echo Build documentation .............. : $enable_docs +echo diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/configure.ac b/contrib/sdk/sources/vaapi/libva-1.6.2/configure.ac new file mode 100644 index 000000000..7c887516f --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/configure.ac @@ -0,0 +1,360 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# VA-API version +# - increment major for any ABI change (which shall not occur!) +# - increment minor for any interface change (e.g. new/modified function) +# - increment micro for any other change (new flag, new codec definition, etc.) +# - reset micro version to zero when minor version is incremented +# - reset minor version to zero when major version is incremented +m4_define([va_api_major_version], [0]) +m4_define([va_api_minor_version], [38]) +m4_define([va_api_micro_version], [1]) + +m4_define([va_api_version], + [va_api_major_version.va_api_minor_version.va_api_micro_version]) + +# libva package version number, (as distinct from shared library version) +# XXX: we want the package version to remain at 1.0.x for VA-API 0.32.y +# +# - major version is automatically generated from VA-API major version +# - minor version is automatically generated from VA-API minor version +# - increment micro for any library release +# - reset micro version to zero when VA-API major or minor version is changed +m4_define([libva_major_version], [m4_eval(va_api_major_version + 1)]) +m4_define([libva_minor_version], [m4_eval(va_api_minor_version - 32)]) +m4_define([libva_micro_version], [2]) +m4_define([libva_pre_version], [0]) + +m4_define([libva_version], + [libva_major_version.libva_minor_version.libva_micro_version]) +m4_if(libva_pre_version, [0], [], [ +m4_append([libva_version], libva_pre_version, [.pre]) +]) + +# libva library version number (generated, do not change) +# XXX: we want the SONAME to remain at libva.so.1 for VA-API major == 0 +# +# The library name is generated libva...0 where +# = VA-API major version + 1 +# = 100 * VA-API minor version + VA-API micro version +# +# For example: +# VA-API 0.32.0 generates libva.so.1.3200.0 +# VA-API 0.34.1 generates libva.so.1.3401.0 +# VA-API 1.2.13 generates libva.so.2.213.0 +m4_define([libva_interface_bias], [m4_eval(va_api_major_version + 1)]) +m4_define([libva_interface_age], [0]) +m4_define([libva_binary_age], + [m4_eval(100 * va_api_minor_version + va_api_micro_version - libva_interface_age)]) + +m4_define([libva_lt_current], + [m4_eval(100 * va_api_minor_version + va_api_micro_version + libva_interface_bias)]) +m4_define([libva_lt_revision], + [m4_eval(libva_interface_age)]) +m4_define([libva_lt_age], + [m4_eval(libva_binary_age - libva_interface_age)]) + +# libdrm minimun version requirement +m4_define([libdrm_version], [2.4]) + +# Wayland minimum version number +m4_define([wayland_api_version], [1.0.0]) + +AC_PREREQ(2.57) +AC_INIT([libva], [libva_version], [waldo.bastian@intel.com], libva) +AC_CONFIG_SRCDIR([Makefile.am]) +AC_CONFIG_MACRO_DIR([m4]) +AM_INIT_AUTOMAKE([dist-bzip2]) + +AC_CONFIG_HEADERS([config.h]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +TODAY="`LC_ALL=C date +'%a, %d %b %Y %X %z'`" +AC_SUBST(TODAY) + +VA_API_MAJOR_VERSION=va_api_major_version +VA_API_MINOR_VERSION=va_api_minor_version +VA_API_MICRO_VERSION=va_api_micro_version +VA_API_VERSION=va_api_version +AC_SUBST(VA_API_MAJOR_VERSION) +AC_SUBST(VA_API_MINOR_VERSION) +AC_SUBST(VA_API_MICRO_VERSION) +AC_SUBST(VA_API_VERSION) + +LIBVA_MAJOR_VERSION=libva_major_version +LIBVA_MINOR_VERSION=libva_minor_version +LIBVA_MICRO_VERSION=libva_micro_version +LIBVA_VERSION=libva_version +AC_SUBST(LIBVA_MAJOR_VERSION) +AC_SUBST(LIBVA_MINOR_VERSION) +AC_SUBST(LIBVA_MICRO_VERSION) +AC_SUBST(LIBVA_VERSION) + +LIBVA_LT_CURRENT=libva_lt_current +LIBVA_LT_REV=libva_lt_revision +LIBVA_LT_AGE=libva_lt_age +LIBVA_LT_VERSION="$LIBVA_LT_CURRENT:$LIBVA_LT_REV:$LIBVA_LT_AGE" +LIBVA_LT_LDFLAGS="-version-info $LIBVA_LT_VERSION" +AC_SUBST(LIBVA_LT_VERSION) +AC_SUBST(LIBVA_LT_LDFLAGS) + +AC_ARG_ENABLE(docs, + [AC_HELP_STRING([--enable-docs], + [build Doxygen documentation @<:@default=no@:>@])], + [], [enable_docs="no"]) + +AC_ARG_ENABLE(drm, + [AC_HELP_STRING([--enable-drm], + [build with VA/DRM API support @<:@default=yes@:>@])], + [], [enable_drm="yes"]) + +AC_ARG_ENABLE(x11, + [AC_HELP_STRING([--enable-x11], + [build with VA/X11 API support @<:@default=yes@:>@])], + [], [enable_x11="yes"]) + +AC_ARG_ENABLE(glx, + [AC_HELP_STRING([--enable-glx], + [build with VA/GLX API support @<:@default=yes@:>@])], + [], [enable_glx="yes"]) + +AC_ARG_ENABLE(egl, + [AC_HELP_STRING([--enable-egl], + [build with VA/EGL API support @<:@default=yes@:>@])], + [], [enable_egl="yes"]) + +AC_ARG_ENABLE([wayland], + [AC_HELP_STRING([--enable-wayland], + [build with VA/Wayland API support @<:@default=yes@:>@])], + [], [enable_wayland="yes"]) + +AC_ARG_ENABLE(dummy-driver, + [AC_HELP_STRING([--enable-dummy-driver], + [build dummy video driver @<:@default=yes@:>@])], + [], [enable_dummy_driver="yes"]) +AM_CONDITIONAL(BUILD_DUMMY_DRIVER, test x$enable_dummy_driver = xyes) + +AC_ARG_WITH(drivers-path, + [AC_HELP_STRING([--with-drivers-path=[[path]]], + [drivers path])], + [], [with_drivers_path="$libdir/dri"]) + +LIBVA_DRIVERS_PATH="$with_drivers_path" +AC_SUBST(LIBVA_DRIVERS_PATH) + +AC_DISABLE_STATIC +AC_PROG_LIBTOOL +AC_PROG_CC +AC_PROG_CXX +AM_PROG_CC_C_O +PKG_PROG_PKG_CONFIG + +AC_HEADER_STDC +AC_SYS_LARGEFILE + +# Check for Doxygen +if test "$enable_docs" = "yes"; then + AC_CHECK_TOOL([DOXYGEN], [doxygen], [no]) + if test "$DOXYGEN" = "no"; then + enable_docs="no" + fi +fi +AM_CONDITIONAL(ENABLE_DOCS, test "$enable_docs" = "yes") + +# Check for __attribute__((visibility())) +AC_CACHE_CHECK([whether __attribute__((visibility())) is supported], + ac_cv_have_gnuc_visibility_attribute, + [cat > conftest.c </dev/null 2>&1; then + if grep '\.hidden.*foo' conftest.s >/dev/null; then + if grep '\.protected.*bar' conftest.s >/dev/null; then + ac_cv_have_gnuc_visibility_attribute="yes" + fi + fi + fi + rm -f conftest.[cs] +]) +if test "$ac_cv_have_gnuc_visibility_attribute" = "yes"; then + AC_DEFINE([HAVE_GNUC_VISIBILITY_ATTRIBUTE], [1], + [Defined to 1 if GCC visibility attribute is supported]) +fi + +# Check for DRM (mandatory) +LIBDRM_VERSION=libdrm_version +PKG_CHECK_MODULES([DRM], [libdrm >= $LIBDRM_VERSION]) +AC_SUBST(LIBDRM_VERSION) + +USE_DRM="no" +if test "$enable_drm" = "yes"; then + USE_DRM="yes" + AC_DEFINE([HAVE_VA_DRM], [1], [Defined to 1 if VA/DRM API is built]) +fi +AM_CONDITIONAL(USE_DRM, test "$USE_DRM" = "yes") + +# Check for X11 +USE_X11="no" +if test "$enable_x11" = "yes"; then + USE_X11="yes" + PKG_CHECK_MODULES([X11], [x11], [:], [USE_X11="no"]) + PKG_CHECK_MODULES([XEXT], [xext], [:], [USE_X11="no"]) + PKG_CHECK_MODULES([XFIXES], [xfixes], [:], [USE_X11="no"]) + if test "$USE_X11" = "yes"; then + AC_DEFINE([HAVE_VA_X11], [1], [Defined to 1 if VA/X11 API is built]) + fi +fi +AM_CONDITIONAL(USE_X11, test "$USE_X11" = "yes") + +# Check for GLX +USE_GLX="no" +if test "$USE_X11:$enable_glx" = "yes:yes"; then + PKG_CHECK_MODULES([GLX], [gl x11], [USE_GLX="yes"], [:]) + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $GLX_CFLAGS" + LIBS="$LIBS $GLX_LIBS" + AC_CHECK_HEADERS([GL/gl.h GL/glx.h], [:], [USE_GLX="no"]) + AC_CHECK_LIB([GL], [glXCreateContext], [:] [USE_GLX="no"]) + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + if test "$USE_GLX" = "yes"; then + AC_DEFINE([HAVE_VA_GLX], [1], [Defined to 1 if VA/GLX API is built]) + fi +fi +AM_CONDITIONAL(USE_GLX, test "$USE_GLX" = "yes") + +# Check for EGL +USE_EGL="no" +if test "$enable_egl" = "yes"; then + PKG_CHECK_MODULES([EGL], [egl], [USE_EGL="yes"], [:]) + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $EGL_CFLAGS" + LIBS="$LIBS $EGL_LIBS" + AC_CHECK_HEADERS([EGL/egl.h], [:], [USE_EGL="no"]) + AC_CHECK_LIB([EGL], [eglGetDisplay], [:], [USE_EGL="no"]) + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + if test "$USE_EGL" = "yes"; then + AC_DEFINE([HAVE_VA_EGL], [1], [Defined to 1 if VA/EGL API is built]) + fi +fi +AM_CONDITIONAL(USE_EGL, test "$USE_EGL" = "yes") + +# Check for Wayland +WAYLAND_API_VERSION=wayland_api_version +AC_SUBST(WAYLAND_API_VERSION) + +USE_WAYLAND="no" +if test "$enable_wayland" = "yes"; then + PKG_CHECK_MODULES([WAYLAND], [wayland-client >= wayland_api_version], + [USE_WAYLAND="yes"], [:]) + if test "$USE_WAYLAND" = "yes"; then + + WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client` + AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner],, + [${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH]) + + AC_DEFINE([HAVE_VA_WAYLAND], [1], + [Defined to 1 if VA/Wayland API is built]) + fi +fi + +AM_CONDITIONAL(USE_WAYLAND, test "$USE_WAYLAND" = "yes") + +pkgconfigdir=${libdir}/pkgconfig +AC_SUBST(pkgconfigdir) + +# Check for builds without backend +if test "$USE_DRM:$USE_X11:$USE_WAYLAND" = "no:no:no"; then + AC_MSG_ERROR([Please select at least one backend (DRM, X11, Wayland)]) +fi + +# Define __vaDriverInit*() function name for dummy backend +VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_API_MAJOR_VERSION}_${VA_API_MINOR_VERSION}" +AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC], [$VA_DRIVER_INIT_FUNC], + [Defined to the versioned __vaDriverInit function name]) + +AC_OUTPUT([ + Makefile + debian.upstream/Makefile + debian.upstream/changelog + debian.upstream/control + debian.upstream/libva$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva.install.in + debian.upstream/libva-drm$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva-drm.install.in + debian.upstream/libva-egl$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva-egl.install.in + debian.upstream/libva-glx$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva-glx.install.in + debian.upstream/libva-wayland$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva-wayland.install.in + debian.upstream/libva-x11-$LIBVA_MAJOR_VERSION.install:\ +debian.upstream/libva-x11.install.in + doc/Makefile + dummy_drv_video/Makefile + pkgconfig/Makefile + pkgconfig/libva-drm.pc + pkgconfig/libva-egl.pc + pkgconfig/libva-glx.pc + pkgconfig/libva-tpi.pc + pkgconfig/libva-wayland.pc + pkgconfig/libva-x11.pc + pkgconfig/libva.pc + test/Makefile + test/basic/Makefile + test/common/Makefile + test/decode/Makefile + test/encode/Makefile + test/putsurface/Makefile + test/vainfo/Makefile + va/Makefile + va/drm/Makefile + va/egl/Makefile + va/glx/Makefile + va/va_version.h + va/wayland/Makefile + va/x11/Makefile +]) + +# Print a small summary +BACKENDS="" +AS_IF([test x$USE_DRM = xyes], [BACKENDS="$BACKENDS drm"]) +AS_IF([test x$USE_X11 = xyes], [BACKENDS="$BACKENDS x11"]) +AS_IF([test x$USE_GLX = xyes], [BACKENDS="$BACKENDS glx"]) +AS_IF([test x$USE_EGL = xyes], [BACKENDS="$BACKENDS egl"]) +AS_IF([test x$USE_WAYLAND = xyes], [BACKENDS="$BACKENDS wayland"]) + +echo +echo "libva - ${LIBVA_VERSION} (VA-API ${VA_API_VERSION})" +echo +echo Installation prefix .............. : $prefix +echo Default driver path .............. : $LIBVA_DRIVERS_PATH +echo Extra window systems ............. : $BACKENDS +echo Build dummy driver ............... : $enable_dummy_driver +echo Build documentation .............. : $enable_docs +echo diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.am new file mode 100644 index 000000000..8367ef774 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.am @@ -0,0 +1,36 @@ +DEBIANFILES = \ + README.Debian \ + changelog.in \ + compat \ + control.in \ + copyright \ + libva-dev.install \ + libva-drm.install.in \ + libva-egl.install.in \ + libva-glx.install.in \ + libva-wayland.install.in \ + libva-x11.install.in \ + libva.install.in \ + rules \ + vainfo.install \ + $(NULL) + +DEBIANGENFILES = \ + changelog \ + control \ + libva$(LIBVA_MAJOR_VERSION).install \ + libva-drm$(LIBVA_MAJOR_VERSION).install \ + libva-egl$(LIBVA_MAJOR_VERSION).install \ + libva-glx$(LIBVA_MAJOR_VERSION).install \ + libva-wayland$(LIBVA_MAJOR_VERSION).install \ + libva-x11-$(LIBVA_MAJOR_VERSION).install \ + $(NULL) + +EXTRA_DIST = $(DEBIANFILES) + +DISTCLEANFILES = $(DEBIANGENFILES) + +dist_noinst_DATA = $(DEBIANGENFILES) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.in new file mode 100644 index 000000000..57a8ff5b6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/Makefile.in @@ -0,0 +1,504 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = debian.upstream +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/changelog.in $(srcdir)/control.in \ + $(srcdir)/libva.install.in $(srcdir)/libva-drm.install.in \ + $(srcdir)/libva-egl.install.in $(srcdir)/libva-glx.install.in \ + $(srcdir)/libva-wayland.install.in \ + $(srcdir)/libva-x11.install.in $(dist_noinst_DATA) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = changelog control +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +DEBIANFILES = \ + README.Debian \ + changelog.in \ + compat \ + control.in \ + copyright \ + libva-dev.install \ + libva-drm.install.in \ + libva-egl.install.in \ + libva-glx.install.in \ + libva-wayland.install.in \ + libva-x11.install.in \ + libva.install.in \ + rules \ + vainfo.install \ + $(NULL) + +DEBIANGENFILES = \ + changelog \ + control \ + libva$(LIBVA_MAJOR_VERSION).install \ + libva-drm$(LIBVA_MAJOR_VERSION).install \ + libva-egl$(LIBVA_MAJOR_VERSION).install \ + libva-glx$(LIBVA_MAJOR_VERSION).install \ + libva-wayland$(LIBVA_MAJOR_VERSION).install \ + libva-x11-$(LIBVA_MAJOR_VERSION).install \ + $(NULL) + +EXTRA_DIST = $(DEBIANFILES) +DISTCLEANFILES = $(DEBIANGENFILES) +dist_noinst_DATA = $(DEBIANGENFILES) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian.upstream/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu debian.upstream/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +changelog: $(top_builddir)/config.status $(srcdir)/changelog.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +control: $(top_builddir)/config.status $(srcdir)/control.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/README.Debian b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/README.Debian new file mode 100644 index 000000000..d10d70254 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/README.Debian @@ -0,0 +1,7 @@ +libva for Debian +---------------- + +This library implements the Video Acceleration (VA) API for Linux. +It will load a hardware dependendent video acceleration driver. + + -- Waldo Bastian Mon, 18 Jun 2007 21:35:31 -0700 diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog new file mode 100644 index 000000000..91c0f6f5e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog @@ -0,0 +1,5 @@ +libva (1.6.2-1) unstable; urgency=low + + * Autogenerated package, see NEWS file for ChangeLog. + + -- Gwenole Beauchesne Tue, 15 Dec 2015 14:17:03 +0800 diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog.in new file mode 100644 index 000000000..f5482c4c3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/changelog.in @@ -0,0 +1,5 @@ +libva (@PACKAGE_VERSION@-1) unstable; urgency=low + + * Autogenerated package, see NEWS file for ChangeLog. + + -- Gwenole Beauchesne @TODAY@ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/compat b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/compat new file mode 100644 index 000000000..7ed6ff82d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/compat @@ -0,0 +1 @@ +5 diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control new file mode 100644 index 000000000..5e9884275 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control @@ -0,0 +1,111 @@ +Source: libva +Priority: extra +Maintainer: Gwenole Beauchesne +Build-Depends: automake, + autotools-dev, + cdbs, + debhelper (>= 5), + libdrm-dev (>= 2.4), + libx11-dev, libxext-dev, libxfixes-dev, + libgl-dev, + libwayland-dev (>= 1.0.0), + libtool, + pkg-config +Standards-Version: 3.7.2 +Section: libs + +Package: libva-dev +Section: libdevel +Architecture: any +Depends: libdrm-dev (>= 2.4), + libva-drm1, + libva-x11-1 (= ${binary:Version}), libx11-dev, + libva-glx1 (= ${binary:Version}), libgl-dev, + libva-egl1 (= ${binary:Version}), + libva-wayland1 (= ${binary:Version}), libwayland-dev (>= 1.0.0), + libva1 (= ${binary:Version}), + pkg-config +Description: Video Acceleration (VA) API for Linux -- development files + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package provides the development environment for libva. + +Package: libva1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- Core runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the Core runtime library. + +Package: libva-drm1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- DRM runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the VA/DRM runtime library. + +Package: libva-x11-1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- X11 runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the VA/X11 runtime library. + +Package: libva-glx1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- GLX runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the VA/GLX runtime library. + +Package: libva-egl1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- EGL runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the VA/EGL runtime library. + +Package: libva-wayland1 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- Wayland runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the VA/Wayland runtime library. + +Package: libva1-dbg +Section: libdevel +Architecture: any +Depends: libva1 (= ${Source-Version}) +Description: Video Acceleration (VA) API for Linux -- runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the debug info files. + +Package: vainfo +Architecture: any +Depends: libva1 (= ${Source-Version}) +Description: Video Acceleration (VA) API for Linux -- info program + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the `vainfo' program. diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control.in new file mode 100644 index 000000000..6d7d82c09 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/control.in @@ -0,0 +1,111 @@ +Source: libva +Priority: extra +Maintainer: Gwenole Beauchesne +Build-Depends: automake, + autotools-dev, + cdbs, + debhelper (>= 5), + libdrm-dev (>= @LIBDRM_VERSION@), +@USE_X11_TRUE@ libx11-dev, libxext-dev, libxfixes-dev, +@USE_GLX_TRUE@ libgl-dev, +@USE_WAYLAND_TRUE@ libwayland-dev (>= @WAYLAND_API_VERSION@), + libtool, + pkg-config +Standards-Version: 3.7.2 +Section: libs + +Package: libva-dev +Section: libdevel +Architecture: any +Depends: libdrm-dev (>= @LIBDRM_VERSION@), +@USE_DRM_TRUE@ libva-drm@LIBVA_MAJOR_VERSION@, +@USE_X11_TRUE@ libva-x11-@LIBVA_MAJOR_VERSION@ (= ${binary:Version}), libx11-dev, +@USE_GLX_TRUE@ libva-glx@LIBVA_MAJOR_VERSION@ (= ${binary:Version}), libgl-dev, +@USE_EGL_TRUE@ libva-egl@LIBVA_MAJOR_VERSION@ (= ${binary:Version}), +@USE_WAYLAND_TRUE@ libva-wayland@LIBVA_MAJOR_VERSION@ (= ${binary:Version}), libwayland-dev (>= @WAYLAND_API_VERSION@), + libva@LIBVA_MAJOR_VERSION@ (= ${binary:Version}), + pkg-config +Description: Video Acceleration (VA) API for Linux -- development files + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package provides the development environment for libva. + +Package: libva@LIBVA_MAJOR_VERSION@ +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: Video Acceleration (VA) API for Linux -- Core runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the Core runtime library. + +@USE_DRM_TRUE@Package: libva-drm@LIBVA_MAJOR_VERSION@ +@USE_DRM_TRUE@Section: libs +@USE_DRM_TRUE@Architecture: any +@USE_DRM_TRUE@Depends: ${shlibs:Depends} +@USE_DRM_TRUE@Description: Video Acceleration (VA) API for Linux -- DRM runtime +@USE_DRM_TRUE@ The libva library implements the Video Acceleration (VA) API for Linux. +@USE_DRM_TRUE@ The library loads a hardware dependendent driver. +@USE_DRM_TRUE@ . +@USE_DRM_TRUE@ This package contains the VA/DRM runtime library. + +@USE_X11_TRUE@Package: libva-x11-@LIBVA_MAJOR_VERSION@ +@USE_X11_TRUE@Section: libs +@USE_X11_TRUE@Architecture: any +@USE_X11_TRUE@Depends: ${shlibs:Depends} +@USE_X11_TRUE@Description: Video Acceleration (VA) API for Linux -- X11 runtime +@USE_X11_TRUE@ The libva library implements the Video Acceleration (VA) API for Linux. +@USE_X11_TRUE@ The library loads a hardware dependendent driver. +@USE_X11_TRUE@ . +@USE_X11_TRUE@ This package contains the VA/X11 runtime library. + +@USE_GLX_TRUE@Package: libva-glx@LIBVA_MAJOR_VERSION@ +@USE_GLX_TRUE@Section: libs +@USE_GLX_TRUE@Architecture: any +@USE_GLX_TRUE@Depends: ${shlibs:Depends} +@USE_GLX_TRUE@Description: Video Acceleration (VA) API for Linux -- GLX runtime +@USE_GLX_TRUE@ The libva library implements the Video Acceleration (VA) API for Linux. +@USE_GLX_TRUE@ The library loads a hardware dependendent driver. +@USE_GLX_TRUE@ . +@USE_GLX_TRUE@ This package contains the VA/GLX runtime library. + +@USE_EGL_TRUE@Package: libva-egl@LIBVA_MAJOR_VERSION@ +@USE_EGL_TRUE@Section: libs +@USE_EGL_TRUE@Architecture: any +@USE_EGL_TRUE@Depends: ${shlibs:Depends} +@USE_EGL_TRUE@Description: Video Acceleration (VA) API for Linux -- EGL runtime +@USE_EGL_TRUE@ The libva library implements the Video Acceleration (VA) API for Linux. +@USE_EGL_TRUE@ The library loads a hardware dependendent driver. +@USE_EGL_TRUE@ . +@USE_EGL_TRUE@ This package contains the VA/EGL runtime library. + +@USE_WAYLAND_TRUE@Package: libva-wayland@LIBVA_MAJOR_VERSION@ +@USE_WAYLAND_TRUE@Section: libs +@USE_WAYLAND_TRUE@Architecture: any +@USE_WAYLAND_TRUE@Depends: ${shlibs:Depends} +@USE_WAYLAND_TRUE@Description: Video Acceleration (VA) API for Linux -- Wayland runtime +@USE_WAYLAND_TRUE@ The libva library implements the Video Acceleration (VA) API for Linux. +@USE_WAYLAND_TRUE@ The library loads a hardware dependendent driver. +@USE_WAYLAND_TRUE@ . +@USE_WAYLAND_TRUE@ This package contains the VA/Wayland runtime library. + +Package: libva@LIBVA_MAJOR_VERSION@-dbg +Section: libdevel +Architecture: any +Depends: libva@LIBVA_MAJOR_VERSION@ (= ${Source-Version}) +Description: Video Acceleration (VA) API for Linux -- runtime + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the debug info files. + +Package: vainfo +Architecture: any +Depends: libva@LIBVA_MAJOR_VERSION@ (= ${Source-Version}) +Description: Video Acceleration (VA) API for Linux -- info program + The libva library implements the Video Acceleration (VA) API for Linux. + The library loads a hardware dependendent driver. + . + This package contains the `vainfo' program. diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/copyright b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/copyright new file mode 100644 index 000000000..38b60ef41 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/copyright @@ -0,0 +1,44 @@ +This package was debianized by Waldo Bastian on +Mon, 18 Jun 2007 21:35:31 -0700. + +It was downloaded from + +Upstream Author(s): + + Waldo Bastian + Jonathan Bian + +Copyright: + + (C) Copyright IBM Corporation 2004 + Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. + Copyright 2000 VA Linux Systems, Inc. + Copyright 2007 Intel Corportation + +License: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +The Debian packaging is (C) 2007, Intel Corporation and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-dev.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-dev.install new file mode 100644 index 000000000..2611cdbec --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-dev.install @@ -0,0 +1,3 @@ +debian/tmp/usr/include/va/va*.h +debian/tmp/usr/lib/libva*.so +debian/tmp/usr/lib/pkgconfig/libva*.pc diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm.install.in new file mode 100644 index 000000000..7a9b5f2ed --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-drm.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm1.install new file mode 100644 index 000000000..7a9b5f2ed --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-drm1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-drm.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl.install.in new file mode 100644 index 000000000..5554b69fe --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-egl.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl1.install new file mode 100644 index 000000000..5554b69fe --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-egl1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-egl.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx.install.in new file mode 100644 index 000000000..2d330320e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-glx.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx1.install new file mode 100644 index 000000000..2d330320e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-glx1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-glx.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland.install.in new file mode 100644 index 000000000..2563fea0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-wayland.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland1.install new file mode 100644 index 000000000..2563fea0d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-wayland1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-wayland.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11-1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11-1.install new file mode 100644 index 000000000..461d7bd7c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11-1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-x11.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11.install.in new file mode 100644 index 000000000..461d7bd7c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva-x11.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva-x11.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva.install.in b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva.install.in new file mode 100644 index 000000000..bad195c89 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva.install.in @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva1.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva1.install new file mode 100644 index 000000000..bad195c89 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/libva1.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/libva.so.* diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/rules b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/rules new file mode 100644 index 000000000..40b76bec7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/rules @@ -0,0 +1,14 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/rules/utils.mk + +# Allow SMP build +ifeq ($(DEBIAN_BUILD_NCPUS),) + DEBIAN_BUILD_NCPUS = $(shell /usr/bin/getconf _NPROCESSORS_ONLN) +endif +ifneq ($(DEBIAN_BUILD_NCPUS),) + EXTRA_MAKE_FLAGS += -j$(DEBIAN_BUILD_NCPUS) +endif +MAKE += $(EXTRA_MAKE_FLAGS) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/vainfo.install b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/vainfo.install new file mode 100644 index 000000000..8ef46a0c3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/debian.upstream/vainfo.install @@ -0,0 +1 @@ +debian/tmp/usr/bin/vainfo \ No newline at end of file diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/depcomp b/contrib/sdk/sources/vaapi/libva-1.6.2/depcomp new file mode 100644 index 000000000..4ebd5b3a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Doxyfile b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Doxyfile new file mode 100644 index 000000000..920dd3f4e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Doxyfile @@ -0,0 +1,1679 @@ +# Doxyfile 1.7.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = VA-API + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = $(VA_HEADER_DIR) + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = $(VA_HEADER_FILES) + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */test/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html-out + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = $(VA_HTML_FOOTER) + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [0,1..20]) +# that doxygen will group on one line in the generated HTML documentation. +# Note that a value of 0 will completely suppress the enum values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 1 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, svg, gif or svg. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.am new file mode 100644 index 000000000..392697994 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.am @@ -0,0 +1,63 @@ +# Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +all: html +install-data-local: install-html + +EXTRA_DIST = \ + Doxyfile \ + $(NULL) + +VA_HEADER_DIR = $(top_srcdir)/va +VA_HEADER_FILES = \ + $(VA_HEADER_DIR)/va.h \ + $(VA_HEADER_DIR)/va_enc_h264.h \ + $(VA_HEADER_DIR)/va_vpp.h \ + $(NULL) + +VA_HTML_FOOTER = va_footer.html +VA_HTML_FRAGMENTS = $(VA_HTML_FOOTER) + +export VA_HEADER_DIR +export VA_HEADER_FILES +export VA_HTML_FOOTER +html-out/index.html: Doxyfile $(VA_HEADER_FILES) $(VA_HTML_FRAGMENTS) + $(DOXYGEN) $< + +if ENABLE_DOCS +html: html-out/index.html +install-html-local: + install -d $(DESTDIR)$(docdir)/html + for file in `ls html-out/` ; do \ + if test -f html-out/$$file ; then \ + install -m 0644 html-out/$$file $(DESTDIR)$(docdir)/html ; \ + else \ + install -d $(DESTDIR)$(docdir)/html/$$file ; \ + install -m 0644 html-out/$$file/* $(DESTDIR)$(docdir)/html/$$file; \ + fi ; \ + done +uninstall-local: + rm -rf $(DESTDIR)$(docdir)/html +endif + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.in new file mode 100644 index 000000000..e51105793 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/doc/Makefile.in @@ -0,0 +1,522 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + Doxyfile \ + $(NULL) + +VA_HEADER_DIR = $(top_srcdir)/va +VA_HEADER_FILES = \ + $(VA_HEADER_DIR)/va.h \ + $(VA_HEADER_DIR)/va_enc_h264.h \ + $(VA_HEADER_DIR)/va_vpp.h \ + $(NULL) + +VA_HTML_FOOTER = va_footer.html +VA_HTML_FRAGMENTS = $(VA_HTML_FOOTER) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +@ENABLE_DOCS_FALSE@uninstall-local: +@ENABLE_DOCS_FALSE@install-html-local: +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +@ENABLE_DOCS_FALSE@html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: install-html-local + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-html-local install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am uninstall-local + + +all: html +install-data-local: install-html + +export VA_HEADER_DIR +export VA_HEADER_FILES +export VA_HTML_FOOTER +html-out/index.html: Doxyfile $(VA_HEADER_FILES) $(VA_HTML_FRAGMENTS) + $(DOXYGEN) $< + +@ENABLE_DOCS_TRUE@html: html-out/index.html +@ENABLE_DOCS_TRUE@install-html-local: +@ENABLE_DOCS_TRUE@ install -d $(DESTDIR)$(docdir)/html +@ENABLE_DOCS_TRUE@ for file in `ls html-out/` ; do \ +@ENABLE_DOCS_TRUE@ if test -f html-out/$$file ; then \ +@ENABLE_DOCS_TRUE@ install -m 0644 html-out/$$file $(DESTDIR)$(docdir)/html ; \ +@ENABLE_DOCS_TRUE@ else \ +@ENABLE_DOCS_TRUE@ install -d $(DESTDIR)$(docdir)/html/$$file ; \ +@ENABLE_DOCS_TRUE@ install -m 0644 html-out/$$file/* $(DESTDIR)$(docdir)/html/$$file; \ +@ENABLE_DOCS_TRUE@ fi ; \ +@ENABLE_DOCS_TRUE@ done +@ENABLE_DOCS_TRUE@uninstall-local: +@ENABLE_DOCS_TRUE@ rm -rf $(DESTDIR)$(docdir)/html + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.am new file mode 100644 index 000000000..3468f0130 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.am @@ -0,0 +1,33 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = -I$(top_srcdir) + +if BUILD_DUMMY_DRIVER +dummy_drv_video_la_LTLIBRARIES = dummy_drv_video.la +dummy_drv_video_ladir = $(LIBVA_DRIVERS_PATH) +dummy_drv_video_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,--no-undefined +dummy_drv_video_la_LIBADD = +dummy_drv_video_la_DEPENDENCIES = +dummy_drv_video_la_SOURCES = dummy_drv_video.c object_heap.c +noinst_HEADERS = dummy_drv_video.h object_heap.h +endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.in new file mode 100644 index 000000000..a11ec6283 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/Makefile.in @@ -0,0 +1,703 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@BUILD_DUMMY_DRIVER_FALSE@dummy_drv_video_la_DEPENDENCIES = +subdir = dummy_drv_video +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(am__noinst_HEADERS_DIST) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(dummy_drv_video_ladir)" +LTLIBRARIES = $(dummy_drv_video_la_LTLIBRARIES) +am__dummy_drv_video_la_SOURCES_DIST = dummy_drv_video.c object_heap.c +@BUILD_DUMMY_DRIVER_TRUE@am_dummy_drv_video_la_OBJECTS = \ +@BUILD_DUMMY_DRIVER_TRUE@ dummy_drv_video.lo object_heap.lo +dummy_drv_video_la_OBJECTS = $(am_dummy_drv_video_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +dummy_drv_video_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(dummy_drv_video_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@BUILD_DUMMY_DRIVER_TRUE@am_dummy_drv_video_la_rpath = -rpath \ +@BUILD_DUMMY_DRIVER_TRUE@ $(dummy_drv_video_ladir) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(dummy_drv_video_la_SOURCES) +DIST_SOURCES = $(am__dummy_drv_video_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__noinst_HEADERS_DIST = dummy_drv_video.h object_heap.h +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I$(top_srcdir) +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_la_LTLIBRARIES = dummy_drv_video.la +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_ladir = $(LIBVA_DRIVERS_PATH) +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,--no-undefined +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_la_LIBADD = +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_la_DEPENDENCIES = +@BUILD_DUMMY_DRIVER_TRUE@dummy_drv_video_la_SOURCES = dummy_drv_video.c object_heap.c +@BUILD_DUMMY_DRIVER_TRUE@noinst_HEADERS = dummy_drv_video.h object_heap.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu dummy_drv_video/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu dummy_drv_video/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-dummy_drv_video_laLTLIBRARIES: $(dummy_drv_video_la_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(dummy_drv_video_la_LTLIBRARIES)'; test -n "$(dummy_drv_video_ladir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(dummy_drv_video_ladir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dummy_drv_video_ladir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dummy_drv_video_ladir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dummy_drv_video_ladir)"; \ + } + +uninstall-dummy_drv_video_laLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(dummy_drv_video_la_LTLIBRARIES)'; test -n "$(dummy_drv_video_ladir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dummy_drv_video_ladir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dummy_drv_video_ladir)/$$f"; \ + done + +clean-dummy_drv_video_laLTLIBRARIES: + -test -z "$(dummy_drv_video_la_LTLIBRARIES)" || rm -f $(dummy_drv_video_la_LTLIBRARIES) + @list='$(dummy_drv_video_la_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +dummy_drv_video.la: $(dummy_drv_video_la_OBJECTS) $(dummy_drv_video_la_DEPENDENCIES) $(EXTRA_dummy_drv_video_la_DEPENDENCIES) + $(AM_V_CCLD)$(dummy_drv_video_la_LINK) $(am_dummy_drv_video_la_rpath) $(dummy_drv_video_la_OBJECTS) $(dummy_drv_video_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy_drv_video.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object_heap.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(dummy_drv_video_ladir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-dummy_drv_video_laLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dummy_drv_video_laLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dummy_drv_video_laLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-dummy_drv_video_laLTLIBRARIES clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dummy_drv_video_laLTLIBRARIES install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-dummy_drv_video_laLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.c b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.c new file mode 100644 index 000000000..282f20878 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.c @@ -0,0 +1,1232 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "config.h" +#include + +#include "dummy_drv_video.h" + +#include "assert.h" +#include +#include +#include +#include + +#define ASSERT assert + +#define INIT_DRIVER_DATA struct dummy_driver_data * const driver_data = (struct dummy_driver_data *) ctx->pDriverData; + +#define CONFIG(id) ((object_config_p) object_heap_lookup( &driver_data->config_heap, id )) +#define CONTEXT(id) ((object_context_p) object_heap_lookup( &driver_data->context_heap, id )) +#define SURFACE(id) ((object_surface_p) object_heap_lookup( &driver_data->surface_heap, id )) +#define BUFFER(id) ((object_buffer_p) object_heap_lookup( &driver_data->buffer_heap, id )) + +#define CONFIG_ID_OFFSET 0x01000000 +#define CONTEXT_ID_OFFSET 0x02000000 +#define SURFACE_ID_OFFSET 0x04000000 +#define BUFFER_ID_OFFSET 0x08000000 + +static void dummy__error_message(const char *msg, ...) +{ + va_list args; + + fprintf(stderr, "dummy_drv_video error: "); + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); +} + +static void dummy__information_message(const char *msg, ...) +{ + va_list args; + + fprintf(stderr, "dummy_drv_video: "); + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); +} + +VAStatus dummy_QueryConfigProfiles( + VADriverContextP ctx, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ + ) +{ + int i = 0; + + profile_list[i++] = VAProfileMPEG2Simple; + profile_list[i++] = VAProfileMPEG2Main; + profile_list[i++] = VAProfileMPEG4Simple; + profile_list[i++] = VAProfileMPEG4AdvancedSimple; + profile_list[i++] = VAProfileMPEG4Main; + profile_list[i++] = VAProfileH264Baseline; + profile_list[i++] = VAProfileH264Main; + profile_list[i++] = VAProfileH264High; + profile_list[i++] = VAProfileVC1Simple; + profile_list[i++] = VAProfileVC1Main; + profile_list[i++] = VAProfileVC1Advanced; + + /* If the assert fails then DUMMY_MAX_PROFILES needs to be bigger */ + ASSERT(i <= DUMMY_MAX_PROFILES); + *num_profiles = i; + + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_QueryConfigEntrypoints( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints /* out */ + ) +{ + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + *num_entrypoints = 2; + entrypoint_list[0] = VAEntrypointVLD; + entrypoint_list[1] = VAEntrypointMoComp; + break; + + case VAProfileMPEG4Simple: + case VAProfileMPEG4AdvancedSimple: + case VAProfileMPEG4Main: + *num_entrypoints = 1; + entrypoint_list[0] = VAEntrypointVLD; + break; + + case VAProfileH264Baseline: + case VAProfileH264Main: + case VAProfileH264High: + *num_entrypoints = 1; + entrypoint_list[0] = VAEntrypointVLD; + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + *num_entrypoints = 1; + entrypoint_list[0] = VAEntrypointVLD; + break; + + default: + *num_entrypoints = 0; + break; + } + + /* If the assert fails then DUMMY_MAX_ENTRYPOINTS needs to be bigger */ + ASSERT(*num_entrypoints <= DUMMY_MAX_ENTRYPOINTS); + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_GetConfigAttributes( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs + ) +{ + int i; + + /* Other attributes don't seem to be defined */ + /* What to do if we don't know the attribute? */ + for (i = 0; i < num_attribs; i++) + { + switch (attrib_list[i].type) + { + case VAConfigAttribRTFormat: + attrib_list[i].value = VA_RT_FORMAT_YUV420; + break; + + default: + /* Do nothing */ + attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED; + break; + } + } + + return VA_STATUS_SUCCESS; +} + +static VAStatus dummy__update_attribute(object_config_p obj_config, VAConfigAttrib *attrib) +{ + int i; + /* Check existing attrbiutes */ + for(i = 0; obj_config->attrib_count < i; i++) + { + if (obj_config->attrib_list[i].type == attrib->type) + { + /* Update existing attribute */ + obj_config->attrib_list[i].value = attrib->value; + return VA_STATUS_SUCCESS; + } + } + if (obj_config->attrib_count < DUMMY_MAX_CONFIG_ATTRIBUTES) + { + i = obj_config->attrib_count; + obj_config->attrib_list[i].type = attrib->type; + obj_config->attrib_list[i].value = attrib->value; + obj_config->attrib_count++; + return VA_STATUS_SUCCESS; + } + return VA_STATUS_ERROR_MAX_NUM_EXCEEDED; +} + +VAStatus dummy_CreateConfig( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus; + int configID; + object_config_p obj_config; + int i; + + /* Validate profile & entrypoint */ + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + if ((VAEntrypointVLD == entrypoint) || + (VAEntrypointMoComp == entrypoint)) + { + vaStatus = VA_STATUS_SUCCESS; + } + else + { + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileMPEG4Simple: + case VAProfileMPEG4AdvancedSimple: + case VAProfileMPEG4Main: + if (VAEntrypointVLD == entrypoint) + { + vaStatus = VA_STATUS_SUCCESS; + } + else + { + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileH264Baseline: + case VAProfileH264Main: + case VAProfileH264High: + if (VAEntrypointVLD == entrypoint) + { + vaStatus = VA_STATUS_SUCCESS; + } + else + { + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + case VAProfileVC1Simple: + case VAProfileVC1Main: + case VAProfileVC1Advanced: + if (VAEntrypointVLD == entrypoint) + { + vaStatus = VA_STATUS_SUCCESS; + } + else + { + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + break; + + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + break; + } + + if (VA_STATUS_SUCCESS != vaStatus) + { + return vaStatus; + } + + configID = object_heap_allocate( &driver_data->config_heap ); + obj_config = CONFIG(configID); + if (NULL == obj_config) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + obj_config->profile = profile; + obj_config->entrypoint = entrypoint; + obj_config->attrib_list[0].type = VAConfigAttribRTFormat; + obj_config->attrib_list[0].value = VA_RT_FORMAT_YUV420; + obj_config->attrib_count = 1; + + for(i = 0; i < num_attribs; i++) + { + vaStatus = dummy__update_attribute(obj_config, &(attrib_list[i])); + if (VA_STATUS_SUCCESS != vaStatus) + { + break; + } + } + + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) + { + object_heap_free( &driver_data->config_heap, (object_base_p) obj_config); + } + else + { + *config_id = configID; + } + + return vaStatus; +} + +VAStatus dummy_DestroyConfig( + VADriverContextP ctx, + VAConfigID config_id + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus; + object_config_p obj_config; + + obj_config = CONFIG(config_id); + if (NULL == obj_config) + { + vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; + return vaStatus; + } + + object_heap_free( &driver_data->config_heap, (object_base_p) obj_config); + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_QueryConfigAttributes( + VADriverContextP ctx, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list, /* out */ + int *num_attribs /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_config_p obj_config; + int i; + + obj_config = CONFIG(config_id); + ASSERT(obj_config); + + *profile = obj_config->profile; + *entrypoint = obj_config->entrypoint; + *num_attribs = obj_config->attrib_count; + for(i = 0; i < obj_config->attrib_count; i++) + { + attrib_list[i] = obj_config->attrib_list[i]; + } + + return vaStatus; +} + +VAStatus dummy_CreateSurfaces( + VADriverContextP ctx, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + int i; + + /* We only support one format */ + if (VA_RT_FORMAT_YUV420 != format) + { + return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; + } + + for (i = 0; i < num_surfaces; i++) + { + int surfaceID = object_heap_allocate( &driver_data->surface_heap ); + object_surface_p obj_surface = SURFACE(surfaceID); + if (NULL == obj_surface) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + break; + } + obj_surface->surface_id = surfaceID; + surfaces[i] = surfaceID; + } + + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) + { + /* surfaces[i-1] was the last successful allocation */ + for(; i--; ) + { + object_surface_p obj_surface = SURFACE(surfaces[i]); + surfaces[i] = VA_INVALID_SURFACE; + ASSERT(obj_surface); + object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface); + } + } + + return vaStatus; +} + +VAStatus dummy_DestroySurfaces( + VADriverContextP ctx, + VASurfaceID *surface_list, + int num_surfaces + ) +{ + INIT_DRIVER_DATA + int i; + for(i = num_surfaces; i--; ) + { + object_surface_p obj_surface = SURFACE(surface_list[i]); + ASSERT(obj_surface); + object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface); + } + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_QueryImageFormats( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_CreateImage( + VADriverContextP ctx, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_DeriveImage( + VADriverContextP ctx, + VASurfaceID surface, + VAImage *image /* out */ +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_DestroyImage( + VADriverContextP ctx, + VAImageID image +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_SetImagePalette( + VADriverContextP ctx, + VAImageID image, + unsigned char *palette +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_GetImage( + VADriverContextP ctx, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + + +VAStatus dummy_PutImage( + VADriverContextP ctx, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_QuerySubpictureFormats( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_CreateSubpicture( + VADriverContextP ctx, + VAImageID image, + VASubpictureID *subpicture /* out */ +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_DestroySubpicture( + VADriverContextP ctx, + VASubpictureID subpicture +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_SetSubpictureImage( + VADriverContextP ctx, + VASubpictureID subpicture, + VAImageID image +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_SetSubpicturePalette( + VADriverContextP ctx, + VASubpictureID subpicture, + /* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VASubpicture struct + */ + unsigned char *palette +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_SetSubpictureChromakey( + VADriverContextP ctx, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_SetSubpictureGlobalAlpha( + VADriverContextP ctx, + VASubpictureID subpicture, + float global_alpha +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + + +VAStatus dummy_AssociateSubpicture( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_DeassociateSubpicture( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces +) +{ + /* TODO */ + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_CreateContext( + VADriverContextP ctx, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_config_p obj_config; + int i; + + obj_config = CONFIG(config_id); + if (NULL == obj_config) + { + vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; + return vaStatus; + } + + /* Validate flag */ + /* Validate picture dimensions */ + + int contextID = object_heap_allocate( &driver_data->context_heap ); + object_context_p obj_context = CONTEXT(contextID); + if (NULL == obj_context) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + obj_context->context_id = contextID; + *context = contextID; + obj_context->current_render_target = -1; + obj_context->config_id = config_id; + obj_context->picture_width = picture_width; + obj_context->picture_height = picture_height; + obj_context->num_render_targets = num_render_targets; + obj_context->render_targets = (VASurfaceID *) malloc(num_render_targets * sizeof(VASurfaceID)); + if (obj_context->render_targets == NULL) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + for(i = 0; i < num_render_targets; i++) + { + if (NULL == SURFACE(render_targets[i])) + { + vaStatus = VA_STATUS_ERROR_INVALID_SURFACE; + break; + } + obj_context->render_targets[i] = render_targets[i]; + } + obj_context->flags = flag; + + /* Error recovery */ + if (VA_STATUS_SUCCESS != vaStatus) + { + obj_context->context_id = -1; + obj_context->config_id = -1; + free(obj_context->render_targets); + obj_context->render_targets = NULL; + obj_context->num_render_targets = 0; + obj_context->flags = 0; + object_heap_free( &driver_data->context_heap, (object_base_p) obj_context); + } + + return vaStatus; +} + + +VAStatus dummy_DestroyContext( + VADriverContextP ctx, + VAContextID context + ) +{ + INIT_DRIVER_DATA + object_context_p obj_context = CONTEXT(context); + ASSERT(obj_context); + + obj_context->context_id = -1; + obj_context->config_id = -1; + obj_context->picture_width = 0; + obj_context->picture_height = 0; + if (obj_context->render_targets) + { + free(obj_context->render_targets); + } + obj_context->render_targets = NULL; + obj_context->num_render_targets = 0; + obj_context->flags = 0; + + obj_context->current_render_target = -1; + + object_heap_free( &driver_data->context_heap, (object_base_p) obj_context); + + return VA_STATUS_SUCCESS; +} + + + +static VAStatus dummy__allocate_buffer(object_buffer_p obj_buffer, int size) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + + obj_buffer->buffer_data = realloc(obj_buffer->buffer_data, size); + if (NULL == obj_buffer->buffer_data) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + } + return vaStatus; +} + +VAStatus dummy_CreateBuffer( + VADriverContextP ctx, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + int bufferID; + object_buffer_p obj_buffer; + + /* Validate type */ + switch (type) + { + case VAPictureParameterBufferType: + case VAIQMatrixBufferType: + case VABitPlaneBufferType: + case VASliceGroupMapBufferType: + case VASliceParameterBufferType: + case VASliceDataBufferType: + case VAMacroblockParameterBufferType: + case VAResidualDataBufferType: + case VADeblockingParameterBufferType: + case VAImageBufferType: + /* Ok */ + break; + default: + vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE; + return vaStatus; + } + + bufferID = object_heap_allocate( &driver_data->buffer_heap ); + obj_buffer = BUFFER(bufferID); + if (NULL == obj_buffer) + { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaStatus; + } + + obj_buffer->buffer_data = NULL; + + vaStatus = dummy__allocate_buffer(obj_buffer, size * num_elements); + if (VA_STATUS_SUCCESS == vaStatus) + { + obj_buffer->max_num_elements = num_elements; + obj_buffer->num_elements = num_elements; + if (data) + { + memcpy(obj_buffer->buffer_data, data, size * num_elements); + } + } + + if (VA_STATUS_SUCCESS == vaStatus) + { + *buf_id = bufferID; + } + + return vaStatus; +} + + +VAStatus dummy_BufferSetNumElements( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_buffer_p obj_buffer = BUFFER(buf_id); + ASSERT(obj_buffer); + + if ((num_elements < 0) || (num_elements > obj_buffer->max_num_elements)) + { + vaStatus = VA_STATUS_ERROR_UNKNOWN; + } + if (VA_STATUS_SUCCESS == vaStatus) + { + obj_buffer->num_elements = num_elements; + } + + return vaStatus; +} + +VAStatus dummy_MapBuffer( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + void **pbuf /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + object_buffer_p obj_buffer = BUFFER(buf_id); + ASSERT(obj_buffer); + if (NULL == obj_buffer) + { + vaStatus = VA_STATUS_ERROR_INVALID_BUFFER; + return vaStatus; + } + + if (NULL != obj_buffer->buffer_data) + { + *pbuf = obj_buffer->buffer_data; + vaStatus = VA_STATUS_SUCCESS; + } + return vaStatus; +} + +VAStatus dummy_UnmapBuffer( + VADriverContextP ctx, + VABufferID buf_id /* in */ + ) +{ + /* Do nothing */ + return VA_STATUS_SUCCESS; +} + +static void dummy__destroy_buffer(struct dummy_driver_data *driver_data, object_buffer_p obj_buffer) +{ + if (NULL != obj_buffer->buffer_data) + { + free(obj_buffer->buffer_data); + obj_buffer->buffer_data = NULL; + } + + object_heap_free( &driver_data->buffer_heap, (object_base_p) obj_buffer); +} + +VAStatus dummy_DestroyBuffer( + VADriverContextP ctx, + VABufferID buffer_id + ) +{ + INIT_DRIVER_DATA + object_buffer_p obj_buffer = BUFFER(buffer_id); + ASSERT(obj_buffer); + + dummy__destroy_buffer(driver_data, obj_buffer); + return VA_STATUS_SUCCESS; +} + +VAStatus dummy_BeginPicture( + VADriverContextP ctx, + VAContextID context, + VASurfaceID render_target + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_context_p obj_context; + object_surface_p obj_surface; + + obj_context = CONTEXT(context); + ASSERT(obj_context); + + obj_surface = SURFACE(render_target); + ASSERT(obj_surface); + + obj_context->current_render_target = obj_surface->base.id; + + return vaStatus; +} + +VAStatus dummy_RenderPicture( + VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_context_p obj_context; + object_surface_p obj_surface; + int i; + + obj_context = CONTEXT(context); + ASSERT(obj_context); + + obj_surface = SURFACE(obj_context->current_render_target); + ASSERT(obj_surface); + + /* verify that we got valid buffer references */ + for(i = 0; i < num_buffers; i++) + { + object_buffer_p obj_buffer = BUFFER(buffers[i]); + ASSERT(obj_buffer); + if (NULL == obj_buffer) + { + vaStatus = VA_STATUS_ERROR_INVALID_BUFFER; + break; + } + } + + /* Release buffers */ + for(i = 0; i < num_buffers; i++) + { + object_buffer_p obj_buffer = BUFFER(buffers[i]); + ASSERT(obj_buffer); + dummy__destroy_buffer(driver_data, obj_buffer); + } + + return vaStatus; +} + +VAStatus dummy_EndPicture( + VADriverContextP ctx, + VAContextID context + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_context_p obj_context; + object_surface_p obj_surface; + + obj_context = CONTEXT(context); + ASSERT(obj_context); + + obj_surface = SURFACE(obj_context->current_render_target); + ASSERT(obj_surface); + + // For now, assume that we are done with rendering right away + obj_context->current_render_target = -1; + + return vaStatus; +} + + +VAStatus dummy_SyncSurface( + VADriverContextP ctx, + VASurfaceID render_target + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_surface_p obj_surface; + + obj_surface = SURFACE(render_target); + ASSERT(obj_surface); + + return vaStatus; +} + +VAStatus dummy_QuerySurfaceStatus( + VADriverContextP ctx, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ + ) +{ + INIT_DRIVER_DATA + VAStatus vaStatus = VA_STATUS_SUCCESS; + object_surface_p obj_surface; + + obj_surface = SURFACE(render_target); + ASSERT(obj_surface); + + *status = VASurfaceReady; + + return vaStatus; +} + +VAStatus dummy_PutSurface( + VADriverContextP ctx, + VASurfaceID surface, + void *draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNKNOWN; +} + +/* + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus dummy_QueryDisplayAttributes ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNKNOWN; +} + +/* + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus dummy_GetDisplayAttributes ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNKNOWN; +} + +/* + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus dummy_SetDisplayAttributes ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, + int num_attributes + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNKNOWN; +} + + +VAStatus dummy_BufferInfo( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + + + +VAStatus dummy_LockSurface( + VADriverContextP ctx, + VASurfaceID surface, + unsigned int *fourcc, /* following are output argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + unsigned int *buffer_name, + void **buffer + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus dummy_UnlockSurface( + VADriverContextP ctx, + VASurfaceID surface + ) +{ + /* TODO */ + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus dummy_Terminate( VADriverContextP ctx ) +{ + INIT_DRIVER_DATA + object_buffer_p obj_buffer; + object_config_p obj_config; + object_heap_iterator iter; + + /* Clean up left over buffers */ + obj_buffer = (object_buffer_p) object_heap_first( &driver_data->buffer_heap, &iter); + while (obj_buffer) + { + dummy__information_message("vaTerminate: bufferID %08x still allocated, destroying\n", obj_buffer->base.id); + dummy__destroy_buffer(driver_data, obj_buffer); + obj_buffer = (object_buffer_p) object_heap_next( &driver_data->buffer_heap, &iter); + } + object_heap_destroy( &driver_data->buffer_heap ); + + /* TODO cleanup */ + object_heap_destroy( &driver_data->surface_heap ); + + /* TODO cleanup */ + object_heap_destroy( &driver_data->context_heap ); + + /* Clean up configIDs */ + obj_config = (object_config_p) object_heap_first( &driver_data->config_heap, &iter); + while (obj_config) + { + object_heap_free( &driver_data->config_heap, (object_base_p) obj_config); + obj_config = (object_config_p) object_heap_next( &driver_data->config_heap, &iter); + } + object_heap_destroy( &driver_data->config_heap ); + + free(ctx->pDriverData); + ctx->pDriverData = NULL; + + return VA_STATUS_SUCCESS; +} + +VAStatus VA_DRIVER_INIT_FUNC( VADriverContextP ctx ) +{ + struct VADriverVTable * const vtable = ctx->vtable; + int result; + struct dummy_driver_data *driver_data; + + ctx->version_major = VA_MAJOR_VERSION; + ctx->version_minor = VA_MINOR_VERSION; + ctx->max_profiles = DUMMY_MAX_PROFILES; + ctx->max_entrypoints = DUMMY_MAX_ENTRYPOINTS; + ctx->max_attributes = DUMMY_MAX_CONFIG_ATTRIBUTES; + ctx->max_image_formats = DUMMY_MAX_IMAGE_FORMATS; + ctx->max_subpic_formats = DUMMY_MAX_SUBPIC_FORMATS; + ctx->max_display_attributes = DUMMY_MAX_DISPLAY_ATTRIBUTES; + ctx->str_vendor = DUMMY_STR_VENDOR; + + vtable->vaTerminate = dummy_Terminate; + vtable->vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints; + vtable->vaQueryConfigProfiles = dummy_QueryConfigProfiles; + vtable->vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints; + vtable->vaQueryConfigAttributes = dummy_QueryConfigAttributes; + vtable->vaCreateConfig = dummy_CreateConfig; + vtable->vaDestroyConfig = dummy_DestroyConfig; + vtable->vaGetConfigAttributes = dummy_GetConfigAttributes; + vtable->vaCreateSurfaces = dummy_CreateSurfaces; + vtable->vaDestroySurfaces = dummy_DestroySurfaces; + vtable->vaCreateContext = dummy_CreateContext; + vtable->vaDestroyContext = dummy_DestroyContext; + vtable->vaCreateBuffer = dummy_CreateBuffer; + vtable->vaBufferSetNumElements = dummy_BufferSetNumElements; + vtable->vaMapBuffer = dummy_MapBuffer; + vtable->vaUnmapBuffer = dummy_UnmapBuffer; + vtable->vaDestroyBuffer = dummy_DestroyBuffer; + vtable->vaBeginPicture = dummy_BeginPicture; + vtable->vaRenderPicture = dummy_RenderPicture; + vtable->vaEndPicture = dummy_EndPicture; + vtable->vaSyncSurface = dummy_SyncSurface; + vtable->vaQuerySurfaceStatus = dummy_QuerySurfaceStatus; + vtable->vaPutSurface = dummy_PutSurface; + vtable->vaQueryImageFormats = dummy_QueryImageFormats; + vtable->vaCreateImage = dummy_CreateImage; + vtable->vaDeriveImage = dummy_DeriveImage; + vtable->vaDestroyImage = dummy_DestroyImage; + vtable->vaSetImagePalette = dummy_SetImagePalette; + vtable->vaGetImage = dummy_GetImage; + vtable->vaPutImage = dummy_PutImage; + vtable->vaQuerySubpictureFormats = dummy_QuerySubpictureFormats; + vtable->vaCreateSubpicture = dummy_CreateSubpicture; + vtable->vaDestroySubpicture = dummy_DestroySubpicture; + vtable->vaSetSubpictureImage = dummy_SetSubpictureImage; + vtable->vaSetSubpictureChromakey = dummy_SetSubpictureChromakey; + vtable->vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha; + vtable->vaAssociateSubpicture = dummy_AssociateSubpicture; + vtable->vaDeassociateSubpicture = dummy_DeassociateSubpicture; + vtable->vaQueryDisplayAttributes = dummy_QueryDisplayAttributes; + vtable->vaGetDisplayAttributes = dummy_GetDisplayAttributes; + vtable->vaSetDisplayAttributes = dummy_SetDisplayAttributes; + vtable->vaLockSurface = dummy_LockSurface; + vtable->vaUnlockSurface = dummy_UnlockSurface; + vtable->vaBufferInfo = dummy_BufferInfo; + + driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) ); + ctx->pDriverData = (void *) driver_data; + + result = object_heap_init( &driver_data->config_heap, sizeof(struct object_config), CONFIG_ID_OFFSET ); + ASSERT( result == 0 ); + + result = object_heap_init( &driver_data->context_heap, sizeof(struct object_context), CONTEXT_ID_OFFSET ); + ASSERT( result == 0 ); + + result = object_heap_init( &driver_data->surface_heap, sizeof(struct object_surface), SURFACE_ID_OFFSET ); + ASSERT( result == 0 ); + + result = object_heap_init( &driver_data->buffer_heap, sizeof(struct object_buffer), BUFFER_ID_OFFSET ); + ASSERT( result == 0 ); + + + return VA_STATUS_SUCCESS; +} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.h b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.h new file mode 100644 index 000000000..cd849c564 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/dummy_drv_video.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _DUMMY_DRV_VIDEO_H_ +#define _DUMMY_DRV_VIDEO_H_ + +#include +#include "object_heap.h" + +#define DUMMY_MAX_PROFILES 11 +#define DUMMY_MAX_ENTRYPOINTS 5 +#define DUMMY_MAX_CONFIG_ATTRIBUTES 10 +#define DUMMY_MAX_IMAGE_FORMATS 10 +#define DUMMY_MAX_SUBPIC_FORMATS 4 +#define DUMMY_MAX_DISPLAY_ATTRIBUTES 4 +#define DUMMY_STR_VENDOR "Dummy Driver 1.0" + +struct dummy_driver_data { + struct object_heap config_heap; + struct object_heap context_heap; + struct object_heap surface_heap; + struct object_heap buffer_heap; +}; + +struct object_config { + struct object_base base; + VAProfile profile; + VAEntrypoint entrypoint; + VAConfigAttrib attrib_list[DUMMY_MAX_CONFIG_ATTRIBUTES]; + int attrib_count; +}; + +struct object_context { + struct object_base base; + VAContextID context_id; + VAConfigID config_id; + VASurfaceID current_render_target; + int picture_width; + int picture_height; + int num_render_targets; + int flags; + VASurfaceID *render_targets; +}; + +struct object_surface { + struct object_base base; + VASurfaceID surface_id; +}; + +struct object_buffer { + struct object_base base; + void *buffer_data; + int max_num_elements; + int num_elements; +}; + +typedef struct object_config *object_config_p; +typedef struct object_context *object_context_p; +typedef struct object_surface *object_surface_p; +typedef struct object_buffer *object_buffer_p; + +#endif /* _DUMMY_DRV_VIDEO_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.c b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.c new file mode 100644 index 000000000..7f18a1f1e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.c @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include "object_heap.h" + +#define ASSERT assert + +#define LAST_FREE -1 +#define ALLOCATED -2 + +/* + * Expands the heap + * Return 0 on success, -1 on error + */ +static int +object_heap_expand(object_heap_p heap) +{ + int i; + void *new_heap_index; + int next_free; + int new_heap_size = heap->heap_size + heap->heap_increment; + int bucket_index = new_heap_size / heap->heap_increment - 1; + + if (bucket_index >= heap->num_buckets) { + int new_num_buckets = heap->num_buckets + 8; + void **new_bucket; + + new_bucket = realloc(heap->bucket, new_num_buckets * sizeof(void *)); + if (NULL == new_bucket) { + return -1; + } + + heap->num_buckets = new_num_buckets; + heap->bucket = new_bucket; + } + + new_heap_index = (void *) malloc(heap->heap_increment * heap->object_size); + if (NULL == new_heap_index) { + return -1; /* Out of memory */ + } + + heap->bucket[bucket_index] = new_heap_index; + next_free = heap->next_free; + for (i = new_heap_size; i-- > heap->heap_size;) { + object_base_p obj = (object_base_p)(new_heap_index + (i - heap->heap_size) * heap->object_size); + obj->id = i + heap->id_offset; + obj->next_free = next_free; + next_free = i; + } + heap->next_free = next_free; + heap->heap_size = new_heap_size; + return 0; /* Success */ +} + +/* + * Return 0 on success, -1 on error + */ +int +object_heap_init(object_heap_p heap, int object_size, int id_offset) +{ + pthread_mutex_init(&heap->mutex, NULL); + heap->object_size = object_size; + heap->id_offset = id_offset & OBJECT_HEAP_OFFSET_MASK; + heap->heap_size = 0; + heap->heap_increment = 16; + heap->next_free = LAST_FREE; + heap->num_buckets = 0; + heap->bucket = NULL; + return object_heap_expand(heap); +} + +/* + * Allocates an object + * Returns the object ID on success, returns -1 on error + */ +static int +object_heap_allocate_unlocked(object_heap_p heap) +{ + object_base_p obj; + int bucket_index, obj_index; + + if (LAST_FREE == heap->next_free) { + if (-1 == object_heap_expand(heap)) { + return -1; /* Out of memory */ + } + } + ASSERT(heap->next_free >= 0); + + bucket_index = heap->next_free / heap->heap_increment; + obj_index = heap->next_free % heap->heap_increment; + + obj = (object_base_p)(heap->bucket[bucket_index] + obj_index * heap->object_size); + heap->next_free = obj->next_free; + obj->next_free = ALLOCATED; + return obj->id; +} + +int +object_heap_allocate(object_heap_p heap) +{ + int ret; + + pthread_mutex_lock(&heap->mutex); + ret = object_heap_allocate_unlocked(heap); + pthread_mutex_unlock(&heap->mutex); + return ret; +} + +/* + * Lookup an object by object ID + * Returns a pointer to the object on success, returns NULL on error + */ +static object_base_p +object_heap_lookup_unlocked(object_heap_p heap, int id) +{ + object_base_p obj; + int bucket_index, obj_index; + + if ((id < heap->id_offset) || (id > (heap->heap_size + heap->id_offset))) { + return NULL; + } + id &= OBJECT_HEAP_ID_MASK; + bucket_index = id / heap->heap_increment; + obj_index = id % heap->heap_increment; + obj = (object_base_p)(heap->bucket[bucket_index] + obj_index * heap->object_size); + + /* Check if the object has in fact been allocated */ + if (obj->next_free != ALLOCATED) { + return NULL; + } + return obj; +} + +object_base_p +object_heap_lookup(object_heap_p heap, int id) +{ + object_base_p obj; + + pthread_mutex_lock(&heap->mutex); + obj = object_heap_lookup_unlocked(heap, id); + pthread_mutex_unlock(&heap->mutex); + return obj; +} + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the first object on the heap, returns NULL if heap is empty. + */ +object_base_p +object_heap_first(object_heap_p heap, object_heap_iterator *iter) +{ + *iter = -1; + return object_heap_next(heap, iter); +} + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the next object on the heap, returns NULL if heap is empty. + */ +static object_base_p +object_heap_next_unlocked(object_heap_p heap, object_heap_iterator *iter) +{ + object_base_p obj; + int bucket_index, obj_index; + int i = *iter + 1; + + while (i < heap->heap_size) { + bucket_index = i / heap->heap_increment; + obj_index = i % heap->heap_increment; + + obj = (object_base_p)(heap->bucket[bucket_index] + obj_index * heap->object_size); + if (obj->next_free == ALLOCATED) { + *iter = i; + return obj; + } + i++; + } + *iter = i; + return NULL; +} + +object_base_p +object_heap_next(object_heap_p heap, object_heap_iterator *iter) +{ + object_base_p obj; + + pthread_mutex_lock(&heap->mutex); + obj = object_heap_next_unlocked(heap, iter); + pthread_mutex_unlock(&heap->mutex); + return obj; +} + +/* + * Frees an object + */ +static void +object_heap_free_unlocked(object_heap_p heap, object_base_p obj) +{ + /* Check if the object has in fact been allocated */ + ASSERT(obj->next_free == ALLOCATED); + + obj->next_free = heap->next_free; + heap->next_free = obj->id & OBJECT_HEAP_ID_MASK; +} + +void +object_heap_free(object_heap_p heap, object_base_p obj) +{ + if (!obj) + return; + pthread_mutex_lock(&heap->mutex); + object_heap_free_unlocked(heap, obj); + pthread_mutex_unlock(&heap->mutex); +} + +/* + * Destroys a heap, the heap must be empty. + */ +void +object_heap_destroy(object_heap_p heap) +{ + object_base_p obj; + int bucket_index, obj_index, i; + + /* Check if heap is empty */ + for (i = 0; i < heap->heap_size; i++) { + /* Check if object is not still allocated */ + bucket_index = i / heap->heap_increment; + obj_index = i % heap->heap_increment; + obj = (object_base_p)(heap->bucket[bucket_index] + obj_index * heap->object_size); + ASSERT(obj->next_free != ALLOCATED); + } + + for (i = 0; i < heap->heap_size / heap->heap_increment; i++) { + free(heap->bucket[i]); + } + + pthread_mutex_destroy(&heap->mutex); + + free(heap->bucket); + heap->bucket = NULL; + heap->heap_size = 0; + heap->next_free = LAST_FREE; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.h b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.h new file mode 100644 index 000000000..58e118308 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/dummy_drv_video/object_heap.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef OBJECT_HEAP_H +#define OBJECT_HEAP_H + +#include + +#define OBJECT_HEAP_OFFSET_MASK 0x7F000000 +#define OBJECT_HEAP_ID_MASK 0x00FFFFFF + +typedef struct object_base *object_base_p; +typedef struct object_heap *object_heap_p; + +struct object_base { + int id; + int next_free; +}; + +struct object_heap { + pthread_mutex_t mutex; + int object_size; + int id_offset; + int next_free; + int heap_size; + int heap_increment; + void **bucket; + int num_buckets; +}; + +typedef int object_heap_iterator; + +/* + * Return 0 on success, -1 on error + */ +int +object_heap_init(object_heap_p heap, int object_size, int id_offset); + +/* + * Allocates an object + * Returns the object ID on success, returns -1 on error + */ +int +object_heap_allocate(object_heap_p heap); + +/* + * Lookup an allocated object by object ID + * Returns a pointer to the object on success, returns NULL on error + */ +object_base_p +object_heap_lookup(object_heap_p heap, int id); + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the first object on the heap, returns NULL if heap is empty. + */ +object_base_p +object_heap_first(object_heap_p heap, object_heap_iterator *iter); + +/* + * Iterate over all objects in the heap. + * Returns a pointer to the next object on the heap, returns NULL if heap is empty. + */ +object_base_p +object_heap_next(object_heap_p heap, object_heap_iterator *iter); + +/* + * Frees an object + */ +void +object_heap_free(object_heap_p heap, object_base_p obj); + +/* + * Destroys a heap, the heap must be empty. + */ +void +object_heap_destroy(object_heap_p heap); + +#endif /* OBJECT_HEAP_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/install-sh b/contrib/sdk/sources/vaapi/libva-1.6.2/install-sh new file mode 100644 index 000000000..377bb8687 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/ltmain.sh b/contrib/sdk/sources/vaapi/libva-1.6.2/ltmain.sh new file mode 100644 index 000000000..a356acafa --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/ltmain.sh @@ -0,0 +1,9661 @@ + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/missing b/contrib/sdk/sources/vaapi/libva-1.6.2/missing new file mode 100644 index 000000000..db98974ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.am new file mode 100644 index 000000000..a3435a434 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.am @@ -0,0 +1,57 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +pcfiles = libva.pc +pcfiles += libva-tpi.pc +if USE_DRM +pcfiles += libva-drm.pc +endif +if USE_X11 +pcfiles += libva-x11.pc +endif +if USE_GLX +pcfiles += libva-glx.pc +endif +if USE_EGL +pcfiles += libva-egl.pc +endif +if USE_WAYLAND +pcfiles += libva-wayland.pc +endif + +all_pcfiles_in = libva.pc.in +all_pcfiles_in += libva-tpi.pc.in +all_pcfiles_in += libva-drm.pc.in +all_pcfiles_in += libva-x11.pc.in +all_pcfiles_in += libva-glx.pc.in +all_pcfiles_in += libva-egl.pc.in +all_pcfiles_in += libva-wayland.pc.in + +pkgconfigdir = @pkgconfigdir@ +pkgconfig_DATA = $(pcfiles) + +EXTRA_DIST = $(all_pcfiles_in) + +DISTCLEANFILES = $(pcfiles) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.in new file mode 100644 index 000000000..3483414a4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/Makefile.in @@ -0,0 +1,571 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_DRM_TRUE@am__append_1 = libva-drm.pc +@USE_X11_TRUE@am__append_2 = libva-x11.pc +@USE_GLX_TRUE@am__append_3 = libva-glx.pc +@USE_EGL_TRUE@am__append_4 = libva-egl.pc +@USE_WAYLAND_TRUE@am__append_5 = libva-wayland.pc +subdir = pkgconfig +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/libva-drm.pc.in $(srcdir)/libva-egl.pc.in \ + $(srcdir)/libva-glx.pc.in $(srcdir)/libva-tpi.pc.in \ + $(srcdir)/libva-wayland.pc.in $(srcdir)/libva-x11.pc.in \ + $(srcdir)/libva.pc.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = libva-drm.pc libva-egl.pc libva-glx.pc \ + libva-tpi.pc libva-wayland.pc libva-x11.pc libva.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +pcfiles = libva.pc libva-tpi.pc $(am__append_1) $(am__append_2) \ + $(am__append_3) $(am__append_4) $(am__append_5) +all_pcfiles_in = libva.pc.in libva-tpi.pc.in libva-drm.pc.in \ + libva-x11.pc.in libva-glx.pc.in libva-egl.pc.in \ + libva-wayland.pc.in +pkgconfig_DATA = $(pcfiles) +EXTRA_DIST = $(all_pcfiles_in) +DISTCLEANFILES = $(pcfiles) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu pkgconfig/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libva-drm.pc: $(top_builddir)/config.status $(srcdir)/libva-drm.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva-egl.pc: $(top_builddir)/config.status $(srcdir)/libva-egl.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva-glx.pc: $(top_builddir)/config.status $(srcdir)/libva-glx.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva-tpi.pc: $(top_builddir)/config.status $(srcdir)/libva-tpi.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva-wayland.pc: $(top_builddir)/config.status $(srcdir)/libva-wayland.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva-x11.pc: $(top_builddir)/config.status $(srcdir)/libva-x11.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libva.pc: $(top_builddir)/config.status $(srcdir)/libva.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-drm.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-drm.pc.in new file mode 100644 index 000000000..b3fb471c6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-drm.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +display=drm + +Name: libva-${display} +Description: Userspace Video Acceleration (VA) ${display} interface +Requires: libva +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-egl.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-egl.pc.in new file mode 100644 index 000000000..d80fcc8b7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-egl.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +display=egl + +Name: libva-${display} +Description: Userspace Video Acceleration (VA) ${display} interface +Requires: libva +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-glx.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-glx.pc.in new file mode 100644 index 000000000..859986632 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-glx.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +display=glx + +Name: libva-${display} +Description: Userspace Video Acceleration (VA) ${display} interface +Requires: libva +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-tpi.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-tpi.pc.in new file mode 100644 index 000000000..bc7fdd7ca --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-tpi.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libva-tpi +Description: Userspace Video Acceleration (VA) 3rd party interface +Requires: libva +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-tpi +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-wayland.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-wayland.pc.in new file mode 100644 index 000000000..ee92ac206 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-wayland.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +display=wayland + +Name: libva-${display} +Description: Userspace Video Acceleration (VA) ${display} interface +Requires: libva wayland-client +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-x11.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-x11.pc.in new file mode 100644 index 000000000..4e7330cfd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva-x11.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +display=x11 + +Name: libva-${display} +Description: Userspace Video Acceleration (VA) ${display} interface +Requires: libva +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva.pc.in b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva.pc.in new file mode 100644 index 000000000..8b03f9869 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/pkgconfig/libva.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +driverdir=@LIBVA_DRIVERS_PATH@ + +Name: libva +Description: Userspace Video Acceleration (VA) core interface +Version: @VA_API_VERSION@ +Libs: -L${libdir} -lva +Cflags: -I${includedir} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.am new file mode 100644 index 000000000..6083bb3b7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.am @@ -0,0 +1,29 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +SUBDIRS = common decode encode vainfo + +if USE_X11 +SUBDIRS += basic putsurface +endif + +EXTRA_DIST = loadsurface.h loadsurface_yuv.h diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.in new file mode 100644 index 000000000..03d3f9ab8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/Makefile.in @@ -0,0 +1,662 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_X11_TRUE@am__append_1 = basic putsurface +subdir = test +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = common decode encode vainfo basic putsurface +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = common decode encode vainfo $(am__append_1) +EXTRA_DIST = loadsurface.h loadsurface_yuv.h +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.am new file mode 100644 index 000000000..21f48ddd5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.am @@ -0,0 +1,87 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +noinst_PROGRAMS = \ + test_01 \ + test_02 \ + test_03 \ + test_04 \ + test_05 \ + test_06 \ + test_07 \ + test_08 \ + test_09 \ + test_10 \ + test_11 \ + $(NULL) + +AM_CFLAGS = \ + -DIN_LIBVA \ + -I$(top_srcdir) \ + $(X11_CFLAGS) \ + $(NULL) + +TEST_LIBS = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/va/libva-x11.la \ + $(X11_LIBS) \ + $(NULL) + +test_01_LDADD = $(TEST_LIBS) +test_01_SOURCES = test_01.c + +test_02_LDADD = $(TEST_LIBS) +test_02_SOURCES = test_02.c + +test_03_LDADD = $(TEST_LIBS) +test_03_SOURCES = test_03.c + +test_04_LDADD = $(TEST_LIBS) +test_04_SOURCES = test_04.c + +test_05_LDADD = $(TEST_LIBS) +test_05_SOURCES = test_05.c + +test_06_LDADD = $(TEST_LIBS) +test_06_SOURCES = test_06.c + +test_07_LDADD = $(TEST_LIBS) +test_07_SOURCES = test_07.c + +test_08_LDADD = $(TEST_LIBS) +test_08_SOURCES = test_08.c + +test_09_LDADD = $(TEST_LIBS) +test_09_SOURCES = test_09.c + +test_10_LDADD = $(TEST_LIBS) +test_10_SOURCES = test_10.c + +test_11_LDADD = $(TEST_LIBS) +test_11_SOURCES = test_11.c + +EXTRA_DIST = test_common.c test_x11.c + +valgrind: $(noinst_PROGRAMS) + for a in $(noinst_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.in new file mode 100644 index 000000000..c8358b22d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/Makefile.in @@ -0,0 +1,758 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = test_01$(EXEEXT) test_02$(EXEEXT) test_03$(EXEEXT) \ + test_04$(EXEEXT) test_05$(EXEEXT) test_06$(EXEEXT) \ + test_07$(EXEEXT) test_08$(EXEEXT) test_09$(EXEEXT) \ + test_10$(EXEEXT) test_11$(EXEEXT) +subdir = test/basic +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_test_01_OBJECTS = test_01.$(OBJEXT) +test_01_OBJECTS = $(am_test_01_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(top_builddir)/va/libva.la \ + $(top_builddir)/va/libva-x11.la $(am__DEPENDENCIES_1) +test_01_DEPENDENCIES = $(am__DEPENDENCIES_2) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_test_02_OBJECTS = test_02.$(OBJEXT) +test_02_OBJECTS = $(am_test_02_OBJECTS) +test_02_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_03_OBJECTS = test_03.$(OBJEXT) +test_03_OBJECTS = $(am_test_03_OBJECTS) +test_03_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_04_OBJECTS = test_04.$(OBJEXT) +test_04_OBJECTS = $(am_test_04_OBJECTS) +test_04_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_05_OBJECTS = test_05.$(OBJEXT) +test_05_OBJECTS = $(am_test_05_OBJECTS) +test_05_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_06_OBJECTS = test_06.$(OBJEXT) +test_06_OBJECTS = $(am_test_06_OBJECTS) +test_06_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_07_OBJECTS = test_07.$(OBJEXT) +test_07_OBJECTS = $(am_test_07_OBJECTS) +test_07_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_08_OBJECTS = test_08.$(OBJEXT) +test_08_OBJECTS = $(am_test_08_OBJECTS) +test_08_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_09_OBJECTS = test_09.$(OBJEXT) +test_09_OBJECTS = $(am_test_09_OBJECTS) +test_09_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_10_OBJECTS = test_10.$(OBJEXT) +test_10_OBJECTS = $(am_test_10_OBJECTS) +test_10_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_11_OBJECTS = test_11.$(OBJEXT) +test_11_OBJECTS = $(am_test_11_OBJECTS) +test_11_DEPENDENCIES = $(am__DEPENDENCIES_2) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(test_01_SOURCES) $(test_02_SOURCES) $(test_03_SOURCES) \ + $(test_04_SOURCES) $(test_05_SOURCES) $(test_06_SOURCES) \ + $(test_07_SOURCES) $(test_08_SOURCES) $(test_09_SOURCES) \ + $(test_10_SOURCES) $(test_11_SOURCES) +DIST_SOURCES = $(test_01_SOURCES) $(test_02_SOURCES) \ + $(test_03_SOURCES) $(test_04_SOURCES) $(test_05_SOURCES) \ + $(test_06_SOURCES) $(test_07_SOURCES) $(test_08_SOURCES) \ + $(test_09_SOURCES) $(test_10_SOURCES) $(test_11_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CFLAGS = \ + -DIN_LIBVA \ + -I$(top_srcdir) \ + $(X11_CFLAGS) \ + $(NULL) + +TEST_LIBS = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/va/libva-x11.la \ + $(X11_LIBS) \ + $(NULL) + +test_01_LDADD = $(TEST_LIBS) +test_01_SOURCES = test_01.c +test_02_LDADD = $(TEST_LIBS) +test_02_SOURCES = test_02.c +test_03_LDADD = $(TEST_LIBS) +test_03_SOURCES = test_03.c +test_04_LDADD = $(TEST_LIBS) +test_04_SOURCES = test_04.c +test_05_LDADD = $(TEST_LIBS) +test_05_SOURCES = test_05.c +test_06_LDADD = $(TEST_LIBS) +test_06_SOURCES = test_06.c +test_07_LDADD = $(TEST_LIBS) +test_07_SOURCES = test_07.c +test_08_LDADD = $(TEST_LIBS) +test_08_SOURCES = test_08.c +test_09_LDADD = $(TEST_LIBS) +test_09_SOURCES = test_09.c +test_10_LDADD = $(TEST_LIBS) +test_10_SOURCES = test_10.c +test_11_LDADD = $(TEST_LIBS) +test_11_SOURCES = test_11.c +EXTRA_DIST = test_common.c test_x11.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/basic/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/basic/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +test_01$(EXEEXT): $(test_01_OBJECTS) $(test_01_DEPENDENCIES) $(EXTRA_test_01_DEPENDENCIES) + @rm -f test_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_01_OBJECTS) $(test_01_LDADD) $(LIBS) + +test_02$(EXEEXT): $(test_02_OBJECTS) $(test_02_DEPENDENCIES) $(EXTRA_test_02_DEPENDENCIES) + @rm -f test_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_02_OBJECTS) $(test_02_LDADD) $(LIBS) + +test_03$(EXEEXT): $(test_03_OBJECTS) $(test_03_DEPENDENCIES) $(EXTRA_test_03_DEPENDENCIES) + @rm -f test_03$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_03_OBJECTS) $(test_03_LDADD) $(LIBS) + +test_04$(EXEEXT): $(test_04_OBJECTS) $(test_04_DEPENDENCIES) $(EXTRA_test_04_DEPENDENCIES) + @rm -f test_04$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_04_OBJECTS) $(test_04_LDADD) $(LIBS) + +test_05$(EXEEXT): $(test_05_OBJECTS) $(test_05_DEPENDENCIES) $(EXTRA_test_05_DEPENDENCIES) + @rm -f test_05$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_05_OBJECTS) $(test_05_LDADD) $(LIBS) + +test_06$(EXEEXT): $(test_06_OBJECTS) $(test_06_DEPENDENCIES) $(EXTRA_test_06_DEPENDENCIES) + @rm -f test_06$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_06_OBJECTS) $(test_06_LDADD) $(LIBS) + +test_07$(EXEEXT): $(test_07_OBJECTS) $(test_07_DEPENDENCIES) $(EXTRA_test_07_DEPENDENCIES) + @rm -f test_07$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_07_OBJECTS) $(test_07_LDADD) $(LIBS) + +test_08$(EXEEXT): $(test_08_OBJECTS) $(test_08_DEPENDENCIES) $(EXTRA_test_08_DEPENDENCIES) + @rm -f test_08$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_08_OBJECTS) $(test_08_LDADD) $(LIBS) + +test_09$(EXEEXT): $(test_09_OBJECTS) $(test_09_DEPENDENCIES) $(EXTRA_test_09_DEPENDENCIES) + @rm -f test_09$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_09_OBJECTS) $(test_09_LDADD) $(LIBS) + +test_10$(EXEEXT): $(test_10_OBJECTS) $(test_10_DEPENDENCIES) $(EXTRA_test_10_DEPENDENCIES) + @rm -f test_10$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_10_OBJECTS) $(test_10_LDADD) $(LIBS) + +test_11$(EXEEXT): $(test_11_OBJECTS) $(test_11_DEPENDENCIES) $(EXTRA_test_11_DEPENDENCIES) + @rm -f test_11$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_11_OBJECTS) $(test_11_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_03.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_04.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_05.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_06.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_07.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_08.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_09.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_10.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_11.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + + +valgrind: $(noinst_PROGRAMS) + for a in $(noinst_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_01.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_01.c new file mode 100644 index 000000000..407565542 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_01.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Initialize & Terminate" + +#include "test_common.c" + +void pre() +{ +} + +void post() +{ +} + +void test() +{ + test_init(); + + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_02.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_02.c new file mode 100644 index 000000000..5622a18e0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_02.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Query profiles" + +#include "test_common.c" + +void pre() +{ + test_init(); +} + +void test() +{ + test_profiles(); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_03.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_03.c new file mode 100644 index 000000000..d2af49445 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_03.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Query entrypoints for all profiles" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +void test() +{ + int max_entrypoints; + int num_entrypoints; + int i, j; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + status("vaMaxEntryPoints = %d\n", max_entrypoints); + ASSERT(max_entrypoints > 0); + + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + for(i = 0; i < num_profiles; i++) + { + memset(entrypoints, 0xff, max_entrypoints * sizeof(VAEntrypoint)); + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaQueryConfigEntryPoints(%s) reports %d entrypoints\n", profile2string(profiles[i]), num_entrypoints); + ASSERT(num_entrypoints <= max_entrypoints); + ASSERT(num_entrypoints > 0); + for(j = 0; j < num_entrypoints; j++) + { + status(" entrypoint %d [%s]\n", entrypoints[j], entrypoint2string(entrypoints[j])); + } + } + + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_04.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_04.c new file mode 100644 index 000000000..2e3329cfa --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_04.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Get config attributes for all profiles / entrypoints" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +#define DEADVALUE 0xdeaddead + +void test() +{ + VAConfigAttrib attributes[] = { + { type: VAConfigAttribRTFormat, value: DEADVALUE }, + { type: VAConfigAttribSpatialResidual, value: DEADVALUE }, + { type: VAConfigAttribSpatialClipping, value: DEADVALUE }, + { type: VAConfigAttribIntraResidual, value: DEADVALUE }, + { type: VAConfigAttribEncryption, value: DEADVALUE } + }; + int max_entrypoints; + int num_entrypoints; + int num_attribs = sizeof(attributes) / sizeof(VAConfigAttrib); + int i, j, k; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + VAConfigAttrib *attrib_list = (VAConfigAttrib *) malloc(sizeof(attributes)); + ASSERT(attrib_list); + + for(i = 0; i < num_profiles; i++) + { + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + memcpy(attrib_list, attributes, sizeof(attributes)); + status("vaGetConfigAttributes for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + va_status = vaGetConfigAttributes(va_dpy, profiles[i], entrypoints[j], attrib_list, num_attribs); + ASSERT( VA_STATUS_SUCCESS == va_status ); + for(k = 0; k < num_attribs; k++) + { + status(" %d -> %08x\n", attrib_list[k].type, attrib_list[k].value); + ASSERT(attrib_list[k].value != DEADVALUE); + } + } + } + + free(attrib_list); + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_05.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_05.c new file mode 100644 index 000000000..f88dd15d2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_05.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Create/destroy configs for all profiles / entrypoints" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +void test() +{ + int max_entrypoints; + int num_entrypoints; + int i, j, k; + int config_count = 0; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + VAConfigID *configs = malloc(max_entrypoints * num_profiles * sizeof(VAConfigID)); + + for(i = 0; i < num_profiles; i++) + { + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + status("vaCreateConfig for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + va_status = vaCreateConfig(va_dpy, profiles[i], entrypoints[j], NULL, 0, &(configs[config_count])); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateConfig returns %08x\n", configs[config_count]); + config_count++; + } + } + + for(i = 0; i < config_count; i++) + { + status("vaDestroyConfig for config %08x\n", configs[i]); + va_status = vaDestroyConfig( va_dpy, configs[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + free(configs); + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_06.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_06.c new file mode 100644 index 000000000..ca47e50f7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_06.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Get config attributes from configs" + +#include "test_common.c" + +int max_entrypoints; +VAEntrypoint *entrypoints; + +VAConfigID *configs; +int config_count = 0; + + + +void pre() +{ + int i, j, k; + + test_init(); + test_profiles(); + + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + configs = malloc(max_entrypoints * num_profiles * sizeof(VAConfigID)); + ASSERT(configs); + + // Create configs + for(i = 0; i < num_profiles; i++) + { + int num_entrypoints; + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + va_status = vaCreateConfig(va_dpy, profiles[i], entrypoints[j], NULL, 0, &(configs[config_count])); + ASSERT( VA_STATUS_SUCCESS == va_status ); + config_count++; + } + } +} + +void test() +{ + int i, j, k; + int max_attribs; + + max_attribs = vaMaxNumConfigAttributes(va_dpy); + ASSERT(max_attribs > 0); + + VAConfigAttrib *attrib_list = malloc(max_attribs * sizeof(VAConfigAttrib)); + + config_count = 0; + for(i = 0; i < num_profiles; i++) + { + int num_entrypoints; + + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + for(j = 0; j < num_entrypoints; j++) + { + VAProfile profile= -1; + VAEntrypoint entrypoint = -1; + int num_attribs = -1; + + status("Checking vaQueryConfigAttributes for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + memset(attrib_list, 0xff, max_attribs * sizeof(VAConfigAttrib)); + + va_status = vaQueryConfigAttributes(va_dpy, configs[config_count], &profile, &entrypoint, attrib_list, &num_attribs); + config_count++; + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( profile == profiles[i] ); + ASSERT( entrypoint == entrypoints[j] ); + ASSERT( num_attribs >= 0 ); + for(k = 0; k < num_attribs; k++) + { + status(" %d -> %08x\n", attrib_list[k].type, attrib_list[k].value); + ASSERT(attrib_list[k].value != VA_ATTRIB_NOT_SUPPORTED); + } + } + } + + free(attrib_list); +} + +void post() +{ + int i; + for(i = 0; i < config_count; i++) + { + va_status = vaDestroyConfig( va_dpy, configs[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + free(configs); + free(entrypoints); + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_07.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_07.c new file mode 100644 index 000000000..2e0153399 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_07.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Create and destory surfaces" + +#include "test_common.c" + +void pre() +{ + test_init(); +} + +#define DEAD_SURFACE_ID (VASurfaceID) 0xbeefdead + +void test_unique_surfaces(VASurfaceID *surface_list1, int surface_count1, VASurfaceID *surface_list2, int surface_count2) +{ + int i,j; + + for(i = 0; i < surface_count1; i++) + { + for(j = 0; j < surface_count2; j++) + { + if ((surface_list1 == surface_list2) && (i == j)) continue; + ASSERT(surface_list1[i] != VA_INVALID_SURFACE); + ASSERT(surface_list2[j] != VA_INVALID_SURFACE); + ASSERT(surface_list1[i] != surface_list2[j]); + } + } +} + + +void test() +{ + VASurfaceID surfaces_1[1+1]; + VASurfaceID surfaces_4[4+1]; + VASurfaceID surfaces_16[16+1]; + VASurfaceID surfaces_6[6+1]; + + memset(surfaces_1, 0xff, sizeof(surfaces_1)); + memset(surfaces_4, 0xff, sizeof(surfaces_4)); + memset(surfaces_16, 0xff, sizeof(surfaces_16)); + memset(surfaces_6, 0xff, sizeof(surfaces_6)); + + status("vaCreateSurfaces 1 surface\n"); + surfaces_1[1] = DEAD_SURFACE_ID; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, 352, 288, surfaces_1, 1, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_SURFACE_ID == surfaces_1[1] ); /* bounds check */ + + status("vaCreateSurfaces 4 surfaces\n"); + surfaces_4[4] = DEAD_SURFACE_ID; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, 352, 288, surfaces_4, 4, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_SURFACE_ID == surfaces_4[4] ); /* bounds check */ + + status("vaCreateSurfaces 16 surfaces\n"); + surfaces_16[16] = DEAD_SURFACE_ID; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, 352, 288, surfaces_16, 16, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_SURFACE_ID == surfaces_16[16] ); /* bounds check */ + + test_unique_surfaces(surfaces_1, 1, surfaces_4, 4); + test_unique_surfaces(surfaces_4, 4, surfaces_16, 4); + test_unique_surfaces(surfaces_4, 4, surfaces_16, 16); + test_unique_surfaces(surfaces_4, 1, surfaces_16, 16); + test_unique_surfaces(surfaces_1, 16, surfaces_16, 16); + + status("vaDestroySurface 4 surfaces\n"); + va_status = vaDestroySurfaces(va_dpy, surfaces_4, 4); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaCreateSurfaces 6 surfaces\n"); + surfaces_6[6] = DEAD_SURFACE_ID; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, 352, 288, surfaces_6, 6, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_SURFACE_ID == surfaces_6[6] ); /* bounds check */ + + test_unique_surfaces(surfaces_1, 1, surfaces_6, 6); + test_unique_surfaces(surfaces_6, 6, surfaces_16, 16); + test_unique_surfaces(surfaces_1, 6, surfaces_16, 6); + + status("vaDestroySurface 16 surfaces\n"); + va_status = vaDestroySurfaces(va_dpy, surfaces_16, 16); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaDestroySurface 1 surface\n"); + va_status = vaDestroySurfaces(va_dpy, surfaces_1, 1); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaDestroySurface 6 surfaces\n"); + va_status = vaDestroySurfaces(va_dpy, surfaces_6, 6); + ASSERT( VA_STATUS_SUCCESS == va_status ); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_08.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_08.c new file mode 100644 index 000000000..299882f77 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_08.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Create and destory surfaces of different sizes" + +#include "test_common.c" + +void pre() +{ + test_init(); +} + +#define DEAD_SURFACE_ID (VASurfaceID) 0xbeefdead + +void test_unique_surfaces(VASurfaceID *surface_list, int surface_count) +{ + int i,j; + + for(i = 0; i < surface_count; i++) + { + ASSERT(surface_list[i] != VA_INVALID_SURFACE); + for(j = 0; j < i; j++) + { + if (i == j) continue; + ASSERT(surface_list[i] != surface_list[j]); + } + } +} + +typedef struct test_size { int w; int h; } test_size_t; + +test_size_t test_sizes[] = { + { 10, 10 }, + { 128, 128 }, + { 176, 144 }, + { 144, 176 }, + { 352, 288 }, + { 399, 299 }, + { 640, 480 }, + { 1280, 720 } +}; + +#define NUM_SIZES (sizeof(test_sizes) / sizeof(test_size_t)) + +void test() +{ + VASurfaceID surfaces[NUM_SIZES+1]; + unsigned int i; + + memset(surfaces, 0xff, sizeof(surfaces)); + + for(i = 0; i < NUM_SIZES; i++) + { + status("vaCreateSurfaces create %dx%d surface\n", test_sizes[i].w, test_sizes[i].h); + surfaces[i+1] = DEAD_SURFACE_ID; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, test_sizes[i].w, test_sizes[i].h, &surfaces[i], 1, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_SURFACE_ID == surfaces[i+1] ); + } + + test_unique_surfaces(surfaces, NUM_SIZES); + + status("vaDestroySurface all surfaces\n"); + va_status = vaDestroySurfaces(va_dpy, surfaces, NUM_SIZES); + ASSERT( VA_STATUS_SUCCESS == va_status ); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_09.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_09.c new file mode 100644 index 000000000..b8a8f1c3c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_09.c @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Create/destroy contexts for all profiles / entrypoints" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +void test() +{ + int max_entrypoints; + int num_entrypoints; + int i, j, k; + int config_count = 0; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + VAConfigID *configs = malloc(max_entrypoints * num_profiles * sizeof(VAConfigID)); + VAContextID *contexts = malloc(max_entrypoints * num_profiles * sizeof(VAContextID)); + + for(i = 0; i < num_profiles; i++) + { + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + status("vaCreateConfig for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + va_status = vaCreateConfig(va_dpy, profiles[i], entrypoints[j], NULL, 0, &(configs[config_count])); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateConfig returns %08x\n", configs[config_count]); + config_count++; + } + } + + int width = 352; + int height = 288; + int surface_count = 4; + int total_surfaces = config_count * surface_count; + + VASurfaceID *surfaces = malloc(total_surfaces * sizeof(VASurfaceID)); + + // TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, width, height, surfaces, total_surfaces, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(i = 0; i < config_count; i++) + { + status("vaCreateContext with config %08x\n", configs[i]); + int flags = 0; + va_status = vaCreateContext( va_dpy, configs[i], width, height, flags, surfaces + i*surface_count, surface_count, &contexts[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + for(i = 0; i < config_count; i++) + { + status("vaDestroyContext for context %08x\n", contexts[i]); + va_status = vaDestroyContext( va_dpy, contexts[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + for(i = 0; i < config_count; i++) + { + status("vaDestroyConfig for config %08x\n", configs[i]); + va_status = vaDestroyConfig( va_dpy, configs[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + free(contexts); + free(configs); + free(surfaces); + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_10.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_10.c new file mode 100644 index 000000000..9c7c5669e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_10.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Create and destroy buffers" + +#include "test_common.c" + +VAConfigID config; +VAContextID context; +VASurfaceID *surfaces; +int total_surfaces; + +void pre() +{ + test_init(); + + va_status = vaCreateConfig(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, NULL, 0, &config); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateConfig returns %08x\n", config); + + int width = 352; + int height = 288; + int surface_count = 4; + total_surfaces = surface_count; + + surfaces = malloc(total_surfaces * sizeof(VASurfaceID)); + + // TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, width, height, surfaces, total_surfaces, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaCreateContext with config %08x\n", config); + int flags = 0; + va_status = vaCreateContext( va_dpy, config, width, height, flags, surfaces, surface_count, &context ); + ASSERT( VA_STATUS_SUCCESS == va_status ); +} + +void test_unique_buffers(VABufferID *buffer_list, int buffer_count) +{ + int i,j; + + for(i = 0; i < buffer_count; i++) + { + for(j = 0; j < i; j++) + { + ASSERT(buffer_list[i] != buffer_list[j]); + } + } +} + +VABufferType buffer_types[] = +{ + VAPictureParameterBufferType, + VAIQMatrixBufferType, + VABitPlaneBufferType, + VASliceGroupMapBufferType, + VASliceParameterBufferType, + VASliceDataBufferType, + VAMacroblockParameterBufferType, + VAResidualDataBufferType, + VADeblockingParameterBufferType, +}; + +unsigned int buffer_sizes[] = +{ + sizeof(VAPictureParameterBufferMPEG4), + sizeof(VAIQMatrixBufferH264), + 32*1024, + 48*1024, + sizeof(VASliceParameterBufferMPEG2), + 128*1024, + sizeof(VAMacroblockParameterBufferMPEG2), + 32*1024, + 15*1024, +}; + + +#define NUM_BUFFER_TYPES (sizeof(buffer_types) / sizeof(VABufferType)) + +#define DEAD_BUFFER_ID ((VABufferID) 0x1234ffff) + +void test() +{ + VABufferID buffer_ids[NUM_BUFFER_TYPES+1]; + unsigned int i; + memset(buffer_ids, 0xff, sizeof(buffer_ids)); + for(i=0; i < NUM_BUFFER_TYPES; i++) + { + buffer_ids[i+1] = DEAD_BUFFER_ID; + va_status = vaCreateBuffer(va_dpy, context, buffer_types[i], buffer_sizes[i], 1, NULL, &buffer_ids[i]); + ASSERT( VA_STATUS_SUCCESS == va_status ); + ASSERT( DEAD_BUFFER_ID == buffer_ids[i+1] ); /* Bounds check */ + } + test_unique_buffers(buffer_ids, NUM_BUFFER_TYPES); + + for(i=0; i < NUM_BUFFER_TYPES; i++) + { + va_status = vaDestroyBuffer(va_dpy, buffer_ids[i]); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } +} + +void post() +{ + status("vaDestroyContext for context %08x\n", context); + va_status = vaDestroyContext( va_dpy, context ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaDestroyConfig for config %08x\n", config); + va_status = vaDestroyConfig( va_dpy, config ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + free(surfaces); + + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_11.c new file mode 100644 index 000000000..99c878571 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_11.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define TEST_DESCRIPTION "Map and unmap buffers" + +#include "test_common.c" + +VAConfigID config; +VAContextID context; +VASurfaceID *surfaces; +int total_surfaces; + +void pre() +{ + test_init(); + + va_status = vaCreateConfig(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, NULL, 0, &config); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateConfig returns %08x\n", config); + + int width = 352; + int height = 288; + int surface_count = 4; + total_surfaces = surface_count; + + surfaces = malloc(total_surfaces * sizeof(VASurfaceID)); + + // TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, width, height, surfaces, total_surfaces, NULL, 0); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaCreateContext with config %08x\n", config); + int flags = 0; + va_status = vaCreateContext( va_dpy, config, width, height, flags, surfaces, surface_count, &context ); + ASSERT( VA_STATUS_SUCCESS == va_status ); +} + +void test_unique_buffers(VABufferID *buffer_list, int buffer_count) +{ + int i,j; + + for(i = 0; i < buffer_count; i++) + { + for(j = 0; j < i; j++) + { + ASSERT(buffer_list[i] != buffer_list[j]); + } + } +} + +VABufferType buffer_types[] = +{ + VAPictureParameterBufferType, + VAIQMatrixBufferType, + VABitPlaneBufferType, + VASliceGroupMapBufferType, + VASliceParameterBufferType, + VASliceDataBufferType, + VAMacroblockParameterBufferType, + VAResidualDataBufferType, + VADeblockingParameterBufferType, +}; + +unsigned int buffer_sizes[] = +{ + sizeof(VAPictureParameterBufferMPEG4), + sizeof(VAIQMatrixBufferH264), + 32*1024, + 48*1024, + sizeof(VASliceParameterBufferMPEG2), + 128*1024, + sizeof(VAMacroblockParameterBufferMPEG2), + 32*1024, + 15*1024, +}; + + +#define NUM_BUFFER_TYPES (sizeof(buffer_types) / sizeof(VABufferType)) + +#define DEAD_BUFFER_ID ((VABufferID) 0x1234ffff) + +void test() +{ + VABufferID buffer_ids[NUM_BUFFER_TYPES+1]; + uint32_t *input_data[NUM_BUFFER_TYPES]; + unsigned int i, j; + memset(buffer_ids, 0xff, sizeof(buffer_ids)); + for(i=0; i < NUM_BUFFER_TYPES; i++) + { + uint32_t *data; + + input_data[i] = malloc(buffer_sizes[i]+4); + ASSERT(input_data[i]); + + /* Generate input data */ + for(j = buffer_sizes[i] / 4; j--;) + { + input_data[i][j] = random(); + } + + /* Copy to secondary buffer */ + data = malloc(buffer_sizes[i]); + ASSERT(data); + memcpy(data, input_data[i], buffer_sizes[i]); + + /* Create buffer and fill with data */ + va_status = vaCreateBuffer(va_dpy, context, buffer_types[i], buffer_sizes[i], 1, data, &buffer_ids[i]); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateBuffer created buffer %08x of type %d\n", buffer_ids[i], buffer_types[i]); + + /* Wipe secondary buffer */ + memset(data, 0, buffer_sizes[i]); + free(data); + } + + for(i=0; i < NUM_BUFFER_TYPES; i++) + { + void *data = NULL; + /* Fetch VA Buffer */ + va_status = vaMapBuffer(va_dpy, buffer_ids[i], &data); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaMapBuffer mapped buffer %08x\n", buffer_ids[i]); + + /* Compare data */ + ASSERT( memcmp(input_data[i], data, buffer_sizes[i]) == 0 ); + } + + for(i=0; i < NUM_BUFFER_TYPES; i++) + { + va_status = vaUnmapBuffer(va_dpy, buffer_ids[i]); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + va_status = vaDestroyBuffer(va_dpy, buffer_ids[i]); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + free(input_data[i]); + } +} + + + +void post() +{ + status("vaDestroyContext for context %08x\n", context); + va_status = vaDestroyContext( va_dpy, context ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaDestroyConfig for config %08x\n", config); + va_status = vaDestroyConfig( va_dpy, config ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + free(surfaces); + + test_terminate(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_common.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_common.c new file mode 100644 index 000000000..0486d99c2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_common.c @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#ifdef ANDROID +#include +#else +#include +#endif +#include "assert.h" +#include +#include +#include +#include +#include +#include + +#define ASSERT assert + +void status(const char *msg, ...); +#ifdef ANDROID +#include "test_android.c" +#else +#include "test_x11.c" +#endif + +Display *dpy; +VADisplay va_dpy; +VAStatus va_status; +int major_version, minor_version; +int print_status = 0; +int num_profiles; +VAProfile *profiles = NULL; + +void pre(); +void test(); +void post(); + +void status(const char *msg, ...) +{ + if (!print_status) return; + va_list args; + printf("--- "); + va_start(args, msg); + vfprintf(stdout, msg, args); + va_end(args); +} + + +int main(int argc, const char* argv[]) +{ + const char *name = strrchr(argv[0], '/'); + if (name) + name++; + else + name = argv[0]; + printf("*** %s: %s\n", name, TEST_DESCRIPTION); + pre(); + print_status = 1; + test(); + print_status = 0; + post(); + printf("*** %s: Finished\n", name); + return 0; +} + +#define PROFILE(profile) case VAProfile##profile: return("VAProfile" #profile); + +const char *profile2string(VAProfile profile) +{ + switch(profile) + { + PROFILE(None) + PROFILE(MPEG2Simple) + PROFILE(MPEG2Main) + PROFILE(MPEG4Simple) + PROFILE(MPEG4AdvancedSimple) + PROFILE(MPEG4Main) + PROFILE(H263Baseline) + PROFILE(H264Baseline) + PROFILE(H264Main) + PROFILE(H264High) + PROFILE(H264ConstrainedBaseline) + PROFILE(H264MultiviewHigh) + PROFILE(H264StereoHigh) + PROFILE(VC1Simple) + PROFILE(VC1Main) + PROFILE(VC1Advanced) + PROFILE(JPEGBaseline) + PROFILE(VP8Version0_3) + } + ASSERT(0); + return "Unknown"; +} + +#define ENTRYPOINT(profile) case VAEntrypoint##profile: return("VAEntrypoint" #profile); + +const char *entrypoint2string(VAEntrypoint entrypoint) +{ + switch(entrypoint) + { + ENTRYPOINT(VLD) + ENTRYPOINT(IZZ) + ENTRYPOINT(IDCT) + ENTRYPOINT(MoComp) + ENTRYPOINT(Deblocking) + ENTRYPOINT(EncSlice) + ENTRYPOINT(EncPicture) + ENTRYPOINT(VideoProc) + } + ASSERT(0); + return "Unknown"; +} + + +void test_profiles() +{ + int max_profiles; + int i; + max_profiles = vaMaxNumProfiles(va_dpy); + status("vaMaxNumProfiles = %d\n", max_profiles); + ASSERT(max_profiles > 0); + profiles = malloc(max_profiles * sizeof(VAProfile)); + ASSERT(profiles); + + va_status = vaQueryConfigProfiles(va_dpy, profiles, &num_profiles); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaQueryConfigProfiles reports %d profiles\n", num_profiles); + ASSERT(num_profiles <= max_profiles); + ASSERT(num_profiles > 0); + + if (print_status) + { + for(i = 0; i < num_profiles; i++) + { + status(" profile %d [%s]\n", profiles[i], profile2string(profiles[i])); + } + } +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_x11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_x11.c new file mode 100644 index 000000000..df8f3628b --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/basic/test_x11.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +Display *dpy; +VADisplay va_dpy; +VAStatus va_status; +VAProfile *profiles ; +int major_version, minor_version; + +void test_init() +{ + dpy = XOpenDisplay(NULL); + ASSERT( dpy ); + status("XOpenDisplay: dpy = %08x\n", dpy); + + va_dpy = vaGetDisplay(dpy); + ASSERT( va_dpy ); + status("vaGetDisplay: va_dpy = %08x\n", va_dpy); + + va_status = vaInitialize(va_dpy, &major_version, &minor_version); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaInitialize: major = %d minor = %d\n", major_version, minor_version); +} + +void test_terminate() +{ + va_status = vaTerminate(va_dpy); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaTerminate\n"); + + XCloseDisplay(dpy); + status("XCloseDisplay\n"); + + if (profiles) + { + free(profiles); + profiles = NULL; + } +} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.am new file mode 100644 index 000000000..763847d1f --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.am @@ -0,0 +1,63 @@ +# Copyright (c) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +noinst_LTLIBRARIES = libva-display.la + +libva_display_cflags = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + -I$(top_builddir) \ + -DIN_LIBVA \ + $(NULL) + +libva_display_libs = \ + $(top_builddir)/va/libva.la \ + $(NULL) + +source_c = va_display.c +source_h = va_display.h + +if USE_X11 +source_c += va_display_x11.c +libva_display_cflags += $(X11_CFLAGS) +libva_display_libs += $(top_builddir)/va/libva-x11.la $(X11_LIBS) +endif + +if USE_DRM +source_c += va_display_drm.c +libva_display_cflags += $(DRM_CFLAGS) +libva_display_libs += $(top_builddir)/va/libva-drm.la $(DRM_LIBS) +endif + +if USE_WAYLAND +source_c += va_display_wayland.c +libva_display_cflags += $(WAYLAND_CFLAGS) +libva_display_libs += $(top_builddir)/va/libva-wayland.la $(WAYLAND_LIBS) +endif + +libva_display_la_SOURCES= $(source_c) +noinst_HEADERS = $(source_h) +libva_display_la_CFLAGS = $(libva_display_cflags) +libva_display_la_LIBADD = $(libva_display_libs) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.in new file mode 100644 index 000000000..8943314c7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/Makefile.in @@ -0,0 +1,707 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_X11_TRUE@am__append_1 = va_display_x11.c +@USE_X11_TRUE@am__append_2 = $(X11_CFLAGS) +@USE_X11_TRUE@am__append_3 = $(top_builddir)/va/libva-x11.la $(X11_LIBS) +@USE_DRM_TRUE@am__append_4 = va_display_drm.c +@USE_DRM_TRUE@am__append_5 = $(DRM_CFLAGS) +@USE_DRM_TRUE@am__append_6 = $(top_builddir)/va/libva-drm.la $(DRM_LIBS) +@USE_WAYLAND_TRUE@am__append_7 = va_display_wayland.c +@USE_WAYLAND_TRUE@am__append_8 = $(WAYLAND_CFLAGS) +@USE_WAYLAND_TRUE@am__append_9 = $(top_builddir)/va/libva-wayland.la $(WAYLAND_LIBS) +subdir = test/common +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +@USE_X11_TRUE@am__DEPENDENCIES_2 = $(top_builddir)/va/libva-x11.la \ +@USE_X11_TRUE@ $(am__DEPENDENCIES_1) +@USE_DRM_TRUE@am__DEPENDENCIES_3 = $(top_builddir)/va/libva-drm.la \ +@USE_DRM_TRUE@ $(am__DEPENDENCIES_1) +@USE_WAYLAND_TRUE@am__DEPENDENCIES_4 = \ +@USE_WAYLAND_TRUE@ $(top_builddir)/va/libva-wayland.la \ +@USE_WAYLAND_TRUE@ $(am__DEPENDENCIES_1) +am__DEPENDENCIES_5 = $(top_builddir)/va/libva.la $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) +libva_display_la_DEPENDENCIES = $(am__DEPENDENCIES_5) +am__libva_display_la_SOURCES_DIST = va_display.c va_display_x11.c \ + va_display_drm.c va_display_wayland.c +@USE_X11_TRUE@am__objects_1 = libva_display_la-va_display_x11.lo +@USE_DRM_TRUE@am__objects_2 = libva_display_la-va_display_drm.lo +@USE_WAYLAND_TRUE@am__objects_3 = \ +@USE_WAYLAND_TRUE@ libva_display_la-va_display_wayland.lo +am__objects_4 = libva_display_la-va_display.lo $(am__objects_1) \ + $(am__objects_2) $(am__objects_3) +am_libva_display_la_OBJECTS = $(am__objects_4) +libva_display_la_OBJECTS = $(am_libva_display_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libva_display_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libva_display_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_display_la_SOURCES) +DIST_SOURCES = $(am__libva_display_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libva-display.la +libva_display_cflags = -I$(top_srcdir) -I$(top_srcdir)/va \ + -I$(top_builddir) -DIN_LIBVA $(NULL) $(am__append_2) \ + $(am__append_5) $(am__append_8) +libva_display_libs = $(top_builddir)/va/libva.la $(NULL) \ + $(am__append_3) $(am__append_6) $(am__append_9) +source_c = va_display.c $(am__append_1) $(am__append_4) \ + $(am__append_7) +source_h = va_display.h +libva_display_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h) +libva_display_la_CFLAGS = $(libva_display_cflags) +libva_display_la_LIBADD = $(libva_display_libs) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/common/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/common/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva-display.la: $(libva_display_la_OBJECTS) $(libva_display_la_DEPENDENCIES) $(EXTRA_libva_display_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_display_la_LINK) $(libva_display_la_OBJECTS) $(libva_display_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libva_display_la-va_display.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libva_display_la-va_display_drm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libva_display_la-va_display_wayland.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libva_display_la-va_display_x11.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libva_display_la-va_display.lo: va_display.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -MT libva_display_la-va_display.lo -MD -MP -MF $(DEPDIR)/libva_display_la-va_display.Tpo -c -o libva_display_la-va_display.lo `test -f 'va_display.c' || echo '$(srcdir)/'`va_display.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libva_display_la-va_display.Tpo $(DEPDIR)/libva_display_la-va_display.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='va_display.c' object='libva_display_la-va_display.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -c -o libva_display_la-va_display.lo `test -f 'va_display.c' || echo '$(srcdir)/'`va_display.c + +libva_display_la-va_display_x11.lo: va_display_x11.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -MT libva_display_la-va_display_x11.lo -MD -MP -MF $(DEPDIR)/libva_display_la-va_display_x11.Tpo -c -o libva_display_la-va_display_x11.lo `test -f 'va_display_x11.c' || echo '$(srcdir)/'`va_display_x11.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libva_display_la-va_display_x11.Tpo $(DEPDIR)/libva_display_la-va_display_x11.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='va_display_x11.c' object='libva_display_la-va_display_x11.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -c -o libva_display_la-va_display_x11.lo `test -f 'va_display_x11.c' || echo '$(srcdir)/'`va_display_x11.c + +libva_display_la-va_display_drm.lo: va_display_drm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -MT libva_display_la-va_display_drm.lo -MD -MP -MF $(DEPDIR)/libva_display_la-va_display_drm.Tpo -c -o libva_display_la-va_display_drm.lo `test -f 'va_display_drm.c' || echo '$(srcdir)/'`va_display_drm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libva_display_la-va_display_drm.Tpo $(DEPDIR)/libva_display_la-va_display_drm.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='va_display_drm.c' object='libva_display_la-va_display_drm.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -c -o libva_display_la-va_display_drm.lo `test -f 'va_display_drm.c' || echo '$(srcdir)/'`va_display_drm.c + +libva_display_la-va_display_wayland.lo: va_display_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -MT libva_display_la-va_display_wayland.lo -MD -MP -MF $(DEPDIR)/libva_display_la-va_display_wayland.Tpo -c -o libva_display_la-va_display_wayland.lo `test -f 'va_display_wayland.c' || echo '$(srcdir)/'`va_display_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libva_display_la-va_display_wayland.Tpo $(DEPDIR)/libva_display_la-va_display_wayland.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='va_display_wayland.c' object='libva_display_la-va_display_wayland.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libva_display_la_CFLAGS) $(CFLAGS) -c -o libva_display_la-va_display_wayland.lo `test -f 'va_display_wayland.c' || echo '$(srcdir)/'`va_display_wayland.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.c new file mode 100644 index 000000000..dd58dd273 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.c @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include +#include "va_display.h" + +extern const VADisplayHooks va_display_hooks_android; +extern const VADisplayHooks va_display_hooks_wayland; +extern const VADisplayHooks va_display_hooks_x11; +extern const VADisplayHooks va_display_hooks_drm; + +static const VADisplayHooks *g_display_hooks; +static const VADisplayHooks *g_display_hooks_available[] = { +#ifdef ANDROID + &va_display_hooks_android, +#else +#ifdef HAVE_VA_WAYLAND + &va_display_hooks_wayland, +#endif +#ifdef HAVE_VA_X11 + &va_display_hooks_x11, +#endif +#ifdef HAVE_VA_DRM + &va_display_hooks_drm, +#endif +#endif + NULL +}; + +static const char *g_display_name; + +static const char * +get_display_name(int argc, char *argv[]) +{ + const char *display_name = NULL; + int i; + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "--display") != 0) + continue; + argv[i] = NULL; + + if (++i < argc) { + display_name = argv[i]; + argv[i] = NULL; + } + } + return display_name; +} + +static void +print_display_names(void) +{ + const VADisplayHooks **h; + + printf("Available displays:\n"); + for (h = g_display_hooks_available; *h != NULL; h++) + printf(" %s\n", (*h)->name); +} + +static void +sanitize_args(int *argc, char *argv[]) +{ + char **out_args = argv; + int i, n = *argc; + + for (i = 0; i < n; i++) { + if (argv[i]) + *out_args++ = argv[i]; + } + *out_args = NULL; + *argc = out_args - argv; +} + +void +va_init_display_args(int *argc, char *argv[]) +{ + const char *display_name; + + display_name = get_display_name(*argc, argv); + if (display_name && strcmp(display_name, "help") == 0) { + print_display_names(); + exit(0); + } + g_display_name = display_name; + + sanitize_args(argc, argv); +} + +VADisplay +va_open_display(void) +{ + VADisplay va_dpy = NULL; + unsigned int i; + + for (i = 0; !va_dpy && g_display_hooks_available[i]; i++) { + g_display_hooks = g_display_hooks_available[i]; + if (g_display_name && + strcmp(g_display_name, g_display_hooks->name) != 0) + continue; + if (!g_display_hooks->open_display) + continue; + va_dpy = g_display_hooks->open_display(); + } + + if (!va_dpy) { + fprintf(stderr, "error: failed to initialize display"); + if (g_display_name) + fprintf(stderr, " '%s'", g_display_name); + fprintf(stderr, "\n"); + abort(); + } + return va_dpy; +} + +void +va_close_display(VADisplay va_dpy) +{ + if (!va_dpy) + return; + + if (g_display_hooks && g_display_hooks->close_display) + g_display_hooks->close_display(va_dpy); +} + +VAStatus +va_put_surface( + VADisplay va_dpy, + VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + if (!va_dpy) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + if (g_display_hooks && g_display_hooks->put_surface) + return g_display_hooks->put_surface(va_dpy, surface, src_rect, dst_rect); + return VA_STATUS_ERROR_UNIMPLEMENTED; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.h b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.h new file mode 100644 index 000000000..4ed33e092 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DISPLAY_H +#define VA_DISPLAY_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + const char *name; + VADisplay (*open_display) (void); + void (*close_display) (VADisplay va_dpy); + VAStatus (*put_surface) (VADisplay va_dpy, VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect); +} VADisplayHooks; + +void +va_init_display_args(int *argc, char *argv[]); + +VADisplay +va_open_display(void); + +void +va_close_display(VADisplay va_dpy); + +VAStatus +va_put_surface( + VADisplay va_dpy, + VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +); + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DISPLAY_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_drm.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_drm.c new file mode 100644 index 000000000..b6394cdd2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_drm.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#ifdef IN_LIBVA +# include "va/drm/va_drm.h" +#else +# include +#endif +#include "va_display.h" + +static int drm_fd = -1; + +static VADisplay +va_open_display_drm(void) +{ + VADisplay va_dpy; + int i; + + static const char *drm_device_paths[] = { + "/dev/dri/renderD128", + "/dev/dri/card0", + NULL + }; + + for (i = 0; drm_device_paths[i]; i++) { + drm_fd = open(drm_device_paths[i], O_RDWR); + if (drm_fd < 0) + continue; + + va_dpy = vaGetDisplayDRM(drm_fd); + if (va_dpy) + return va_dpy; + + close(drm_fd); + drm_fd = -1; + } + return NULL; +} + +static void +va_close_display_drm(VADisplay va_dpy) +{ + if (drm_fd < 0) + return; + + close(drm_fd); + drm_fd = -1; +} + + +static VAStatus +va_put_surface_drm( + VADisplay va_dpy, + VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + return VA_STATUS_ERROR_OPERATION_FAILED; +} + +const VADisplayHooks va_display_hooks_drm = { + "drm", + va_open_display_drm, + va_close_display_drm, + va_put_surface_drm, +}; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_wayland.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_wayland.c new file mode 100644 index 000000000..abcb2b695 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_wayland.c @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#ifdef IN_LIBVA +# include "va/wayland/va_wayland.h" +#else +# include +#endif +#include "va_display.h" + +struct display { + struct wl_display *display; + struct wl_registry *registry; + struct wl_compositor *compositor; + struct wl_shell *shell; + struct wl_shell_surface *shell_surface; + struct wl_surface *surface; + unsigned int ref_count; + int event_fd; +}; + +static struct display *g_display; + +static void +registry_handle_global( + void *data, + struct wl_registry *registry, + uint32_t id, + const char *interface, + uint32_t version +) +{ + struct display * const d = data; + + if (strcmp(interface, "wl_compositor") == 0) + d->compositor = + wl_registry_bind(registry, id, &wl_compositor_interface, 1); + else if (strcmp(interface, "wl_shell") == 0) + d->shell = wl_registry_bind(registry, id, &wl_shell_interface, 1); +} + +static const struct wl_registry_listener registry_listener = { + registry_handle_global, + NULL, +}; + +static VADisplay +va_open_display_wayland(void) +{ + struct display *d; + + if (g_display) { + d = g_display; + d->ref_count++; + } + else { + d = calloc(1, sizeof(*d)); + if (!d) + return NULL; + d->event_fd = -1; + + d->display = wl_display_connect(NULL); + if (!d->display) { + free(d); + return NULL; + } + wl_display_set_user_data(d->display, d); + d->registry = wl_display_get_registry(d->display); + wl_registry_add_listener(d->registry, ®istry_listener, d); + d->event_fd = wl_display_get_fd(d->display); + wl_display_dispatch(d->display); + + d->ref_count = 1; + g_display = d; + } + return vaGetDisplayWl(d->display); +} + +static void +va_close_display_wayland(VADisplay va_dpy) +{ + struct display * const d = g_display; + + if (!d || --d->ref_count > 0) + return; + + if (d->surface) { + wl_surface_destroy(d->surface); + d->surface = NULL; + } + + if (d->shell_surface) { + wl_shell_surface_destroy(d->shell_surface); + d->shell_surface = NULL; + } + + if (d->shell) { + wl_shell_destroy(d->shell); + d->shell = NULL; + } + + if (d->compositor) { + wl_compositor_destroy(d->compositor); + d->compositor = NULL; + } + + if (d->display) { + wl_display_disconnect(d->display); + d->display = NULL; + } + free(g_display); + g_display = NULL; +} + +static int +ensure_window(VADisplay va_dpy, unsigned int width, unsigned int height) +{ + struct display * const d = g_display; + + if (!d->surface) { + d->surface = wl_compositor_create_surface(d->compositor); + if (!d->surface) + return 0; + } + + if (!d->shell_surface) { + d->shell_surface = wl_shell_get_shell_surface(d->shell, d->surface); + if (!d->shell_surface) + return 0; + wl_shell_surface_set_toplevel(d->shell_surface); + } + return 1; +} + +static VAStatus +va_put_surface_wayland( + VADisplay va_dpy, + VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + struct display * const d = g_display; + VAStatus va_status; + struct wl_buffer *buffer; + + if (!ensure_window(va_dpy, dst_rect->width, dst_rect->height)) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + va_status = vaGetSurfaceBufferWl(va_dpy, surface, VA_FRAME_PICTURE, &buffer); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + wl_surface_attach(d->surface, buffer, 0, 0); + wl_surface_damage( + d->surface, + dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height + ); + + wl_surface_commit(d->surface); + wl_display_flush(d->display); + return VA_STATUS_SUCCESS; +} + +const VADisplayHooks va_display_hooks_wayland = { + "wayland", + va_open_display_wayland, + va_close_display_wayland, + va_put_surface_wayland, +}; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_x11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_x11.c new file mode 100644 index 000000000..336bf86e3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/common/va_display_x11.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include "va_display.h" + +static Display *x11_display; +static Window x11_window; + +static VADisplay +va_open_display_x11(void) +{ + x11_display = XOpenDisplay(NULL); + if (!x11_display) { + fprintf(stderr, "error: can't connect to X server!\n"); + return NULL; + } + return vaGetDisplay(x11_display); +} + +static void +va_close_display_x11(VADisplay va_dpy) +{ + if (!x11_display) + return; + + if (x11_window) { + XUnmapWindow(x11_display, x11_window); + XDestroyWindow(x11_display, x11_window); + x11_window = None; + } + XCloseDisplay(x11_display); + x11_display = NULL; +} + +static int +ensure_window(unsigned int width, unsigned int height) +{ + Window win, rootwin; + unsigned int black_pixel, white_pixel; + int screen; + + if (!x11_display) + return 0; + + if (x11_window) { + XResizeWindow(x11_display, x11_window, width, height); + return 1; + } + + screen = DefaultScreen(x11_display); + rootwin = RootWindow(x11_display, screen); + black_pixel = BlackPixel(x11_display, screen); + white_pixel = WhitePixel(x11_display, screen); + + win = XCreateSimpleWindow( + x11_display, + rootwin, + 0, 0, width, height, + 1, black_pixel, white_pixel + ); + if (!win) + return 0; + x11_window = win; + + XMapWindow(x11_display, x11_window); + XSync(x11_display, False); + return 1; +} + +static inline bool +validate_rect(const VARectangle *rect) +{ + return (rect && + rect->x >= 0 && + rect->y >= 0 && + rect->width > 0 && + rect->height > 0); +} + +static VAStatus +va_put_surface_x11( + VADisplay va_dpy, + VASurfaceID surface, + const VARectangle *src_rect, + const VARectangle *dst_rect +) +{ + unsigned int win_width, win_height; + + if (!va_dpy) + return VA_STATUS_ERROR_INVALID_DISPLAY; + if (surface == VA_INVALID_SURFACE) + return VA_STATUS_ERROR_INVALID_SURFACE; + if (!validate_rect(src_rect) || !validate_rect(dst_rect)) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + win_width = dst_rect->x + dst_rect->width; + win_height = dst_rect->y + dst_rect->height; + if (!ensure_window(win_width, win_height)) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + return vaPutSurface(va_dpy, surface, x11_window, + src_rect->x, src_rect->y, + src_rect->width, src_rect->height, + dst_rect->x, dst_rect->y, + dst_rect->width, dst_rect->height, + NULL, 0, + VA_FRAME_PICTURE); +} + +const VADisplayHooks va_display_hooks_x11 = { + "x11", + va_open_display_x11, + va_close_display_x11, + va_put_surface_x11, +}; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.am new file mode 100644 index 000000000..e84bf43bd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.am @@ -0,0 +1,49 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +bin_PROGRAMS = mpeg2vldemo loadjpeg + +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/test/common \ + $(NULL) + +TEST_LIBS = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + $(NULL) + +mpeg2vldemo_LDADD = $(TEST_LIBS) +mpeg2vldemo_SOURCES = mpeg2vldemo.cpp + +loadjpeg_LDADD = $(TEST_LIBS) +loadjpeg_SOURCES = loadjpeg.c tinyjpeg.c + +valgrind: $(bin_PROGRAMS) + for a in $(bin_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +EXTRA_DIST = \ + tinyjpeg.h \ + tinyjpeg-internal.h \ + $(NULL) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.in new file mode 100644 index 000000000..e170afc8c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/Makefile.in @@ -0,0 +1,743 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = mpeg2vldemo$(EXEEXT) loadjpeg$(EXEEXT) +subdir = test/decode +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_loadjpeg_OBJECTS = loadjpeg.$(OBJEXT) tinyjpeg.$(OBJEXT) +loadjpeg_OBJECTS = $(am_loadjpeg_OBJECTS) +am__DEPENDENCIES_1 = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +loadjpeg_DEPENDENCIES = $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_mpeg2vldemo_OBJECTS = mpeg2vldemo.$(OBJEXT) +mpeg2vldemo_OBJECTS = $(am_mpeg2vldemo_OBJECTS) +mpeg2vldemo_DEPENDENCIES = $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(loadjpeg_SOURCES) $(mpeg2vldemo_SOURCES) +DIST_SOURCES = $(loadjpeg_SOURCES) $(mpeg2vldemo_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/test/common \ + $(NULL) + +TEST_LIBS = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + $(NULL) + +mpeg2vldemo_LDADD = $(TEST_LIBS) +mpeg2vldemo_SOURCES = mpeg2vldemo.cpp +loadjpeg_LDADD = $(TEST_LIBS) +loadjpeg_SOURCES = loadjpeg.c tinyjpeg.c +EXTRA_DIST = \ + tinyjpeg.h \ + tinyjpeg-internal.h \ + $(NULL) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/decode/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/decode/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +loadjpeg$(EXEEXT): $(loadjpeg_OBJECTS) $(loadjpeg_DEPENDENCIES) $(EXTRA_loadjpeg_DEPENDENCIES) + @rm -f loadjpeg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(loadjpeg_OBJECTS) $(loadjpeg_LDADD) $(LIBS) + +mpeg2vldemo$(EXEEXT): $(mpeg2vldemo_OBJECTS) $(mpeg2vldemo_DEPENDENCIES) $(EXTRA_mpeg2vldemo_DEPENDENCIES) + @rm -f mpeg2vldemo$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(mpeg2vldemo_OBJECTS) $(mpeg2vldemo_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loadjpeg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpeg2vldemo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tinyjpeg.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +valgrind: $(bin_PROGRAMS) + for a in $(bin_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/loadjpeg.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/loadjpeg.c new file mode 100644 index 000000000..7a9a23514 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/loadjpeg.c @@ -0,0 +1,137 @@ +/* + * Small jpeg decoder library - testing application + * + * Copyright (c) 2006, Luc Saillard + * Copyright (c) 2012 Intel Corporation. + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "tinyjpeg.h" +#include +#include +#include +#include +#include "va_display.h" + +static void exitmessage(const char *message) __attribute__((noreturn)); +static void exitmessage(const char *message) +{ + printf("%s\n", message); + exit(0); +} + +static int filesize(FILE *fp) +{ + long pos; + fseek(fp, 0, SEEK_END); + pos = ftell(fp); + fseek(fp, 0, SEEK_SET); + return pos; +} + +/** + * Load one jpeg image, and decompress it, and save the result. + */ +int convert_one_image(const char *infilename) +{ + FILE *fp; + unsigned int length_of_file; + unsigned int width, height; + unsigned char *buf; + struct jdec_private *jdec; + + /* Load the Jpeg into memory */ + fp = fopen(infilename, "rb"); + if (fp == NULL) + exitmessage("Cannot open filename\n"); + length_of_file = filesize(fp); + buf = (unsigned char *)malloc(length_of_file + 4); + if (buf == NULL) + exitmessage("Not enough memory for loading file\n"); + fread(buf, length_of_file, 1, fp); + fclose(fp); + + /* Decompress it */ + jdec = tinyjpeg_init(); + if (jdec == NULL) + exitmessage("Not enough memory to alloc the structure need for decompressing\n"); + + if (tinyjpeg_parse_header(jdec, buf, length_of_file)<0) + exitmessage(tinyjpeg_get_errorstring(jdec)); + + /* Get the size of the image */ + tinyjpeg_get_size(jdec, &width, &height); + + printf("Decoding JPEG image %dx%d...\n", width, height); + if (tinyjpeg_decode(jdec) < 0) + exitmessage(tinyjpeg_get_errorstring(jdec)); + + tinyjpeg_free(jdec); + + free(buf); + return 0; +} + +static void usage(void) +{ + fprintf(stderr, "Usage: loadjpeg \n"); + exit(1); +} + +/** + * main + * + */ +int main(int argc, char *argv[]) +{ + char *input_filename; + clock_t start_time, finish_time; + unsigned int duration; + int current_argument; + + va_init_display_args(&argc, argv); + + if (argc < 2) + usage(); + + current_argument = 1; + input_filename = argv[current_argument]; + + start_time = clock(); + convert_one_image(input_filename); + finish_time = clock(); + duration = finish_time - start_time; + printf("Decoding finished in %u ticks\n", duration); + + return 0; +} + + + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/mpeg2vldemo.cpp b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/mpeg2vldemo.cpp new file mode 100644 index 000000000..715ea4934 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/mpeg2vldemo.cpp @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2007-2008 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * it is a real program to show how VAAPI decode work, + * It does VLD decode for a simple MPEG2 clip "mpeg2-I.m2v" + * "mpeg2-I.m2v" and VA parameters are hardcoded into mpeg2vldemo.c, + * See mpeg2-I.jif to know how those VA parameters come from + * + * gcc -o mpeg2vldemo mpeg2vldemo.c -lva -lva-x11 -I/usr/include/va + * ./mpeg2vldemo : only do decode + * ./mpeg2vldemo : decode+display + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "va_display.h" + +#define CHECK_VASTATUS(va_status,func) \ +if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ +} + +/* Data dump of a 16x16 MPEG2 video clip,it has one I frame + */ +static unsigned char mpeg2_clip[]={ + 0x00,0x00,0x01,0xb3,0x01,0x00,0x10,0x13,0xff,0xff,0xe0,0x18,0x00,0x00,0x01,0xb5, + 0x14,0x8a,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0xb8,0x00,0x08,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x0f,0xff,0xf8,0x00,0x00,0x01,0xb5,0x8f,0xff,0xf3,0x41,0x80,0x00, + 0x00,0x01,0x01,0x13,0xe1,0x00,0x15,0x81,0x54,0xe0,0x2a,0x05,0x43,0x00,0x2d,0x60, + 0x18,0x01,0x4e,0x82,0xb9,0x58,0xb1,0x83,0x49,0xa4,0xa0,0x2e,0x05,0x80,0x4b,0x7a, + 0x00,0x01,0x38,0x20,0x80,0xe8,0x05,0xff,0x60,0x18,0xe0,0x1d,0x80,0x98,0x01,0xf8, + 0x06,0x00,0x54,0x02,0xc0,0x18,0x14,0x03,0xb2,0x92,0x80,0xc0,0x18,0x94,0x42,0x2c, + 0xb2,0x11,0x64,0xa0,0x12,0x5e,0x78,0x03,0x3c,0x01,0x80,0x0e,0x80,0x18,0x80,0x6b, + 0xca,0x4e,0x01,0x0f,0xe4,0x32,0xc9,0xbf,0x01,0x42,0x69,0x43,0x50,0x4b,0x01,0xc9, + 0x45,0x80,0x50,0x01,0x38,0x65,0xe8,0x01,0x03,0xf3,0xc0,0x76,0x00,0xe0,0x03,0x20, + 0x28,0x18,0x01,0xa9,0x34,0x04,0xc5,0xe0,0x0b,0x0b,0x04,0x20,0x06,0xc0,0x89,0xff, + 0x60,0x12,0x12,0x8a,0x2c,0x34,0x11,0xff,0xf6,0xe2,0x40,0xc0,0x30,0x1b,0x7a,0x01, + 0xa9,0x0d,0x00,0xac,0x64 +}; + +/* hardcoded here without a bitstream parser helper + * please see picture mpeg2-I.jpg for bitstream details + */ +static VAPictureParameterBufferMPEG2 pic_param={ + horizontal_size:16, + vertical_size:16, + forward_reference_picture:0xffffffff, + backward_reference_picture:0xffffffff, + picture_coding_type:1, + f_code:0xffff, + { + { + intra_dc_precision:0, + picture_structure:3, + top_field_first:0, + frame_pred_frame_dct:1, + concealment_motion_vectors:0, + q_scale_type:0, + intra_vlc_format:0, + alternate_scan:0, + repeat_first_field:0, + progressive_frame:1 , + is_first_field:1 + }, + } +}; + +/* see MPEG2 spec65 for the defines of matrix */ +static VAIQMatrixBufferMPEG2 iq_matrix = { + load_intra_quantiser_matrix:1, + load_non_intra_quantiser_matrix:1, + load_chroma_intra_quantiser_matrix:0, + load_chroma_non_intra_quantiser_matrix:0, + intra_quantiser_matrix:{ + 8, 16, 16, 19, 16, 19, 22, 22, + 22, 22, 22, 22, 26, 24, 26, 27, + 27, 27, 26, 26, 26, 26, 27, 27, + 27, 29, 29, 29, 34, 34, 34, 29, + 29, 29, 27, 27, 29, 29, 32, 32, + 34, 34, 37, 38, 37, 35, 35, 34, + 35, 38, 38, 40, 40, 40, 48, 48, + 46, 46, 56, 56, 58, 69, 69, 83 + }, + non_intra_quantiser_matrix:{16}, + chroma_intra_quantiser_matrix:{0}, + chroma_non_intra_quantiser_matrix:{0} +}; + +#if 1 +static VASliceParameterBufferMPEG2 slice_param={ + slice_data_size:150, + slice_data_offset:0, + slice_data_flag:0, + macroblock_offset:38, /* 4byte + 6bits=38bits */ + slice_horizontal_position:0, + slice_vertical_position:0, + quantiser_scale_code:2, + intra_slice_flag:0 +}; +#endif + +#define CLIP_WIDTH 16 +#define CLIP_HEIGHT 16 + +#define WIN_WIDTH (CLIP_WIDTH<<1) +#define WIN_HEIGHT (CLIP_HEIGHT<<1) + +int main(int argc,char **argv) +{ + VAEntrypoint entrypoints[5]; + int num_entrypoints,vld_entrypoint; + VAConfigAttrib attrib; + VAConfigID config_id; + VASurfaceID surface_id; + VAContextID context_id; + VABufferID pic_param_buf,iqmatrix_buf,slice_param_buf,slice_data_buf; + int major_ver, minor_ver; + VADisplay va_dpy; + VAStatus va_status; + int putsurface=0; + + va_init_display_args(&argc, argv); + + if (argc > 1) + putsurface=1; + + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + assert(va_status == VA_STATUS_SUCCESS); + + va_status = vaQueryConfigEntrypoints(va_dpy, VAProfileMPEG2Main, entrypoints, + &num_entrypoints); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + + for (vld_entrypoint = 0; vld_entrypoint < num_entrypoints; vld_entrypoint++) { + if (entrypoints[vld_entrypoint] == VAEntrypointVLD) + break; + } + if (vld_entrypoint == num_entrypoints) { + /* not find VLD entry point */ + assert(0); + } + + /* Assuming finding VLD, find out the format for the render target */ + attrib.type = VAConfigAttribRTFormat; + vaGetConfigAttributes(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, + &attrib, 1); + if ((attrib.value & VA_RT_FORMAT_YUV420) == 0) { + /* not find desired YUV420 RT format */ + assert(0); + } + + va_status = vaCreateConfig(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, + &attrib, 1,&config_id); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, CLIP_WIDTH, CLIP_HEIGHT, + &surface_id, 1, + NULL, 0 + ); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + /* Create a context for this decode pipe */ + va_status = vaCreateContext(va_dpy, config_id, + CLIP_WIDTH, + ((CLIP_HEIGHT+15)/16)*16, + VA_PROGRESSIVE, + &surface_id, + 1, + &context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VAPictureParameterBufferType, + sizeof(VAPictureParameterBufferMPEG2), + 1, &pic_param, + &pic_param_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VAIQMatrixBufferType, + sizeof(VAIQMatrixBufferMPEG2), + 1, &iq_matrix, + &iqmatrix_buf ); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VASliceParameterBufferType, + sizeof(VASliceParameterBufferMPEG2), + 1, + &slice_param, &slice_param_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VASliceDataBufferType, + 0xc4-0x2f+1, + 1, + mpeg2_clip+0x2f, + &slice_data_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaBeginPicture(va_dpy, context_id, surface_id); + CHECK_VASTATUS(va_status, "vaBeginPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &pic_param_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &iqmatrix_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &slice_param_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &slice_data_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaEndPicture(va_dpy,context_id); + CHECK_VASTATUS(va_status, "vaEndPicture"); + + va_status = vaSyncSurface(va_dpy, surface_id); + CHECK_VASTATUS(va_status, "vaSyncSurface"); + + if (putsurface) { + VARectangle src_rect, dst_rect; + + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = CLIP_WIDTH; + src_rect.height = CLIP_HEIGHT; + + dst_rect.x = 0; + dst_rect.y = 0; + dst_rect.width = WIN_WIDTH; + dst_rect.height = WIN_HEIGHT; + + va_status = va_put_surface(va_dpy, surface_id, &src_rect, &dst_rect); + CHECK_VASTATUS(va_status, "vaPutSurface"); + } + printf("press any key to exit\n"); + getchar(); + + vaDestroySurfaces(va_dpy,&surface_id,1); + vaDestroyConfig(va_dpy,config_id); + vaDestroyContext(va_dpy,context_id); + + vaTerminate(va_dpy); + va_close_display(va_dpy); + return 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg-internal.h b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg-internal.h new file mode 100644 index 000000000..6801c3116 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg-internal.h @@ -0,0 +1,121 @@ +/* + * Small jpeg decoder library (Internal header) + * + * Copyright (c) 2006, Luc Saillard + * Copyright (c) 2012 Intel Corporation. + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#ifndef __TINYJPEG_INTERNAL_H_ +#define __TINYJPEG_INTERNAL_H_ + +#include + +#define SANITY_CHECK 1 + +struct jdec_private; + +#define HUFFMAN_BITS_SIZE 256 + +#define HUFFMAN_TABLES 4 +#define COMPONENTS 4 +#define JPEG_MAX_WIDTH 2048 +#define JPEG_MAX_HEIGHT 2048 +#define JPEG_SCAN_MAX 4 + +enum std_markers { + DQT = 0xDB, /* Define Quantization Table */ + SOF = 0xC0, /* Start of Frame (size information) */ + DHT = 0xC4, /* Huffman Table */ + SOI = 0xD8, /* Start of Image */ + SOS = 0xDA, /* Start of Scan */ + RST = 0xD0, /* Reset Marker d0 -> .. */ + RST7 = 0xD7, /* Reset Marker .. -> d7 */ + EOI = 0xD9, /* End of Image */ + DRI = 0xDD, /* Define Restart Interval */ + APP0 = 0xE0, +}; + + +struct huffman_table +{ + /*bits and values*/ + unsigned char bits[16]; + unsigned char values[256]; +}; + +struct component +{ + unsigned int Hfactor; + unsigned int Vfactor; + unsigned char quant_table_index; + unsigned int cid; +}; + + +typedef void (*decode_MCU_fct) (struct jdec_private *priv); +typedef void (*convert_colorspace_fct) (struct jdec_private *priv); + +struct jpeg_sos +{ + unsigned int nr_components; + struct { + unsigned int component_id; + unsigned int dc_selector; + unsigned int ac_selector; + }components[4]; +}; + +struct jdec_private +{ + /* Public variables */ + unsigned int width[JPEG_SCAN_MAX], height[JPEG_SCAN_MAX]; /* Size of the image */ + + /* Private variables */ + const unsigned char *stream_begin, *stream_end,*stream_scan; + unsigned int stream_length; + + const unsigned char *stream; /* Pointer to the current stream */ + + struct component component_infos[COMPONENTS]; + unsigned int nf_components; + unsigned char Q_tables[COMPONENTS][64]; /* quantization tables, zigzag*/ + unsigned char Q_tables_valid[COMPONENTS]; + struct huffman_table HTDC[HUFFMAN_TABLES]; /* DC huffman tables */ + unsigned char HTDC_valid[HUFFMAN_TABLES]; + struct huffman_table HTAC[HUFFMAN_TABLES]; /* AC huffman tables */ + unsigned char HTAC_valid[HUFFMAN_TABLES]; + struct jpeg_sos cur_sos; /* current sos values*/ + int default_huffman_table_initialized; + int restart_interval; +}; + +#endif + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.c new file mode 100644 index 000000000..f53d08357 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.c @@ -0,0 +1,869 @@ +/* + * Small jpeg decoder library + * + * Copyright (c) 2006, Luc Saillard + * Copyright (c) 2012 Intel Corporation. + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include + +#include "tinyjpeg.h" +#include "tinyjpeg-internal.h" + +// for libva +#include +#include +#include +#include +#include +#include +#include "va_display.h" + + +#define cY 0 +#define cCb 1 +#define cCr 2 + +#define BLACK_Y 0 +#define BLACK_U 127 +#define BLACK_V 127 + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif +#define ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) + +#if DEBUG +#define trace(fmt, args...) do { \ + fprintf(stderr, fmt, ## args); \ + fflush(stderr); \ +} while(0) +#else +#define trace(fmt, args...) do { } while (0) +#endif +#define error(fmt, args...) do { \ + snprintf(error_string, sizeof(error_string), fmt, ## args); \ + return -1; \ +} while(0) +/* The variables for different image scans */ +static int scan_num=0; +static int next_image_found=0; +/* Global variable to return the last error found while deconding */ +static char error_string[256]; +static VAHuffmanTableBufferJPEGBaseline default_huffman_table_param={ + huffman_table: + { + // lumiance component + { + num_dc_codes:{0,1,5,1,1,1,1,1,1,0,0,0}, // 12 bits is ok for baseline profile + dc_values:{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b}, + num_ac_codes:{0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125}, + ac_values:{ + 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, + 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, + 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, + 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, + 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, + 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa + },/*,0xonly,0xthe,0xfirst,0x162,0xbytes,0xare,0xavailable,0x*/ + }, + // chrom component + { + num_dc_codes:{0,3,1,1,1,1,1,1,1,1,1,0}, // 12 bits is ok for baseline profile + dc_values:{0,1,2,3,4,5,6,7,8,9,0xa,0xb}, + num_ac_codes:{0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119}, + ac_values:{ + 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, + 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, + 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, + 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, + 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, + 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, + 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, + 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa + },/*,0xonly,0xthe,0xfirst,0x162,0xbytes,0xare,0xavailable,0x*/ + }, + } +}; + +#define be16_to_cpu(x) (((x)[0]<<8)|(x)[1]) + + +static int build_default_huffman_tables(struct jdec_private *priv) +{ + int i = 0; + if (priv->default_huffman_table_initialized) + return 0; + + for (i = 0; i < 4; i++) { + priv->HTDC_valid[i] = 1; + memcpy(priv->HTDC[i].bits, default_huffman_table_param.huffman_table[i].num_dc_codes, 16); + memcpy(priv->HTDC[i].values, default_huffman_table_param.huffman_table[i].dc_values, 16); + priv->HTAC_valid[i] = 1; + memcpy(priv->HTAC[i].bits, default_huffman_table_param.huffman_table[i].num_ac_codes, 16); + memcpy(priv->HTAC[i].values, default_huffman_table_param.huffman_table[i].ac_values, 256); + } + priv->default_huffman_table_initialized = 1; + return 0; +} + + +static void print_SOF(const unsigned char *stream) +{ + int width, height, nr_components, precision; +#if DEBUG + const char *nr_components_to_string[] = { + "????", + "Grayscale", + "????", + "YCbCr", + "CYMK" + }; +#endif + + precision = stream[2]; + height = be16_to_cpu(stream+3); + width = be16_to_cpu(stream+5); + nr_components = stream[7]; + + trace("> SOF marker\n"); + trace("Size:%dx%d nr_components:%d (%s) precision:%d\n", + width, height, + nr_components, nr_components_to_string[nr_components], + precision); +} + +static int parse_DQT(struct jdec_private *priv, const unsigned char *stream) +{ + int qi; + const unsigned char *dqt_block_end; + + trace("> DQT marker\n"); + dqt_block_end = stream + be16_to_cpu(stream); + stream += 2; /* Skip length */ + + while (stream < dqt_block_end) + { + qi = *stream++; +#if SANITY_CHECK + if (qi>>4) + error("16 bits quantization table is not supported\n"); + if (qi>4) + error("No more 4 quantization table is supported (got %d)\n", qi); +#endif + memcpy(priv->Q_tables[qi&0x0F], stream, 64); + priv->Q_tables_valid[qi & 0x0f] = 1; + stream += 64; + } + trace("< DQT marker\n"); + return 0; +} + +static int parse_SOF(struct jdec_private *priv, const unsigned char *stream) +{ + int i, width, height, nr_components, cid, sampling_factor; + unsigned char Q_table; + struct component *c; + + trace("> SOF marker\n"); + print_SOF(stream); + + height = be16_to_cpu(stream+3); + width = be16_to_cpu(stream+5); + nr_components = stream[7]; + priv->nf_components = nr_components; +#if SANITY_CHECK + if (stream[2] != 8) + error("Precision other than 8 is not supported\n"); + if (width>JPEG_MAX_WIDTH || height>JPEG_MAX_HEIGHT) + printf("WARNING:Width and Height (%dx%d) seems suspicious\n", width, height); + if (nr_components != 3) + printf("ERROR:We only support YUV images\n"); + if (height%16) + printf("WARNING:Height need to be a multiple of 16 (current height is %d)\n", height); + if (width%16) + printf("WARNING:Width need to be a multiple of 16 (current Width is %d)\n", width); +#endif + stream += 8; + for (i=0; icomponent_infos[i]; + c->cid = cid; + if (Q_table >= COMPONENTS) + error("Bad Quantization table index (got %d, max allowed %d)\n", Q_table, COMPONENTS-1); + c->Vfactor = sampling_factor&0xf; + c->Hfactor = sampling_factor>>4; + c->quant_table_index = Q_table; + trace("Component:%d factor:%dx%d Quantization table:%d\n", + cid, c->Hfactor, c->Vfactor, Q_table ); + + } + priv->width[scan_num] = width; + priv->height[scan_num] = height; + + trace("< SOF marker\n"); + + return 0; +} + +static int parse_SOS(struct jdec_private *priv, const unsigned char *stream) +{ + unsigned int i, cid, table; + unsigned int nr_components = stream[2]; + + trace("> SOS marker\n"); + + priv->cur_sos.nr_components= nr_components; + + stream += 3; + for (i=0;icur_sos.components[i].component_id = cid; + priv->cur_sos.components[i].dc_selector = ((table>>4)&0x0F); + priv->cur_sos.components[i].ac_selector = (table&0x0F); +#if SANITY_CHECK + if ((table&0xf)>=4) + error("We do not support more than 2 AC Huffman table\n"); + if ((table>>4)>=4) + error("We do not support more than 2 DC Huffman table\n"); + if (cid != priv->component_infos[i].cid) + error("SOS cid order (%d:%d) isn't compatible with the SOF marker (%d:%d)\n", + i, cid, i, priv->component_infos[i].cid); + trace("ComponentId:%d tableAC:%d tableDC:%d\n", cid, table&0xf, table>>4); +#endif + } + priv->stream = stream+3; + trace("< SOS marker\n"); + return 0; +} + +int tinyjpeg_parse_SOS(struct jdec_private *priv, const unsigned char *stream) +{ + return parse_SOS(priv, stream); +} + + +static int parse_DHT(struct jdec_private *priv, const unsigned char *stream) +{ + unsigned int count, i; + int length, index; + unsigned char Tc, Th; + + length = be16_to_cpu(stream) - 2; + stream += 2; /* Skip length */ + + trace("> DHT marker (length=%d)\n", length); + + while (length>0) { + index = *stream++; + + Tc = index & 0xf0; // it is not important to <<4 + Th = index & 0x0f; + if (Tc) { + memcpy(priv->HTAC[index & 0xf].bits, stream, 16); + } + else { + memcpy(priv->HTDC[index & 0xf].bits, stream, 16); + } + + count = 0; + for (i=0; i<16; i++) { + count += *stream++; + } + +#if SANITY_CHECK + if (count >= HUFFMAN_BITS_SIZE) + error("No more than %d bytes is allowed to describe a huffman table", HUFFMAN_BITS_SIZE); + if ( (index &0xf) >= HUFFMAN_TABLES) + error("No more than %d Huffman tables is supported (got %d)\n", HUFFMAN_TABLES, index&0xf); + trace("Huffman table %s[%d] length=%d\n", (index&0xf0)?"AC":"DC", index&0xf, count); +#endif + + if (Tc) { + memcpy(priv->HTAC[index & 0xf].values, stream, count); + priv->HTAC_valid[index & 0xf] = 1; + } + else { + memcpy(priv->HTDC[index & 0xf].values, stream, count); + priv->HTDC_valid[index & 0xf] = 1; + } + + length -= 1; + length -= 16; + length -= count; + stream += count; + } + trace("< DHT marker\n"); + return 0; +} +static int parse_DRI(struct jdec_private *priv, const unsigned char *stream) +{ + unsigned int length; + + trace("> DRI marker\n"); + + length = be16_to_cpu(stream); + +#if SANITY_CHECK + if (length != 4) + error("Length of DRI marker need to be 4\n"); +#endif + + priv->restart_interval = be16_to_cpu(stream+2); + +#if DEBUG + trace("Restart interval = %d\n", priv->restart_interval); +#endif + + trace("< DRI marker\n"); + + return 0; +} + +static int findEOI(struct jdec_private *priv,const unsigned char *stream) +{ + while (stream<=priv->stream_end&& !(*stream == 0xff && *(stream+1) == 0xd9 )) //searching for the end of image marker + { + stream++; + continue; + } + priv->stream_scan=stream; + return 0; +} + +static int findSOI(struct jdec_private *priv,const unsigned char *stream) +{ + while (!(*stream == 0xff && *(stream+1) == 0xd8 ) ) //searching for the start of image marker + { + if(stream<=priv->stream_end) + { + stream++; + continue; + } + else + return 0; // No more images in the file. + } + priv->stream=stream+2; + return 1; +} + +static int parse_JFIF(struct jdec_private *priv, const unsigned char *stream) +{ + int chuck_len; + int marker; + int sos_marker_found = 0; + int dht_marker_found = 0; + int dqt_marker_found = 0; + const unsigned char *next_chunck; + + next_image_found = findSOI(priv,stream); + stream=priv->stream; + + while (!sos_marker_found && stream<=priv->stream_end) + { + while((*stream == 0xff)) + stream++; + + marker = *stream++; + chuck_len = be16_to_cpu(stream); + next_chunck = stream + chuck_len; + switch (marker) + { + case SOF: + if (parse_SOF(priv, stream) < 0) + return -1; + break; + case DQT: + if (parse_DQT(priv, stream) < 0) + return -1; + dqt_marker_found = 1; + break; + case SOS: + if (parse_SOS(priv, stream) < 0) + return -1; + sos_marker_found = 1; + break; + case DHT: + if (parse_DHT(priv, stream) < 0) + return -1; + dht_marker_found = 1; + break; + case DRI: + if (parse_DRI(priv, stream) < 0) + return -1; + break; + default: + trace("> Unknown marker %2.2x\n", marker); + break; + } + + stream = next_chunck; + } + + if(next_image_found){ + if (!dht_marker_found) { + trace("No Huffman table loaded, using the default one\n"); + build_default_huffman_tables(priv); + } + if (!dqt_marker_found) { + error("ERROR:No Quantization table loaded, using the default one\n"); + } + } +#ifdef SANITY_CHECK + if ( (priv->component_infos[cY].Hfactor < priv->component_infos[cCb].Hfactor) + || (priv->component_infos[cY].Hfactor < priv->component_infos[cCr].Hfactor)) + error("Horizontal sampling factor for Y should be greater than horitontal sampling factor for Cb or Cr\n"); + if ( (priv->component_infos[cY].Vfactor < priv->component_infos[cCb].Vfactor) + || (priv->component_infos[cY].Vfactor < priv->component_infos[cCr].Vfactor)) + error("Vertical sampling factor for Y should be greater than vertical sampling factor for Cb or Cr\n"); + if ( (priv->component_infos[cCb].Hfactor!=1) + || (priv->component_infos[cCr].Hfactor!=1) + || (priv->component_infos[cCb].Vfactor!=1) + || (priv->component_infos[cCr].Vfactor!=1)) + printf("ERROR:Sampling other than 1x1 for Cr and Cb is not supported"); +#endif + findEOI(priv,stream); + return next_image_found; +} + +/******************************************************************************* + * + * Functions exported of the library. + * + * Note: Some applications can access directly to internal pointer of the + * structure. It's is not recommended, but if you have many images to + * uncompress with the same parameters, some functions can be called to speedup + * the decoding. + * + ******************************************************************************/ + +/** + * Allocate a new tinyjpeg decoder object. + * + * Before calling any other functions, an object need to be called. + */ +struct jdec_private *tinyjpeg_init(void) +{ + struct jdec_private *priv; + + priv = (struct jdec_private *)calloc(1, sizeof(struct jdec_private)); + if (priv == NULL) + return NULL; + return priv; +} + +/** + * Free a tinyjpeg object. + * + * No others function can be called after this one. + */ +void tinyjpeg_free(struct jdec_private *priv) +{ + free(priv); +} + +/** + * Initialize the tinyjpeg object and prepare the decoding of the stream. + * + * Check if the jpeg can be decoded with this jpeg decoder. + * Fill some table used for preprocessing. + */ +int tinyjpeg_parse_header(struct jdec_private *priv, const unsigned char *buf, unsigned int size) +{ + int ret; + + /* Identify the file */ + if ((buf[0] != 0xFF) || (buf[1] != SOI)) + error("Not a JPG file ?\n"); + + priv->stream_begin = buf; + priv->stream_length = size; + priv->stream_end = priv->stream_begin + priv->stream_length; + + priv->stream = priv->stream_begin; + ret = parse_JFIF(priv, priv->stream); + return ret; +} + + +int tinyjpeg_decode(struct jdec_private *priv) +{ +#define CHECK_VASTATUS(va_status,func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ + } + + VAEntrypoint entrypoints[5]; + int num_entrypoints,vld_entrypoint; + VAConfigAttrib attrib; + VAConfigID config_id; + VASurfaceID surface_id; + VAContextID context_id; + VABufferID pic_param_buf,iqmatrix_buf,huffmantable_buf,slice_param_buf,slice_data_buf; + int major_ver, minor_ver; + VADisplay va_dpy; + VAStatus va_status; + int max_h_factor, max_v_factor; + int putsurface=1; + unsigned int i, j; + + int surface_type; + char *type; + int ChromaTypeIndex; + + VASurfaceAttrib forcc; + forcc.type =VASurfaceAttribPixelFormat; + forcc.flags=VA_SURFACE_ATTRIB_SETTABLE; + forcc.value.type=VAGenericValueTypeInteger; + + + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + assert(va_status == VA_STATUS_SUCCESS); + + va_status = vaQueryConfigEntrypoints(va_dpy, VAProfileJPEGBaseline, entrypoints, + &num_entrypoints); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + + for (vld_entrypoint = 0; vld_entrypoint < num_entrypoints; vld_entrypoint++) { + if (entrypoints[vld_entrypoint] == VAEntrypointVLD) + break; + } + if (vld_entrypoint == num_entrypoints) { + /* not find VLD entry point */ + assert(0); + } + + /* Assuming finding VLD, find out the format for the render target */ + attrib.type = VAConfigAttribRTFormat; + vaGetConfigAttributes(va_dpy, VAProfileJPEGBaseline, VAEntrypointVLD, + &attrib, 1); + if ((attrib.value & VA_RT_FORMAT_YUV420) == 0) { + /* not find desired YUV420 RT format */ + assert(0); + } + + va_status = vaCreateConfig(va_dpy, VAProfileJPEGBaseline, VAEntrypointVLD, + &attrib, 1,&config_id); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + + while (next_image_found){ + VAPictureParameterBufferJPEGBaseline pic_param; + memset(&pic_param, 0, sizeof(pic_param)); + pic_param.picture_width = priv->width[scan_num]; + pic_param.picture_height = priv->height[scan_num]; + pic_param.num_components = priv->nf_components; + + + for (i=0; icomponent_infos[i].cid; + pic_param.components[i].h_sampling_factor = priv->component_infos[i].Hfactor; + pic_param.components[i].v_sampling_factor = priv->component_infos[i].Vfactor; + pic_param.components[i].quantiser_table_selector = priv->component_infos[i].quant_table_index; + } + int h1, h2, h3, v1, v2, v3; + h1 = pic_param.components[0].h_sampling_factor; + h2 = pic_param.components[1].h_sampling_factor; + h3 = pic_param.components[2].h_sampling_factor; + v1 = pic_param.components[0].v_sampling_factor; + v2 = pic_param.components[1].v_sampling_factor; + v3 = pic_param.components[2].v_sampling_factor; + + if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + //surface_type = VA_RT_FORMAT_IMC3; + surface_type = VA_RT_FORMAT_YUV420; + forcc.value.value.i = VA_FOURCC_IMC3; + ChromaTypeIndex = 1; + type = "VA_FOURCC_IMC3"; + } + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + //surface_type = VA_RT_FORMAT_YUV422H; + surface_type = VA_RT_FORMAT_YUV422; + forcc.value.value.i = VA_FOURCC_422H; + ChromaTypeIndex = 2; + type = "VA_FOURCC_422H"; + } + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + surface_type = VA_RT_FORMAT_YUV444; + forcc.value.value.i = VA_FOURCC_444P; + //forcc.value.value.i = VA_FOURCC_RGBP; + ChromaTypeIndex = 3; + type = "VA_FOURCC_444P"; + } + else if (h1 == 4 && h2 == 1 && h3 == 1 && + v1 == 1 && v2 == 1 && v3 == 1) { + surface_type = VA_RT_FORMAT_YUV411; + forcc.value.value.i = VA_FOURCC_411P; + ChromaTypeIndex = 4; + type = "VA_FOURCC_411P"; + } + else if (h1 == 1 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 1 && v3 == 1) { + //surface_type = VA_RT_FORMAT_YUV422V; + surface_type = VA_RT_FORMAT_YUV422; + forcc.value.value.i = VA_FOURCC_422V; + ChromaTypeIndex = 5; + type = "VA_FOURCC_422V"; + } + else if (h1 == 2 && h2 == 1 && h3 == 1 && + v1 == 2 && v2 == 2 && v3 == 2) { + //surface_type = VA_RT_FORMAT_YUV422H; + surface_type = VA_RT_FORMAT_YUV422; + forcc.value.value.i = VA_FOURCC_422H; + ChromaTypeIndex = 6; + type = "VA_FOURCC_422H"; + } + else if (h2 == 2 && h2 == 2 && h3 == 2 && + v1 == 2 && v2 == 1 && v3 == 1) { + //surface_type = VA_RT_FORMAT_YUV422V; + surface_type = VA_RT_FORMAT_YUV422; + forcc.value.value.i = VA_FOURCC_422V; + ChromaTypeIndex = 7; + type = "VA_FOURCC_422V"; + } + else + { + surface_type = VA_RT_FORMAT_YUV400; + forcc.value.value.i = VA_FOURCC('Y','8','0','0'); + ChromaTypeIndex = 0; + type = "Format_400P"; + } + + va_status = vaCreateSurfaces(va_dpy,surface_type, + priv->width[scan_num],priv->height[scan_num], //alignment? + &surface_id, 1, &forcc, 1); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + /* Create a context for this decode pipe */ + va_status = vaCreateContext(va_dpy, config_id, + priv->width[scan_num], priv->height[scan_num], // alignment? + VA_PROGRESSIVE, + &surface_id, + 1, + &context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VAPictureParameterBufferType, // VAPictureParameterBufferJPEGBaseline? + sizeof(VAPictureParameterBufferJPEGBaseline), + 1, &pic_param, + &pic_param_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + VAIQMatrixBufferJPEGBaseline iq_matrix; + const unsigned int num_quant_tables = + MIN(COMPONENTS, ARRAY_ELEMS(iq_matrix.load_quantiser_table)); + // todo, only mask it if non-default quant matrix is used. do we need build default quant matrix? + memset(&iq_matrix, 0, sizeof(VAIQMatrixBufferJPEGBaseline)); + for (i = 0; i < num_quant_tables; i++) { + if (!priv->Q_tables_valid[i]) + continue; + iq_matrix.load_quantiser_table[i] = 1; + for (j = 0; j < 64; j++) + iq_matrix.quantiser_table[i][j] = priv->Q_tables[i][j]; + } + va_status = vaCreateBuffer(va_dpy, context_id, + VAIQMatrixBufferType, // VAIQMatrixBufferJPEGBaseline? + sizeof(VAIQMatrixBufferJPEGBaseline), + 1, &iq_matrix, + &iqmatrix_buf ); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + VAHuffmanTableBufferJPEGBaseline huffman_table; + const unsigned int num_huffman_tables = + MIN(COMPONENTS, ARRAY_ELEMS(huffman_table.load_huffman_table)); + memset(&huffman_table, 0, sizeof(VAHuffmanTableBufferJPEGBaseline)); + assert(sizeof(huffman_table.huffman_table[0].num_dc_codes) == + sizeof(priv->HTDC[0].bits)); + assert(sizeof(huffman_table.huffman_table[0].dc_values[0]) == + sizeof(priv->HTDC[0].values[0])); + for (i = 0; i < num_huffman_tables; i++) { + if (!priv->HTDC_valid[i] || !priv->HTAC_valid[i]) + continue; + huffman_table.load_huffman_table[i] = 1; + memcpy(huffman_table.huffman_table[i].num_dc_codes, priv->HTDC[i].bits, + sizeof(huffman_table.huffman_table[i].num_dc_codes)); + memcpy(huffman_table.huffman_table[i].dc_values, priv->HTDC[i].values, + sizeof(huffman_table.huffman_table[i].dc_values)); + memcpy(huffman_table.huffman_table[i].num_ac_codes, priv->HTAC[i].bits, + sizeof(huffman_table.huffman_table[i].num_ac_codes)); + memcpy(huffman_table.huffman_table[i].ac_values, priv->HTAC[i].values, + sizeof(huffman_table.huffman_table[i].ac_values)); + memset(huffman_table.huffman_table[i].pad, 0, + sizeof(huffman_table.huffman_table[i].pad)); + } + va_status = vaCreateBuffer(va_dpy, context_id, + VAHuffmanTableBufferType, // VAHuffmanTableBufferJPEGBaseline? + sizeof(VAHuffmanTableBufferJPEGBaseline), + 1, &huffman_table, + &huffmantable_buf ); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + // one slice for whole image? + max_h_factor = priv->component_infos[0].Hfactor; + max_v_factor = priv->component_infos[0].Vfactor; + static VASliceParameterBufferJPEGBaseline slice_param; + slice_param.slice_data_size = (priv->stream_scan - priv->stream); + slice_param.slice_data_offset = 0; + slice_param.slice_data_flag = VA_SLICE_DATA_FLAG_ALL; + slice_param.slice_horizontal_position = 0; + slice_param.slice_vertical_position = 0; + slice_param.num_components = priv->cur_sos.nr_components; + for (i = 0; i < slice_param.num_components; i++) { + slice_param.components[i].component_selector = priv->cur_sos.components[i].component_id; /* FIXME: set to values specified in SOS */ + slice_param.components[i].dc_table_selector = priv->cur_sos.components[i].dc_selector; /* FIXME: set to values specified in SOS */ + slice_param.components[i].ac_table_selector = priv->cur_sos.components[i].ac_selector; /* FIXME: set to values specified in SOS */ + } + slice_param.restart_interval = priv->restart_interval; + slice_param.num_mcus = ((priv->width[scan_num]+max_h_factor*8-1)/(max_h_factor*8))* + ((priv->height[scan_num]+max_v_factor*8-1)/(max_v_factor*8)); // ?? 720/16? + + va_status = vaCreateBuffer(va_dpy, context_id, + VASliceParameterBufferType, // VASliceParameterBufferJPEGBaseline? + sizeof(VASliceParameterBufferJPEGBaseline), + 1, + &slice_param, &slice_param_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VASliceDataBufferType, + priv->stream_scan - priv->stream, + 1, + (void*)priv->stream, // jpeg_clip, + &slice_data_buf); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + va_status = vaBeginPicture(va_dpy, context_id, surface_id); + CHECK_VASTATUS(va_status, "vaBeginPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &pic_param_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &iqmatrix_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &huffmantable_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &slice_param_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &slice_data_buf, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaEndPicture(va_dpy,context_id); + CHECK_VASTATUS(va_status, "vaEndPicture"); + + va_status = vaSyncSurface(va_dpy, surface_id); + CHECK_VASTATUS(va_status, "vaSyncSurface"); + + if (putsurface) { + VARectangle src_rect, dst_rect; + + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = priv->width[scan_num]; + src_rect.height = priv->height[scan_num]; + dst_rect = src_rect; + + va_status = va_put_surface(va_dpy, surface_id, &src_rect, &dst_rect); + CHECK_VASTATUS(va_status, "vaPutSurface"); + } + scan_num++; + + vaDestroySurfaces(va_dpy,&surface_id,1); + vaDestroyConfig(va_dpy,config_id); + vaDestroyContext(va_dpy,context_id); + + parse_JFIF(priv,priv->stream); + if(priv->width[scan_num] == 0 && priv->height[scan_num] == 0) + break; + } + // va_close_display(va_dpy); + vaTerminate(va_dpy); + printf("press any key to exit23\n"); + getchar(); + return 0; +} +const char *tinyjpeg_get_errorstring(struct jdec_private *priv) +{ + /* FIXME: the error string must be store in the context */ + priv = priv; + return error_string; +} +void tinyjpeg_get_size(struct jdec_private *priv, unsigned int *width, unsigned int *height) +{ + *width = priv->width[scan_num]; + *height = priv->height[scan_num]; +} + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.h b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.h new file mode 100644 index 000000000..5a76e4158 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/decode/tinyjpeg.h @@ -0,0 +1,71 @@ +/* + * Small jpeg decoder library (header file) + * + * Copyright (c) 2006, Luc Saillard + * Copyright (c) 2012 Intel Corporation. + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#ifndef __JPEGDEC_H__ +#define __JPEGDEC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct jdec_private; + +/* Flags that can be set by any applications */ +#define TINYJPEG_FLAGS_MJPEG_TABLE (1<<1) + +/* Format accepted in outout */ +enum tinyjpeg_fmt { + TINYJPEG_FMT_GREY = 1, + TINYJPEG_FMT_BGR24, + TINYJPEG_FMT_RGB24, + TINYJPEG_FMT_YUV420P, +}; + +struct jdec_private *tinyjpeg_init(void); +void tinyjpeg_free(struct jdec_private *priv); + +int tinyjpeg_parse_header(struct jdec_private *priv, const unsigned char *buf, unsigned int size); +int tinyjpeg_decode(struct jdec_private *priv); +const char *tinyjpeg_get_errorstring(struct jdec_private *priv); +void tinyjpeg_get_size(struct jdec_private *priv, unsigned int *width, unsigned int *height); + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.am new file mode 100644 index 000000000..d2ac265a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.am @@ -0,0 +1,66 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +bin_PROGRAMS = avcenc mpeg2vaenc h264encode jpegenc + +AM_CPPFLAGS = \ + -Wall \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(NULL) + +h264encode_SOURCES = h264encode.c +h264encode_CFLAGS = -I$(top_srcdir)/test/common -g +h264encode_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread -lm + +avcenc_SOURCES = avcenc.c +avcenc_CFLAGS = -I$(top_srcdir)/test/common -g +avcenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +mpeg2vaenc_SOURCES = mpeg2vaenc.c +mpeg2vaenc_CFLAGS = -I$(top_srcdir)/test/common +mpeg2vaenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +jpegenc_SOURCES = jpegenc.c +jpegenc_CFLAGS = -I$(top_srcdir)/test/common -g +jpegenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +valgrind: $(bin_PROGRAMS) + for a in $(bin_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +EXTRA_DIST = \ + jpegenc_utils.h \ + $(NULL) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.in new file mode 100644 index 000000000..90337e315 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/Makefile.in @@ -0,0 +1,811 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = avcenc$(EXEEXT) mpeg2vaenc$(EXEEXT) h264encode$(EXEEXT) \ + jpegenc$(EXEEXT) +subdir = test/encode +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_avcenc_OBJECTS = avcenc-avcenc.$(OBJEXT) +avcenc_OBJECTS = $(am_avcenc_OBJECTS) +avcenc_DEPENDENCIES = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +avcenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(avcenc_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_h264encode_OBJECTS = h264encode-h264encode.$(OBJEXT) +h264encode_OBJECTS = $(am_h264encode_OBJECTS) +h264encode_DEPENDENCIES = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +h264encode_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(h264encode_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_jpegenc_OBJECTS = jpegenc-jpegenc.$(OBJEXT) +jpegenc_OBJECTS = $(am_jpegenc_OBJECTS) +jpegenc_DEPENDENCIES = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +jpegenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(jpegenc_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_mpeg2vaenc_OBJECTS = mpeg2vaenc-mpeg2vaenc.$(OBJEXT) +mpeg2vaenc_OBJECTS = $(am_mpeg2vaenc_OBJECTS) +mpeg2vaenc_DEPENDENCIES = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +mpeg2vaenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mpeg2vaenc_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(avcenc_SOURCES) $(h264encode_SOURCES) $(jpegenc_SOURCES) \ + $(mpeg2vaenc_SOURCES) +DIST_SOURCES = $(avcenc_SOURCES) $(h264encode_SOURCES) \ + $(jpegenc_SOURCES) $(mpeg2vaenc_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -Wall \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(NULL) + +h264encode_SOURCES = h264encode.c +h264encode_CFLAGS = -I$(top_srcdir)/test/common -g +h264encode_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread -lm + +avcenc_SOURCES = avcenc.c +avcenc_CFLAGS = -I$(top_srcdir)/test/common -g +avcenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +mpeg2vaenc_SOURCES = mpeg2vaenc.c +mpeg2vaenc_CFLAGS = -I$(top_srcdir)/test/common +mpeg2vaenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +jpegenc_SOURCES = jpegenc.c +jpegenc_CFLAGS = -I$(top_srcdir)/test/common -g +jpegenc_LDADD = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + -lpthread + +EXTRA_DIST = \ + jpegenc_utils.h \ + $(NULL) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/encode/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/encode/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +avcenc$(EXEEXT): $(avcenc_OBJECTS) $(avcenc_DEPENDENCIES) $(EXTRA_avcenc_DEPENDENCIES) + @rm -f avcenc$(EXEEXT) + $(AM_V_CCLD)$(avcenc_LINK) $(avcenc_OBJECTS) $(avcenc_LDADD) $(LIBS) + +h264encode$(EXEEXT): $(h264encode_OBJECTS) $(h264encode_DEPENDENCIES) $(EXTRA_h264encode_DEPENDENCIES) + @rm -f h264encode$(EXEEXT) + $(AM_V_CCLD)$(h264encode_LINK) $(h264encode_OBJECTS) $(h264encode_LDADD) $(LIBS) + +jpegenc$(EXEEXT): $(jpegenc_OBJECTS) $(jpegenc_DEPENDENCIES) $(EXTRA_jpegenc_DEPENDENCIES) + @rm -f jpegenc$(EXEEXT) + $(AM_V_CCLD)$(jpegenc_LINK) $(jpegenc_OBJECTS) $(jpegenc_LDADD) $(LIBS) + +mpeg2vaenc$(EXEEXT): $(mpeg2vaenc_OBJECTS) $(mpeg2vaenc_DEPENDENCIES) $(EXTRA_mpeg2vaenc_DEPENDENCIES) + @rm -f mpeg2vaenc$(EXEEXT) + $(AM_V_CCLD)$(mpeg2vaenc_LINK) $(mpeg2vaenc_OBJECTS) $(mpeg2vaenc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avcenc-avcenc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h264encode-h264encode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpegenc-jpegenc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +avcenc-avcenc.o: avcenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avcenc_CFLAGS) $(CFLAGS) -MT avcenc-avcenc.o -MD -MP -MF $(DEPDIR)/avcenc-avcenc.Tpo -c -o avcenc-avcenc.o `test -f 'avcenc.c' || echo '$(srcdir)/'`avcenc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avcenc-avcenc.Tpo $(DEPDIR)/avcenc-avcenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avcenc.c' object='avcenc-avcenc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avcenc_CFLAGS) $(CFLAGS) -c -o avcenc-avcenc.o `test -f 'avcenc.c' || echo '$(srcdir)/'`avcenc.c + +avcenc-avcenc.obj: avcenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avcenc_CFLAGS) $(CFLAGS) -MT avcenc-avcenc.obj -MD -MP -MF $(DEPDIR)/avcenc-avcenc.Tpo -c -o avcenc-avcenc.obj `if test -f 'avcenc.c'; then $(CYGPATH_W) 'avcenc.c'; else $(CYGPATH_W) '$(srcdir)/avcenc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avcenc-avcenc.Tpo $(DEPDIR)/avcenc-avcenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avcenc.c' object='avcenc-avcenc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avcenc_CFLAGS) $(CFLAGS) -c -o avcenc-avcenc.obj `if test -f 'avcenc.c'; then $(CYGPATH_W) 'avcenc.c'; else $(CYGPATH_W) '$(srcdir)/avcenc.c'; fi` + +h264encode-h264encode.o: h264encode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(h264encode_CFLAGS) $(CFLAGS) -MT h264encode-h264encode.o -MD -MP -MF $(DEPDIR)/h264encode-h264encode.Tpo -c -o h264encode-h264encode.o `test -f 'h264encode.c' || echo '$(srcdir)/'`h264encode.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h264encode-h264encode.Tpo $(DEPDIR)/h264encode-h264encode.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='h264encode.c' object='h264encode-h264encode.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(h264encode_CFLAGS) $(CFLAGS) -c -o h264encode-h264encode.o `test -f 'h264encode.c' || echo '$(srcdir)/'`h264encode.c + +h264encode-h264encode.obj: h264encode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(h264encode_CFLAGS) $(CFLAGS) -MT h264encode-h264encode.obj -MD -MP -MF $(DEPDIR)/h264encode-h264encode.Tpo -c -o h264encode-h264encode.obj `if test -f 'h264encode.c'; then $(CYGPATH_W) 'h264encode.c'; else $(CYGPATH_W) '$(srcdir)/h264encode.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h264encode-h264encode.Tpo $(DEPDIR)/h264encode-h264encode.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='h264encode.c' object='h264encode-h264encode.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(h264encode_CFLAGS) $(CFLAGS) -c -o h264encode-h264encode.obj `if test -f 'h264encode.c'; then $(CYGPATH_W) 'h264encode.c'; else $(CYGPATH_W) '$(srcdir)/h264encode.c'; fi` + +jpegenc-jpegenc.o: jpegenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jpegenc_CFLAGS) $(CFLAGS) -MT jpegenc-jpegenc.o -MD -MP -MF $(DEPDIR)/jpegenc-jpegenc.Tpo -c -o jpegenc-jpegenc.o `test -f 'jpegenc.c' || echo '$(srcdir)/'`jpegenc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpegenc-jpegenc.Tpo $(DEPDIR)/jpegenc-jpegenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jpegenc.c' object='jpegenc-jpegenc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jpegenc_CFLAGS) $(CFLAGS) -c -o jpegenc-jpegenc.o `test -f 'jpegenc.c' || echo '$(srcdir)/'`jpegenc.c + +jpegenc-jpegenc.obj: jpegenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jpegenc_CFLAGS) $(CFLAGS) -MT jpegenc-jpegenc.obj -MD -MP -MF $(DEPDIR)/jpegenc-jpegenc.Tpo -c -o jpegenc-jpegenc.obj `if test -f 'jpegenc.c'; then $(CYGPATH_W) 'jpegenc.c'; else $(CYGPATH_W) '$(srcdir)/jpegenc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpegenc-jpegenc.Tpo $(DEPDIR)/jpegenc-jpegenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jpegenc.c' object='jpegenc-jpegenc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jpegenc_CFLAGS) $(CFLAGS) -c -o jpegenc-jpegenc.obj `if test -f 'jpegenc.c'; then $(CYGPATH_W) 'jpegenc.c'; else $(CYGPATH_W) '$(srcdir)/jpegenc.c'; fi` + +mpeg2vaenc-mpeg2vaenc.o: mpeg2vaenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpeg2vaenc_CFLAGS) $(CFLAGS) -MT mpeg2vaenc-mpeg2vaenc.o -MD -MP -MF $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Tpo -c -o mpeg2vaenc-mpeg2vaenc.o `test -f 'mpeg2vaenc.c' || echo '$(srcdir)/'`mpeg2vaenc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Tpo $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpeg2vaenc.c' object='mpeg2vaenc-mpeg2vaenc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpeg2vaenc_CFLAGS) $(CFLAGS) -c -o mpeg2vaenc-mpeg2vaenc.o `test -f 'mpeg2vaenc.c' || echo '$(srcdir)/'`mpeg2vaenc.c + +mpeg2vaenc-mpeg2vaenc.obj: mpeg2vaenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpeg2vaenc_CFLAGS) $(CFLAGS) -MT mpeg2vaenc-mpeg2vaenc.obj -MD -MP -MF $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Tpo -c -o mpeg2vaenc-mpeg2vaenc.obj `if test -f 'mpeg2vaenc.c'; then $(CYGPATH_W) 'mpeg2vaenc.c'; else $(CYGPATH_W) '$(srcdir)/mpeg2vaenc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Tpo $(DEPDIR)/mpeg2vaenc-mpeg2vaenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpeg2vaenc.c' object='mpeg2vaenc-mpeg2vaenc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpeg2vaenc_CFLAGS) $(CFLAGS) -c -o mpeg2vaenc-mpeg2vaenc.obj `if test -f 'mpeg2vaenc.c'; then $(CYGPATH_W) 'mpeg2vaenc.c'; else $(CYGPATH_W) '$(srcdir)/mpeg2vaenc.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +valgrind: $(bin_PROGRAMS) + for a in $(bin_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/avcenc.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/avcenc.c new file mode 100644 index 000000000..fabd85762 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/avcenc.c @@ -0,0 +1,2022 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * Simple AVC encoder based on libVA. + * + * Usage: + * ./avcenc [qp] + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include "va_display.h" + +#define NAL_REF_IDC_NONE 0 +#define NAL_REF_IDC_LOW 1 +#define NAL_REF_IDC_MEDIUM 2 +#define NAL_REF_IDC_HIGH 3 + +#define NAL_NON_IDR 1 +#define NAL_IDR 5 +#define NAL_SPS 7 +#define NAL_PPS 8 +#define NAL_SEI 6 + +#define SLICE_TYPE_P 0 +#define SLICE_TYPE_B 1 +#define SLICE_TYPE_I 2 + +#define FRAME_IDR 7 + +#define ENTROPY_MODE_CAVLC 0 +#define ENTROPY_MODE_CABAC 1 + +#define PROFILE_IDC_BASELINE 66 +#define PROFILE_IDC_MAIN 77 +#define PROFILE_IDC_HIGH 100 + +#define CHECK_VASTATUS(va_status,func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ + } + +static VADisplay va_dpy; + +static int picture_width, picture_width_in_mbs; +static int picture_height, picture_height_in_mbs; +static int frame_size; +static unsigned char *newImageBuffer = 0; + +static int qp_value = 26; + +static int intra_period = 30; +static int frame_bit_rate = -1; +static int frame_rate = 30; +static int ip_period = 1; + +#define MAX_SLICES 32 + + +static unsigned int MaxFrameNum = (1<<12); +static unsigned int Log2MaxFrameNum = 12; +static unsigned int Log2MaxPicOrderCntLsb = 8; + +static int +build_packed_pic_buffer(unsigned char **header_buffer); + +static int +build_packed_seq_buffer(unsigned char **header_buffer); + +static int +build_packed_sei_pic_timing(unsigned int cpb_removal_length, + unsigned int dpb_output_length, + unsigned char **sei_buffer); + +static int +build_packed_idr_sei_buffer_timing(unsigned int init_cpb_removal_delay_length, + unsigned int cpb_removal_length, + unsigned int dpb_output_length, + unsigned char **sei_buffer); + +struct upload_thread_param +{ + FILE *yuv_fp; + VASurfaceID surface_id; +}; + +static void +upload_yuv_to_surface(FILE *yuv_fp, VASurfaceID surface_id); + +static struct { + VAProfile profile; + int constraint_set_flag; + VAEncSequenceParameterBufferH264 seq_param; + VAEncPictureParameterBufferH264 pic_param; + VAEncSliceParameterBufferH264 slice_param[MAX_SLICES]; + VAContextID context_id; + VAConfigID config_id; + VABufferID seq_param_buf_id; /* Sequence level parameter */ + VABufferID pic_param_buf_id; /* Picture level parameter */ + VABufferID slice_param_buf_id[MAX_SLICES]; /* Slice level parameter, multil slices */ + VABufferID codedbuf_buf_id; /* Output buffer, compressed data */ + VABufferID packed_seq_header_param_buf_id; + VABufferID packed_seq_buf_id; + VABufferID packed_pic_header_param_buf_id; + VABufferID packed_pic_buf_id; + VABufferID packed_sei_header_param_buf_id; /* the SEI buffer */ + VABufferID packed_sei_buf_id; + VABufferID misc_parameter_hrd_buf_id; + + int num_slices; + int codedbuf_i_size; + int codedbuf_pb_size; + int current_input_surface; + int rate_control_method; + struct upload_thread_param upload_thread_param; + pthread_t upload_thread_id; + int upload_thread_value; + int i_initial_cpb_removal_delay; + int i_initial_cpb_removal_delay_offset; + int i_initial_cpb_removal_delay_length; + int i_cpb_removal_delay; + int i_cpb_removal_delay_length; + int i_dpb_output_delay_length; + int time_offset_length; + + unsigned long long idr_frame_num; + unsigned long long prev_idr_cpb_removal; + unsigned long long current_idr_cpb_removal; + unsigned long long current_cpb_removal; + /* This is relative to the current_cpb_removal */ + unsigned int current_dpb_removal_delta; +} avcenc_context; + +static VAPictureH264 ReferenceFrames[16], RefPicList0[32], RefPicList1[32]; + +static void create_encode_pipe() +{ + VAEntrypoint entrypoints[5]; + int num_entrypoints,slice_entrypoint; + VAConfigAttrib attrib[2]; + int major_ver, minor_ver; + VAStatus va_status; + + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + CHECK_VASTATUS(va_status, "vaInitialize"); + + vaQueryConfigEntrypoints(va_dpy, avcenc_context.profile, entrypoints, + &num_entrypoints); + + for (slice_entrypoint = 0; slice_entrypoint < num_entrypoints; slice_entrypoint++) { + if (entrypoints[slice_entrypoint] == VAEntrypointEncSlice) + break; + } + + if (slice_entrypoint == num_entrypoints) { + /* not find Slice entry point */ + assert(0); + } + + /* find out the format for the render target, and rate control mode */ + attrib[0].type = VAConfigAttribRTFormat; + attrib[1].type = VAConfigAttribRateControl; + vaGetConfigAttributes(va_dpy, avcenc_context.profile, VAEntrypointEncSlice, + &attrib[0], 2); + + if ((attrib[0].value & VA_RT_FORMAT_YUV420) == 0) { + /* not find desired YUV420 RT format */ + assert(0); + } + + if ((attrib[1].value & avcenc_context.rate_control_method) == 0) { + /* Can't find matched RC mode */ + printf("Can't find the desired RC mode, exit\n"); + assert(0); + } + + attrib[0].value = VA_RT_FORMAT_YUV420; /* set to desired RT format */ + attrib[1].value = avcenc_context.rate_control_method; /* set to desired RC mode */ + + va_status = vaCreateConfig(va_dpy, avcenc_context.profile, VAEntrypointEncSlice, + &attrib[0], 2,&avcenc_context.config_id); + CHECK_VASTATUS(va_status, "vaCreateConfig"); + + /* Create a context for this decode pipe */ + va_status = vaCreateContext(va_dpy, avcenc_context.config_id, + picture_width, picture_height, + VA_PROGRESSIVE, + 0, 0, + &avcenc_context.context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); +} + +static void destory_encode_pipe() +{ + vaDestroyContext(va_dpy,avcenc_context.context_id); + vaDestroyConfig(va_dpy,avcenc_context.config_id); + vaTerminate(va_dpy); + va_close_display(va_dpy); +} + +/*************************************************** + * + * The encode pipe resource define + * + ***************************************************/ +#define SID_INPUT_PICTURE_0 0 +#define SID_INPUT_PICTURE_1 1 +#define SID_REFERENCE_PICTURE_L0 2 +#define SID_REFERENCE_PICTURE_L1 3 +#define SID_RECON_PICTURE 4 +#define SID_NUMBER SID_RECON_PICTURE + 1 + +#define SURFACE_NUM 16 /* 16 surfaces for reference */ + +static VASurfaceID surface_ids[SID_NUMBER]; +static VASurfaceID ref_surface[SURFACE_NUM]; +static int use_slot[SURFACE_NUM]; + +static unsigned long long current_frame_display = 0; +static unsigned long long current_IDR_display = 0; + +static VAPictureH264 CurrentCurrPic; + +#define current_slot (current_frame_display % SURFACE_NUM) + +static int frame_number; +static unsigned long long enc_frame_number; +static int current_frame_type; +static int current_frame_num; +static unsigned int current_poc; + +static unsigned int num_ref_frames = 2; +static unsigned int numShortTerm = 0; +/***************************************************/ + +static int get_free_slot() +{ + int i, index = -1; + + for (i = 0; i < SURFACE_NUM; i++) { + if (use_slot[i] == 0) { + index = i; + break; + } + } + if (index < 0) { + printf("WARNING: No free slot to store the reconstructed frame \n"); + index = SURFACE_NUM - 1; + } + return index; +} + +static void * +upload_thread_function(void *data) +{ + struct upload_thread_param *param = data; + + upload_yuv_to_surface(param->yuv_fp, param->surface_id); + + return NULL; +} + +static void alloc_encode_resource(FILE *yuv_fp) +{ + VAStatus va_status; + + // Create surface + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, picture_width, picture_height, + surface_ids, SID_NUMBER, + NULL, 0 + ); + + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + // Create surface + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, picture_width, picture_height, + ref_surface, SURFACE_NUM, + NULL, 0 + ); + + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + + newImageBuffer = (unsigned char *)malloc(frame_size); + + /* firstly upload YUV data to SID_INPUT_PICTURE_1 */ + avcenc_context.upload_thread_param.yuv_fp = yuv_fp; + avcenc_context.upload_thread_param.surface_id = surface_ids[SID_INPUT_PICTURE_1]; + + avcenc_context.upload_thread_value = pthread_create(&avcenc_context.upload_thread_id, + NULL, + upload_thread_function, + (void*)&avcenc_context.upload_thread_param); +} + +static void release_encode_resource() +{ + pthread_join(avcenc_context.upload_thread_id, NULL); + free(newImageBuffer); + + // Release all the surfaces resource + vaDestroySurfaces(va_dpy, surface_ids, SID_NUMBER); + // Release all the reference surfaces + vaDestroySurfaces(va_dpy, ref_surface, SURFACE_NUM); +} + +static void avcenc_update_sei_param(int is_idr) +{ + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + unsigned int length_in_bits; + unsigned char *packed_sei_buffer = NULL; + VAStatus va_status; + + if (is_idr) + length_in_bits = build_packed_idr_sei_buffer_timing( + avcenc_context.i_initial_cpb_removal_delay_length, + avcenc_context.i_cpb_removal_delay_length, + avcenc_context.i_dpb_output_delay_length, + &packed_sei_buffer); + else + length_in_bits = build_packed_sei_pic_timing( + avcenc_context.i_cpb_removal_delay_length, + avcenc_context.i_dpb_output_delay_length, + &packed_sei_buffer); + + packed_header_param_buffer.type = VAEncPackedHeaderH264_SEI; + packed_header_param_buffer.bit_length = length_in_bits; + packed_header_param_buffer.has_emulation_bytes = 0; + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &avcenc_context.packed_sei_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_sei_buffer, + &avcenc_context.packed_sei_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + free(packed_sei_buffer); + return; +} + +#define partition(ref, field, key, ascending) \ + while (i <= j) { \ + if (ascending) { \ + while (ref[i].field < key) \ + i++; \ + while (ref[j].field > key) \ + j--; \ + } else { \ + while (ref[i].field > key) \ + i++; \ + while (ref[j].field < key) \ + j--; \ + } \ + if (i <= j) { \ + tmp = ref[i]; \ + ref[i] = ref[j]; \ + ref[j] = tmp; \ + i++; \ + j--; \ + } \ + } \ + +static void sort_one(VAPictureH264 ref[], int left, int right, + int ascending, int frame_idx) +{ + int i = left, j = right; + unsigned int key; + VAPictureH264 tmp; + + if (frame_idx) { + key = ref[(left + right) / 2].frame_idx; + partition(ref, frame_idx, key, ascending); + } else { + key = ref[(left + right) / 2].TopFieldOrderCnt; + partition(ref, TopFieldOrderCnt, (signed int)key, ascending); + } + + /* recursion */ + if (left < j) + sort_one(ref, left, j, ascending, frame_idx); + + if (i < right) + sort_one(ref, i, right, ascending, frame_idx); +} + +static void sort_two(VAPictureH264 ref[], int left, int right, unsigned int key, unsigned int frame_idx, + int partition_ascending, int list0_ascending, int list1_ascending) +{ + int i = left, j = right; + VAPictureH264 tmp; + + if (frame_idx) { + partition(ref, frame_idx, key, partition_ascending); + } else { + partition(ref, TopFieldOrderCnt, (signed int)key, partition_ascending); + } + + sort_one(ref, left, i-1, list0_ascending, frame_idx); + sort_one(ref, j+1, right, list1_ascending, frame_idx); +} + +static int update_RefPicList() +{ + + if (current_frame_type == SLICE_TYPE_P) { + memcpy(RefPicList0, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_one(RefPicList0, 0, numShortTerm-1, 0, 1); + } + + if (current_frame_type == SLICE_TYPE_B) { + memcpy(RefPicList0, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_two(RefPicList0, 0, numShortTerm-1, current_poc, 0, + 1, 0, 1); + + memcpy(RefPicList1, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_two(RefPicList1, 0, numShortTerm-1, current_poc, 0, + 0, 1, 0); + } + + return 0; +} + +static void avcenc_update_picture_parameter(int slice_type, int is_idr) +{ + VAEncPictureParameterBufferH264 *pic_param; + VAStatus va_status; + int recon_index; + + recon_index = get_free_slot(); + // Picture level + pic_param = &avcenc_context.pic_param; + + pic_param->CurrPic.picture_id = ref_surface[recon_index]; + pic_param->CurrPic.frame_idx = current_frame_num; + pic_param->CurrPic.flags = 0; + + pic_param->CurrPic.TopFieldOrderCnt = current_poc; + pic_param->CurrPic.BottomFieldOrderCnt = pic_param->CurrPic.TopFieldOrderCnt; + + assert(avcenc_context.codedbuf_buf_id != VA_INVALID_ID); + pic_param->coded_buf = avcenc_context.codedbuf_buf_id; + pic_param->frame_num = current_frame_num; + pic_param->pic_fields.bits.idr_pic_flag = !!is_idr; + pic_param->pic_fields.bits.reference_pic_flag = (slice_type != SLICE_TYPE_B); + CurrentCurrPic = pic_param->CurrPic; + + if (slice_type == SLICE_TYPE_P || slice_type == SLICE_TYPE_B) + memset(pic_param->ReferenceFrames, 0xff, 16 * sizeof(VAPictureH264)); /* invalid all */ + + if ((slice_type == SLICE_TYPE_P) || (slice_type == SLICE_TYPE_B)) { + pic_param->ReferenceFrames[0] = RefPicList0[0]; + } + if (slice_type == SLICE_TYPE_B) { + pic_param->ReferenceFrames[1] = RefPicList1[0]; + } + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPictureParameterBufferType, + sizeof(*pic_param), 1, pic_param, + &avcenc_context.pic_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + +} + +#ifndef VA_FOURCC_I420 +#define VA_FOURCC_I420 0x30323449 +#endif + +static void upload_yuv_to_surface(FILE *yuv_fp, VASurfaceID surface_id) +{ + VAImage surface_image; + VAStatus va_status; + void *surface_p = NULL; + unsigned char *y_src, *u_src, *v_src; + unsigned char *y_dst, *u_dst, *v_dst; + int y_size = picture_width * picture_height; + int u_size = (picture_width >> 1) * (picture_height >> 1); + int row, col; + size_t n_items; + + do { + n_items = fread(newImageBuffer, frame_size, 1, yuv_fp); + } while (n_items != 1); + + va_status = vaDeriveImage(va_dpy, surface_id, &surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + + vaMapBuffer(va_dpy, surface_image.buf, &surface_p); + assert(VA_STATUS_SUCCESS == va_status); + + y_src = newImageBuffer; + u_src = newImageBuffer + y_size; /* UV offset for NV12 */ + v_src = newImageBuffer + y_size + u_size; + + y_dst = surface_p + surface_image.offsets[0]; + u_dst = surface_p + surface_image.offsets[1]; /* UV offset for NV12 */ + v_dst = surface_p + surface_image.offsets[2]; + + /* Y plane */ + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width); + y_dst += surface_image.pitches[0]; + y_src += picture_width; + } + + if (surface_image.format.fourcc == VA_FOURCC_NV12) { /* UV plane */ + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col * 2] = u_src[col]; + u_dst[col * 2 + 1] = v_src[col]; + } + + u_dst += surface_image.pitches[1]; + u_src += (picture_width / 2); + v_src += (picture_width / 2); + } + } else if (surface_image.format.fourcc == VA_FOURCC_YV12 || + surface_image.format.fourcc == VA_FOURCC_I420) { + const int U = surface_image.format.fourcc == VA_FOURCC_I420 ? 1 : 2; + const int V = surface_image.format.fourcc == VA_FOURCC_I420 ? 2 : 1; + + u_dst = surface_p + surface_image.offsets[U]; + v_dst = surface_p + surface_image.offsets[V]; + + for (row = 0; row < surface_image.height / 2; row++) { + memcpy(u_dst, u_src, surface_image.width / 2); + memcpy(v_dst, v_src, surface_image.width / 2); + u_dst += surface_image.pitches[U]; + v_dst += surface_image.pitches[V]; + u_src += (picture_width / 2); + v_src += (picture_width / 2); + } + } + + vaUnmapBuffer(va_dpy, surface_image.buf); + vaDestroyImage(va_dpy, surface_image.image_id); +} + +static void avcenc_update_slice_parameter(int slice_type) +{ + VAEncSliceParameterBufferH264 *slice_param; + VAStatus va_status; + int i; + + // Slice level + i = 0; + slice_param = &avcenc_context.slice_param[i]; + slice_param->macroblock_address = 0; + slice_param->num_macroblocks = picture_height_in_mbs * picture_width_in_mbs; + slice_param->pic_parameter_set_id = 0; + slice_param->slice_type = slice_type; + slice_param->direct_spatial_mv_pred_flag = 0; + slice_param->num_ref_idx_l0_active_minus1 = 0; /* FIXME: ??? */ + slice_param->num_ref_idx_l1_active_minus1 = 0; + slice_param->cabac_init_idc = 0; + slice_param->slice_qp_delta = 0; + slice_param->disable_deblocking_filter_idc = 0; + slice_param->slice_alpha_c0_offset_div2 = 2; + slice_param->slice_beta_offset_div2 = 2; + slice_param->idr_pic_id = 0; + + /* FIXME: fill other fields */ + if ((slice_type == SLICE_TYPE_P) || (slice_type == SLICE_TYPE_B)) { + memset(slice_param->RefPicList0, 0xFF, 32 * sizeof(VAPictureH264)); + slice_param->RefPicList0[0] = RefPicList0[0]; + } + + if ((slice_type == SLICE_TYPE_B)) { + memset(slice_param->RefPicList1, 0xFF, 32 * sizeof(VAPictureH264)); + slice_param->RefPicList1[0] = RefPicList1[0]; + } + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncSliceParameterBufferType, + sizeof(*slice_param), 1, slice_param, + &avcenc_context.slice_param_buf_id[i]); + CHECK_VASTATUS(va_status,"vaCreateBuffer");; + i++; + +#if 0 + slice_param = &avcenc_context.slice_param[i]; + slice_param->macroblock_address = picture_height_in_mbs * picture_width_in_mbs / 2; + slice_param->num_macroblocks = picture_height_in_mbs * picture_width_in_mbs / 2; + slice_param->pic_parameter_set_id = 0; + slice_param->slice_type = slice_type; + slice_param->direct_spatial_mv_pred_flag = 0; + slice_param->num_ref_idx_l0_active_minus1 = 0; /* FIXME: ??? */ + slice_param->num_ref_idx_l1_active_minus1 = 0; + slice_param->cabac_init_idc = 0; + slice_param->slice_qp_delta = 0; + slice_param->disable_deblocking_filter_idc = 0; + slice_param->slice_alpha_c0_offset_div2 = 2; + slice_param->slice_beta_offset_div2 = 2; + slice_param->idr_pic_id = 0; + + /* FIXME: fill other fields */ + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncSliceParameterBufferType, + sizeof(*slice_param), 1, slice_param, + &avcenc_context.slice_param_buf_id[i]); + CHECK_VASTATUS(va_status,"vaCreateBuffer");; + i++; +#endif + + avcenc_context.num_slices = i; +} + +static int update_ReferenceFrames(void) +{ + int i; + /* B-frame is not used for reference */ + if (current_frame_type == SLICE_TYPE_B) + return 0; + + CurrentCurrPic.flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE; + numShortTerm++; + if (numShortTerm > num_ref_frames) + numShortTerm = num_ref_frames; + for (i=numShortTerm-1; i>0; i--) + ReferenceFrames[i] = ReferenceFrames[i-1]; + ReferenceFrames[0] = CurrentCurrPic; + + if (current_frame_type != SLICE_TYPE_B) + current_frame_num++; + if (current_frame_num > MaxFrameNum) + current_frame_num = 0; + + /* Update the use_slot. Only when the surface is used in reference + * frame list, the use_slot[index] is set + */ + for (i = 0; i < SURFACE_NUM; i++) { + int j; + bool found; + + found = false; + for (j = 0; j < numShortTerm; j++) { + if (ref_surface[i] == ReferenceFrames[j].picture_id) { + found = true; + break; + } + } + if (found) + use_slot[i] = 1; + else + use_slot[i] = 0; + } + + return 0; +} + +static int begin_picture(FILE *yuv_fp, int frame_num, int display_num, int slice_type, int is_idr) +{ + VAStatus va_status; + + if (avcenc_context.upload_thread_value != 0) { + fprintf(stderr, "FATAL error!!!\n"); + exit(1); + } + + pthread_join(avcenc_context.upload_thread_id, NULL); + + avcenc_context.upload_thread_value = -1; + + if (avcenc_context.current_input_surface == SID_INPUT_PICTURE_0) + avcenc_context.current_input_surface = SID_INPUT_PICTURE_1; + else + avcenc_context.current_input_surface = SID_INPUT_PICTURE_0; + + if (is_idr) { + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + unsigned int length_in_bits; + unsigned char *packed_seq_buffer = NULL, *packed_pic_buffer = NULL; + + assert(slice_type == SLICE_TYPE_I); + length_in_bits = build_packed_seq_buffer(&packed_seq_buffer); + packed_header_param_buffer.type = VAEncPackedHeaderSequence; + packed_header_param_buffer.bit_length = length_in_bits; + packed_header_param_buffer.has_emulation_bytes = 0; + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &avcenc_context.packed_seq_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_seq_buffer, + &avcenc_context.packed_seq_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + length_in_bits = build_packed_pic_buffer(&packed_pic_buffer); + packed_header_param_buffer.type = VAEncPackedHeaderPicture; + packed_header_param_buffer.bit_length = length_in_bits; + packed_header_param_buffer.has_emulation_bytes = 0; + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &avcenc_context.packed_pic_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_pic_buffer, + &avcenc_context.packed_pic_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + free(packed_seq_buffer); + free(packed_pic_buffer); + } + + /* sequence parameter set */ + VAEncSequenceParameterBufferH264 *seq_param = &avcenc_context.seq_param; + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncSequenceParameterBufferType, + sizeof(*seq_param), 1, seq_param, + &avcenc_context.seq_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + + /* hrd parameter */ + VAEncMiscParameterBuffer *misc_param; + VAEncMiscParameterHRD *misc_hrd_param; + vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncMiscParameterBufferType, + sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), + 1, + NULL, + &avcenc_context.misc_parameter_hrd_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + vaMapBuffer(va_dpy, + avcenc_context.misc_parameter_hrd_buf_id, + (void **)&misc_param); + misc_param->type = VAEncMiscParameterTypeHRD; + misc_hrd_param = (VAEncMiscParameterHRD *)misc_param->data; + + if (frame_bit_rate > 0) { + misc_hrd_param->initial_buffer_fullness = frame_bit_rate * 1000 * 4; + misc_hrd_param->buffer_size = frame_bit_rate * 1000 * 8; + } else { + misc_hrd_param->initial_buffer_fullness = 0; + misc_hrd_param->buffer_size = 0; + } + + vaUnmapBuffer(va_dpy, avcenc_context.misc_parameter_hrd_buf_id); + + return 0; +} + +int avcenc_render_picture() +{ + VAStatus va_status; + VABufferID va_buffers[10]; + unsigned int num_va_buffers = 0; + int i; + + va_buffers[num_va_buffers++] = avcenc_context.seq_param_buf_id; + va_buffers[num_va_buffers++] = avcenc_context.pic_param_buf_id; + + if (avcenc_context.packed_seq_header_param_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_seq_header_param_buf_id; + + if (avcenc_context.packed_seq_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_seq_buf_id; + + if (avcenc_context.packed_pic_header_param_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_pic_header_param_buf_id; + + if (avcenc_context.packed_pic_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_pic_buf_id; + + if (avcenc_context.packed_sei_header_param_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_sei_header_param_buf_id; + + if (avcenc_context.packed_sei_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.packed_sei_buf_id; + + if (avcenc_context.misc_parameter_hrd_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = avcenc_context.misc_parameter_hrd_buf_id; + + va_status = vaBeginPicture(va_dpy, + avcenc_context.context_id, + surface_ids[avcenc_context.current_input_surface]); + CHECK_VASTATUS(va_status,"vaBeginPicture"); + + va_status = vaRenderPicture(va_dpy, + avcenc_context.context_id, + va_buffers, + num_va_buffers); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + for(i = 0; i < avcenc_context.num_slices; i++) { + va_status = vaRenderPicture(va_dpy, + avcenc_context.context_id, + &avcenc_context.slice_param_buf_id[i], + 1); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + } + + va_status = vaEndPicture(va_dpy, avcenc_context.context_id); + CHECK_VASTATUS(va_status,"vaEndPicture"); + + return 0; +} + +static int avcenc_destroy_buffers(VABufferID *va_buffers, unsigned int num_va_buffers) +{ + VAStatus va_status; + unsigned int i; + + for (i = 0; i < num_va_buffers; i++) { + if (va_buffers[i] != VA_INVALID_ID) { + va_status = vaDestroyBuffer(va_dpy, va_buffers[i]); + CHECK_VASTATUS(va_status,"vaDestroyBuffer"); + va_buffers[i] = VA_INVALID_ID; + } + } + + return 0; +} + +static void end_picture() +{ + + update_ReferenceFrames(); + avcenc_destroy_buffers(&avcenc_context.seq_param_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.pic_param_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_seq_header_param_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_seq_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_pic_header_param_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_pic_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_sei_header_param_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.packed_sei_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.slice_param_buf_id[0], avcenc_context.num_slices); + avcenc_destroy_buffers(&avcenc_context.codedbuf_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.misc_parameter_hrd_buf_id, 1); + + memset(avcenc_context.slice_param, 0, sizeof(avcenc_context.slice_param)); + avcenc_context.num_slices = 0; +} + +#define BITSTREAM_ALLOCATE_STEPPING 4096 + +struct __bitstream { + unsigned int *buffer; + int bit_offset; + int max_size_in_dword; +}; + +typedef struct __bitstream bitstream; + +#if 0 +static int +get_coded_bitsteam_length(unsigned char *buffer, int buffer_length) +{ + int i; + + for (i = 0; i < buffer_length - 3; i++) { + if (!buffer[i] && + !buffer[i + 1] && + !buffer[i + 2] && + !buffer[i + 3]) + break; + } + + return i; +} +#endif + +static unsigned int +va_swap32(unsigned int val) +{ + unsigned char *pval = (unsigned char *)&val; + + return ((pval[0] << 24) | + (pval[1] << 16) | + (pval[2] << 8) | + (pval[3] << 0)); +} + +static void +bitstream_start(bitstream *bs) +{ + bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1); + bs->bit_offset = 0; +} + +static void +bitstream_end(bitstream *bs) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (bit_offset) { + bs->buffer[pos] = va_swap32((bs->buffer[pos] << bit_left)); + } +} + +static void +bitstream_put_ui(bitstream *bs, unsigned int val, int size_in_bits) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (!size_in_bits) + return; + + bs->bit_offset += size_in_bits; + + if (bit_left > size_in_bits) { + bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val); + } else { + size_in_bits -= bit_left; + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits); + bs->buffer[pos] = va_swap32(bs->buffer[pos]); + + if (pos + 1 == bs->max_size_in_dword) { + bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int)); + } + + bs->buffer[pos + 1] = val; + } +} + +static void +bitstream_put_ue(bitstream *bs, unsigned int val) +{ + int size_in_bits = 0; + int tmp_val = ++val; + + while (tmp_val) { + tmp_val >>= 1; + size_in_bits++; + } + + bitstream_put_ui(bs, 0, size_in_bits - 1); // leading zero + bitstream_put_ui(bs, val, size_in_bits); +} + +static void +bitstream_put_se(bitstream *bs, int val) +{ + unsigned int new_val; + + if (val <= 0) + new_val = -2 * val; + else + new_val = 2 * val - 1; + + bitstream_put_ue(bs, new_val); +} + +static void +bitstream_byte_aligning(bitstream *bs, int bit) +{ + int bit_offset = (bs->bit_offset & 0x7); + int bit_left = 8 - bit_offset; + int new_val; + + if (!bit_offset) + return; + + assert(bit == 0 || bit == 1); + + if (bit) + new_val = (1 << bit_left) - 1; + else + new_val = 0; + + bitstream_put_ui(bs, new_val, bit_left); +} + +static void +rbsp_trailing_bits(bitstream *bs) +{ + bitstream_put_ui(bs, 1, 1); + bitstream_byte_aligning(bs, 0); +} + +static void nal_start_code_prefix(bitstream *bs) +{ + bitstream_put_ui(bs, 0x00000001, 32); +} + +static void nal_header(bitstream *bs, int nal_ref_idc, int nal_unit_type) +{ + bitstream_put_ui(bs, 0, 1); /* forbidden_zero_bit: 0 */ + bitstream_put_ui(bs, nal_ref_idc, 2); + bitstream_put_ui(bs, nal_unit_type, 5); +} + +static void sps_rbsp(bitstream *bs) +{ + VAEncSequenceParameterBufferH264 *seq_param = &avcenc_context.seq_param; + int profile_idc = PROFILE_IDC_BASELINE; + + if (avcenc_context.profile == VAProfileH264High) + profile_idc = PROFILE_IDC_HIGH; + else if (avcenc_context.profile == VAProfileH264Main) + profile_idc = PROFILE_IDC_MAIN; + + bitstream_put_ui(bs, profile_idc, 8); /* profile_idc */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 1), 1); /* constraint_set0_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 2), 1); /* constraint_set1_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 4), 1); /* constraint_set2_flag */ + bitstream_put_ui(bs, !!(avcenc_context.constraint_set_flag & 8), 1); /* constraint_set3_flag */ + bitstream_put_ui(bs, 0, 4); /* reserved_zero_4bits */ + bitstream_put_ui(bs, seq_param->level_idc, 8); /* level_idc */ + bitstream_put_ue(bs, seq_param->seq_parameter_set_id); /* seq_parameter_set_id */ + + if ( profile_idc == PROFILE_IDC_HIGH) { + bitstream_put_ue(bs, 1); /* chroma_format_idc = 1, 4:2:0 */ + bitstream_put_ue(bs, 0); /* bit_depth_luma_minus8 */ + bitstream_put_ue(bs, 0); /* bit_depth_chroma_minus8 */ + bitstream_put_ui(bs, 0, 1); /* qpprime_y_zero_transform_bypass_flag */ + bitstream_put_ui(bs, 0, 1); /* seq_scaling_matrix_present_flag */ + } + + bitstream_put_ue(bs, seq_param->seq_fields.bits.log2_max_frame_num_minus4); /* log2_max_frame_num_minus4 */ + bitstream_put_ue(bs, seq_param->seq_fields.bits.pic_order_cnt_type); /* pic_order_cnt_type */ + + if (seq_param->seq_fields.bits.pic_order_cnt_type == 0) + bitstream_put_ue(bs, seq_param->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4); /* log2_max_pic_order_cnt_lsb_minus4 */ + else { + assert(0); + } + + bitstream_put_ue(bs, seq_param->max_num_ref_frames); /* num_ref_frames */ + bitstream_put_ui(bs, 0, 1); /* gaps_in_frame_num_value_allowed_flag */ + + bitstream_put_ue(bs, seq_param->picture_width_in_mbs - 1); /* pic_width_in_mbs_minus1 */ + bitstream_put_ue(bs, seq_param->picture_height_in_mbs - 1); /* pic_height_in_map_units_minus1 */ + bitstream_put_ui(bs, seq_param->seq_fields.bits.frame_mbs_only_flag, 1); /* frame_mbs_only_flag */ + + if (!seq_param->seq_fields.bits.frame_mbs_only_flag) { + assert(0); + } + + bitstream_put_ui(bs, seq_param->seq_fields.bits.direct_8x8_inference_flag, 1); /* direct_8x8_inference_flag */ + bitstream_put_ui(bs, seq_param->frame_cropping_flag, 1); /* frame_cropping_flag */ + + if (seq_param->frame_cropping_flag) { + bitstream_put_ue(bs, seq_param->frame_crop_left_offset); /* frame_crop_left_offset */ + bitstream_put_ue(bs, seq_param->frame_crop_right_offset); /* frame_crop_right_offset */ + bitstream_put_ue(bs, seq_param->frame_crop_top_offset); /* frame_crop_top_offset */ + bitstream_put_ue(bs, seq_param->frame_crop_bottom_offset); /* frame_crop_bottom_offset */ + } + + if ( frame_bit_rate < 0 ) { + bitstream_put_ui(bs, 0, 1); /* vui_parameters_present_flag */ + } else { + bitstream_put_ui(bs, 1, 1); /* vui_parameters_present_flag */ + bitstream_put_ui(bs, 0, 1); /* aspect_ratio_info_present_flag */ + bitstream_put_ui(bs, 0, 1); /* overscan_info_present_flag */ + bitstream_put_ui(bs, 0, 1); /* video_signal_type_present_flag */ + bitstream_put_ui(bs, 0, 1); /* chroma_loc_info_present_flag */ + bitstream_put_ui(bs, 1, 1); /* timing_info_present_flag */ + { + bitstream_put_ui(bs, 1, 32); + bitstream_put_ui(bs, frame_rate * 2, 32); + bitstream_put_ui(bs, 1, 1); + } + bitstream_put_ui(bs, 1, 1); /* nal_hrd_parameters_present_flag */ + { + // hrd_parameters + bitstream_put_ue(bs, 0); /* cpb_cnt_minus1 */ + bitstream_put_ui(bs, 0, 4); /* bit_rate_scale */ + bitstream_put_ui(bs, 2, 4); /* cpb_size_scale */ + + /* the frame_bit_rate is in kbps */ + bitstream_put_ue(bs, (((frame_bit_rate * 1000)>> 6) - 1)); /* bit_rate_value_minus1[0] */ + bitstream_put_ue(bs, ((frame_bit_rate * 8000) >> 6) - 1); /* cpb_size_value_minus1[0] */ + bitstream_put_ui(bs, 1, 1); /* cbr_flag[0] */ + + /* initial_cpb_removal_delay_length_minus1 */ + bitstream_put_ui(bs, + (avcenc_context.i_initial_cpb_removal_delay_length - 1), 5); + /* cpb_removal_delay_length_minus1 */ + bitstream_put_ui(bs, + (avcenc_context.i_cpb_removal_delay_length - 1), 5); + /* dpb_output_delay_length_minus1 */ + bitstream_put_ui(bs, + (avcenc_context.i_dpb_output_delay_length - 1), 5); + /* time_offset_length */ + bitstream_put_ui(bs, + (avcenc_context.time_offset_length - 1), 5); + } + bitstream_put_ui(bs, 0, 1); /* vcl_hrd_parameters_present_flag */ + bitstream_put_ui(bs, 0, 1); /* low_delay_hrd_flag */ + + bitstream_put_ui(bs, 0, 1); /* pic_struct_present_flag */ + bitstream_put_ui(bs, 0, 1); /* bitstream_restriction_flag */ + } + + rbsp_trailing_bits(bs); /* rbsp_trailing_bits */ +} + +#if 0 +static void build_nal_sps(FILE *avc_fp) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_SPS); + sps_rbsp(&bs); + bitstream_end(&bs, avc_fp); +} +#endif + +static void pps_rbsp(bitstream *bs) +{ + VAEncPictureParameterBufferH264 *pic_param = &avcenc_context.pic_param; + + bitstream_put_ue(bs, pic_param->pic_parameter_set_id); /* pic_parameter_set_id */ + bitstream_put_ue(bs, pic_param->seq_parameter_set_id); /* seq_parameter_set_id */ + + bitstream_put_ui(bs, pic_param->pic_fields.bits.entropy_coding_mode_flag, 1); /* entropy_coding_mode_flag */ + + bitstream_put_ui(bs, 0, 1); /* pic_order_present_flag: 0 */ + + bitstream_put_ue(bs, 0); /* num_slice_groups_minus1 */ + + bitstream_put_ue(bs, pic_param->num_ref_idx_l0_active_minus1); /* num_ref_idx_l0_active_minus1 */ + bitstream_put_ue(bs, pic_param->num_ref_idx_l1_active_minus1); /* num_ref_idx_l1_active_minus1 1 */ + + bitstream_put_ui(bs, pic_param->pic_fields.bits.weighted_pred_flag, 1); /* weighted_pred_flag: 0 */ + bitstream_put_ui(bs, pic_param->pic_fields.bits.weighted_bipred_idc, 2); /* weighted_bipred_idc: 0 */ + + bitstream_put_se(bs, pic_param->pic_init_qp - 26); /* pic_init_qp_minus26 */ + bitstream_put_se(bs, 0); /* pic_init_qs_minus26 */ + bitstream_put_se(bs, 0); /* chroma_qp_index_offset */ + + bitstream_put_ui(bs, pic_param->pic_fields.bits.deblocking_filter_control_present_flag, 1); /* deblocking_filter_control_present_flag */ + bitstream_put_ui(bs, 0, 1); /* constrained_intra_pred_flag */ + bitstream_put_ui(bs, 0, 1); /* redundant_pic_cnt_present_flag */ + + /* more_rbsp_data */ + bitstream_put_ui(bs, pic_param->pic_fields.bits.transform_8x8_mode_flag, 1); /*transform_8x8_mode_flag */ + bitstream_put_ui(bs, 0, 1); /* pic_scaling_matrix_present_flag */ + bitstream_put_se(bs, pic_param->second_chroma_qp_index_offset ); /*second_chroma_qp_index_offset */ + + rbsp_trailing_bits(bs); +} + +#if 0 +static void build_nal_pps(FILE *avc_fp) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_PPS); + pps_rbsp(&bs); + bitstream_end(&bs, avc_fp); +} + +static void +build_header(FILE *avc_fp) +{ + build_nal_sps(avc_fp); + build_nal_pps(avc_fp); +} +#endif + +static int +build_packed_pic_buffer(unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_PPS); + pps_rbsp(&bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +static int +build_packed_seq_buffer(unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_SPS); + sps_rbsp(&bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +static int +build_packed_idr_sei_buffer_timing(unsigned int init_cpb_removal_delay_length, + unsigned int cpb_removal_length, + unsigned int dpb_output_length, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int bp_byte_size, i, pic_byte_size; + unsigned int cpb_removal_delay; + + bitstream nal_bs; + bitstream sei_bp_bs, sei_pic_bs; + + bitstream_start(&sei_bp_bs); + bitstream_put_ue(&sei_bp_bs, 0); /*seq_parameter_set_id*/ + /* SEI buffer period info */ + /* NALHrdBpPresentFlag == 1 */ + bitstream_put_ui(&sei_bp_bs, avcenc_context.i_initial_cpb_removal_delay, + init_cpb_removal_delay_length); + bitstream_put_ui(&sei_bp_bs, avcenc_context.i_initial_cpb_removal_delay_offset, + init_cpb_removal_delay_length); + if ( sei_bp_bs.bit_offset & 0x7) { + bitstream_put_ui(&sei_bp_bs, 1, 1); + } + bitstream_end(&sei_bp_bs); + bp_byte_size = (sei_bp_bs.bit_offset + 7) / 8; + + /* SEI pic timing info */ + bitstream_start(&sei_pic_bs); + /* The info of CPB and DPB delay is controlled by CpbDpbDelaysPresentFlag, + * which is derived as 1 if one of the following conditions is true: + * nal_hrd_parameters_present_flag is present in the bitstream and is equal to 1, + * vcl_hrd_parameters_present_flag is present in the bitstream and is equal to 1, + */ + cpb_removal_delay = (avcenc_context.current_cpb_removal - avcenc_context.prev_idr_cpb_removal); + bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + bitstream_put_ui(&sei_pic_bs, avcenc_context.current_dpb_removal_delta, + dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + bitstream_put_ui(&sei_pic_bs, 1, 1); + } + /* The pic_structure_present_flag determines whether the pic_structure + * info is written into the SEI pic timing info. + * Currently it is set to zero. + */ + bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + /* Write the SEI buffer period data */ + bitstream_put_ui(&nal_bs, 0, 8); + bitstream_put_ui(&nal_bs, bp_byte_size, 8); + + byte_buf = (unsigned char *)sei_bp_bs.buffer; + for(i = 0; i < bp_byte_size; i++) { + bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + /* write the SEI pic timing data */ + bitstream_put_ui(&nal_bs, 0x01, 8); + bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + rbsp_trailing_bits(&nal_bs); + bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +static int +build_packed_sei_pic_timing(unsigned int cpb_removal_length, + unsigned int dpb_output_length, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int i, pic_byte_size; + unsigned int cpb_removal_delay; + + bitstream nal_bs; + bitstream sei_pic_bs; + + bitstream_start(&sei_pic_bs); + /* The info of CPB and DPB delay is controlled by CpbDpbDelaysPresentFlag, + * which is derived as 1 if one of the following conditions is true: + * nal_hrd_parameters_present_flag is present in the bitstream and is equal to 1, + * vcl_hrd_parameters_present_flag is present in the bitstream and is equal to 1, + */ + cpb_removal_delay = (avcenc_context.current_cpb_removal - avcenc_context.current_idr_cpb_removal); + bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + bitstream_put_ui(&sei_pic_bs, avcenc_context.current_dpb_removal_delta, + dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + bitstream_put_ui(&sei_pic_bs, 1, 1); + } + + /* The pic_structure_present_flag determines whether the pic_structure + * info is written into the SEI pic timing info. + * Currently it is set to zero. + */ + bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + /* write the SEI Pic timing data */ + bitstream_put_ui(&nal_bs, 0x01, 8); + bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + rbsp_trailing_bits(&nal_bs); + bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +#if 0 +static void +slice_header(bitstream *bs, int frame_num, int display_frame, int slice_type, int nal_ref_idc, int is_idr) +{ + VAEncSequenceParameterBufferH264 *seq_param = &avcenc_context.seq_param; + VAEncPictureParameterBufferH264 *pic_param = &avcenc_context.pic_param; + int is_cabac = (pic_param->pic_fields.bits.entropy_coding_mode_flag == ENTROPY_MODE_CABAC); + + bitstream_put_ue(bs, 0); /* first_mb_in_slice: 0 */ + bitstream_put_ue(bs, slice_type); /* slice_type */ + bitstream_put_ue(bs, 0); /* pic_parameter_set_id: 0 */ + bitstream_put_ui(bs, frame_num & 0x0F, seq_param->seq_fields.bits.log2_max_frame_num_minus4 + 4); /* frame_num */ + + /* frame_mbs_only_flag == 1 */ + if (!seq_param->seq_fields.bits.frame_mbs_only_flag) { + /* FIXME: */ + assert(0); + } + + if (is_idr) + bitstream_put_ue(bs, 0); /* idr_pic_id: 0 */ + + if (seq_param->seq_fields.bits.pic_order_cnt_type == 0) { + bitstream_put_ui(bs, (display_frame*2) & 0x3F, seq_param->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 + 4); + /* only support frame */ + } else { + /* FIXME: */ + assert(0); + } + + /* redundant_pic_cnt_present_flag == 0 */ + + /* slice type */ + if (slice_type == SLICE_TYPE_P) { + bitstream_put_ui(bs, 0, 1); /* num_ref_idx_active_override_flag: 0 */ + /* ref_pic_list_reordering */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + } else if (slice_type == SLICE_TYPE_B) { + bitstream_put_ui(bs, 1, 1); /* direct_spatial_mv_pred: 1 */ + bitstream_put_ui(bs, 0, 1); /* num_ref_idx_active_override_flag: 0 */ + /* ref_pic_list_reordering */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l1: 0 */ + } + + /* weighted_pred_flag == 0 */ + + /* dec_ref_pic_marking */ + if (nal_ref_idc != 0) { + if ( is_idr) { + bitstream_put_ui(bs, 0, 1); /* no_output_of_prior_pics_flag: 0 */ + bitstream_put_ui(bs, 0, 1); /* long_term_reference_flag: 0 */ + } else { + bitstream_put_ui(bs, 0, 1); /* adaptive_ref_pic_marking_mode_flag: 0 */ + } + } + + if (is_cabac && (slice_type != SLICE_TYPE_I)) + bitstream_put_ue(bs, 0); /* cabac_init_idc: 0 */ + + bitstream_put_se(bs, 0); /* slice_qp_delta: 0 */ + + if (pic_param->pic_fields.bits.deblocking_filter_control_present_flag == 1) { + bitstream_put_ue(bs, 0); /* disable_deblocking_filter_idc: 0 */ + bitstream_put_se(bs, 2); /* slice_alpha_c0_offset_div2: 2 */ + bitstream_put_se(bs, 2); /* slice_beta_offset_div2: 2 */ + } +} + +static void +slice_data(bitstream *bs) +{ + VACodedBufferSegment *coded_buffer_segment; + unsigned char *coded_mem; + int i, slice_data_length; + VAStatus va_status; + VASurfaceStatus surface_status; + + va_status = vaSyncSurface(va_dpy, surface_ids[avcenc_context.current_input_surface]); + CHECK_VASTATUS(va_status,"vaSyncSurface"); + + surface_status = 0; + va_status = vaQuerySurfaceStatus(va_dpy, surface_ids[avcenc_context.current_input_surface], &surface_status); + CHECK_VASTATUS(va_status,"vaQuerySurfaceStatus"); + + va_status = vaMapBuffer(va_dpy, avcenc_context.codedbuf_buf_id, (void **)(&coded_buffer_segment)); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + coded_mem = coded_buffer_segment->buf; + + slice_data_length = get_coded_bitsteam_length(coded_mem, codedbuf_size); + + for (i = 0; i < slice_data_length; i++) { + bitstream_put_ui(bs, *coded_mem, 8); + coded_mem++; + } + + vaUnmapBuffer(va_dpy, avcenc_context.codedbuf_buf_id); +} + +static void +build_nal_slice(FILE *avc_fp, int frame_num, int display_frame, int slice_type, int is_idr) +{ + bitstream bs; + + bitstream_start(&bs); + slice_data(&bs); + bitstream_end(&bs, avc_fp); +} + +#endif + +static int +store_coded_buffer(FILE *avc_fp, int slice_type) +{ + VACodedBufferSegment *coded_buffer_segment; + unsigned char *coded_mem; + int slice_data_length; + VAStatus va_status; + VASurfaceStatus surface_status; + size_t w_items; + + va_status = vaSyncSurface(va_dpy, surface_ids[avcenc_context.current_input_surface]); + CHECK_VASTATUS(va_status,"vaSyncSurface"); + + surface_status = 0; + va_status = vaQuerySurfaceStatus(va_dpy, surface_ids[avcenc_context.current_input_surface], &surface_status); + CHECK_VASTATUS(va_status,"vaQuerySurfaceStatus"); + + va_status = vaMapBuffer(va_dpy, avcenc_context.codedbuf_buf_id, (void **)(&coded_buffer_segment)); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + coded_mem = coded_buffer_segment->buf; + + if (coded_buffer_segment->status & VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK) { + if (slice_type == SLICE_TYPE_I) + avcenc_context.codedbuf_i_size *= 2; + else + avcenc_context.codedbuf_pb_size *= 2; + + vaUnmapBuffer(va_dpy, avcenc_context.codedbuf_buf_id); + return -1; + } + + slice_data_length = coded_buffer_segment->size; + + do { + w_items = fwrite(coded_mem, slice_data_length, 1, avc_fp); + } while (w_items != 1); + + vaUnmapBuffer(va_dpy, avcenc_context.codedbuf_buf_id); + + return 0; +} + +/* + * It is from the h264encode.c but it simplifies something. + * For example: When one frame is encoded as I-frame under the scenario with + * P-B frames, it will be regarded as IDR frame(key-frame) and then new GOP is + * started. If the video clip is encoded as all I-frames, the first frame + * is regarded as IDR and the remaining is regarded as I-frame. + * + */ + +static void encoding2display_order( + unsigned long long encoding_order,int gop_size, + int ip_period, + unsigned long long *displaying_order, + int *frame_type) +{ + int encoding_order_gop = 0; + + /* When ip_period is 0, all are I/IDR frames */ + if (ip_period == 0) { /* all are I/IDR frames */ + if (encoding_order == 0) + *frame_type = FRAME_IDR; + else + *frame_type = SLICE_TYPE_I; + + *displaying_order = encoding_order; + return; + } + + /* new sequence like + * IDR PPPPP IDRPPPPP + * IDR (PBB)(PBB)(PBB)(PBB) IDR (PBB)(PBB)(PBB)(PBB) + */ + encoding_order_gop = encoding_order % gop_size; + + if (encoding_order_gop == 0) { /* the first frame */ + *frame_type = FRAME_IDR; + *displaying_order = encoding_order; + } else { + int gop_delta; + + gop_delta = 1; + + if ((ip_period != 1) && ((gop_size - 1) % ip_period)) { + int ipb_size; + ipb_size = (gop_size - 1) / ip_period * ip_period + 1; + if (encoding_order_gop >= ipb_size) { + gop_delta = ipb_size; + ip_period = gop_size - ipb_size; + } + } + + if (((encoding_order_gop - gop_delta) % ip_period) == 0) { /* P frames */ + *frame_type = SLICE_TYPE_P; + *displaying_order = encoding_order + ip_period - 1; + } else { + *frame_type = SLICE_TYPE_B; + *displaying_order = encoding_order - 1; + } + } +} + + +static void +encode_picture(FILE *yuv_fp, FILE *avc_fp, + int frame_num, int display_num, + int is_idr, + int slice_type, int next_is_bpic, + int next_display_num) +{ + VAStatus va_status; + int ret = 0, codedbuf_size; + + begin_picture(yuv_fp, frame_num, display_num, slice_type, is_idr); + + //if (next_display_num < frame_number) { + if (1) { + int index; + + /* prepare for next frame */ + if (avcenc_context.current_input_surface == SID_INPUT_PICTURE_0) + index = SID_INPUT_PICTURE_1; + else + index = SID_INPUT_PICTURE_0; + if ( next_display_num >= frame_number ) + next_display_num = frame_number - 1; + fseeko(yuv_fp, (off_t)frame_size * next_display_num, SEEK_SET); + + avcenc_context.upload_thread_param.yuv_fp = yuv_fp; + avcenc_context.upload_thread_param.surface_id = surface_ids[index]; + + avcenc_context.upload_thread_value = pthread_create(&avcenc_context.upload_thread_id, + NULL, + upload_thread_function, + (void*)&avcenc_context.upload_thread_param); + } + + do { + avcenc_destroy_buffers(&avcenc_context.codedbuf_buf_id, 1); + avcenc_destroy_buffers(&avcenc_context.pic_param_buf_id, 1); + + + if (SLICE_TYPE_I == slice_type) { + codedbuf_size = avcenc_context.codedbuf_i_size; + } else { + codedbuf_size = avcenc_context.codedbuf_pb_size; + } + + /* coded buffer */ + va_status = vaCreateBuffer(va_dpy, + avcenc_context.context_id, + VAEncCodedBufferType, + codedbuf_size, 1, NULL, + &avcenc_context.codedbuf_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + /* Update the RefPicList */ + update_RefPicList(); + + /* picture parameter set */ + avcenc_update_picture_parameter(slice_type, is_idr); + + /* slice parameter */ + avcenc_update_slice_parameter(slice_type); + + if (avcenc_context.rate_control_method == VA_RC_CBR) + avcenc_update_sei_param(is_idr); + + avcenc_render_picture(); + + ret = store_coded_buffer(avc_fp, slice_type); + } while (ret); + + end_picture(slice_type, next_is_bpic); +} + +static void show_help() +{ + printf("Usage: avnenc [qp=qpvalue|fb=framebitrate] [mode=0(I frames only)/1(I and P frames)/2(I, P and B frames)\n"); +} + +static void avcenc_context_seq_param_init(VAEncSequenceParameterBufferH264 *seq_param, + int width, int height) + +{ + int width_in_mbs = (width + 15) / 16; + int height_in_mbs = (height + 15) / 16; + int frame_cropping_flag = 0; + int frame_crop_bottom_offset = 0; + + seq_param->seq_parameter_set_id = 0; + seq_param->level_idc = 41; + seq_param->intra_period = intra_period; + seq_param->intra_idr_period = seq_param->intra_period; + seq_param->ip_period = ip_period; + seq_param->max_num_ref_frames = 4; + seq_param->picture_width_in_mbs = width_in_mbs; + seq_param->picture_height_in_mbs = height_in_mbs; + seq_param->seq_fields.bits.frame_mbs_only_flag = 1; + seq_param->seq_fields.bits.chroma_format_idc = 1; + + + if (frame_bit_rate > 0) + seq_param->bits_per_second = 1000 * frame_bit_rate; /* use kbps as input */ + else + seq_param->bits_per_second = 0; + + seq_param->time_scale = frame_rate * 2; + seq_param->num_units_in_tick = 1; /* Tc = num_units_in_tick / time_sacle */ + + if (height_in_mbs * 16 - height) { + frame_cropping_flag = 1; + frame_crop_bottom_offset = + (height_in_mbs * 16 - height) / (2 * (!seq_param->seq_fields.bits.frame_mbs_only_flag + 1)); + } + + seq_param->frame_cropping_flag = frame_cropping_flag; + seq_param->frame_crop_left_offset = 0; + seq_param->frame_crop_right_offset = 0; + seq_param->frame_crop_top_offset = 0; + seq_param->frame_crop_bottom_offset = frame_crop_bottom_offset; + + seq_param->seq_fields.bits.pic_order_cnt_type = 0; + seq_param->seq_fields.bits.direct_8x8_inference_flag = 0; + + seq_param->seq_fields.bits.log2_max_frame_num_minus4 = Log2MaxFrameNum - 4; + seq_param->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 = Log2MaxPicOrderCntLsb - 4; + + if (frame_bit_rate > 0) + seq_param->vui_parameters_present_flag = 1; //HRD info located in vui + else + seq_param->vui_parameters_present_flag = 0; +} + +static void avcenc_context_pic_param_init(VAEncPictureParameterBufferH264 *pic_param) +{ + pic_param->seq_parameter_set_id = 0; + pic_param->pic_parameter_set_id = 0; + + pic_param->last_picture = 0; + pic_param->frame_num = 0; + + pic_param->pic_init_qp = (qp_value >= 0 ? qp_value : 26); + pic_param->num_ref_idx_l0_active_minus1 = 0; + pic_param->num_ref_idx_l1_active_minus1 = 0; + + pic_param->pic_fields.bits.idr_pic_flag = 0; + pic_param->pic_fields.bits.reference_pic_flag = 0; + pic_param->pic_fields.bits.entropy_coding_mode_flag = ENTROPY_MODE_CABAC; + pic_param->pic_fields.bits.weighted_pred_flag = 0; + pic_param->pic_fields.bits.weighted_bipred_idc = 0; + + if (avcenc_context.constraint_set_flag & 0x7) + pic_param->pic_fields.bits.transform_8x8_mode_flag = 0; + else + pic_param->pic_fields.bits.transform_8x8_mode_flag = 1; + + pic_param->pic_fields.bits.deblocking_filter_control_present_flag = 1; + + memset(pic_param->ReferenceFrames, 0xff, 16 * sizeof(VAPictureH264)); /* invalid all */ +} + +static void avcenc_context_sei_init() +{ + /* it comes for the bps defined in SPS */ + avcenc_context.i_initial_cpb_removal_delay = 2 * 90000; + avcenc_context.i_initial_cpb_removal_delay_offset = 2 * 90000; + + avcenc_context.i_cpb_removal_delay = 2; + avcenc_context.i_initial_cpb_removal_delay_length = 24; + avcenc_context.i_cpb_removal_delay_length = 24; + avcenc_context.i_dpb_output_delay_length = 24; + avcenc_context.time_offset_length = 24; + + avcenc_context.prev_idr_cpb_removal = avcenc_context.i_initial_cpb_removal_delay / 90000; + avcenc_context.current_idr_cpb_removal = avcenc_context.prev_idr_cpb_removal; + avcenc_context.current_cpb_removal = 0; + avcenc_context.idr_frame_num = 0; +} + +static void avcenc_context_init(int width, int height) +{ + int i; + memset(&avcenc_context, 0, sizeof(avcenc_context)); + avcenc_context.profile = VAProfileH264Main; + + memset(&use_slot, 0, sizeof(use_slot)); + switch (avcenc_context.profile) { + case VAProfileH264Baseline: + avcenc_context.constraint_set_flag |= (1 << 0); /* Annex A.2.1 */ + break; + + case VAProfileH264Main: + avcenc_context.constraint_set_flag |= (1 << 1); /* Annex A.2.2 */ + break; + + case VAProfileH264High: + avcenc_context.constraint_set_flag |= (1 << 3); /* Annex A.2.4 */ + break; + + default: + break; + } + + avcenc_context.seq_param_buf_id = VA_INVALID_ID; + avcenc_context.pic_param_buf_id = VA_INVALID_ID; + avcenc_context.packed_seq_header_param_buf_id = VA_INVALID_ID; + avcenc_context.packed_seq_buf_id = VA_INVALID_ID; + avcenc_context.packed_pic_header_param_buf_id = VA_INVALID_ID; + avcenc_context.packed_pic_buf_id = VA_INVALID_ID; + avcenc_context.codedbuf_buf_id = VA_INVALID_ID; + avcenc_context.misc_parameter_hrd_buf_id = VA_INVALID_ID; + avcenc_context.codedbuf_i_size = width * height; + avcenc_context.codedbuf_pb_size = width * height; + avcenc_context.current_input_surface = SID_INPUT_PICTURE_0; + avcenc_context.upload_thread_value = -1; + avcenc_context.packed_sei_header_param_buf_id = VA_INVALID_ID; + avcenc_context.packed_sei_buf_id = VA_INVALID_ID; + + if (qp_value == -1) + avcenc_context.rate_control_method = VA_RC_CBR; + else if (qp_value == -2) + avcenc_context.rate_control_method = VA_RC_VBR; + else { + assert(qp_value >= 0 && qp_value <= 51); + avcenc_context.rate_control_method = VA_RC_CQP; + } + + for (i = 0; i < MAX_SLICES; i++) { + avcenc_context.slice_param_buf_id[i] = VA_INVALID_ID; + } + + avcenc_context_seq_param_init(&avcenc_context.seq_param, width, height); + avcenc_context_pic_param_init(&avcenc_context.pic_param); + if (avcenc_context.rate_control_method == VA_RC_CBR) + avcenc_context_sei_init(); +} + +int main(int argc, char *argv[]) +{ + int f; + FILE *yuv_fp; + FILE *avc_fp; + off_t file_size; + int mode_value; + struct timeval tpstart,tpend; + float timeuse; + + va_init_display_args(&argc, argv); + + //TODO may be we should using option analytics library + if(argc != 5 && argc != 6 && argc != 7) { + show_help(); + return -1; + } + + picture_width = atoi(argv[1]); + picture_height = atoi(argv[2]); + picture_width_in_mbs = (picture_width + 15) / 16; + picture_height_in_mbs = (picture_height + 15) / 16; + + if (argc == 6 || argc == 7) { + qp_value = -1; + sscanf(argv[5], "qp=%d", &qp_value); + if ( qp_value == -1 ) { + frame_bit_rate = -1; + sscanf(argv[5], "fb=%d", &frame_bit_rate); + if ( frame_bit_rate == -1 ) { + show_help(); + return -1; + } + } else if (qp_value > 51) { + qp_value = 51; + } else if (qp_value < 0) { + qp_value = 0; + } + } else + qp_value = 28; //default const QP mode + + if (argc == 7) { + sscanf(argv[6], "mode=%d", &mode_value); + if ( mode_value == 0 ) { + ip_period = 0; + } + else if ( mode_value == 1) { + ip_period = 1; + } + else if ( mode_value == 2 ) { + /* Hack mechanism before adding the parameter of B-frame number */ + ip_period = 3; + } + else { + printf("mode_value=%d\n",mode_value); + show_help(); + return -1; + } + } + + yuv_fp = fopen(argv[3],"rb"); + if ( yuv_fp == NULL){ + printf("Can't open input YUV file\n"); + return -1; + } + fseeko(yuv_fp, (off_t)0, SEEK_END); + file_size = ftello(yuv_fp); + frame_size = picture_width * picture_height + ((picture_width * picture_height) >> 1) ; + + if ( (file_size < frame_size) || (file_size % frame_size) ) { + fclose(yuv_fp); + printf("The YUV file's size is not correct\n"); + return -1; + } + frame_number = file_size / frame_size; + fseeko(yuv_fp, (off_t)0, SEEK_SET); + + avc_fp = fopen(argv[4], "wb"); + if ( avc_fp == NULL) { + fclose(yuv_fp); + printf("Can't open output avc file\n"); + return -1; + } + gettimeofday(&tpstart,NULL); + avcenc_context_init(picture_width, picture_height); + create_encode_pipe(); + alloc_encode_resource(yuv_fp); + + enc_frame_number = 0; + for ( f = 0; f < frame_number; f++) { //picture level loop + unsigned long long next_frame_display; + int next_frame_type; + + enc_frame_number = f; + + encoding2display_order(enc_frame_number, intra_period, ip_period, + ¤t_frame_display, ¤t_frame_type); + + encoding2display_order(enc_frame_number + 1, intra_period, ip_period, + &next_frame_display, &next_frame_type); + + if (current_frame_type == FRAME_IDR) { + numShortTerm = 0; + current_frame_num = 0; + memset(&use_slot, 0, sizeof(use_slot)); + current_IDR_display = current_frame_display; + if (avcenc_context.rate_control_method == VA_RC_CBR) { + unsigned long long frame_interval; + + frame_interval = enc_frame_number - avcenc_context.idr_frame_num; + + /* Based on the H264 spec the removal time of the IDR access + * unit is derived as the following: + * the removal time of previous IDR unit + Tc * cpb_removal_delay(n) + */ + avcenc_context.current_cpb_removal = avcenc_context.prev_idr_cpb_removal + + frame_interval * 2; + avcenc_context.idr_frame_num = enc_frame_number; + avcenc_context.current_idr_cpb_removal = avcenc_context.current_cpb_removal; + if (ip_period) + avcenc_context.current_dpb_removal_delta = (ip_period + 1) * 2; + else + avcenc_context.current_dpb_removal_delta = 2; + } + } else { + if (avcenc_context.rate_control_method == VA_RC_CBR) { + unsigned long long frame_interval; + + frame_interval = enc_frame_number - avcenc_context.idr_frame_num; + + /* Based on the H264 spec the removal time of the non-IDR access + * unit is derived as the following: + * the removal time of current IDR unit + Tc * cpb_removal_delay(n) + */ + avcenc_context.current_cpb_removal = avcenc_context.current_idr_cpb_removal + + frame_interval * 2; + if (current_frame_type == SLICE_TYPE_I || + current_frame_type == SLICE_TYPE_P) { + if (ip_period) + avcenc_context.current_dpb_removal_delta = (ip_period + 1) * 2; + else + avcenc_context.current_dpb_removal_delta = 2; + } else + avcenc_context.current_dpb_removal_delta = 2; + } + } + + /* use the simple mechanism to calc the POC */ + current_poc = (current_frame_display - current_IDR_display) * 2; + + encode_picture(yuv_fp, avc_fp, frame_number, current_frame_display, + (current_frame_type == FRAME_IDR) ? 1 : 0, + (current_frame_type == FRAME_IDR) ? SLICE_TYPE_I : current_frame_type, + (next_frame_type == SLICE_TYPE_B) ? 1 : 0, + next_frame_display); + if ((current_frame_type == FRAME_IDR) && + (avcenc_context.rate_control_method == VA_RC_CBR)) { + /* after one IDR frame is written, it needs to update the + * prev_idr_cpb_removal for next IDR + */ + avcenc_context.prev_idr_cpb_removal = avcenc_context.current_idr_cpb_removal; + } + printf("\r %d/%d ...", f, frame_number); + fflush(stdout); + } + + gettimeofday(&tpend,NULL); + timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec; + timeuse/=1000000; + printf("\ndone!\n"); + printf("encode %d frames in %f secondes, FPS is %.1f\n",frame_number, timeuse, frame_number/timeuse); + release_encode_resource(); + destory_encode_pipe(); + + fclose(yuv_fp); + fclose(avc_fp); + + return 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/h264encode.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/h264encode.c new file mode 100644 index 000000000..ce96f92d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/h264encode.c @@ -0,0 +1,2387 @@ +/* + * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "sysdeps.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "va_display.h" + +#define CHECK_VASTATUS(va_status,func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ + } + +#include "../loadsurface.h" + +#define NAL_REF_IDC_NONE 0 +#define NAL_REF_IDC_LOW 1 +#define NAL_REF_IDC_MEDIUM 2 +#define NAL_REF_IDC_HIGH 3 + +#define NAL_NON_IDR 1 +#define NAL_IDR 5 +#define NAL_SPS 7 +#define NAL_PPS 8 +#define NAL_SEI 6 + +#define SLICE_TYPE_P 0 +#define SLICE_TYPE_B 1 +#define SLICE_TYPE_I 2 +#define IS_P_SLICE(type) (SLICE_TYPE_P == (type)) +#define IS_B_SLICE(type) (SLICE_TYPE_B == (type)) +#define IS_I_SLICE(type) (SLICE_TYPE_I == (type)) + + +#define ENTROPY_MODE_CAVLC 0 +#define ENTROPY_MODE_CABAC 1 + +#define PROFILE_IDC_BASELINE 66 +#define PROFILE_IDC_MAIN 77 +#define PROFILE_IDC_HIGH 100 + +#define BITSTREAM_ALLOCATE_STEPPING 4096 + +#define SURFACE_NUM 16 /* 16 surfaces for source YUV */ +#define SURFACE_NUM 16 /* 16 surfaces for reference */ +static VADisplay va_dpy; +static VAProfile h264_profile = ~0; +static VAConfigAttrib attrib[VAConfigAttribTypeMax]; +static VAConfigAttrib config_attrib[VAConfigAttribTypeMax]; +static int config_attrib_num = 0, enc_packed_header_idx; +static VASurfaceID src_surface[SURFACE_NUM]; +static VABufferID coded_buf[SURFACE_NUM]; +static VASurfaceID ref_surface[SURFACE_NUM]; +static VAConfigID config_id; +static VAContextID context_id; +static VAEncSequenceParameterBufferH264 seq_param; +static VAEncPictureParameterBufferH264 pic_param; +static VAEncSliceParameterBufferH264 slice_param; +static VAPictureH264 CurrentCurrPic; +static VAPictureH264 ReferenceFrames[16], RefPicList0_P[32], RefPicList0_B[32], RefPicList1_B[32]; + +static unsigned int MaxFrameNum = (2<<16); +static unsigned int MaxPicOrderCntLsb = (2<<8); +static unsigned int Log2MaxFrameNum = 16; +static unsigned int Log2MaxPicOrderCntLsb = 8; + +static unsigned int num_ref_frames = 2; +static unsigned int numShortTerm = 0; +static int constraint_set_flag = 0; +static int h264_packedheader = 0; /* support pack header? */ +static int h264_maxref = (1<<16|1); +static int h264_entropy_mode = 1; /* cabac */ + +static char *coded_fn = NULL, *srcyuv_fn = NULL, *recyuv_fn = NULL; +static FILE *coded_fp = NULL, *srcyuv_fp = NULL, *recyuv_fp = NULL; +static unsigned long long srcyuv_frames = 0; +static int srcyuv_fourcc = VA_FOURCC_NV12; +static int calc_psnr = 0; + +static int frame_width = 176; +static int frame_height = 144; +static int frame_width_mbaligned; +static int frame_height_mbaligned; +static int frame_rate = 30; +static unsigned int frame_count = 60; +static unsigned int frame_coded = 0; +static unsigned int frame_bitrate = 0; +static unsigned int frame_slices = 1; +static double frame_size = 0; +static int initial_qp = 26; +static int minimal_qp = 0; +static int intra_period = 30; +static int intra_idr_period = 60; +static int ip_period = 1; +static int rc_mode = -1; +static int rc_default_modes[] = { + VA_RC_VBR, + VA_RC_CQP, + VA_RC_VBR_CONSTRAINED, + VA_RC_CBR, + VA_RC_VCM, + VA_RC_NONE, +}; +static unsigned long long current_frame_encoding = 0; +static unsigned long long current_frame_display = 0; +static unsigned long long current_IDR_display = 0; +static unsigned int current_frame_num = 0; +static int current_frame_type; +#define current_slot (current_frame_display % SURFACE_NUM) + +static int misc_priv_type = 0; +static int misc_priv_value = 0; + +#define MIN(a, b) ((a)>(b)?(b):(a)) +#define MAX(a, b) ((a)>(b)?(a):(b)) + +/* thread to save coded data/upload source YUV */ +struct storage_task_t { + void *next; + unsigned long long display_order; + unsigned long long encode_order; +}; +static struct storage_task_t *storage_task_header = NULL, *storage_task_tail = NULL; +#define SRC_SURFACE_IN_ENCODING 0 +#define SRC_SURFACE_IN_STORAGE 1 +static int srcsurface_status[SURFACE_NUM]; +static int encode_syncmode = 0; +static pthread_mutex_t encode_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t encode_cond = PTHREAD_COND_INITIALIZER; +static pthread_t encode_thread; + +/* for performance profiling */ +static unsigned int UploadPictureTicks=0; +static unsigned int BeginPictureTicks=0; +static unsigned int RenderPictureTicks=0; +static unsigned int EndPictureTicks=0; +static unsigned int SyncPictureTicks=0; +static unsigned int SavePictureTicks=0; +static unsigned int TotalTicks=0; + +struct __bitstream { + unsigned int *buffer; + int bit_offset; + int max_size_in_dword; +}; +typedef struct __bitstream bitstream; + + +static unsigned int +va_swap32(unsigned int val) +{ + unsigned char *pval = (unsigned char *)&val; + + return ((pval[0] << 24) | + (pval[1] << 16) | + (pval[2] << 8) | + (pval[3] << 0)); +} + +static void +bitstream_start(bitstream *bs) +{ + bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1); + bs->bit_offset = 0; +} + +static void +bitstream_end(bitstream *bs) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (bit_offset) { + bs->buffer[pos] = va_swap32((bs->buffer[pos] << bit_left)); + } +} + +static void +bitstream_put_ui(bitstream *bs, unsigned int val, int size_in_bits) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (!size_in_bits) + return; + + bs->bit_offset += size_in_bits; + + if (bit_left > size_in_bits) { + bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val); + } else { + size_in_bits -= bit_left; + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits); + bs->buffer[pos] = va_swap32(bs->buffer[pos]); + + if (pos + 1 == bs->max_size_in_dword) { + bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int)); + } + + bs->buffer[pos + 1] = val; + } +} + +static void +bitstream_put_ue(bitstream *bs, unsigned int val) +{ + int size_in_bits = 0; + int tmp_val = ++val; + + while (tmp_val) { + tmp_val >>= 1; + size_in_bits++; + } + + bitstream_put_ui(bs, 0, size_in_bits - 1); // leading zero + bitstream_put_ui(bs, val, size_in_bits); +} + +static void +bitstream_put_se(bitstream *bs, int val) +{ + unsigned int new_val; + + if (val <= 0) + new_val = -2 * val; + else + new_val = 2 * val - 1; + + bitstream_put_ue(bs, new_val); +} + +static void +bitstream_byte_aligning(bitstream *bs, int bit) +{ + int bit_offset = (bs->bit_offset & 0x7); + int bit_left = 8 - bit_offset; + int new_val; + + if (!bit_offset) + return; + + assert(bit == 0 || bit == 1); + + if (bit) + new_val = (1 << bit_left) - 1; + else + new_val = 0; + + bitstream_put_ui(bs, new_val, bit_left); +} + +static void +rbsp_trailing_bits(bitstream *bs) +{ + bitstream_put_ui(bs, 1, 1); + bitstream_byte_aligning(bs, 0); +} + +static void nal_start_code_prefix(bitstream *bs) +{ + bitstream_put_ui(bs, 0x00000001, 32); +} + +static void nal_header(bitstream *bs, int nal_ref_idc, int nal_unit_type) +{ + bitstream_put_ui(bs, 0, 1); /* forbidden_zero_bit: 0 */ + bitstream_put_ui(bs, nal_ref_idc, 2); + bitstream_put_ui(bs, nal_unit_type, 5); +} + +static void sps_rbsp(bitstream *bs) +{ + int profile_idc = PROFILE_IDC_BASELINE; + + if (h264_profile == VAProfileH264High) + profile_idc = PROFILE_IDC_HIGH; + else if (h264_profile == VAProfileH264Main) + profile_idc = PROFILE_IDC_MAIN; + + bitstream_put_ui(bs, profile_idc, 8); /* profile_idc */ + bitstream_put_ui(bs, !!(constraint_set_flag & 1), 1); /* constraint_set0_flag */ + bitstream_put_ui(bs, !!(constraint_set_flag & 2), 1); /* constraint_set1_flag */ + bitstream_put_ui(bs, !!(constraint_set_flag & 4), 1); /* constraint_set2_flag */ + bitstream_put_ui(bs, !!(constraint_set_flag & 8), 1); /* constraint_set3_flag */ + bitstream_put_ui(bs, 0, 4); /* reserved_zero_4bits */ + bitstream_put_ui(bs, seq_param.level_idc, 8); /* level_idc */ + bitstream_put_ue(bs, seq_param.seq_parameter_set_id); /* seq_parameter_set_id */ + + if ( profile_idc == PROFILE_IDC_HIGH) { + bitstream_put_ue(bs, 1); /* chroma_format_idc = 1, 4:2:0 */ + bitstream_put_ue(bs, 0); /* bit_depth_luma_minus8 */ + bitstream_put_ue(bs, 0); /* bit_depth_chroma_minus8 */ + bitstream_put_ui(bs, 0, 1); /* qpprime_y_zero_transform_bypass_flag */ + bitstream_put_ui(bs, 0, 1); /* seq_scaling_matrix_present_flag */ + } + + bitstream_put_ue(bs, seq_param.seq_fields.bits.log2_max_frame_num_minus4); /* log2_max_frame_num_minus4 */ + bitstream_put_ue(bs, seq_param.seq_fields.bits.pic_order_cnt_type); /* pic_order_cnt_type */ + + if (seq_param.seq_fields.bits.pic_order_cnt_type == 0) + bitstream_put_ue(bs, seq_param.seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4); /* log2_max_pic_order_cnt_lsb_minus4 */ + else { + assert(0); + } + + bitstream_put_ue(bs, seq_param.max_num_ref_frames); /* num_ref_frames */ + bitstream_put_ui(bs, 0, 1); /* gaps_in_frame_num_value_allowed_flag */ + + bitstream_put_ue(bs, seq_param.picture_width_in_mbs - 1); /* pic_width_in_mbs_minus1 */ + bitstream_put_ue(bs, seq_param.picture_height_in_mbs - 1); /* pic_height_in_map_units_minus1 */ + bitstream_put_ui(bs, seq_param.seq_fields.bits.frame_mbs_only_flag, 1); /* frame_mbs_only_flag */ + + if (!seq_param.seq_fields.bits.frame_mbs_only_flag) { + assert(0); + } + + bitstream_put_ui(bs, seq_param.seq_fields.bits.direct_8x8_inference_flag, 1); /* direct_8x8_inference_flag */ + bitstream_put_ui(bs, seq_param.frame_cropping_flag, 1); /* frame_cropping_flag */ + + if (seq_param.frame_cropping_flag) { + bitstream_put_ue(bs, seq_param.frame_crop_left_offset); /* frame_crop_left_offset */ + bitstream_put_ue(bs, seq_param.frame_crop_right_offset); /* frame_crop_right_offset */ + bitstream_put_ue(bs, seq_param.frame_crop_top_offset); /* frame_crop_top_offset */ + bitstream_put_ue(bs, seq_param.frame_crop_bottom_offset); /* frame_crop_bottom_offset */ + } + + //if ( frame_bit_rate < 0 ) { //TODO EW: the vui header isn't correct + if ( 1 ) { + bitstream_put_ui(bs, 0, 1); /* vui_parameters_present_flag */ + } else { + bitstream_put_ui(bs, 1, 1); /* vui_parameters_present_flag */ + bitstream_put_ui(bs, 0, 1); /* aspect_ratio_info_present_flag */ + bitstream_put_ui(bs, 0, 1); /* overscan_info_present_flag */ + bitstream_put_ui(bs, 0, 1); /* video_signal_type_present_flag */ + bitstream_put_ui(bs, 0, 1); /* chroma_loc_info_present_flag */ + bitstream_put_ui(bs, 1, 1); /* timing_info_present_flag */ + { + bitstream_put_ui(bs, 15, 32); + bitstream_put_ui(bs, 900, 32); + bitstream_put_ui(bs, 1, 1); + } + bitstream_put_ui(bs, 1, 1); /* nal_hrd_parameters_present_flag */ + { + // hrd_parameters + bitstream_put_ue(bs, 0); /* cpb_cnt_minus1 */ + bitstream_put_ui(bs, 4, 4); /* bit_rate_scale */ + bitstream_put_ui(bs, 6, 4); /* cpb_size_scale */ + + bitstream_put_ue(bs, frame_bitrate - 1); /* bit_rate_value_minus1[0] */ + bitstream_put_ue(bs, frame_bitrate*8 - 1); /* cpb_size_value_minus1[0] */ + bitstream_put_ui(bs, 1, 1); /* cbr_flag[0] */ + + bitstream_put_ui(bs, 23, 5); /* initial_cpb_removal_delay_length_minus1 */ + bitstream_put_ui(bs, 23, 5); /* cpb_removal_delay_length_minus1 */ + bitstream_put_ui(bs, 23, 5); /* dpb_output_delay_length_minus1 */ + bitstream_put_ui(bs, 23, 5); /* time_offset_length */ + } + bitstream_put_ui(bs, 0, 1); /* vcl_hrd_parameters_present_flag */ + bitstream_put_ui(bs, 0, 1); /* low_delay_hrd_flag */ + + bitstream_put_ui(bs, 0, 1); /* pic_struct_present_flag */ + bitstream_put_ui(bs, 0, 1); /* bitstream_restriction_flag */ + } + + rbsp_trailing_bits(bs); /* rbsp_trailing_bits */ +} + + +static void pps_rbsp(bitstream *bs) +{ + bitstream_put_ue(bs, pic_param.pic_parameter_set_id); /* pic_parameter_set_id */ + bitstream_put_ue(bs, pic_param.seq_parameter_set_id); /* seq_parameter_set_id */ + + bitstream_put_ui(bs, pic_param.pic_fields.bits.entropy_coding_mode_flag, 1); /* entropy_coding_mode_flag */ + + bitstream_put_ui(bs, 0, 1); /* pic_order_present_flag: 0 */ + + bitstream_put_ue(bs, 0); /* num_slice_groups_minus1 */ + + bitstream_put_ue(bs, pic_param.num_ref_idx_l0_active_minus1); /* num_ref_idx_l0_active_minus1 */ + bitstream_put_ue(bs, pic_param.num_ref_idx_l1_active_minus1); /* num_ref_idx_l1_active_minus1 1 */ + + bitstream_put_ui(bs, pic_param.pic_fields.bits.weighted_pred_flag, 1); /* weighted_pred_flag: 0 */ + bitstream_put_ui(bs, pic_param.pic_fields.bits.weighted_bipred_idc, 2); /* weighted_bipred_idc: 0 */ + + bitstream_put_se(bs, pic_param.pic_init_qp - 26); /* pic_init_qp_minus26 */ + bitstream_put_se(bs, 0); /* pic_init_qs_minus26 */ + bitstream_put_se(bs, 0); /* chroma_qp_index_offset */ + + bitstream_put_ui(bs, pic_param.pic_fields.bits.deblocking_filter_control_present_flag, 1); /* deblocking_filter_control_present_flag */ + bitstream_put_ui(bs, 0, 1); /* constrained_intra_pred_flag */ + bitstream_put_ui(bs, 0, 1); /* redundant_pic_cnt_present_flag */ + + /* more_rbsp_data */ + bitstream_put_ui(bs, pic_param.pic_fields.bits.transform_8x8_mode_flag, 1); /*transform_8x8_mode_flag */ + bitstream_put_ui(bs, 0, 1); /* pic_scaling_matrix_present_flag */ + bitstream_put_se(bs, pic_param.second_chroma_qp_index_offset ); /*second_chroma_qp_index_offset */ + + rbsp_trailing_bits(bs); +} + +static void slice_header(bitstream *bs) +{ + int first_mb_in_slice = slice_param.macroblock_address; + + bitstream_put_ue(bs, first_mb_in_slice); /* first_mb_in_slice: 0 */ + bitstream_put_ue(bs, slice_param.slice_type); /* slice_type */ + bitstream_put_ue(bs, slice_param.pic_parameter_set_id); /* pic_parameter_set_id: 0 */ + bitstream_put_ui(bs, pic_param.frame_num, seq_param.seq_fields.bits.log2_max_frame_num_minus4 + 4); /* frame_num */ + + /* frame_mbs_only_flag == 1 */ + if (!seq_param.seq_fields.bits.frame_mbs_only_flag) { + /* FIXME: */ + assert(0); + } + + if (pic_param.pic_fields.bits.idr_pic_flag) + bitstream_put_ue(bs, slice_param.idr_pic_id); /* idr_pic_id: 0 */ + + if (seq_param.seq_fields.bits.pic_order_cnt_type == 0) { + bitstream_put_ui(bs, pic_param.CurrPic.TopFieldOrderCnt, seq_param.seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 + 4); + /* pic_order_present_flag == 0 */ + } else { + /* FIXME: */ + assert(0); + } + + /* redundant_pic_cnt_present_flag == 0 */ + /* slice type */ + if (IS_P_SLICE(slice_param.slice_type)) { + bitstream_put_ui(bs, slice_param.num_ref_idx_active_override_flag, 1); /* num_ref_idx_active_override_flag: */ + + if (slice_param.num_ref_idx_active_override_flag) + bitstream_put_ue(bs, slice_param.num_ref_idx_l0_active_minus1); + + /* ref_pic_list_reordering */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + } else if (IS_B_SLICE(slice_param.slice_type)) { + bitstream_put_ui(bs, slice_param.direct_spatial_mv_pred_flag, 1); /* direct_spatial_mv_pred: 1 */ + + bitstream_put_ui(bs, slice_param.num_ref_idx_active_override_flag, 1); /* num_ref_idx_active_override_flag: */ + + if (slice_param.num_ref_idx_active_override_flag) { + bitstream_put_ue(bs, slice_param.num_ref_idx_l0_active_minus1); + bitstream_put_ue(bs, slice_param.num_ref_idx_l1_active_minus1); + } + + /* ref_pic_list_reordering */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l0: 0 */ + bitstream_put_ui(bs, 0, 1); /* ref_pic_list_reordering_flag_l1: 0 */ + } + + if ((pic_param.pic_fields.bits.weighted_pred_flag && + IS_P_SLICE(slice_param.slice_type)) || + ((pic_param.pic_fields.bits.weighted_bipred_idc == 1) && + IS_B_SLICE(slice_param.slice_type))) { + /* FIXME: fill weight/offset table */ + assert(0); + } + + /* dec_ref_pic_marking */ + if (pic_param.pic_fields.bits.reference_pic_flag) { /* nal_ref_idc != 0 */ + unsigned char no_output_of_prior_pics_flag = 0; + unsigned char long_term_reference_flag = 0; + unsigned char adaptive_ref_pic_marking_mode_flag = 0; + + if (pic_param.pic_fields.bits.idr_pic_flag) { + bitstream_put_ui(bs, no_output_of_prior_pics_flag, 1); /* no_output_of_prior_pics_flag: 0 */ + bitstream_put_ui(bs, long_term_reference_flag, 1); /* long_term_reference_flag: 0 */ + } else { + bitstream_put_ui(bs, adaptive_ref_pic_marking_mode_flag, 1); /* adaptive_ref_pic_marking_mode_flag: 0 */ + } + } + + if (pic_param.pic_fields.bits.entropy_coding_mode_flag && + !IS_I_SLICE(slice_param.slice_type)) + bitstream_put_ue(bs, slice_param.cabac_init_idc); /* cabac_init_idc: 0 */ + + bitstream_put_se(bs, slice_param.slice_qp_delta); /* slice_qp_delta: 0 */ + + /* ignore for SP/SI */ + + if (pic_param.pic_fields.bits.deblocking_filter_control_present_flag) { + bitstream_put_ue(bs, slice_param.disable_deblocking_filter_idc); /* disable_deblocking_filter_idc: 0 */ + + if (slice_param.disable_deblocking_filter_idc != 1) { + bitstream_put_se(bs, slice_param.slice_alpha_c0_offset_div2); /* slice_alpha_c0_offset_div2: 2 */ + bitstream_put_se(bs, slice_param.slice_beta_offset_div2); /* slice_beta_offset_div2: 2 */ + } + } + + if (pic_param.pic_fields.bits.entropy_coding_mode_flag) { + bitstream_byte_aligning(bs, 1); + } +} + +static int +build_packed_pic_buffer(unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_PPS); + pps_rbsp(&bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +static int +build_packed_seq_buffer(unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + nal_header(&bs, NAL_REF_IDC_HIGH, NAL_SPS); + sps_rbsp(&bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +static int +build_packed_sei_buffer_timing(unsigned int init_cpb_removal_length, + unsigned int init_cpb_removal_delay, + unsigned int init_cpb_removal_delay_offset, + unsigned int cpb_removal_length, + unsigned int cpb_removal_delay, + unsigned int dpb_output_length, + unsigned int dpb_output_delay, + unsigned char **sei_buffer) +{ + unsigned char *byte_buf; + int bp_byte_size, i, pic_byte_size; + + bitstream nal_bs; + bitstream sei_bp_bs, sei_pic_bs; + + bitstream_start(&sei_bp_bs); + bitstream_put_ue(&sei_bp_bs, 0); /*seq_parameter_set_id*/ + bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay, cpb_removal_length); + bitstream_put_ui(&sei_bp_bs, init_cpb_removal_delay_offset, cpb_removal_length); + if ( sei_bp_bs.bit_offset & 0x7) { + bitstream_put_ui(&sei_bp_bs, 1, 1); + } + bitstream_end(&sei_bp_bs); + bp_byte_size = (sei_bp_bs.bit_offset + 7) / 8; + + bitstream_start(&sei_pic_bs); + bitstream_put_ui(&sei_pic_bs, cpb_removal_delay, cpb_removal_length); + bitstream_put_ui(&sei_pic_bs, dpb_output_delay, dpb_output_length); + if ( sei_pic_bs.bit_offset & 0x7) { + bitstream_put_ui(&sei_pic_bs, 1, 1); + } + bitstream_end(&sei_pic_bs); + pic_byte_size = (sei_pic_bs.bit_offset + 7) / 8; + + bitstream_start(&nal_bs); + nal_start_code_prefix(&nal_bs); + nal_header(&nal_bs, NAL_REF_IDC_NONE, NAL_SEI); + + /* Write the SEI buffer period data */ + bitstream_put_ui(&nal_bs, 0, 8); + bitstream_put_ui(&nal_bs, bp_byte_size, 8); + + byte_buf = (unsigned char *)sei_bp_bs.buffer; + for(i = 0; i < bp_byte_size; i++) { + bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + /* write the SEI timing data */ + bitstream_put_ui(&nal_bs, 0x01, 8); + bitstream_put_ui(&nal_bs, pic_byte_size, 8); + + byte_buf = (unsigned char *)sei_pic_bs.buffer; + for(i = 0; i < pic_byte_size; i++) { + bitstream_put_ui(&nal_bs, byte_buf[i], 8); + } + free(byte_buf); + + rbsp_trailing_bits(&nal_bs); + bitstream_end(&nal_bs); + + *sei_buffer = (unsigned char *)nal_bs.buffer; + + return nal_bs.bit_offset; +} + +static int build_packed_slice_buffer(unsigned char **header_buffer) +{ + bitstream bs; + int is_idr = !!pic_param.pic_fields.bits.idr_pic_flag; + int is_ref = !!pic_param.pic_fields.bits.reference_pic_flag; + + bitstream_start(&bs); + nal_start_code_prefix(&bs); + + if (IS_I_SLICE(slice_param.slice_type)) { + nal_header(&bs, NAL_REF_IDC_HIGH, is_idr ? NAL_IDR : NAL_NON_IDR); + } else if (IS_P_SLICE(slice_param.slice_type)) { + nal_header(&bs, NAL_REF_IDC_MEDIUM, NAL_NON_IDR); + } else { + assert(IS_B_SLICE(slice_param.slice_type)); + nal_header(&bs, is_ref ? NAL_REF_IDC_LOW : NAL_REF_IDC_NONE, NAL_NON_IDR); + } + + slice_header(&bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + + +/* + * Helper function for profiling purposes + */ +static unsigned int GetTickCount() +{ + struct timeval tv; + if (gettimeofday(&tv, NULL)) + return 0; + return tv.tv_usec/1000+tv.tv_sec*1000; +} + +/* + Assume frame sequence is: Frame#0,#1,#2,...,#M,...,#X,... (encoding order) + 1) period between Frame #X and Frame #N = #X - #N + 2) 0 means infinite for intra_period/intra_idr_period, and 0 is invalid for ip_period + 3) intra_idr_period % intra_period (intra_period > 0) and intra_period % ip_period must be 0 + 4) intra_period and intra_idr_period take precedence over ip_period + 5) if ip_period > 1, intra_period and intra_idr_period are not the strict periods + of I/IDR frames, see bellow examples + ------------------------------------------------------------------- + intra_period intra_idr_period ip_period frame sequence (intra_period/intra_idr_period/ip_period) + 0 ignored 1 IDRPPPPPPP ... (No IDR/I any more) + 0 ignored >=2 IDR(PBB)(PBB)... (No IDR/I any more) + 1 0 ignored IDRIIIIIII... (No IDR any more) + 1 1 ignored IDR IDR IDR IDR... + 1 >=2 ignored IDRII IDRII IDR... (1/3/ignore) + >=2 0 1 IDRPPP IPPP I... (3/0/1) + >=2 0 >=2 IDR(PBB)(PBB)(IBB) (6/0/3) + (PBB)(IBB)(PBB)(IBB)... + >=2 >=2 1 IDRPPPPP IPPPPP IPPPPP (6/18/1) + IDRPPPPP IPPPPP IPPPPP... + >=2 >=2 >=2 {IDR(PBB)(PBB)(IBB)(PBB)(IBB)(PBB)} (6/18/3) + {IDR(PBB)(PBB)(IBB)(PBB)(IBB)(PBB)}... + {IDR(PBB)(PBB)(IBB)(PBB)} (6/12/3) + {IDR(PBB)(PBB)(IBB)(PBB)}... + {IDR(PBB)(PBB)} (6/6/3) + {IDR(PBB)(PBB)}. +*/ + +/* + * Return displaying order with specified periods and encoding order + * displaying_order: displaying order + * frame_type: frame type + */ +#define FRAME_P 0 +#define FRAME_B 1 +#define FRAME_I 2 +#define FRAME_IDR 7 +void encoding2display_order( + unsigned long long encoding_order,int intra_period, + int intra_idr_period,int ip_period, + unsigned long long *displaying_order, + int *frame_type) +{ + int encoding_order_gop = 0; + + if (intra_period == 1) { /* all are I/IDR frames */ + *displaying_order = encoding_order; + if (intra_idr_period == 0) + *frame_type = (encoding_order == 0)?FRAME_IDR:FRAME_I; + else + *frame_type = (encoding_order % intra_idr_period == 0)?FRAME_IDR:FRAME_I; + return; + } + + if (intra_period == 0) + intra_idr_period = 0; + + /* new sequence like + * IDR PPPPP IPPPPP + * IDR (PBB)(PBB)(IBB)(PBB) + */ + encoding_order_gop = (intra_idr_period == 0)? encoding_order: + (encoding_order % (intra_idr_period + ((ip_period == 1)?0:1))); + + if (encoding_order_gop == 0) { /* the first frame */ + *frame_type = FRAME_IDR; + *displaying_order = encoding_order; + } else if (((encoding_order_gop - 1) % ip_period) != 0) { /* B frames */ + *frame_type = FRAME_B; + *displaying_order = encoding_order - 1; + } else if ((intra_period != 0) && /* have I frames */ + (encoding_order_gop >= 2) && + ((ip_period == 1 && encoding_order_gop % intra_period == 0) || /* for IDR PPPPP IPPPP */ + /* for IDR (PBB)(PBB)(IBB) */ + (ip_period >= 2 && ((encoding_order_gop - 1) / ip_period % (intra_period / ip_period)) == 0))) { + *frame_type = FRAME_I; + *displaying_order = encoding_order + ip_period - 1; + } else { + *frame_type = FRAME_P; + *displaying_order = encoding_order + ip_period - 1; + } +} + + +static char *fourcc_to_string(int fourcc) +{ + switch (fourcc) { + case VA_FOURCC_NV12: + return "NV12"; + case VA_FOURCC_IYUV: + return "IYUV"; + case VA_FOURCC_YV12: + return "YV12"; + case VA_FOURCC_UYVY: + return "UYVY"; + default: + return "Unknown"; + } +} + +static int string_to_fourcc(char *str) +{ + int fourcc; + + if (!strncmp(str, "NV12", 4)) + fourcc = VA_FOURCC_NV12; + else if (!strncmp(str, "IYUV", 4)) + fourcc = VA_FOURCC_IYUV; + else if (!strncmp(str, "YV12", 4)) + fourcc = VA_FOURCC_YV12; + else if (!strncmp(str, "UYVY", 4)) + fourcc = VA_FOURCC_UYVY; + else { + printf("Unknow FOURCC\n"); + fourcc = -1; + } + return fourcc; +} + + +static char *rc_to_string(int rcmode) +{ + switch (rc_mode) { + case VA_RC_NONE: + return "NONE"; + case VA_RC_CBR: + return "CBR"; + case VA_RC_VBR: + return "VBR"; + case VA_RC_VCM: + return "VCM"; + case VA_RC_CQP: + return "CQP"; + case VA_RC_VBR_CONSTRAINED: + return "VBR_CONSTRAINED"; + default: + return "Unknown"; + } +} + +static int string_to_rc(char *str) +{ + int rc_mode; + + if (!strncmp(str, "NONE", 4)) + rc_mode = VA_RC_NONE; + else if (!strncmp(str, "CBR", 3)) + rc_mode = VA_RC_CBR; + else if (!strncmp(str, "VBR", 3)) + rc_mode = VA_RC_VBR; + else if (!strncmp(str, "VCM", 3)) + rc_mode = VA_RC_VCM; + else if (!strncmp(str, "CQP", 3)) + rc_mode = VA_RC_CQP; + else if (!strncmp(str, "VBR_CONSTRAINED", 15)) + rc_mode = VA_RC_VBR_CONSTRAINED; + else { + printf("Unknown RC mode\n"); + rc_mode = -1; + } + return rc_mode; +} + + +static int print_help(void) +{ + printf("./h264encode \n"); + printf(" -w -h \n"); + printf(" -framecount \n"); + printf(" -n \n"); + printf(" if set to 0 and srcyuv is set, the frame count is from srcuv file\n"); + printf(" -o \n"); + printf(" -f \n"); + printf(" --intra_period \n"); + printf(" --idr_period \n"); + printf(" --ip_period \n"); + printf(" --bitrate \n"); + printf(" --initialqp \n"); + printf(" --minqp \n"); + printf(" --rcmode \n"); + printf(" --syncmode: sequentially upload source, encoding, save result, no multi-thread\n"); + printf(" --srcyuv load YUV from a file\n"); + printf(" --fourcc source YUV fourcc\n"); + printf(" --recyuv save reconstructed YUV into a file\n"); + printf(" --enablePSNR calculate PSNR of recyuv vs. srcyuv\n"); + printf(" --entropy <0|1>, 1 means cabac, 0 cavlc\n"); + printf(" --profile \n"); + return 0; +} + +static int process_cmdline(int argc, char *argv[]) +{ + char c; + const struct option long_opts[] = { + {"help", no_argument, NULL, 0 }, + {"bitrate", required_argument, NULL, 1 }, + {"minqp", required_argument, NULL, 2 }, + {"initialqp", required_argument, NULL, 3 }, + {"intra_period", required_argument, NULL, 4 }, + {"idr_period", required_argument, NULL, 5 }, + {"ip_period", required_argument, NULL, 6 }, + {"rcmode", required_argument, NULL, 7 }, + {"srcyuv", required_argument, NULL, 9 }, + {"recyuv", required_argument, NULL, 10 }, + {"fourcc", required_argument, NULL, 11 }, + {"syncmode", no_argument, NULL, 12 }, + {"enablePSNR", no_argument, NULL, 13 }, + {"prit", required_argument, NULL, 14 }, + {"priv", required_argument, NULL, 15 }, + {"framecount", required_argument, NULL, 16 }, + {"entropy", required_argument, NULL, 17 }, + {"profile", required_argument, NULL, 18 }, + {NULL, no_argument, NULL, 0 }}; + int long_index; + + while ((c =getopt_long_only(argc,argv,"w:h:n:f:o:?",long_opts,&long_index)) != EOF) { + switch (c) { + case 'w': + frame_width = atoi(optarg); + break; + case 'h': + frame_height = atoi(optarg); + break; + case 'n': + case 16: + frame_count = atoi(optarg); + break; + case 'f': + frame_rate = atoi(optarg); + break; + case 'o': + coded_fn = strdup(optarg); + break; + case 0: + print_help(); + exit(0); + case 1: + frame_bitrate = atoi(optarg); + break; + case 2: + minimal_qp = atoi(optarg); + break; + case 3: + initial_qp = atoi(optarg); + break; + case 4: + intra_period = atoi(optarg); + break; + case 5: + intra_idr_period = atoi(optarg); + break; + case 6: + ip_period = atoi(optarg); + break; + case 7: + rc_mode = string_to_rc(optarg); + if (rc_mode < 0) { + print_help(); + exit(1); + } + break; + case 9: + srcyuv_fn = strdup(optarg); + break; + case 10: + recyuv_fn = strdup(optarg); + break; + case 11: + srcyuv_fourcc = string_to_fourcc(optarg); + if (srcyuv_fourcc <= 0) { + print_help(); + exit(1); + } + break; + case 12: + encode_syncmode = 1; + break; + case 13: + calc_psnr = 1; + break; + case 14: + misc_priv_type = strtol(optarg, NULL, 0); + break; + case 15: + misc_priv_value = strtol(optarg, NULL, 0); + break; + case 17: + h264_entropy_mode = atoi(optarg) ? 1: 0; + break; + case 18: + if (strncmp(optarg, "BP", 2) == 0) + h264_profile = VAProfileH264Baseline; + else if (strncmp(optarg, "MP", 2) == 0) + h264_profile = VAProfileH264Main; + else if (strncmp(optarg, "HP", 2) == 0) + h264_profile = VAProfileH264High; + else + h264_profile = 0; + break; + case ':': + case '?': + print_help(); + exit(0); + } + } + + if (ip_period < 1) { + printf(" ip_period must be greater than 0\n"); + exit(0); + } + if (intra_period != 1 && intra_period % ip_period != 0) { + printf(" intra_period must be a multiplier of ip_period\n"); + exit(0); + } + if (intra_period != 0 && intra_idr_period % intra_period != 0) { + printf(" intra_idr_period must be a multiplier of intra_period\n"); + exit(0); + } + + if (frame_bitrate == 0) + frame_bitrate = frame_width * frame_height * 12 * frame_rate / 50; + + /* open source file */ + if (srcyuv_fn) { + srcyuv_fp = fopen(srcyuv_fn,"r"); + + if (srcyuv_fp == NULL) + printf("Open source YUV file %s failed, use auto-generated YUV data\n", srcyuv_fn); + else { + struct stat tmp; + + fstat(fileno(srcyuv_fp), &tmp); + srcyuv_frames = tmp.st_size / (frame_width * frame_height * 1.5); + printf("Source YUV file %s with %llu frames\n", srcyuv_fn, srcyuv_frames); + + if (frame_count == 0) + frame_count = srcyuv_frames; + } + } + + /* open source file */ + if (recyuv_fn) { + recyuv_fp = fopen(recyuv_fn,"w+"); + + if (recyuv_fp == NULL) + printf("Open reconstructed YUV file %s failed\n", recyuv_fn); + } + + if (coded_fn == NULL) { + struct stat buf; + if (stat("/tmp", &buf) == 0) + coded_fn = strdup("/tmp/test.264"); + else if (stat("/sdcard", &buf) == 0) + coded_fn = strdup("/sdcard/test.264"); + else + coded_fn = strdup("./test.264"); + } + + /* store coded data into a file */ + coded_fp = fopen(coded_fn,"w+"); + if (coded_fp == NULL) { + printf("Open file %s failed, exit\n", coded_fn); + exit(1); + } + + frame_width_mbaligned = (frame_width + 15) & (~15); + frame_height_mbaligned = (frame_height + 15) & (~15); + if (frame_width != frame_width_mbaligned || + frame_height != frame_height_mbaligned) { + printf("Source frame is %dx%d and will code clip to %dx%d with crop\n", + frame_width, frame_height, + frame_width_mbaligned, frame_height_mbaligned + ); + } + + return 0; +} + +static int init_va(void) +{ + VAProfile profile_list[]={VAProfileH264High,VAProfileH264Main,VAProfileH264Baseline,VAProfileH264ConstrainedBaseline}; + VAEntrypoint *entrypoints; + int num_entrypoints, slice_entrypoint; + int support_encode = 0; + int major_ver, minor_ver; + VAStatus va_status; + unsigned int i; + + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + CHECK_VASTATUS(va_status, "vaInitialize"); + + num_entrypoints = vaMaxNumEntrypoints(va_dpy); + entrypoints = malloc(num_entrypoints * sizeof(*entrypoints)); + if (!entrypoints) { + fprintf(stderr, "error: failed to initialize VA entrypoints array\n"); + exit(1); + } + + /* use the highest profile */ + for (i = 0; i < sizeof(profile_list)/sizeof(profile_list[0]); i++) { + if ((h264_profile != ~0) && h264_profile != profile_list[i]) + continue; + + h264_profile = profile_list[i]; + vaQueryConfigEntrypoints(va_dpy, h264_profile, entrypoints, &num_entrypoints); + for (slice_entrypoint = 0; slice_entrypoint < num_entrypoints; slice_entrypoint++) { + if (entrypoints[slice_entrypoint] == VAEntrypointEncSlice) { + support_encode = 1; + break; + } + } + if (support_encode == 1) + break; + } + + if (support_encode == 0) { + printf("Can't find VAEntrypointEncSlice for H264 profiles\n"); + exit(1); + } else { + switch (h264_profile) { + case VAProfileH264Baseline: + printf("Use profile VAProfileH264Baseline\n"); + ip_period = 1; + constraint_set_flag |= (1 << 0); /* Annex A.2.1 */ + h264_entropy_mode = 0; + break; + case VAProfileH264ConstrainedBaseline: + printf("Use profile VAProfileH264ConstrainedBaseline\n"); + constraint_set_flag |= (1 << 0 | 1 << 1); /* Annex A.2.2 */ + ip_period = 1; + break; + + case VAProfileH264Main: + printf("Use profile VAProfileH264Main\n"); + constraint_set_flag |= (1 << 1); /* Annex A.2.2 */ + break; + + case VAProfileH264High: + constraint_set_flag |= (1 << 3); /* Annex A.2.4 */ + printf("Use profile VAProfileH264High\n"); + break; + default: + printf("unknow profile. Set to Baseline"); + h264_profile = VAProfileH264Baseline; + ip_period = 1; + constraint_set_flag |= (1 << 0); /* Annex A.2.1 */ + break; + } + } + + /* find out the format for the render target, and rate control mode */ + for (i = 0; i < VAConfigAttribTypeMax; i++) + attrib[i].type = i; + + va_status = vaGetConfigAttributes(va_dpy, h264_profile, VAEntrypointEncSlice, + &attrib[0], VAConfigAttribTypeMax); + CHECK_VASTATUS(va_status, "vaGetConfigAttributes"); + /* check the interested configattrib */ + if ((attrib[VAConfigAttribRTFormat].value & VA_RT_FORMAT_YUV420) == 0) { + printf("Not find desired YUV420 RT format\n"); + exit(1); + } else { + config_attrib[config_attrib_num].type = VAConfigAttribRTFormat; + config_attrib[config_attrib_num].value = VA_RT_FORMAT_YUV420; + config_attrib_num++; + } + + if (attrib[VAConfigAttribRateControl].value != VA_ATTRIB_NOT_SUPPORTED) { + int tmp = attrib[VAConfigAttribRateControl].value; + + printf("Support rate control mode (0x%x):", tmp); + + if (tmp & VA_RC_NONE) + printf("NONE "); + if (tmp & VA_RC_CBR) + printf("CBR "); + if (tmp & VA_RC_VBR) + printf("VBR "); + if (tmp & VA_RC_VCM) + printf("VCM "); + if (tmp & VA_RC_CQP) + printf("CQP "); + if (tmp & VA_RC_VBR_CONSTRAINED) + printf("VBR_CONSTRAINED "); + + printf("\n"); + + if (rc_mode == -1 || !(rc_mode & tmp)) { + if (rc_mode != -1) { + printf("Warning: Don't support the specified RateControl mode: %s!!!, switch to ", rc_to_string(rc_mode)); + } + + for (i = 0; i < sizeof(rc_default_modes) / sizeof(rc_default_modes[0]); i++) { + if (rc_default_modes[i] & tmp) { + rc_mode = rc_default_modes[i]; + break; + } + } + + printf("RateControl mode: %s\n", rc_to_string(rc_mode)); + } + + config_attrib[config_attrib_num].type = VAConfigAttribRateControl; + config_attrib[config_attrib_num].value = rc_mode; + config_attrib_num++; + } + + + if (attrib[VAConfigAttribEncPackedHeaders].value != VA_ATTRIB_NOT_SUPPORTED) { + int tmp = attrib[VAConfigAttribEncPackedHeaders].value; + + printf("Support VAConfigAttribEncPackedHeaders\n"); + + h264_packedheader = 1; + config_attrib[config_attrib_num].type = VAConfigAttribEncPackedHeaders; + config_attrib[config_attrib_num].value = VA_ENC_PACKED_HEADER_NONE; + + if (tmp & VA_ENC_PACKED_HEADER_SEQUENCE) { + printf("Support packed sequence headers\n"); + config_attrib[config_attrib_num].value |= VA_ENC_PACKED_HEADER_SEQUENCE; + } + + if (tmp & VA_ENC_PACKED_HEADER_PICTURE) { + printf("Support packed picture headers\n"); + config_attrib[config_attrib_num].value |= VA_ENC_PACKED_HEADER_PICTURE; + } + + if (tmp & VA_ENC_PACKED_HEADER_SLICE) { + printf("Support packed slice headers\n"); + config_attrib[config_attrib_num].value |= VA_ENC_PACKED_HEADER_SLICE; + } + + if (tmp & VA_ENC_PACKED_HEADER_MISC) { + printf("Support packed misc headers\n"); + config_attrib[config_attrib_num].value |= VA_ENC_PACKED_HEADER_MISC; + } + + enc_packed_header_idx = config_attrib_num; + config_attrib_num++; + } + + if (attrib[VAConfigAttribEncInterlaced].value != VA_ATTRIB_NOT_SUPPORTED) { + int tmp = attrib[VAConfigAttribEncInterlaced].value; + + printf("Support VAConfigAttribEncInterlaced\n"); + + if (tmp & VA_ENC_INTERLACED_FRAME) + printf("support VA_ENC_INTERLACED_FRAME\n"); + if (tmp & VA_ENC_INTERLACED_FIELD) + printf("Support VA_ENC_INTERLACED_FIELD\n"); + if (tmp & VA_ENC_INTERLACED_MBAFF) + printf("Support VA_ENC_INTERLACED_MBAFF\n"); + if (tmp & VA_ENC_INTERLACED_PAFF) + printf("Support VA_ENC_INTERLACED_PAFF\n"); + + config_attrib[config_attrib_num].type = VAConfigAttribEncInterlaced; + config_attrib[config_attrib_num].value = VA_ENC_PACKED_HEADER_NONE; + config_attrib_num++; + } + + if (attrib[VAConfigAttribEncMaxRefFrames].value != VA_ATTRIB_NOT_SUPPORTED) { + h264_maxref = attrib[VAConfigAttribEncMaxRefFrames].value; + + printf("Support %d RefPicList0 and %d RefPicList1\n", + h264_maxref & 0xffff, (h264_maxref >> 16) & 0xffff ); + } + + if (attrib[VAConfigAttribEncMaxSlices].value != VA_ATTRIB_NOT_SUPPORTED) + printf("Support %d slices\n", attrib[VAConfigAttribEncMaxSlices].value); + + if (attrib[VAConfigAttribEncSliceStructure].value != VA_ATTRIB_NOT_SUPPORTED) { + int tmp = attrib[VAConfigAttribEncSliceStructure].value; + + printf("Support VAConfigAttribEncSliceStructure\n"); + + if (tmp & VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS) + printf("Support VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS\n"); + if (tmp & VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS) + printf("Support VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS\n"); + if (tmp & VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS) + printf("Support VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS\n"); + } + if (attrib[VAConfigAttribEncMacroblockInfo].value != VA_ATTRIB_NOT_SUPPORTED) { + printf("Support VAConfigAttribEncMacroblockInfo\n"); + } + + free(entrypoints); + return 0; +} + +static int setup_encode() +{ + VAStatus va_status; + VASurfaceID *tmp_surfaceid; + int codedbuf_size, i; + + va_status = vaCreateConfig(va_dpy, h264_profile, VAEntrypointEncSlice, + &config_attrib[0], config_attrib_num, &config_id); + CHECK_VASTATUS(va_status, "vaCreateConfig"); + + /* create source surfaces */ + va_status = vaCreateSurfaces(va_dpy, + VA_RT_FORMAT_YUV420, frame_width_mbaligned, frame_height_mbaligned, + &src_surface[0], SURFACE_NUM, + NULL, 0); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + /* create reference surfaces */ + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, frame_width_mbaligned, frame_height_mbaligned, + &ref_surface[0], SURFACE_NUM, + NULL, 0 + ); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + tmp_surfaceid = calloc(2 * SURFACE_NUM, sizeof(VASurfaceID)); + memcpy(tmp_surfaceid, src_surface, SURFACE_NUM * sizeof(VASurfaceID)); + memcpy(tmp_surfaceid + SURFACE_NUM, ref_surface, SURFACE_NUM * sizeof(VASurfaceID)); + + /* Create a context for this encode pipe */ + va_status = vaCreateContext(va_dpy, config_id, + frame_width_mbaligned, frame_height_mbaligned, + VA_PROGRESSIVE, + tmp_surfaceid, 2 * SURFACE_NUM, + &context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); + free(tmp_surfaceid); + + codedbuf_size = (frame_width_mbaligned * frame_height_mbaligned * 400) / (16*16); + + for (i = 0; i < SURFACE_NUM; i++) { + /* create coded buffer once for all + * other VA buffers which won't be used again after vaRenderPicture. + * so APP can always vaCreateBuffer for every frame + * but coded buffer need to be mapped and accessed after vaRenderPicture/vaEndPicture + * so VA won't maintain the coded buffer + */ + va_status = vaCreateBuffer(va_dpy,context_id,VAEncCodedBufferType, + codedbuf_size, 1, NULL, &coded_buf[i]); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + } + + return 0; +} + + + +#define partition(ref, field, key, ascending) \ + while (i <= j) { \ + if (ascending) { \ + while (ref[i].field < key) \ + i++; \ + while (ref[j].field > key) \ + j--; \ + } else { \ + while (ref[i].field > key) \ + i++; \ + while (ref[j].field < key) \ + j--; \ + } \ + if (i <= j) { \ + tmp = ref[i]; \ + ref[i] = ref[j]; \ + ref[j] = tmp; \ + i++; \ + j--; \ + } \ + } \ + +static void sort_one(VAPictureH264 ref[], int left, int right, + int ascending, int frame_idx) +{ + int i = left, j = right; + unsigned int key; + VAPictureH264 tmp; + + if (frame_idx) { + key = ref[(left + right) / 2].frame_idx; + partition(ref, frame_idx, key, ascending); + } else { + key = ref[(left + right) / 2].TopFieldOrderCnt; + partition(ref, TopFieldOrderCnt, (signed int)key, ascending); + } + + /* recursion */ + if (left < j) + sort_one(ref, left, j, ascending, frame_idx); + + if (i < right) + sort_one(ref, i, right, ascending, frame_idx); +} + +static void sort_two(VAPictureH264 ref[], int left, int right, unsigned int key, unsigned int frame_idx, + int partition_ascending, int list0_ascending, int list1_ascending) +{ + int i = left, j = right; + VAPictureH264 tmp; + + if (frame_idx) { + partition(ref, frame_idx, key, partition_ascending); + } else { + partition(ref, TopFieldOrderCnt, (signed int)key, partition_ascending); + } + + + sort_one(ref, left, i-1, list0_ascending, frame_idx); + sort_one(ref, j+1, right, list1_ascending, frame_idx); +} + +static int update_ReferenceFrames(void) +{ + int i; + + if (current_frame_type == FRAME_B) + return 0; + + CurrentCurrPic.flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE; + numShortTerm++; + if (numShortTerm > num_ref_frames) + numShortTerm = num_ref_frames; + for (i=numShortTerm-1; i>0; i--) + ReferenceFrames[i] = ReferenceFrames[i-1]; + ReferenceFrames[0] = CurrentCurrPic; + + if (current_frame_type != FRAME_B) + current_frame_num++; + if (current_frame_num > MaxFrameNum) + current_frame_num = 0; + + return 0; +} + + +static int update_RefPicList(void) +{ + unsigned int current_poc = CurrentCurrPic.TopFieldOrderCnt; + + if (current_frame_type == FRAME_P) { + memcpy(RefPicList0_P, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_one(RefPicList0_P, 0, numShortTerm-1, 0, 1); + } + + if (current_frame_type == FRAME_B) { + memcpy(RefPicList0_B, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_two(RefPicList0_B, 0, numShortTerm-1, current_poc, 0, + 1, 0, 1); + + memcpy(RefPicList1_B, ReferenceFrames, numShortTerm * sizeof(VAPictureH264)); + sort_two(RefPicList1_B, 0, numShortTerm-1, current_poc, 0, + 0, 1, 0); + } + + return 0; +} + + +static int render_sequence(void) +{ + VABufferID seq_param_buf, rc_param_buf, misc_param_tmpbuf, render_id[2]; + VAStatus va_status; + VAEncMiscParameterBuffer *misc_param, *misc_param_tmp; + VAEncMiscParameterRateControl *misc_rate_ctrl; + + seq_param.level_idc = 41 /*SH_LEVEL_3*/; + seq_param.picture_width_in_mbs = frame_width_mbaligned / 16; + seq_param.picture_height_in_mbs = frame_height_mbaligned / 16; + seq_param.bits_per_second = frame_bitrate; + + seq_param.intra_period = intra_period; + seq_param.intra_idr_period = intra_idr_period; + seq_param.ip_period = ip_period; + + seq_param.max_num_ref_frames = num_ref_frames; + seq_param.seq_fields.bits.frame_mbs_only_flag = 1; + seq_param.time_scale = 900; + seq_param.num_units_in_tick = 15; /* Tc = num_units_in_tick / time_sacle */ + seq_param.seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 = Log2MaxPicOrderCntLsb - 4; + seq_param.seq_fields.bits.log2_max_frame_num_minus4 = Log2MaxFrameNum - 4;; + seq_param.seq_fields.bits.frame_mbs_only_flag = 1; + seq_param.seq_fields.bits.chroma_format_idc = 1; + seq_param.seq_fields.bits.direct_8x8_inference_flag = 1; + + if (frame_width != frame_width_mbaligned || + frame_height != frame_height_mbaligned) { + seq_param.frame_cropping_flag = 1; + seq_param.frame_crop_left_offset = 0; + seq_param.frame_crop_right_offset = (frame_width_mbaligned - frame_width)/2; + seq_param.frame_crop_top_offset = 0; + seq_param.frame_crop_bottom_offset = (frame_height_mbaligned - frame_height)/2; + } + + va_status = vaCreateBuffer(va_dpy, context_id, + VAEncSequenceParameterBufferType, + sizeof(seq_param),1,&seq_param,&seq_param_buf); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, context_id, + VAEncMiscParameterBufferType, + sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), + 1,NULL,&rc_param_buf); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + vaMapBuffer(va_dpy, rc_param_buf,(void **)&misc_param); + misc_param->type = VAEncMiscParameterTypeRateControl; + misc_rate_ctrl = (VAEncMiscParameterRateControl *)misc_param->data; + memset(misc_rate_ctrl, 0, sizeof(*misc_rate_ctrl)); + misc_rate_ctrl->bits_per_second = frame_bitrate; + misc_rate_ctrl->target_percentage = 66; + misc_rate_ctrl->window_size = 1000; + misc_rate_ctrl->initial_qp = initial_qp; + misc_rate_ctrl->min_qp = minimal_qp; + misc_rate_ctrl->basic_unit_size = 0; + vaUnmapBuffer(va_dpy, rc_param_buf); + + render_id[0] = seq_param_buf; + render_id[1] = rc_param_buf; + + va_status = vaRenderPicture(va_dpy,context_id, &render_id[0], 2); + CHECK_VASTATUS(va_status,"vaRenderPicture");; + + if (misc_priv_type != 0) { + va_status = vaCreateBuffer(va_dpy, context_id, + VAEncMiscParameterBufferType, + sizeof(VAEncMiscParameterBuffer), + 1, NULL, &misc_param_tmpbuf); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + vaMapBuffer(va_dpy, misc_param_tmpbuf,(void **)&misc_param_tmp); + misc_param_tmp->type = misc_priv_type; + misc_param_tmp->data[0] = misc_priv_value; + vaUnmapBuffer(va_dpy, misc_param_tmpbuf); + + va_status = vaRenderPicture(va_dpy,context_id, &misc_param_tmpbuf, 1); + } + + return 0; +} + +static int calc_poc(int pic_order_cnt_lsb) +{ + static int PicOrderCntMsb_ref = 0, pic_order_cnt_lsb_ref = 0; + int prevPicOrderCntMsb, prevPicOrderCntLsb; + int PicOrderCntMsb, TopFieldOrderCnt; + + if (current_frame_type == FRAME_IDR) + prevPicOrderCntMsb = prevPicOrderCntLsb = 0; + else { + prevPicOrderCntMsb = PicOrderCntMsb_ref; + prevPicOrderCntLsb = pic_order_cnt_lsb_ref; + } + + if ((pic_order_cnt_lsb < prevPicOrderCntLsb) && + ((prevPicOrderCntLsb - pic_order_cnt_lsb) >= (int)(MaxPicOrderCntLsb / 2))) + PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb; + else if ((pic_order_cnt_lsb > prevPicOrderCntLsb) && + ((pic_order_cnt_lsb - prevPicOrderCntLsb) > (int)(MaxPicOrderCntLsb / 2))) + PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb; + else + PicOrderCntMsb = prevPicOrderCntMsb; + + TopFieldOrderCnt = PicOrderCntMsb + pic_order_cnt_lsb; + + if (current_frame_type != FRAME_B) { + PicOrderCntMsb_ref = PicOrderCntMsb; + pic_order_cnt_lsb_ref = pic_order_cnt_lsb; + } + + return TopFieldOrderCnt; +} + +static int render_picture(void) +{ + VABufferID pic_param_buf; + VAStatus va_status; + int i = 0; + + pic_param.CurrPic.picture_id = ref_surface[current_slot]; + pic_param.CurrPic.frame_idx = current_frame_num; + pic_param.CurrPic.flags = 0; + pic_param.CurrPic.TopFieldOrderCnt = calc_poc((current_frame_display - current_IDR_display) % MaxPicOrderCntLsb); + pic_param.CurrPic.BottomFieldOrderCnt = pic_param.CurrPic.TopFieldOrderCnt; + CurrentCurrPic = pic_param.CurrPic; + + if (getenv("TO_DEL")) { /* set RefPicList into ReferenceFrames */ + update_RefPicList(); /* calc RefPicList */ + memset(pic_param.ReferenceFrames, 0xff, 16 * sizeof(VAPictureH264)); /* invalid all */ + if (current_frame_type == FRAME_P) { + pic_param.ReferenceFrames[0] = RefPicList0_P[0]; + } else if (current_frame_type == FRAME_B) { + pic_param.ReferenceFrames[0] = RefPicList0_B[0]; + pic_param.ReferenceFrames[1] = RefPicList1_B[0]; + } + } else { + memcpy(pic_param.ReferenceFrames, ReferenceFrames, numShortTerm*sizeof(VAPictureH264)); + for (i = numShortTerm; i < SURFACE_NUM; i++) { + pic_param.ReferenceFrames[i].picture_id = VA_INVALID_SURFACE; + pic_param.ReferenceFrames[i].flags = VA_PICTURE_H264_INVALID; + } + } + + pic_param.pic_fields.bits.idr_pic_flag = (current_frame_type == FRAME_IDR); + pic_param.pic_fields.bits.reference_pic_flag = (current_frame_type != FRAME_B); + pic_param.pic_fields.bits.entropy_coding_mode_flag = h264_entropy_mode; + pic_param.pic_fields.bits.deblocking_filter_control_present_flag = 1; + pic_param.frame_num = current_frame_num; + pic_param.coded_buf = coded_buf[current_slot]; + pic_param.last_picture = (current_frame_encoding == frame_count); + pic_param.pic_init_qp = initial_qp; + + va_status = vaCreateBuffer(va_dpy, context_id,VAEncPictureParameterBufferType, + sizeof(pic_param),1,&pic_param, &pic_param_buf); + CHECK_VASTATUS(va_status,"vaCreateBuffer");; + + va_status = vaRenderPicture(va_dpy,context_id, &pic_param_buf, 1); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + return 0; +} + +static int render_packedsequence(void) +{ + VAEncPackedHeaderParameterBuffer packedheader_param_buffer; + VABufferID packedseq_para_bufid, packedseq_data_bufid, render_id[2]; + unsigned int length_in_bits; + unsigned char *packedseq_buffer = NULL; + VAStatus va_status; + + length_in_bits = build_packed_seq_buffer(&packedseq_buffer); + + packedheader_param_buffer.type = VAEncPackedHeaderSequence; + + packedheader_param_buffer.bit_length = length_in_bits; /*length_in_bits*/ + packedheader_param_buffer.has_emulation_bytes = 0; + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packedheader_param_buffer), 1, &packedheader_param_buffer, + &packedseq_para_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packedseq_buffer, + &packedseq_data_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + render_id[0] = packedseq_para_bufid; + render_id[1] = packedseq_data_bufid; + va_status = vaRenderPicture(va_dpy,context_id, render_id, 2); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + free(packedseq_buffer); + + return 0; +} + + +static int render_packedpicture(void) +{ + VAEncPackedHeaderParameterBuffer packedheader_param_buffer; + VABufferID packedpic_para_bufid, packedpic_data_bufid, render_id[2]; + unsigned int length_in_bits; + unsigned char *packedpic_buffer = NULL; + VAStatus va_status; + + length_in_bits = build_packed_pic_buffer(&packedpic_buffer); + packedheader_param_buffer.type = VAEncPackedHeaderPicture; + packedheader_param_buffer.bit_length = length_in_bits; + packedheader_param_buffer.has_emulation_bytes = 0; + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packedheader_param_buffer), 1, &packedheader_param_buffer, + &packedpic_para_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packedpic_buffer, + &packedpic_data_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + render_id[0] = packedpic_para_bufid; + render_id[1] = packedpic_data_bufid; + va_status = vaRenderPicture(va_dpy,context_id, render_id, 2); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + free(packedpic_buffer); + + return 0; +} + +static void render_packedsei(void) +{ + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + VABufferID packed_sei_header_param_buf_id, packed_sei_buf_id, render_id[2]; + unsigned int length_in_bits /*offset_in_bytes*/; + unsigned char *packed_sei_buffer = NULL; + VAStatus va_status; + int init_cpb_size, target_bit_rate, i_initial_cpb_removal_delay_length, i_initial_cpb_removal_delay; + int i_cpb_removal_delay, i_dpb_output_delay_length, i_cpb_removal_delay_length; + + /* it comes for the bps defined in SPS */ + target_bit_rate = frame_bitrate; + init_cpb_size = (target_bit_rate * 8) >> 10; + i_initial_cpb_removal_delay = init_cpb_size * 0.5 * 1024 / target_bit_rate * 90000; + + i_cpb_removal_delay = 2; + i_initial_cpb_removal_delay_length = 24; + i_cpb_removal_delay_length = 24; + i_dpb_output_delay_length = 24; + + + length_in_bits = build_packed_sei_buffer_timing( + i_initial_cpb_removal_delay_length, + i_initial_cpb_removal_delay, + 0, + i_cpb_removal_delay_length, + i_cpb_removal_delay * current_frame_encoding, + i_dpb_output_delay_length, + 0, + &packed_sei_buffer); + + //offset_in_bytes = 0; + packed_header_param_buffer.type = VAEncPackedHeaderH264_SEI; + packed_header_param_buffer.bit_length = length_in_bits; + packed_header_param_buffer.has_emulation_bytes = 0; + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &packed_sei_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_sei_buffer, + &packed_sei_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + + render_id[0] = packed_sei_header_param_buf_id; + render_id[1] = packed_sei_buf_id; + va_status = vaRenderPicture(va_dpy,context_id, render_id, 2); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + + free(packed_sei_buffer); + + return; +} + + +static int render_hrd(void) +{ + VABufferID misc_parameter_hrd_buf_id; + VAStatus va_status; + VAEncMiscParameterBuffer *misc_param; + VAEncMiscParameterHRD *misc_hrd_param; + + va_status = vaCreateBuffer(va_dpy, context_id, + VAEncMiscParameterBufferType, + sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterHRD), + 1, + NULL, + &misc_parameter_hrd_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + vaMapBuffer(va_dpy, + misc_parameter_hrd_buf_id, + (void **)&misc_param); + misc_param->type = VAEncMiscParameterTypeHRD; + misc_hrd_param = (VAEncMiscParameterHRD *)misc_param->data; + + if (frame_bitrate > 0) { + misc_hrd_param->initial_buffer_fullness = frame_bitrate * 1024 * 4; + misc_hrd_param->buffer_size = frame_bitrate * 1024 * 8; + } else { + misc_hrd_param->initial_buffer_fullness = 0; + misc_hrd_param->buffer_size = 0; + } + vaUnmapBuffer(va_dpy, misc_parameter_hrd_buf_id); + + va_status = vaRenderPicture(va_dpy,context_id, &misc_parameter_hrd_buf_id, 1); + CHECK_VASTATUS(va_status,"vaRenderPicture");; + + return 0; +} + +static void render_packedslice() +{ + VAEncPackedHeaderParameterBuffer packedheader_param_buffer; + VABufferID packedslice_para_bufid, packedslice_data_bufid, render_id[2]; + unsigned int length_in_bits; + unsigned char *packedslice_buffer = NULL; + VAStatus va_status; + + length_in_bits = build_packed_slice_buffer(&packedslice_buffer); + packedheader_param_buffer.type = VAEncPackedHeaderSlice; + packedheader_param_buffer.bit_length = length_in_bits; + packedheader_param_buffer.has_emulation_bytes = 0; + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packedheader_param_buffer), 1, &packedheader_param_buffer, + &packedslice_para_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packedslice_buffer, + &packedslice_data_bufid); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + render_id[0] = packedslice_para_bufid; + render_id[1] = packedslice_data_bufid; + va_status = vaRenderPicture(va_dpy,context_id, render_id, 2); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + free(packedslice_buffer); +} + +static int render_slice(void) +{ + VABufferID slice_param_buf; + VAStatus va_status; + int i; + + update_RefPicList(); + + /* one frame, one slice */ + slice_param.macroblock_address = 0; + slice_param.num_macroblocks = frame_width_mbaligned * frame_height_mbaligned/(16*16); /* Measured by MB */ + slice_param.slice_type = (current_frame_type == FRAME_IDR)?2:current_frame_type; + if (current_frame_type == FRAME_IDR) { + if (current_frame_encoding != 0) + ++slice_param.idr_pic_id; + } else if (current_frame_type == FRAME_P) { + int refpiclist0_max = h264_maxref & 0xffff; + memcpy(slice_param.RefPicList0, RefPicList0_P, refpiclist0_max*sizeof(VAPictureH264)); + + for (i = refpiclist0_max; i < 32; i++) { + slice_param.RefPicList0[i].picture_id = VA_INVALID_SURFACE; + slice_param.RefPicList0[i].flags = VA_PICTURE_H264_INVALID; + } + } else if (current_frame_type == FRAME_B) { + int refpiclist0_max = h264_maxref & 0xffff; + int refpiclist1_max = (h264_maxref >> 16) & 0xffff; + + memcpy(slice_param.RefPicList0, RefPicList0_B, refpiclist0_max*sizeof(VAPictureH264)); + for (i = refpiclist0_max; i < 32; i++) { + slice_param.RefPicList0[i].picture_id = VA_INVALID_SURFACE; + slice_param.RefPicList0[i].flags = VA_PICTURE_H264_INVALID; + } + + memcpy(slice_param.RefPicList1, RefPicList1_B, refpiclist1_max*sizeof(VAPictureH264)); + for (i = refpiclist1_max; i < 32; i++) { + slice_param.RefPicList1[i].picture_id = VA_INVALID_SURFACE; + slice_param.RefPicList1[i].flags = VA_PICTURE_H264_INVALID; + } + } + + slice_param.slice_alpha_c0_offset_div2 = 0; + slice_param.slice_beta_offset_div2 = 0; + slice_param.direct_spatial_mv_pred_flag = 1; + slice_param.pic_order_cnt_lsb = (current_frame_display - current_IDR_display) % MaxPicOrderCntLsb; + + + if (h264_packedheader && + config_attrib[enc_packed_header_idx].value & VA_ENC_PACKED_HEADER_SLICE) + render_packedslice(); + + va_status = vaCreateBuffer(va_dpy,context_id,VAEncSliceParameterBufferType, + sizeof(slice_param),1,&slice_param,&slice_param_buf); + CHECK_VASTATUS(va_status,"vaCreateBuffer");; + + va_status = vaRenderPicture(va_dpy,context_id, &slice_param_buf, 1); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + return 0; +} + + +static int upload_source_YUV_once_for_all() +{ + int box_width=8; + int row_shift=0; + int i; + + for (i = 0; i < SURFACE_NUM; i++) { + printf("\rLoading data into surface %d.....", i); + upload_surface(va_dpy, src_surface[i], box_width, row_shift, 0); + + row_shift++; + if (row_shift==(2*box_width)) row_shift= 0; + } + printf("Complete surface loading\n"); + + return 0; +} + +static int load_surface(VASurfaceID surface_id, unsigned long long display_order) +{ + unsigned char *srcyuv_ptr = NULL, *src_Y = NULL, *src_U = NULL, *src_V = NULL; + unsigned long long frame_start, mmap_start; + char *mmap_ptr = NULL; + int frame_size, mmap_size; + + if (srcyuv_fp == NULL) + return 0; + + /* allow encoding more than srcyuv_frames */ + display_order = display_order % srcyuv_frames; + frame_size = frame_width * frame_height * 3 / 2; /* for YUV420 */ + frame_start = display_order * frame_size; + + mmap_start = frame_start & (~0xfff); + mmap_size = (frame_size + (frame_start & 0xfff) + 0xfff) & (~0xfff); + mmap_ptr = mmap(0, mmap_size, PROT_READ, MAP_SHARED, + fileno(srcyuv_fp), mmap_start); + if (mmap_ptr == MAP_FAILED) { + printf("Failed to mmap YUV file (%s)\n", strerror(errno)); + return 1; + } + srcyuv_ptr = (unsigned char *)mmap_ptr + (frame_start & 0xfff); + if (srcyuv_fourcc == VA_FOURCC_NV12) { + src_Y = srcyuv_ptr; + src_U = src_Y + frame_width * frame_height; + src_V = NULL; + } else if (srcyuv_fourcc == VA_FOURCC_IYUV || + srcyuv_fourcc == VA_FOURCC_YV12) { + src_Y = srcyuv_ptr; + if (srcyuv_fourcc == VA_FOURCC_IYUV) { + src_U = src_Y + frame_width * frame_height; + src_V = src_U + (frame_width/2) * (frame_height/2); + } else { /* YV12 */ + src_V = src_Y + frame_width * frame_height; + src_U = src_V + (frame_width/2) * (frame_height/2); + } + } else { + printf("Unsupported source YUV format\n"); + exit(1); + } + + upload_surface_yuv(va_dpy, surface_id, + srcyuv_fourcc, frame_width, frame_height, + src_Y, src_U, src_V); + if (mmap_ptr) + munmap(mmap_ptr, mmap_size); + + return 0; +} + + +static int save_recyuv(VASurfaceID surface_id, + unsigned long long display_order, + unsigned long long encode_order) +{ + unsigned char *dst_Y = NULL, *dst_U = NULL, *dst_V = NULL; + + if (recyuv_fp == NULL) + return 0; + + if (srcyuv_fourcc == VA_FOURCC_NV12) { + int uv_size = 2 * (frame_width/2) * (frame_height/2); + dst_Y = malloc(2*uv_size); + dst_U = malloc(uv_size); + } else if (srcyuv_fourcc == VA_FOURCC_IYUV || + srcyuv_fourcc == VA_FOURCC_YV12) { + int uv_size = (frame_width/2) * (frame_height/2); + dst_Y = malloc(4*uv_size); + dst_U = malloc(uv_size); + dst_V = malloc(uv_size); + } else { + printf("Unsupported source YUV format\n"); + exit(1); + } + + download_surface_yuv(va_dpy, surface_id, + srcyuv_fourcc, frame_width, frame_height, + dst_Y, dst_U, dst_V); + fseek(recyuv_fp, display_order * frame_width * frame_height * 1.5, SEEK_SET); + + if (srcyuv_fourcc == VA_FOURCC_NV12) { + int uv_size = 2 * (frame_width/2) * (frame_height/2); + fwrite(dst_Y, uv_size * 2, 1, recyuv_fp); + fwrite(dst_U, uv_size, 1, recyuv_fp); + } else if (srcyuv_fourcc == VA_FOURCC_IYUV || + srcyuv_fourcc == VA_FOURCC_YV12) { + int uv_size = (frame_width/2) * (frame_height/2); + fwrite(dst_Y, uv_size * 4, 1, recyuv_fp); + + if (srcyuv_fourcc == VA_FOURCC_IYUV) { + fwrite(dst_U, uv_size, 1, recyuv_fp); + fwrite(dst_V, uv_size, 1, recyuv_fp); + } else { + fwrite(dst_V, uv_size, 1, recyuv_fp); + fwrite(dst_U, uv_size, 1, recyuv_fp); + } + } else { + printf("Unsupported YUV format\n"); + exit(1); + } + + if (dst_Y) + free(dst_Y); + if (dst_U) + free(dst_U); + if (dst_V) + free(dst_V); + + fflush(recyuv_fp); + + return 0; +} + + +static int save_codeddata(unsigned long long display_order, unsigned long long encode_order) +{ + VACodedBufferSegment *buf_list = NULL; + VAStatus va_status; + unsigned int coded_size = 0; + + va_status = vaMapBuffer(va_dpy,coded_buf[display_order % SURFACE_NUM],(void **)(&buf_list)); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + while (buf_list != NULL) { + coded_size += fwrite(buf_list->buf, 1, buf_list->size, coded_fp); + buf_list = (VACodedBufferSegment *) buf_list->next; + + frame_size += coded_size; + } + vaUnmapBuffer(va_dpy,coded_buf[display_order % SURFACE_NUM]); + + printf("\r "); /* return back to startpoint */ + switch (encode_order % 4) { + case 0: + printf("|"); + break; + case 1: + printf("/"); + break; + case 2: + printf("-"); + break; + case 3: + printf("\\"); + break; + } + printf("%08lld", encode_order); + printf("(%06d bytes coded)",coded_size); + + fflush(coded_fp); + + return 0; +} + + +static struct storage_task_t * storage_task_dequeue(void) +{ + struct storage_task_t *header; + + pthread_mutex_lock(&encode_mutex); + + header = storage_task_header; + if (storage_task_header != NULL) { + if (storage_task_tail == storage_task_header) + storage_task_tail = NULL; + storage_task_header = header->next; + } + + pthread_mutex_unlock(&encode_mutex); + + return header; +} + +static int storage_task_queue(unsigned long long display_order, unsigned long long encode_order) +{ + struct storage_task_t *tmp; + + tmp = calloc(1, sizeof(struct storage_task_t)); + tmp->display_order = display_order; + tmp->encode_order = encode_order; + + pthread_mutex_lock(&encode_mutex); + + if (storage_task_header == NULL) { + storage_task_header = tmp; + storage_task_tail = tmp; + } else { + storage_task_tail->next = tmp; + storage_task_tail = tmp; + } + + srcsurface_status[display_order % SURFACE_NUM] = SRC_SURFACE_IN_STORAGE; + pthread_cond_signal(&encode_cond); + + pthread_mutex_unlock(&encode_mutex); + + return 0; +} + +static void storage_task(unsigned long long display_order, unsigned long long encode_order) +{ + unsigned int tmp; + VAStatus va_status; + + tmp = GetTickCount(); + va_status = vaSyncSurface(va_dpy, src_surface[display_order % SURFACE_NUM]); + CHECK_VASTATUS(va_status,"vaSyncSurface"); + SyncPictureTicks += GetTickCount() - tmp; + tmp = GetTickCount(); + save_codeddata(display_order, encode_order); + SavePictureTicks += GetTickCount() - tmp; + + save_recyuv(ref_surface[display_order % SURFACE_NUM], display_order, encode_order); + + /* reload a new frame data */ + tmp = GetTickCount(); + if (srcyuv_fp != NULL) + load_surface(src_surface[display_order % SURFACE_NUM], display_order + SURFACE_NUM); + UploadPictureTicks += GetTickCount() - tmp; + + pthread_mutex_lock(&encode_mutex); + srcsurface_status[display_order % SURFACE_NUM] = SRC_SURFACE_IN_ENCODING; + pthread_mutex_unlock(&encode_mutex); +} + + +static void * storage_task_thread(void *t) +{ + while (1) { + struct storage_task_t *current; + + current = storage_task_dequeue(); + if (current == NULL) { + pthread_mutex_lock(&encode_mutex); + pthread_cond_wait(&encode_cond, &encode_mutex); + pthread_mutex_unlock(&encode_mutex); + continue; + } + + storage_task(current->display_order, current->encode_order); + + free(current); + + /* all frames are saved, exit the thread */ + if (++frame_coded >= frame_count) + break; + } + + return 0; +} + + +static int encode_frames(void) +{ + unsigned int i, tmp; + VAStatus va_status; + //VASurfaceStatus surface_status; + + /* upload RAW YUV data into all surfaces */ + tmp = GetTickCount(); + if (srcyuv_fp != NULL) { + for (i = 0; i < SURFACE_NUM; i++) + load_surface(src_surface[i], i); + } else + upload_source_YUV_once_for_all(); + UploadPictureTicks += GetTickCount() - tmp; + + /* ready for encoding */ + memset(srcsurface_status, SRC_SURFACE_IN_ENCODING, sizeof(srcsurface_status)); + + memset(&seq_param, 0, sizeof(seq_param)); + memset(&pic_param, 0, sizeof(pic_param)); + memset(&slice_param, 0, sizeof(slice_param)); + + if (encode_syncmode == 0) + pthread_create(&encode_thread, NULL, storage_task_thread, NULL); + + for (current_frame_encoding = 0; current_frame_encoding < frame_count; current_frame_encoding++) { + encoding2display_order(current_frame_encoding, intra_period, intra_idr_period, ip_period, + ¤t_frame_display, ¤t_frame_type); + if (current_frame_type == FRAME_IDR) { + numShortTerm = 0; + current_frame_num = 0; + current_IDR_display = current_frame_display; + } + + /* check if the source frame is ready */ + while (srcsurface_status[current_slot] != SRC_SURFACE_IN_ENCODING) { + usleep(1); + } + + tmp = GetTickCount(); + va_status = vaBeginPicture(va_dpy, context_id, src_surface[current_slot]); + CHECK_VASTATUS(va_status,"vaBeginPicture"); + BeginPictureTicks += GetTickCount() - tmp; + + tmp = GetTickCount(); + if (current_frame_type == FRAME_IDR) { + render_sequence(); + render_picture(); + if (h264_packedheader) { + render_packedsequence(); + render_packedpicture(); + } + //if (rc_mode == VA_RC_CBR) + // render_packedsei(); + //render_hrd(); + } else { + //render_sequence(); + render_picture(); + //if (rc_mode == VA_RC_CBR) + // render_packedsei(); + //render_hrd(); + } + render_slice(); + RenderPictureTicks += GetTickCount() - tmp; + + tmp = GetTickCount(); + va_status = vaEndPicture(va_dpy,context_id); + CHECK_VASTATUS(va_status,"vaEndPicture");; + EndPictureTicks += GetTickCount() - tmp; + + if (encode_syncmode) + storage_task(current_frame_display, current_frame_encoding); + else /* queue the storage task queue */ + storage_task_queue(current_frame_display, current_frame_encoding); + + update_ReferenceFrames(); + } + + if (encode_syncmode == 0) { + int ret; + pthread_join(encode_thread, (void **)&ret); + } + + return 0; +} + + +static int release_encode() +{ + int i; + + vaDestroySurfaces(va_dpy,&src_surface[0],SURFACE_NUM); + vaDestroySurfaces(va_dpy,&ref_surface[0],SURFACE_NUM); + + for (i = 0; i < SURFACE_NUM; i++) + vaDestroyBuffer(va_dpy,coded_buf[i]); + + vaDestroyContext(va_dpy,context_id); + vaDestroyConfig(va_dpy,config_id); + + return 0; +} + +static int deinit_va() +{ + vaTerminate(va_dpy); + + va_close_display(va_dpy); + + return 0; +} + + +static int print_input() +{ + printf("\n\nINPUT:Try to encode H264...\n"); + if (rc_mode != -1) + printf("INPUT: RateControl : %s\n", rc_to_string(rc_mode)); + printf("INPUT: Resolution : %dx%d, %d frames\n", + frame_width, frame_height, frame_count); + printf("INPUT: FrameRate : %d\n", frame_rate); + printf("INPUT: Bitrate : %d\n", frame_bitrate); + printf("INPUT: Slieces : %d\n", frame_slices); + printf("INPUT: IntraPeriod : %d\n", intra_period); + printf("INPUT: IDRPeriod : %d\n", intra_idr_period); + printf("INPUT: IpPeriod : %d\n", ip_period); + printf("INPUT: Initial QP : %d\n", initial_qp); + printf("INPUT: Min QP : %d\n", minimal_qp); + printf("INPUT: Source YUV : %s", srcyuv_fp?"FILE":"AUTO generated"); + if (srcyuv_fp) + printf(":%s (fourcc %s)\n", srcyuv_fn, fourcc_to_string(srcyuv_fourcc)); + else + printf("\n"); + printf("INPUT: Coded Clip : %s\n", coded_fn); + if (recyuv_fp == NULL) + printf("INPUT: Rec Clip : %s\n", "Not save reconstructed frame"); + else + printf("INPUT: Rec Clip : Save reconstructed frame into %s (fourcc %s)\n", recyuv_fn, + fourcc_to_string(srcyuv_fourcc)); + + printf("\n\n"); /* return back to startpoint */ + + return 0; +} + +static int calc_PSNR(double *psnr) +{ + char *srcyuv_ptr = NULL, *recyuv_ptr = NULL, tmp; + unsigned long long min_size; + unsigned long long i, sse=0; + double ssemean; + int fourM = 0x400000; /* 4M */ + + min_size = MIN(srcyuv_frames, frame_count) * frame_width * frame_height * 1.5; + for (i=0; i q + * Currently supporting only I420/NV12/UYVY/YUY2/Y8 input file formats. + * + * NOTE: The intel-driver expects a packed header sent to it. So, the app is responsible to pack the header + * and send to the driver through LibVA. This unit test also showcases how to send the header to the driver. + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include "va_display.h" +#include "jpegenc_utils.h" + +#ifndef VA_FOURCC_I420 +#define VA_FOURCC_I420 0x30323449 +#endif + +#define CHECK_VASTATUS(va_status,func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ + } + + +void show_help() +{ + printf("Usage: ./jpegenc q \n"); + printf("Currently supporting only I420/NV12/UYVY/YUY2/Y8 input file formats.\n"); + printf("Example: ./jpegenc 1024 768 input_file.yuv output.jpeg 0 50\n\n"); + return; +} + + +void jpegenc_pic_param_init(VAEncPictureParameterBufferJPEG *pic_param,int width,int height,int quality, YUVComponentSpecs yuvComp) +{ + assert(pic_param); + + pic_param->picture_width = width; + pic_param->picture_height = height; + pic_param->quality = quality; + + pic_param->pic_flags.bits.profile = 0; //Profile = Baseline + pic_param->pic_flags.bits.progressive = 0; //Sequential encoding + pic_param->pic_flags.bits.huffman = 1; //Uses Huffman coding + pic_param->pic_flags.bits.interleaved = 0; //Input format is interleaved (YUV) + pic_param->pic_flags.bits.differential = 0; //non-Differential Encoding + + pic_param->sample_bit_depth = 8; //only 8 bit sample depth is currently supported + pic_param->num_scan = 1; + pic_param->num_components = yuvComp.num_components; // Supporting only upto 3 components maximum + //set component_id Ci and Tqi + if(yuvComp.fourcc_val == VA_FOURCC_Y800) { + pic_param->component_id[0] = 0; + pic_param->quantiser_table_selector[0] = 0; + } else { + pic_param->component_id[0] = pic_param->quantiser_table_selector[0] = 0; + pic_param->component_id[1] = pic_param->quantiser_table_selector[1] = 1; + pic_param->component_id[2] = 2; pic_param->quantiser_table_selector[2] = 1; + } + + pic_param->quality = quality; +} + +void jpegenc_qmatrix_init(VAQMatrixBufferJPEG *quantization_param, YUVComponentSpecs yuvComp) +{ + int i=0; + quantization_param->load_lum_quantiser_matrix = 1; + + //LibVA expects the QM in zigzag order + for(i=0; ilum_quantiser_matrix[i] = jpeg_luma_quant[jpeg_zigzag[i]]; + } + + + if(yuvComp.fourcc_val == VA_FOURCC_Y800) { + quantization_param->load_chroma_quantiser_matrix = 0; + } else { + quantization_param->load_chroma_quantiser_matrix = 1; + for(i=0; ichroma_quantiser_matrix[i] = jpeg_chroma_quant[jpeg_zigzag[i]]; + } + } + +} + +void jpegenc_hufftable_init(VAHuffmanTableBufferJPEGBaseline *hufftable_param, YUVComponentSpecs yuvComp) +{ + + hufftable_param->load_huffman_table[0] = 1; //Load Luma Hufftable + if(yuvComp.fourcc_val == VA_FOURCC_Y800) { + hufftable_param->load_huffman_table[1] = 0; //Do not load Chroma Hufftable for Y8 + } else { + hufftable_param->load_huffman_table[1] = 1; //Load Chroma Hufftable for other formats + } + + //Load Luma hufftable values + //Load DC codes + memcpy(hufftable_param->huffman_table[0].num_dc_codes, jpeg_hufftable_luma_dc+1, 16); + //Load DC Values + memcpy(hufftable_param->huffman_table[0].dc_values, jpeg_hufftable_luma_dc+17, 12); + //Load AC codes + memcpy(hufftable_param->huffman_table[0].num_ac_codes, jpeg_hufftable_luma_ac+1, 16); + //Load AC Values + memcpy(hufftable_param->huffman_table[0].ac_values, jpeg_hufftable_luma_ac+17, 162); + memset(hufftable_param->huffman_table[0].pad, 0, 2); + + + //Load Chroma hufftable values if needed + if(yuvComp.fourcc_val != VA_FOURCC_Y800) { + //Load DC codes + memcpy(hufftable_param->huffman_table[1].num_dc_codes, jpeg_hufftable_chroma_dc+1, 16); + //Load DC Values + memcpy(hufftable_param->huffman_table[1].dc_values, jpeg_hufftable_chroma_dc+17, 12); + //Load AC codes + memcpy(hufftable_param->huffman_table[1].num_ac_codes, jpeg_hufftable_chroma_ac+1, 16); + //Load AC Values + memcpy(hufftable_param->huffman_table[1].ac_values, jpeg_hufftable_chroma_ac+17, 162); + memset(hufftable_param->huffman_table[1].pad, 0, 2); + + } + +} + +void jpegenc_slice_param_init(VAEncSliceParameterBufferJPEG *slice_param, YUVComponentSpecs yuvComp) +{ + slice_param->restart_interval = 0; + + slice_param->num_components = yuvComp.num_components; + + slice_param->components[0].component_selector = 1; + slice_param->components[0].dc_table_selector = 0; + slice_param->components[0].ac_table_selector = 0; + + if(yuvComp.num_components > 1) { + slice_param->components[1].component_selector = 2; + slice_param->components[1].dc_table_selector = 1; + slice_param->components[1].ac_table_selector = 1; + + slice_param->components[2].component_selector = 3; + slice_param->components[2].dc_table_selector = 1; + slice_param->components[2].ac_table_selector = 1; + } +} + + +void populate_quantdata(JPEGQuantSection *quantVal, int type) +{ + uint8_t zigzag_qm[NUM_QUANT_ELEMENTS]; + int i; + + quantVal->DQT = DQT; + quantVal->Pq = 0; + quantVal->Tq = type; + if(type == 0) { + for(i=0; iQk, zigzag_qm, NUM_QUANT_ELEMENTS); + } else { + for(i=0; iQk, zigzag_qm, NUM_QUANT_ELEMENTS); + } + quantVal->Lq = 3 + NUM_QUANT_ELEMENTS; +} + +void populate_frame_header(JPEGFrameHeader *frameHdr, YUVComponentSpecs yuvComp, int picture_width, int picture_height) +{ + int i=0; + + frameHdr->SOF = SOF0; + frameHdr->Lf = 8 + (3 * yuvComp.num_components); //Size of FrameHeader in bytes without the Marker SOF + frameHdr->P = 8; + frameHdr->Y = picture_height; + frameHdr->X = picture_width; + frameHdr->Nf = yuvComp.num_components; + + for(i=0; iJPEGComponent[i].Ci = i+1; + + if(i == 0) { + frameHdr->JPEGComponent[i].Hi = yuvComp.y_h_subsample; + frameHdr->JPEGComponent[i].Vi = yuvComp.y_v_subsample; + frameHdr->JPEGComponent[i].Tqi = 0; + + } else { + //Analyzing the sampling factors for U/V, they are 1 for all formats except for Y8. + //So, it is okay to have the code below like this. For Y8, we wont reach this code. + frameHdr->JPEGComponent[i].Hi = yuvComp.u_h_subsample; + frameHdr->JPEGComponent[i].Vi = yuvComp.u_v_subsample; + frameHdr->JPEGComponent[i].Tqi = 1; + } + } +} + +void populate_huff_section_header(JPEGHuffSection *huffSectionHdr, int th, int tc) +{ + int i=0, totalCodeWords=0; + + huffSectionHdr->DHT = DHT; + huffSectionHdr->Tc = tc; + huffSectionHdr->Th = th; + + if(th == 0) { //If Luma + + //If AC + if(tc == 1) { + memcpy(huffSectionHdr->Li, jpeg_hufftable_luma_ac+1, NUM_AC_RUN_SIZE_BITS); + memcpy(huffSectionHdr->Vij, jpeg_hufftable_luma_ac+17, NUM_AC_CODE_WORDS_HUFFVAL); + } + + //If DC + if(tc == 0) { + memcpy(huffSectionHdr->Li, jpeg_hufftable_luma_dc+1, NUM_DC_RUN_SIZE_BITS); + memcpy(huffSectionHdr->Vij, jpeg_hufftable_luma_dc+17, NUM_DC_CODE_WORDS_HUFFVAL); + } + + for(i=0; iLi[i]; + } + + huffSectionHdr->Lh = 3 + 16 + totalCodeWords; + + } else { //If Chroma + //If AC + if(tc == 1) { + memcpy(huffSectionHdr->Li, jpeg_hufftable_chroma_ac+1, NUM_AC_RUN_SIZE_BITS); + memcpy(huffSectionHdr->Vij, jpeg_hufftable_chroma_ac+17, NUM_AC_CODE_WORDS_HUFFVAL); + } + + //If DC + if(tc == 0) { + memcpy(huffSectionHdr->Li, jpeg_hufftable_chroma_dc+1, NUM_DC_RUN_SIZE_BITS); + memcpy(huffSectionHdr->Vij, jpeg_hufftable_chroma_dc+17, NUM_DC_CODE_WORDS_HUFFVAL); + } + + } +} + +void populate_scan_header(JPEGScanHeader *scanHdr, YUVComponentSpecs yuvComp) +{ + + scanHdr->SOS = SOS; + scanHdr->Ns = yuvComp.num_components; + + //Y Component + scanHdr->ScanComponent[0].Csj = 1; + scanHdr->ScanComponent[0].Tdj = 0; + scanHdr->ScanComponent[0].Taj = 0; + + if(yuvComp.num_components > 1) { + //U Component + scanHdr->ScanComponent[1].Csj = 2; + scanHdr->ScanComponent[1].Tdj = 1; + scanHdr->ScanComponent[1].Taj = 1; + + //V Component + scanHdr->ScanComponent[2].Csj = 3; + scanHdr->ScanComponent[2].Tdj = 1; + scanHdr->ScanComponent[2].Taj = 1; + } + + scanHdr->Ss = 0; //0 for Baseline + scanHdr->Se = 63; //63 for Baseline + scanHdr->Ah = 0; //0 for Baseline + scanHdr->Al = 0; //0 for Baseline + + scanHdr->Ls = 3 + (yuvComp.num_components * 2) + 3; + +} + +// This method packs the header information which is to be sent to the driver through LibVA. +// All the information that needs to be inserted in the encoded buffer should be built and sent. +// It is the responsibility of the app talking to LibVA to build this header and send it. +// This includes Markers, Quantization tables (normalized with quality factor), Huffman tables,etc. +int build_packed_jpeg_header_buffer(unsigned char **header_buffer, YUVComponentSpecs yuvComp, int picture_width, int picture_height, uint16_t restart_interval, int quality) +{ + bitstream bs; + int i=0, j=0; + uint32_t temp=0; + + bitstream_start(&bs); + + //Add SOI + bitstream_put_ui(&bs, SOI, 16); + + //Add AppData + bitstream_put_ui(&bs, APP0, 16); //APP0 marker + bitstream_put_ui(&bs, 16, 16); //Length excluding the marker + bitstream_put_ui(&bs, 0x4A, 8); //J + bitstream_put_ui(&bs, 0x46, 8); //F + bitstream_put_ui(&bs, 0x49, 8); //I + bitstream_put_ui(&bs, 0x46, 8); //F + bitstream_put_ui(&bs, 0x00, 8); //0 + bitstream_put_ui(&bs, 1, 8); //Major Version + bitstream_put_ui(&bs, 1, 8); //Minor Version + bitstream_put_ui(&bs, 1, 8); //Density units 0:no units, 1:pixels per inch, 2: pixels per cm + bitstream_put_ui(&bs, 72, 16); //X density + bitstream_put_ui(&bs, 72, 16); //Y density + bitstream_put_ui(&bs, 0, 8); //Thumbnail width + bitstream_put_ui(&bs, 0, 8); //Thumbnail height + + // Regarding Quantization matrices: As per JPEG Spec ISO/IEC 10918-1:1993(E), Pg-19: + // "applications may specify values which customize picture quality for their particular + // image characteristics, display devices, and viewing conditions" + + + //Normalization of quality factor + quality = (quality < 50) ? (5000/quality) : (200 - (quality*2)); + + //Add QTable - Y + JPEGQuantSection quantLuma; + populate_quantdata(&quantLuma, 0); + + bitstream_put_ui(&bs, quantLuma.DQT, 16); + bitstream_put_ui(&bs, quantLuma.Lq, 16); + bitstream_put_ui(&bs, quantLuma.Pq, 4); + bitstream_put_ui(&bs, quantLuma.Tq, 4); + for(i=0; i 255) ? 255 : temp; + temp = (temp < 1) ? 1 : temp; + quantLuma.Qk[i] = (unsigned char)temp; + bitstream_put_ui(&bs, quantLuma.Qk[i], 8); + } + + //Add QTable - U/V + if(yuvComp.fourcc_val != VA_FOURCC_Y800) { + JPEGQuantSection quantChroma; + populate_quantdata(&quantChroma, 1); + + bitstream_put_ui(&bs, quantChroma.DQT, 16); + bitstream_put_ui(&bs, quantChroma.Lq, 16); + bitstream_put_ui(&bs, quantChroma.Pq, 4); + bitstream_put_ui(&bs, quantChroma.Tq, 4); + for(i=0; i 255) ? 255 : temp; + temp = (temp < 1) ? 1 : temp; + quantChroma.Qk[i] = (unsigned char)temp; + bitstream_put_ui(&bs, quantChroma.Qk[i], 8); + } + } + + //Add FrameHeader + JPEGFrameHeader frameHdr; + memset(&frameHdr,0,sizeof(JPEGFrameHeader)); + populate_frame_header(&frameHdr, yuvComp, picture_width, picture_height); + + bitstream_put_ui(&bs, frameHdr.SOF, 16); + bitstream_put_ui(&bs, frameHdr.Lf, 16); + bitstream_put_ui(&bs, frameHdr.P, 8); + bitstream_put_ui(&bs, frameHdr.Y, 16); + bitstream_put_ui(&bs, frameHdr.X, 16); + bitstream_put_ui(&bs, frameHdr.Nf, 8); + for(i=0; i> 1) * (picture_height >> 1)); + + memset(newImageBuffer,0,frame_size); + do { + n_items = fread(newImageBuffer, frame_size, 1, yuv_fp); + } while (n_items != 1); + + va_status = vaDeriveImage(va_dpy, surface_id, &surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + + vaMapBuffer(va_dpy, surface_image.buf, &surface_p); + assert(VA_STATUS_SUCCESS == va_status); + + y_src = newImageBuffer; + u_src = newImageBuffer + y_size; /* UV offset for NV12 */ + v_src = newImageBuffer + y_size + u_size; + + y_dst = surface_p + surface_image.offsets[0]; + u_dst = surface_p + surface_image.offsets[1]; /* UV offset for NV12 */ + + if((yuvComp.fourcc_val == VA_FOURCC_NV12) || (yuvComp.fourcc_val == VA_FOURCC_I420) || + (yuvComp.fourcc_val == VA_FOURCC_Y800) ) { + + /* Y plane */ + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width); + y_dst += surface_image.pitches[0]; + y_src += picture_width; + } + + if(yuvComp.num_components > 1) { + + switch(yuvComp.fourcc_val) { + case VA_FOURCC_NV12: { + for (row = 0; row < surface_image.height/2; row++) { + memcpy(u_dst, u_src, surface_image.width); + u_dst += surface_image.pitches[1]; + u_src += (picture_width); + } + break; + } + + case VA_FOURCC_I420: { + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col * 2] = u_src[col]; + u_dst[col * 2 + 1] = v_src[col]; + } + + u_dst += surface_image.pitches[1]; + u_src += (picture_width / 2); + v_src += (picture_width / 2); + } + break; + } + }//end of switch + }//end of if check + } else if((yuvComp.fourcc_val == VA_FOURCC_UYVY) || (yuvComp.fourcc_val == VA_FOURCC_YUY2)) { + + for(row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width*2); + y_dst += surface_image.pitches[0]; + y_src += picture_width*2; + } + + } else if(yuvComp.fourcc_val == VA_FOURCC_RGBA) { + + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width*4); + y_dst += surface_image.pitches[0]; + y_src += picture_width*4; + } + } + + vaUnmapBuffer(va_dpy, surface_image.buf); + vaDestroyImage(va_dpy, surface_image.image_id); + +} + + + +void init_yuv_component(YUVComponentSpecs *yuvComponent, int yuv_type, int *surface_type, VASurfaceAttrib *fourcc) +{ + + // + switch(yuv_type) + { + case 0 : //I420 + case 1 : { //NV12 + yuvComponent->va_surface_format = (*surface_type) = VA_RT_FORMAT_YUV420; + if(yuv_type == 0) { + yuvComponent->fourcc_val = VA_FOURCC_I420; + fourcc->value.value.i = VA_FOURCC_NV12; + } else { + yuvComponent->fourcc_val = fourcc->value.value.i = VA_FOURCC_NV12; + } + yuvComponent->num_components = 3; + yuvComponent->y_h_subsample = 2; + yuvComponent->y_v_subsample = 2; + yuvComponent->u_h_subsample = 1; + yuvComponent->u_v_subsample = 1; + yuvComponent->v_h_subsample = 1; + yuvComponent->v_v_subsample = 1; + break; + } + + case 2: { //UYVY + yuvComponent->va_surface_format = (*surface_type) = VA_RT_FORMAT_YUV422; + yuvComponent->fourcc_val = fourcc->value.value.i = VA_FOURCC_UYVY; + yuvComponent->num_components = 3; + yuvComponent->y_h_subsample = 2; + yuvComponent->y_v_subsample = 1; + yuvComponent->u_h_subsample = 1; + yuvComponent->u_v_subsample = 1; + yuvComponent->v_h_subsample = 1; + yuvComponent->v_v_subsample = 1; + break; + } + + case 3: { //YUY2 + yuvComponent->va_surface_format = (*surface_type) = VA_RT_FORMAT_YUV422; + yuvComponent->fourcc_val = fourcc->value.value.i = VA_FOURCC_YUY2; + yuvComponent->num_components = 3; + yuvComponent->y_h_subsample = 2; + yuvComponent->y_v_subsample = 1; + yuvComponent->u_h_subsample = 1; + yuvComponent->u_v_subsample = 1; + yuvComponent->v_h_subsample = 1; + yuvComponent->v_v_subsample = 1; + break; + } + + case 4: { //Y8 + yuvComponent->va_surface_format = (*surface_type) = VA_RT_FORMAT_YUV400; + yuvComponent->fourcc_val = fourcc->value.value.i = VA_FOURCC_Y800; + yuvComponent->num_components = 1; + yuvComponent->y_h_subsample = 1; + yuvComponent->y_v_subsample = 1; + yuvComponent->u_h_subsample = 0; + yuvComponent->u_v_subsample = 0; + yuvComponent->v_h_subsample = 0; + yuvComponent->v_v_subsample = 0; + break; + } + + case 5: { //RGBA + yuvComponent->va_surface_format = (*surface_type) = VA_RT_FORMAT_RGB32; + yuvComponent->fourcc_val = fourcc->value.value.i = VA_FOURCC_RGBA; + yuvComponent->num_components = 3; + yuvComponent->y_h_subsample = 1; + yuvComponent->y_v_subsample = 1; + yuvComponent->u_h_subsample = 1; + yuvComponent->u_v_subsample = 1; + yuvComponent->v_h_subsample = 1; + yuvComponent->v_v_subsample = 1; + break; + } + + default: { + printf("Unsupported format:\n"); + show_help(); + break; + } + + } + +} + +int encode_input_image(FILE *yuv_fp, FILE *jpeg_fp, int picture_width, int picture_height, int frame_size, int yuv_type, int quality) +{ + int num_entrypoints,enc_entrypoint; + int major_ver, minor_ver; + int surface_type; + VAEntrypoint entrypoints[5]; + VASurfaceAttrib fourcc; + VAConfigAttrib attrib[2]; + VADisplay va_dpy; + VAStatus va_status; + VAConfigID config_id; + VASurfaceID surface_id; + VAContextID context_id; + VABufferID pic_param_buf_id; /* Picture parameter id*/ + VABufferID slice_param_buf_id; /* Slice parameter id, only 1 slice per frame in jpeg encode */ + VABufferID codedbuf_buf_id; /* Output buffer id, compressed data */ + VABufferID packed_raw_header_param_buf_id; /* Header parameter buffer id */ + VABufferID packed_raw_header_buf_id; /* Header buffer id */ + VABufferID qmatrix_buf_id; /* Quantization Matrix id */ + VABufferID huffmantable_buf_id; /* Huffman table id*/ + VAEncPictureParameterBufferJPEG pic_param; /* Picture parameter buffer */ + VAEncSliceParameterBufferJPEG slice_param; /* Slice parameter buffer */ + VAQMatrixBufferJPEG quantization_param; /* Quantization Matrix buffer */ + VAHuffmanTableBufferJPEGBaseline hufftable_param; /* Huffmantable buffer */ + YUVComponentSpecs yuvComponent; + int writeToFile = 1; + + //Clamp the quality factor value to [1,100] + if(quality >= 100) quality=100; + if(quality <= 0) quality=1; + + fourcc.type =VASurfaceAttribPixelFormat; + fourcc.flags=VA_SURFACE_ATTRIB_SETTABLE; + fourcc.value.type=VAGenericValueTypeInteger; + + init_yuv_component(&yuvComponent, yuv_type, &surface_type, &fourcc); + + /* 1. Initialize the va driver */ + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + assert(va_status == VA_STATUS_SUCCESS); + + /* 2. Query for the entrypoints for the JPEGBaseline profile */ + va_status = vaQueryConfigEntrypoints(va_dpy, VAProfileJPEGBaseline, entrypoints, &num_entrypoints); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + // We need picture level encoding (VAEntrypointEncPicture). Find if it is supported. + for (enc_entrypoint = 0; enc_entrypoint < num_entrypoints; enc_entrypoint++) { + if (entrypoints[enc_entrypoint] == VAEntrypointEncPicture) + break; + } + if (enc_entrypoint == num_entrypoints) { + /* No JPEG Encode (VAEntrypointEncPicture) entry point found */ + assert(0); + } + + /* 3. Query for the Render Target format supported */ + attrib[0].type = VAConfigAttribRTFormat; + attrib[1].type = VAConfigAttribEncJPEG; + vaGetConfigAttributes(va_dpy, VAProfileJPEGBaseline, VAEntrypointEncPicture, &attrib[0], 2); + + // RT should be one of below. + if(!((attrib[0].value & VA_RT_FORMAT_YUV420) || (attrib[0].value & VA_RT_FORMAT_YUV422) || (attrib[0].value & VA_RT_FORMAT_RGB32) + ||(attrib[0].value & VA_RT_FORMAT_YUV444) || (attrib[0].value & VA_RT_FORMAT_YUV400))) + { + /* Did not find the supported RT format */ + assert(0); + } + + VAConfigAttribValEncJPEG jpeg_attrib_val; + jpeg_attrib_val.value = attrib[1].value; + + /* Set JPEG profile attribs */ + jpeg_attrib_val.bits.arithmatic_coding_mode = 0; + jpeg_attrib_val.bits.progressive_dct_mode = 0; + jpeg_attrib_val.bits.non_interleaved_mode = 1; + jpeg_attrib_val.bits.differential_mode = 0; + + attrib[1].value = jpeg_attrib_val.value; + + /* 4. Create Config for the profile=VAProfileJPEGBaseline, entrypoint=VAEntrypointEncPicture, + * with RT format attribute */ + va_status = vaCreateConfig(va_dpy, VAProfileJPEGBaseline, VAEntrypointEncPicture, + &attrib[0], 2, &config_id); + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); + + /* 5. Create Surface for the input picture */ + va_status = vaCreateSurfaces(va_dpy, surface_type, picture_width, picture_height, + &surface_id, 1, &fourcc, 1); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + //Map the input yuv file to the input surface created with the surface_id + upload_yuv_to_surface(va_dpy, yuv_fp, surface_id, yuvComponent, picture_width, picture_height, frame_size); + + /* 6. Create Context for the encode pipe*/ + va_status = vaCreateContext(va_dpy, config_id, picture_width, picture_height, + VA_PROGRESSIVE, &surface_id, 1, &context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); + + /* Create buffer for Encoded data to be stored */ + va_status = vaCreateBuffer(va_dpy, context_id, VAEncCodedBufferType, + frame_size, 1, NULL, &codedbuf_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + //Initialize the picture parameter buffer + pic_param.coded_buf = codedbuf_buf_id; + jpegenc_pic_param_init(&pic_param, picture_width, picture_height, quality, yuvComponent); + + /* 7. Create buffer for the picture parameter */ + va_status = vaCreateBuffer(va_dpy, context_id, VAEncPictureParameterBufferType, + sizeof(VAEncPictureParameterBufferJPEG), 1, &pic_param, &pic_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + //Load the QMatrix + jpegenc_qmatrix_init(&quantization_param, yuvComponent); + + /* 8. Create buffer for Quantization Matrix */ + va_status = vaCreateBuffer(va_dpy, context_id, VAQMatrixBufferType, + sizeof(VAQMatrixBufferJPEG), 1, &quantization_param, &qmatrix_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + //Load the Huffman Tables + jpegenc_hufftable_init(&hufftable_param, yuvComponent); + + /* 9. Create buffer for Huffman Tables */ + va_status = vaCreateBuffer(va_dpy, context_id, VAHuffmanTableBufferType, + sizeof(VAHuffmanTableBufferJPEGBaseline), 1, &hufftable_param, &huffmantable_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + //Initialize the slice parameter buffer + jpegenc_slice_param_init(&slice_param, yuvComponent); + + /* 10. Create buffer for slice parameter */ + va_status = vaCreateBuffer(va_dpy, context_id, VAEncSliceParameterBufferType, + sizeof(slice_param), 1, &slice_param, &slice_param_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); + + //Pack headers and send using Raw data buffer + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + unsigned int length_in_bits; + unsigned char *packed_header_buffer = NULL; + + length_in_bits = build_packed_jpeg_header_buffer(&packed_header_buffer, yuvComponent, picture_width, picture_height, slice_param.restart_interval, quality); + packed_header_param_buffer.type = VAEncPackedHeaderRawData; + packed_header_param_buffer.bit_length = length_in_bits; + packed_header_param_buffer.has_emulation_bytes = 0; + + /* 11. Create raw buffer for header */ + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &packed_raw_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(va_dpy, + context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_header_buffer, + &packed_raw_header_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + /* 12. Begin picture */ + va_status = vaBeginPicture(va_dpy, context_id, surface_id); + CHECK_VASTATUS(va_status, "vaBeginPicture"); + + /* 13. Render picture for all the VA buffers created */ + va_status = vaRenderPicture(va_dpy,context_id, &pic_param_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &qmatrix_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &huffmantable_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &slice_param_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &packed_raw_header_param_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaRenderPicture(va_dpy,context_id, &packed_raw_header_buf_id, 1); + CHECK_VASTATUS(va_status, "vaRenderPicture"); + + va_status = vaEndPicture(va_dpy,context_id); + CHECK_VASTATUS(va_status, "vaEndPicture"); + + if (writeToFile) { + VASurfaceStatus surface_status; + size_t w_items; + VACodedBufferSegment *coded_buffer_segment; + unsigned char *coded_mem; + int slice_data_length; + + va_status = vaSyncSurface(va_dpy, surface_id); + CHECK_VASTATUS(va_status, "vaSyncSurface"); + + surface_status = 0; + va_status = vaQuerySurfaceStatus(va_dpy, surface_id, &surface_status); + CHECK_VASTATUS(va_status,"vaQuerySurfaceStatus"); + + va_status = vaMapBuffer(va_dpy, codedbuf_buf_id, (void **)(&coded_buffer_segment)); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + + coded_mem = coded_buffer_segment->buf; + + if (coded_buffer_segment->status & VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK) { + vaUnmapBuffer(va_dpy, codedbuf_buf_id); + printf("ERROR......Coded buffer too small\n"); + } + + + slice_data_length = coded_buffer_segment->size; + + do { + w_items = fwrite(coded_mem, slice_data_length, 1, jpeg_fp); + } while (w_items != 1); + + va_status = vaUnmapBuffer(va_dpy, codedbuf_buf_id); + CHECK_VASTATUS(va_status, "vaUnmapBuffer"); + } + + vaDestroyBuffer(va_dpy, pic_param_buf_id); + vaDestroyBuffer(va_dpy, qmatrix_buf_id); + vaDestroyBuffer(va_dpy, slice_param_buf_id); + vaDestroyBuffer(va_dpy, huffmantable_buf_id); + vaDestroyBuffer(va_dpy, codedbuf_buf_id); + vaDestroyBuffer(va_dpy, packed_raw_header_param_buf_id); + vaDestroyBuffer(va_dpy, packed_raw_header_buf_id); + vaDestroySurfaces(va_dpy,&surface_id,1); + vaDestroyContext(va_dpy,context_id); + vaDestroyConfig(va_dpy,config_id); + vaTerminate(va_dpy); + va_close_display(va_dpy); + + return 0; +} + + +int main(int argc, char *argv[]) +{ + FILE *yuv_fp; + FILE *jpeg_fp; + off_t file_size; + clock_t start_time, finish_time; + unsigned int duration; + unsigned int yuv_type = 0; + int quality = 0; + unsigned int picture_width = 0; + unsigned int picture_height = 0; + unsigned int frame_size = 0; + + va_init_display_args(&argc, argv); + + if(argc != 7) { + show_help(); + return -1; + } + + picture_width = atoi(argv[1]); + picture_height = atoi(argv[2]); + yuv_type = atoi(argv[5]); + quality = atoi(argv[6]); + + yuv_fp = fopen(argv[3],"rb"); + if ( yuv_fp == NULL){ + printf("Can't open input YUV file\n"); + return -1; + } + + fseeko(yuv_fp, (off_t)0, SEEK_END); + file_size = ftello(yuv_fp); + + // + switch(yuv_type) + { + case 0 : //I420 + case 1 : { //NV12 + frame_size = picture_width * picture_height + ((picture_width * picture_height) >> 1) ; + break; + } + + case 2: //UYVY + case 3: { //YUY2 + frame_size = 2 * (picture_width * picture_height); + break; + } + + case 4: { //Y8 + frame_size = picture_width * picture_height; + break; + } + + case 5: { //RGBA + frame_size = 4 * (picture_width * picture_height) ; + break; + } + + default: { + printf("Unsupported format:\n"); + show_help(); + break; + } + + } + + if ( (file_size < frame_size) || (file_size % frame_size) ) { + fclose(yuv_fp); + printf("The YUV file's size is not correct: file_size=%zd, frame_size=%d\n", file_size, frame_size); + return -1; + } + + fseeko(yuv_fp, (off_t)0, SEEK_SET); + + jpeg_fp = fopen(argv[4], "wb"); + if ( jpeg_fp == NULL) { + fclose(yuv_fp); + printf("Can't open output destination jpeg file\n"); + return -1; + } + + start_time = clock(); + encode_input_image(yuv_fp, jpeg_fp, picture_width, picture_height, frame_size, yuv_type, quality); + if(yuv_fp != NULL) fclose(yuv_fp); + if(jpeg_fp != NULL) fclose(jpeg_fp); + finish_time = clock(); + duration = finish_time - start_time; + printf("Encoding finished in %u ticks\n", duration); + + return 0; +} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/jpegenc_utils.h b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/jpegenc_utils.h new file mode 100644 index 000000000..e003c7e8d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/jpegenc_utils.h @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2014 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * This file is a utilities file which supports JPEG Encode process + */ + +#include +#include + +#define MAX_JPEG_COMPONENTS 3 //only for Y, U and V +#define JPEG_Y 0 +#define JPEG_U 1 +#define JPEG_V 2 +#define NUM_QUANT_ELEMENTS 64 +#define NUM_MAX_HUFFTABLE 2 +#define NUM_AC_RUN_SIZE_BITS 16 +#define NUM_AC_CODE_WORDS_HUFFVAL 162 +#define NUM_DC_RUN_SIZE_BITS 16 +#define NUM_DC_CODE_WORDS_HUFFVAL 12 + +#define BITSTREAM_ALLOCATE_STEPPING 4096 + +struct __bitstream { + unsigned int *buffer; + int bit_offset; + int max_size_in_dword; +}; + +typedef struct __bitstream bitstream; + +static unsigned int +swap32(unsigned int val) +{ + unsigned char *pval = (unsigned char *)&val; + + return ((pval[0] << 24) | + (pval[1] << 16) | + (pval[2] << 8) | + (pval[3] << 0)); +} + +static void +bitstream_start(bitstream *bs) +{ + bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1); + bs->bit_offset = 0; +} + +static void +bitstream_end(bitstream *bs) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (bit_offset) { + bs->buffer[pos] = swap32((bs->buffer[pos] << bit_left)); + } +} + +static void +bitstream_put_ui(bitstream *bs, unsigned int val, int size_in_bits) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (!size_in_bits) + return; + + if (size_in_bits < 32) + val &= ((1 << size_in_bits) - 1); + + bs->bit_offset += size_in_bits; + + if (bit_left > size_in_bits) { + bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val); + } else { + size_in_bits -= bit_left; + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits); + bs->buffer[pos] = swap32(bs->buffer[pos]); + + if (pos + 1 == bs->max_size_in_dword) { + bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int)); + } + + bs->buffer[pos + 1] = val; + } +} + +//As per Jpeg Spec ISO/IEC 10918-1, below values are assigned +enum jpeg_markers { + + //Define JPEG markers as 0xFFXX if you are adding the value directly to the buffer + //Else define marker as 0xXXFF if you are assigning the marker to a structure variable. + //This is needed because of the little-endedness of the IA + + SOI = 0xFFD8, //Start of Image + EOI = 0xFFD9, //End of Image + SOS = 0xFFDA, //Start of Scan + DQT = 0xFFDB, //Define Quantization Table + DRI = 0xFFDD, //Define restart interval + RST0 = 0xFFD0, //Restart interval termination + DHT = 0xFFC4, //Huffman table + SOF0 = 0xFFC0, //Baseline DCT + APP0 = 0xFFE0, //Application Segment + COM = 0xFFFE //Comment segment +}; + +typedef struct _JPEGFrameHeader { + + uint16_t SOF; //Start of Frame Header + uint16_t Lf; //Length of Frame Header + uint8_t P; //Sample precision + uint16_t Y; //Number of lines + uint16_t X; //Number of samples per line + uint8_t Nf; //Number of image components in frame + + struct _JPEGComponent { + uint8_t Ci; //Component identifier + uint8_t Hi:4; //Horizontal sampling factor + uint8_t Vi:4; //Vertical sampling factor + uint8_t Tqi; //Quantization table destination selector + } JPEGComponent[MAX_JPEG_COMPONENTS]; + +} JPEGFrameHeader; + + +typedef struct _JPEGScanHeader { + + uint16_t SOS; //Start of Scan + uint16_t Ls; //Length of Scan + uint8_t Ns; //Number of image components in the scan + + struct _ScanComponent { + uint8_t Csj; //Scan component selector + uint8_t Tdj:4; //DC Entropy coding table destination selector(Tdj:4 bits) + uint8_t Taj:4; //AC Entropy coding table destination selector(Taj:4 bits) + } ScanComponent[MAX_JPEG_COMPONENTS]; + + uint8_t Ss; //Start of spectral or predictor selection, 0 for Baseline + uint8_t Se; //End of spectral or predictor selection, 63 for Baseline + uint8_t Ah:4; //Successive approximation bit position high, 0 for Baseline + uint8_t Al:4; //Successive approximation bit position low, 0 for Baseline + +} JPEGScanHeader; + + +typedef struct _JPEGQuantSection { + + uint16_t DQT; //Quantization table marker + uint16_t Lq; //Length of Quantization table definition + uint8_t Tq:4; //Quantization table destination identifier + uint8_t Pq:4; //Quatization table precision. Should be 0 for 8-bit samples + uint8_t Qk[NUM_QUANT_ELEMENTS]; //Quantization table elements + +} JPEGQuantSection; + +typedef struct _JPEGHuffSection { + + uint16_t DHT; //Huffman table marker + uint16_t Lh; //Huffman table definition length + uint8_t Tc:4; //Table class- 0:DC, 1:AC + uint8_t Th:4; //Huffman table destination identifier + uint8_t Li[NUM_AC_RUN_SIZE_BITS]; //Number of Huffman codes of length i + uint8_t Vij[NUM_AC_CODE_WORDS_HUFFVAL]; //Value associated with each Huffman code + +} JPEGHuffSection; + + +typedef struct _JPEGRestartSection { + + uint16_t DRI; //Restart interval marker + uint16_t Lr; //Legth of restart interval segment + uint16_t Ri; //Restart interval + +} JPEGRestartSection; + + +typedef struct _JPEGCommentSection { + + uint16_t COM; //Comment marker + uint16_t Lc; //Comment segment length + uint8_t Cmi; //Comment byte + +} JPEGCommentSection; + + +typedef struct _JPEGAppSection { + + uint16_t APPn; //Application data marker + uint16_t Lp; //Application data segment length + uint8_t Api; //Application data byte + +} JPEGAppSection; + +//Luminance quantization table +//Source: Jpeg Spec ISO/IEC 10918-1, Annex K, Table K.1 +uint8_t jpeg_luma_quant[NUM_QUANT_ELEMENTS] = { + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99 +}; + +//Luminance quantization table +//Source: Jpeg Spec ISO/IEC 10918-1, Annex K, Table K.2 +uint8_t jpeg_chroma_quant[NUM_QUANT_ELEMENTS] = { + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 +}; + + +//Zigzag scan order of the the Luma and Chroma components +//Note: Jpeg Spec ISO/IEC 10918-1, Figure A.6 shows the zigzag order differently. +//The Spec is trying to show the zigzag pattern with number positions. The below +//table will use the patter shown by A.6 and map the postion of the elements in the array +uint8_t jpeg_zigzag[] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + + +//Huffman table for Luminance DC Coefficients +//Reference Jpeg Spec ISO/IEC 10918-1, K.3.3.1 +//K.3.3.1 is the summarized version of Table K.3 +uint8_t jpeg_hufftable_luma_dc[] = { + //TcTh (Tc=0 since 0:DC, 1:AC; Th=0) + 0x00, + //Li + 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + //Vi + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B +}; + +//Huffman table for Chrominance DC Coefficients +//Reference Jpeg Spec ISO/IEC 10918-1, K.3.3.1 +//K.3.3.1 is the summarized version of Table K.4 +uint8_t jpeg_hufftable_chroma_dc[] = { + //TcTh (Tc=0 since 0:DC, 1:AC; Th=1) + 0x01, + //Li + 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + //Vi + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B +}; + + +//Huffman table for Luminance AC Coefficients +//Reference Jpeg Spec ISO/IEC 10918-1, K.3.3.2 +//K.3.3.2 is the summarized version of Table K.5 +uint8_t jpeg_hufftable_luma_ac[] = { + //TcTh (Tc=1 since 0:DC, 1:AC; Th=0) + 0x10, + //Li + 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D, + //Vi + 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, + 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, + 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, + 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2, + 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, + 0xF9, 0xFA +}; + +//Huffman table for Chrominance AC Coefficients +//Reference Jpeg Spec ISO/IEC 10918-1, K.3.3.2 +//K.3.3.2 is the summarized version of Table K.6 +uint8_t jpeg_hufftable_chroma_ac[] = { + //TcTh (Tc=1 since 0:DC, 1:AC; Th=1) + 0x11, + //Li + 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, + //Vi + 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, + 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, + 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, + 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, + 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, + 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, + 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, + 0xF9, 0xFA +}; + +typedef struct _YUVComponentSpecs { + //One of 0(I420)/1(NV12)/2(UYVY)/3(YUY2)/4(Y8)/5(RGBA)> + unsigned int yuv_type; + // One of VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422, VA_RT_FORMAT_YUV400, VA_RT_FORMAT_YUV444, VA_RT_FORMAT_RGB32 + unsigned int va_surface_format; + //One of VA_FOURCC_I420, VA_FOURCC_NV12, VA_FOURCC_UYVY, VA_FOURCC_YUY2, VA_FOURCC_Y800, VA_FOURCC_444P, VA_FOURCC_RGBA + unsigned int fourcc_val; //Using this field to evaluate the input file type. + //no.of. components + unsigned int num_components; + //Y horizontal subsample + unsigned int y_h_subsample; + //Y vertical subsample + unsigned int y_v_subsample; + //U horizontal subsample + unsigned int u_h_subsample; + //U vertical subsample + unsigned int u_v_subsample; + //V horizontal subsample + unsigned int v_h_subsample; + //V vertical subsample + unsigned int v_v_subsample; +} YUVComponentSpecs; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/mpeg2vaenc.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/mpeg2vaenc.c new file mode 100644 index 000000000..f49af27b3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/encode/mpeg2vaenc.c @@ -0,0 +1,1545 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * Simple MPEG-2 encoder based on libVA. + * + */ + +#include "sysdeps.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "va_display.h" + +#define START_CODE_PICUTRE 0x00000100 +#define START_CODE_SLICE 0x00000101 +#define START_CODE_USER 0x000001B2 +#define START_CODE_SEQ 0x000001B3 +#define START_CODE_EXT 0x000001B5 +#define START_CODE_GOP 0x000001B8 + +#define CHROMA_FORMAT_RESERVED 0 +#define CHROMA_FORMAT_420 1 +#define CHROMA_FORMAT_422 2 +#define CHROMA_FORMAT_444 3 + +#define MAX_SLICES 128 + +enum { + MPEG2_MODE_I = 0, + MPEG2_MODE_IP, + MPEG2_MODE_IPB, +}; + +enum { + MPEG2_LEVEL_LOW = 0, + MPEG2_LEVEL_MAIN, + MPEG2_LEVEL_HIGH, +}; + +#define CHECK_VASTATUS(va_status, func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr, "%s:%s (%d) failed, exit\n", __func__, func, __LINE__); \ + exit(1); \ + } + +static VAProfile mpeg2_va_profiles[] = { + VAProfileMPEG2Simple, + VAProfileMPEG2Main +}; + +static struct _mpeg2_sampling_density +{ + int samplers_per_line; + int line_per_frame; + int frame_per_sec; +} mpeg2_upper_samplings[2][3] = { + { { 0, 0, 0 }, + { 720, 576, 30 }, + { 0, 0, 0 }, + }, + + { { 352, 288, 30 }, + { 720, 576, 30 }, + { 1920, 1152, 60 }, + } +}; + +struct mpeg2enc_context { + /* args */ + int rate_control_mode; + int fps; + int mode; /* 0:I, 1:I/P, 2:I/P/B */ + VAProfile profile; + int level; + int width; + int height; + int frame_size; + int num_pictures; + int qp; + FILE *ifp; + FILE *ofp; + unsigned char *frame_data_buffer; + int intra_period; + int ip_period; + int bit_rate; /* in kbps */ + VAEncPictureType next_type; + int next_display_order; + int next_bframes; + int new_sequence; + int new_gop_header; + int gop_header_in_display_order; + + /* VA resource */ + VADisplay va_dpy; + VAEncSequenceParameterBufferMPEG2 seq_param; + VAEncPictureParameterBufferMPEG2 pic_param; + VAEncSliceParameterBufferMPEG2 slice_param[MAX_SLICES]; + VAContextID context_id; + VAConfigID config_id; + VABufferID seq_param_buf_id; /* Sequence level parameter */ + VABufferID pic_param_buf_id; /* Picture level parameter */ + VABufferID slice_param_buf_id[MAX_SLICES]; /* Slice level parameter, multil slices */ + VABufferID codedbuf_buf_id; /* Output buffer, compressed data */ + VABufferID packed_seq_header_param_buf_id; + VABufferID packed_seq_buf_id; + VABufferID packed_pic_header_param_buf_id; + VABufferID packed_pic_buf_id; + int num_slice_groups; + int codedbuf_i_size; + int codedbuf_pb_size; + + /* thread */ + pthread_t upload_thread_id; + int upload_thread_value; + int current_input_surface; + int current_upload_surface; +}; + +/* + * mpeg2enc helpers + */ +#define BITSTREAM_ALLOCATE_STEPPING 4096 + +struct __bitstream { + unsigned int *buffer; + int bit_offset; + int max_size_in_dword; +}; + +typedef struct __bitstream bitstream; + +static unsigned int +swap32(unsigned int val) +{ + unsigned char *pval = (unsigned char *)&val; + + return ((pval[0] << 24) | + (pval[1] << 16) | + (pval[2] << 8) | + (pval[3] << 0)); +} + +static void +bitstream_start(bitstream *bs) +{ + bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1); + bs->bit_offset = 0; +} + +static void +bitstream_end(bitstream *bs) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (bit_offset) { + bs->buffer[pos] = swap32((bs->buffer[pos] << bit_left)); + } +} + +static void +bitstream_put_ui(bitstream *bs, unsigned int val, int size_in_bits) +{ + int pos = (bs->bit_offset >> 5); + int bit_offset = (bs->bit_offset & 0x1f); + int bit_left = 32 - bit_offset; + + if (!size_in_bits) + return; + + if (size_in_bits < 32) + val &= ((1 << size_in_bits) - 1); + + bs->bit_offset += size_in_bits; + + if (bit_left > size_in_bits) { + bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val); + } else { + size_in_bits -= bit_left; + bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits); + bs->buffer[pos] = swap32(bs->buffer[pos]); + + if (pos + 1 == bs->max_size_in_dword) { + bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING; + bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int)); + } + + bs->buffer[pos + 1] = val; + } +} + +static void +bitstream_byte_aligning(bitstream *bs, int bit) +{ + int bit_offset = (bs->bit_offset & 0x7); + int bit_left = 8 - bit_offset; + int new_val; + + if (!bit_offset) + return; + + assert(bit == 0 || bit == 1); + + if (bit) + new_val = (1 << bit_left) - 1; + else + new_val = 0; + + bitstream_put_ui(bs, new_val, bit_left); +} + +static struct mpeg2_frame_rate { + int code; + float value; +} frame_rate_tab[] = { + {1, 23.976}, + {2, 24.0}, + {3, 25.0}, + {4, 29.97}, + {5, 30}, + {6, 50}, + {7, 59.94}, + {8, 60} +}; + +static int +find_frame_rate_code(const VAEncSequenceParameterBufferMPEG2 *seq_param) +{ + unsigned int delta = -1; + int code = 1, i; + float frame_rate_value = seq_param->frame_rate * + (seq_param->sequence_extension.bits.frame_rate_extension_d + 1) / + (seq_param->sequence_extension.bits.frame_rate_extension_n + 1); + + for (i = 0; i < sizeof(frame_rate_tab) / sizeof(frame_rate_tab[0]); i++) { + + if (abs(1000 * frame_rate_tab[i].value - 1000 * frame_rate_value) < delta) { + code = frame_rate_tab[i].code; + delta = abs(1000 * frame_rate_tab[i].value - 1000 * frame_rate_value); + } + } + + return code; +} + +static void +sps_rbsp(struct mpeg2enc_context *ctx, + const VAEncSequenceParameterBufferMPEG2 *seq_param, + bitstream *bs) +{ + int frame_rate_code = find_frame_rate_code(seq_param); + + if (ctx->new_sequence) { + bitstream_put_ui(bs, START_CODE_SEQ, 32); + bitstream_put_ui(bs, seq_param->picture_width, 12); + bitstream_put_ui(bs, seq_param->picture_height, 12); + bitstream_put_ui(bs, seq_param->aspect_ratio_information, 4); + bitstream_put_ui(bs, frame_rate_code, 4); /* frame_rate_code */ + bitstream_put_ui(bs, (seq_param->bits_per_second + 399) / 400, 18); /* the low 18 bits of bit_rate */ + bitstream_put_ui(bs, 1, 1); /* marker_bit */ + bitstream_put_ui(bs, seq_param->vbv_buffer_size, 10); + bitstream_put_ui(bs, 0, 1); /* constraint_parameter_flag, always 0 for MPEG-2 */ + bitstream_put_ui(bs, 0, 1); /* load_intra_quantiser_matrix */ + bitstream_put_ui(bs, 0, 1); /* load_non_intra_quantiser_matrix */ + + bitstream_byte_aligning(bs, 0); + + bitstream_put_ui(bs, START_CODE_EXT, 32); + bitstream_put_ui(bs, 1, 4); /* sequence_extension id */ + bitstream_put_ui(bs, seq_param->sequence_extension.bits.profile_and_level_indication, 8); + bitstream_put_ui(bs, seq_param->sequence_extension.bits.progressive_sequence, 1); + bitstream_put_ui(bs, seq_param->sequence_extension.bits.chroma_format, 2); + bitstream_put_ui(bs, seq_param->picture_width >> 12, 2); + bitstream_put_ui(bs, seq_param->picture_height >> 12, 2); + bitstream_put_ui(bs, ((seq_param->bits_per_second + 399) / 400) >> 18, 12); /* bit_rate_extension */ + bitstream_put_ui(bs, 1, 1); /* marker_bit */ + bitstream_put_ui(bs, seq_param->vbv_buffer_size >> 10, 8); + bitstream_put_ui(bs, seq_param->sequence_extension.bits.low_delay, 1); + bitstream_put_ui(bs, seq_param->sequence_extension.bits.frame_rate_extension_n, 2); + bitstream_put_ui(bs, seq_param->sequence_extension.bits.frame_rate_extension_d, 5); + + bitstream_byte_aligning(bs, 0); + } + + if (ctx->new_gop_header) { + bitstream_put_ui(bs, START_CODE_GOP, 32); + bitstream_put_ui(bs, seq_param->gop_header.bits.time_code, 25); + bitstream_put_ui(bs, seq_param->gop_header.bits.closed_gop, 1); + bitstream_put_ui(bs, seq_param->gop_header.bits.broken_link, 1); + + bitstream_byte_aligning(bs, 0); + } +} + +static void +pps_rbsp(const VAEncSequenceParameterBufferMPEG2 *seq_param, + const VAEncPictureParameterBufferMPEG2 *pic_param, + bitstream *bs) +{ + int chroma_420_type; + + if (seq_param->sequence_extension.bits.chroma_format == CHROMA_FORMAT_420) + chroma_420_type = pic_param->picture_coding_extension.bits.progressive_frame; + else + chroma_420_type = 0; + + bitstream_put_ui(bs, START_CODE_PICUTRE, 32); + bitstream_put_ui(bs, pic_param->temporal_reference, 10); + bitstream_put_ui(bs, + pic_param->picture_type == VAEncPictureTypeIntra ? 1 : + pic_param->picture_type == VAEncPictureTypePredictive ? 2 : 3, + 3); + bitstream_put_ui(bs, 0xFFFF, 16); /* vbv_delay, always 0xFFFF */ + + if (pic_param->picture_type == VAEncPictureTypePredictive || + pic_param->picture_type == VAEncPictureTypeBidirectional) { + bitstream_put_ui(bs, 0, 1); /* full_pel_forward_vector, always 0 for MPEG-2 */ + bitstream_put_ui(bs, 7, 3); /* forward_f_code, always 7 for MPEG-2 */ + } + + if (pic_param->picture_type == VAEncPictureTypeBidirectional) { + bitstream_put_ui(bs, 0, 1); /* full_pel_backward_vector, always 0 for MPEG-2 */ + bitstream_put_ui(bs, 7, 3); /* backward_f_code, always 7 for MPEG-2 */ + } + + bitstream_put_ui(bs, 0, 1); /* extra_bit_picture, 0 */ + + bitstream_byte_aligning(bs, 0); + + bitstream_put_ui(bs, START_CODE_EXT, 32); + bitstream_put_ui(bs, 8, 4); /* Picture Coding Extension ID: 8 */ + bitstream_put_ui(bs, pic_param->f_code[0][0], 4); + bitstream_put_ui(bs, pic_param->f_code[0][1], 4); + bitstream_put_ui(bs, pic_param->f_code[1][0], 4); + bitstream_put_ui(bs, pic_param->f_code[1][1], 4); + + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.intra_dc_precision, 2); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.picture_structure, 2); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.top_field_first, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.frame_pred_frame_dct, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.concealment_motion_vectors, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.q_scale_type, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.intra_vlc_format, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.alternate_scan, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.repeat_first_field, 1); + bitstream_put_ui(bs, chroma_420_type, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.progressive_frame, 1); + bitstream_put_ui(bs, pic_param->picture_coding_extension.bits.composite_display_flag, 1); + + bitstream_byte_aligning(bs, 0); +} + +static int +build_packed_pic_buffer(const VAEncSequenceParameterBufferMPEG2 *seq_param, + const VAEncPictureParameterBufferMPEG2 *pic_param, + unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + pps_rbsp(seq_param, pic_param, &bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +static int +build_packed_seq_buffer(struct mpeg2enc_context *ctx, + const VAEncSequenceParameterBufferMPEG2 *seq_param, + unsigned char **header_buffer) +{ + bitstream bs; + + bitstream_start(&bs); + sps_rbsp(ctx, seq_param, &bs); + bitstream_end(&bs); + + *header_buffer = (unsigned char *)bs.buffer; + return bs.bit_offset; +} + +/* + * mpeg2enc + */ +#define SID_INPUT_PICTURE_0 0 +#define SID_INPUT_PICTURE_1 1 +#define SID_REFERENCE_PICTURE_L0 2 +#define SID_REFERENCE_PICTURE_L1 3 +#define SID_RECON_PICTURE 4 +#define SID_NUMBER SID_RECON_PICTURE + 1 + +static VASurfaceID surface_ids[SID_NUMBER]; + +/* + * upload thread function + */ +static void * +upload_yuv_to_surface(void *data) +{ + struct mpeg2enc_context *ctx = data; + VAImage surface_image; + VAStatus va_status; + void *surface_p = NULL; + unsigned char *y_src, *u_src, *v_src; + unsigned char *y_dst, *u_dst, *v_dst; + int y_size = ctx->width * ctx->height; + int u_size = (ctx->width >> 1) * (ctx->height >> 1); + int row, col; + size_t n_items; + + do { + n_items = fread(ctx->frame_data_buffer, ctx->frame_size, 1, ctx->ifp); + } while (n_items != 1); + + va_status = vaDeriveImage(ctx->va_dpy, surface_ids[ctx->current_upload_surface], &surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + + vaMapBuffer(ctx->va_dpy, surface_image.buf, &surface_p); + assert(VA_STATUS_SUCCESS == va_status); + + y_src = ctx->frame_data_buffer; + u_src = ctx->frame_data_buffer + y_size; /* UV offset for NV12 */ + v_src = ctx->frame_data_buffer + y_size + u_size; + + y_dst = surface_p + surface_image.offsets[0]; + u_dst = surface_p + surface_image.offsets[1]; /* UV offset for NV12 */ + v_dst = surface_p + surface_image.offsets[2]; + + /* Y plane */ + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width); + y_dst += surface_image.pitches[0]; + y_src += ctx->width; + } + + if (surface_image.format.fourcc == VA_FOURCC_NV12) { /* UV plane */ + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col * 2] = u_src[col]; + u_dst[col * 2 + 1] = v_src[col]; + } + + u_dst += surface_image.pitches[1]; + u_src += (ctx->width / 2); + v_src += (ctx->width / 2); + } + } else { + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col] = u_src[col]; + v_dst[col] = v_src[col]; + } + + u_dst += surface_image.pitches[1]; + v_dst += surface_image.pitches[2]; + u_src += (ctx->width / 2); + v_src += (ctx->width / 2); + } + } + + vaUnmapBuffer(ctx->va_dpy, surface_image.buf); + vaDestroyImage(ctx->va_dpy, surface_image.image_id); + + return NULL; +} + +static void +mpeg2enc_exit(struct mpeg2enc_context *ctx, int exit_code) +{ + if (ctx->frame_data_buffer) { + free(ctx->frame_data_buffer); + ctx->frame_data_buffer = NULL; + } + + if (ctx->ifp) { + fclose(ctx->ifp); + ctx->ifp = NULL; + } + + if (ctx->ofp) { + fclose(ctx->ofp); + ctx->ofp = NULL; + } + + exit(exit_code); +} + +static void +usage(char *program) +{ + fprintf(stderr, "Usage: %s --help\n", program); + fprintf(stderr, "\t--help print this message\n"); + fprintf(stderr, "Usage: %s [options]\n", program); + fprintf(stderr, "\t specifies the frame width\n"); + fprintf(stderr, "\t specifies the frame height\n"); + fprintf(stderr, "\t specifies the I420/IYUV YUV file\n"); + fprintf(stderr, "\t specifies the encoded MPEG-2 file\n"); + fprintf(stderr, "where options include:\n"); + fprintf(stderr, "\t--cqp const qp mode with specified \n"); + fprintf(stderr, "\t--fps specify the frame rate\n"); + fprintf(stderr, "\t--mode specify the mode 0 (I), 1 (I/P) and 2 (I/P/B)\n"); + fprintf(stderr, "\t--profile specify the profile 0(Simple), or 1(Main, default)\n"); + fprintf(stderr, "\t--level specify the level 0(Low), 1(Main, default) or 2(High)\n"); +} + +void +mpeg2_profile_level(struct mpeg2enc_context *ctx, + int profile, + int level) +{ + int l = 2, p; + + for (p = profile; p < 2; p++) { + for (l = level; l < 3; l++) { + if (ctx->width <= mpeg2_upper_samplings[p][l].samplers_per_line && + ctx->height <= mpeg2_upper_samplings[p][l].line_per_frame && + ctx->fps <= mpeg2_upper_samplings[p][l].frame_per_sec) { + + goto __find; + break; + } + } + } + + if (p == 2) { + fprintf(stderr, "Warning: can't find a proper profile and level for the specified width/height/fps\n"); + p = 1; + l = 2; + } + +__find: + ctx->profile = mpeg2_va_profiles[p]; + ctx->level = l; +} + +static void +parse_args(struct mpeg2enc_context *ctx, int argc, char **argv) +{ + int c, tmp; + int option_index = 0; + long file_size; + int profile = 1, level = 1; + + static struct option long_options[] = { + {"help", no_argument, 0, 'h'}, + {"cqp", required_argument, 0, 'c'}, + {"fps", required_argument, 0, 'f'}, + {"mode", required_argument, 0, 'm'}, + {"profile", required_argument, 0, 'p'}, + {"level", required_argument, 0, 'l'}, + { NULL, 0, NULL, 0 } + }; + + if ((argc == 2 && strcmp(argv[1], "--help") == 0) || + (argc < 5)) + goto print_usage; + + ctx->width = atoi(argv[1]); + ctx->height = atoi(argv[2]); + + if (ctx->width <= 0 || ctx->height <= 0) { + fprintf(stderr, " and must be greater than 0\n"); + goto err_exit; + } + + ctx->ifp = fopen(argv[3], "rb"); + + if (ctx->ifp == NULL) { + fprintf(stderr, "Can't open the input file\n"); + goto err_exit; + } + + fseek(ctx->ifp, 0l, SEEK_END); + file_size = ftell(ctx->ifp); + ctx->frame_size = ctx->width * ctx->height * 3 / 2; + + if ((file_size < ctx->frame_size) || + (file_size % ctx->frame_size)) { + fprintf(stderr, "The input file size %ld isn't a multiple of the frame size %d\n", file_size, ctx->frame_size); + goto err_exit; + } + + ctx->num_pictures = file_size / ctx->frame_size; + fseek(ctx->ifp, 0l, SEEK_SET); + + ctx->ofp = fopen(argv[4], "wb"); + + if (ctx->ofp == NULL) { + fprintf(stderr, "Can't create the output file\n"); + goto err_exit; + } + + opterr = 0; + ctx->fps = 30; + ctx->qp = 8; + ctx->rate_control_mode = VA_RC_CQP; + ctx->mode = MPEG2_MODE_IP; + ctx->profile = VAProfileMPEG2Main; + ctx->level = MPEG2_LEVEL_MAIN; + + optind = 5; + + while((c = getopt_long(argc, argv, + "", + long_options, + &option_index)) != -1) { + switch(c) { + case 'c': + tmp = atoi(optarg); + + /* only support q_scale_type = 0 */ + if (tmp > 62 || tmp < 2) { + fprintf(stderr, "Warning: QP must be in [2, 62]\n"); + + if (tmp > 62) + tmp = 62; + + if (tmp < 2) + tmp = 2; + } + + ctx->qp = tmp & 0xFE; + ctx->rate_control_mode = VA_RC_CQP; + + break; + + case 'f': + tmp = atoi(optarg); + + if (tmp <= 0) + fprintf(stderr, "Warning: FPS must be greater than 0\n"); + else + ctx->fps = tmp; + + ctx->rate_control_mode = VA_RC_CBR; + + break; + + case 'm': + tmp = atoi(optarg); + + if (tmp < MPEG2_MODE_I || tmp > MPEG2_MODE_IPB) + fprintf(stderr, "Waning: MODE must be 0, 1, or 2\n"); + else + ctx->mode = tmp; + + break; + + case 'p': + tmp = atoi(optarg); + + if (tmp < 0 || tmp > 1) + fprintf(stderr, "Waning: PROFILE must be 0 or 1\n"); + else + profile = tmp; + + break; + + case 'l': + tmp = atoi(optarg); + + if (tmp < MPEG2_LEVEL_LOW || tmp > MPEG2_LEVEL_HIGH) + fprintf(stderr, "Waning: LEVEL must be 0, 1, or 2\n"); + else + level = tmp; + + break; + + case '?': + fprintf(stderr, "Error: unkown command options\n"); + + case 'h': + goto print_usage; + } + } + + mpeg2_profile_level(ctx, profile, level); + + return; + +print_usage: + usage(argv[0]); +err_exit: + mpeg2enc_exit(ctx, 1); +} + +/* + * init + */ +void +mpeg2enc_init_sequence_parameter(struct mpeg2enc_context *ctx, + VAEncSequenceParameterBufferMPEG2 *seq_param) +{ + int profile = 4, level = 8; + + switch (ctx->profile) { + case VAProfileMPEG2Simple: + profile = 5; + break; + + case VAProfileMPEG2Main: + profile = 4; + break; + + default: + assert(0); + break; + } + + switch (ctx->level) { + case MPEG2_LEVEL_LOW: + level = 10; + break; + + case MPEG2_LEVEL_MAIN: + level = 8; + break; + + case MPEG2_LEVEL_HIGH: + level = 4; + break; + + default: + assert(0); + break; + } + + seq_param->intra_period = ctx->intra_period; + seq_param->ip_period = ctx->ip_period; /* FIXME: ??? */ + seq_param->picture_width = ctx->width; + seq_param->picture_height = ctx->height; + + if (ctx->bit_rate > 0) + seq_param->bits_per_second = 1024 * ctx->bit_rate; /* use kbps as input */ + else + seq_param->bits_per_second = 0x3FFFF * 400; + + seq_param->frame_rate = ctx->fps; + seq_param->aspect_ratio_information = 1; + seq_param->vbv_buffer_size = 3; /* B = 16 * 1024 * vbv_buffer_size */ + + seq_param->sequence_extension.bits.profile_and_level_indication = profile << 4 | level; + seq_param->sequence_extension.bits.progressive_sequence = 1; /* progressive frame-pictures */ + seq_param->sequence_extension.bits.chroma_format = CHROMA_FORMAT_420; /* 4:2:0 */ + seq_param->sequence_extension.bits.low_delay = 0; /* FIXME */ + seq_param->sequence_extension.bits.frame_rate_extension_n = 0; + seq_param->sequence_extension.bits.frame_rate_extension_d = 0; + + seq_param->gop_header.bits.time_code = (1 << 12); /* bit12: marker_bit */ + seq_param->gop_header.bits.closed_gop = 0; + seq_param->gop_header.bits.broken_link = 0; +} + +static void +mpeg2enc_init_picture_parameter(struct mpeg2enc_context *ctx, + VAEncPictureParameterBufferMPEG2 *pic_param) +{ + pic_param->forward_reference_picture = VA_INVALID_ID; + pic_param->backward_reference_picture = VA_INVALID_ID; + pic_param->reconstructed_picture = VA_INVALID_ID; + pic_param->coded_buf = VA_INVALID_ID; + pic_param->picture_type = VAEncPictureTypeIntra; + + pic_param->temporal_reference = 0; + pic_param->f_code[0][0] = 0xf; + pic_param->f_code[0][1] = 0xf; + pic_param->f_code[1][0] = 0xf; + pic_param->f_code[1][1] = 0xf; + + pic_param->picture_coding_extension.bits.intra_dc_precision = 0; /* 8bits */ + pic_param->picture_coding_extension.bits.picture_structure = 3; /* frame picture */ + pic_param->picture_coding_extension.bits.top_field_first = 0; + pic_param->picture_coding_extension.bits.frame_pred_frame_dct = 1; /* FIXME */ + pic_param->picture_coding_extension.bits.concealment_motion_vectors = 0; + pic_param->picture_coding_extension.bits.q_scale_type = 0; + pic_param->picture_coding_extension.bits.intra_vlc_format = 0; + pic_param->picture_coding_extension.bits.alternate_scan = 0; + pic_param->picture_coding_extension.bits.repeat_first_field = 0; + pic_param->picture_coding_extension.bits.progressive_frame = 1; + pic_param->picture_coding_extension.bits.composite_display_flag = 0; +} + +static void +mpeg2enc_alloc_va_resources(struct mpeg2enc_context *ctx) +{ + VAEntrypoint *entrypoint_list; + VAConfigAttrib attrib_list[2]; + VAStatus va_status; + int max_entrypoints, num_entrypoints, entrypoint; + int major_ver, minor_ver; + + ctx->va_dpy = va_open_display(); + va_status = vaInitialize(ctx->va_dpy, + &major_ver, + &minor_ver); + CHECK_VASTATUS(va_status, "vaInitialize"); + + max_entrypoints = vaMaxNumEntrypoints(ctx->va_dpy); + entrypoint_list = malloc(max_entrypoints * sizeof(VAEntrypoint)); + vaQueryConfigEntrypoints(ctx->va_dpy, + ctx->profile, + entrypoint_list, + &num_entrypoints); + + for (entrypoint = 0; entrypoint < num_entrypoints; entrypoint++) { + if (entrypoint_list[entrypoint] == VAEntrypointEncSlice) + break; + } + + free(entrypoint_list); + + if (entrypoint == num_entrypoints) { + /* not find Slice entry point */ + assert(0); + } + + /* find out the format for the render target, and rate control mode */ + attrib_list[0].type = VAConfigAttribRTFormat; + attrib_list[1].type = VAConfigAttribRateControl; + vaGetConfigAttributes(ctx->va_dpy, + ctx->profile, + VAEntrypointEncSlice, + &attrib_list[0], + 2); + + if ((attrib_list[0].value & VA_RT_FORMAT_YUV420) == 0) { + /* not find desired YUV420 RT format */ + assert(0); + } + + if ((attrib_list[1].value & ctx->rate_control_mode) == 0) { + /* Can't find matched RC mode */ + fprintf(stderr, "RC mode %d isn't found, exit\n", ctx->rate_control_mode); + assert(0); + } + + attrib_list[0].value = VA_RT_FORMAT_YUV420; /* set to desired RT format */ + attrib_list[1].value = ctx->rate_control_mode; /* set to desired RC mode */ + + va_status = vaCreateConfig(ctx->va_dpy, + ctx->profile, + VAEntrypointEncSlice, + attrib_list, + 2, + &ctx->config_id); + CHECK_VASTATUS(va_status, "vaCreateConfig"); + + /* Create a context for this decode pipe */ + va_status = vaCreateContext(ctx->va_dpy, + ctx->config_id, + ctx->width, + ctx->height, + VA_PROGRESSIVE, + 0, + 0, + &ctx->context_id); + CHECK_VASTATUS(va_status, "vaCreateContext"); + + va_status = vaCreateSurfaces(ctx->va_dpy, + VA_RT_FORMAT_YUV420, + ctx->width, + ctx->height, + surface_ids, + SID_NUMBER, + NULL, + 0); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); +} + +static void +mpeg2enc_init(struct mpeg2enc_context *ctx) +{ + int i; + + ctx->frame_data_buffer = (unsigned char *)malloc(ctx->frame_size); + ctx->seq_param_buf_id = VA_INVALID_ID; + ctx->pic_param_buf_id = VA_INVALID_ID; + ctx->packed_seq_header_param_buf_id = VA_INVALID_ID; + ctx->packed_seq_buf_id = VA_INVALID_ID; + ctx->packed_pic_header_param_buf_id = VA_INVALID_ID; + ctx->packed_pic_buf_id = VA_INVALID_ID; + ctx->codedbuf_buf_id = VA_INVALID_ID; + ctx->codedbuf_i_size = ctx->frame_size; + ctx->codedbuf_pb_size = 0; + ctx->next_display_order = 0; + ctx->next_type = VAEncPictureTypeIntra; + + if (ctx->mode == MPEG2_MODE_I) { + ctx->intra_period = 1; + ctx->ip_period = 0; + } else if (ctx->mode == MPEG2_MODE_IP) { + ctx->intra_period = 16; + ctx->ip_period = 0; + } else { + ctx->intra_period = 16; + ctx->ip_period = 2; + } + + ctx->next_bframes = ctx->ip_period; + + ctx->new_sequence = 1; + ctx->new_gop_header = 1; + ctx->gop_header_in_display_order = 0; + + ctx->bit_rate = -1; + + for (i = 0; i < MAX_SLICES; i++) { + ctx->slice_param_buf_id[i] = VA_INVALID_ID; + } + + mpeg2enc_init_sequence_parameter(ctx, &ctx->seq_param); + mpeg2enc_init_picture_parameter(ctx, &ctx->pic_param); + mpeg2enc_alloc_va_resources(ctx); + + /* thread */ + ctx->current_input_surface = SID_INPUT_PICTURE_0; + ctx->current_upload_surface = SID_INPUT_PICTURE_1; + ctx->upload_thread_value = pthread_create(&ctx->upload_thread_id, + NULL, + upload_yuv_to_surface, + ctx); +} + +static int +mpeg2enc_time_code(VAEncSequenceParameterBufferMPEG2 *seq_param, + int num_frames) +{ + int fps = (int)(seq_param->frame_rate + 0.5); + int time_code = 0; + int time_code_pictures, time_code_seconds, time_code_minutes, time_code_hours; + int drop_frame_flag = 0; + + assert(fps <= 60); + + time_code_seconds = num_frames / fps; + time_code_pictures = num_frames % fps; + time_code |= time_code_pictures; + + time_code_minutes = time_code_seconds / 60; + time_code_seconds = time_code_seconds % 60; + time_code |= (time_code_seconds << 6); + + time_code_hours = time_code_minutes / 60; + time_code_minutes = time_code_minutes % 60; + + time_code |= (1 << 12); /* marker_bit */ + time_code |= (time_code_minutes << 13); + + time_code_hours = time_code_hours % 24; + time_code |= (time_code_hours << 19); + + time_code |= (drop_frame_flag << 24); + + return time_code; +} + +/* + * run + */ +static void +mpeg2enc_update_sequence_parameter(struct mpeg2enc_context *ctx, + VAEncPictureType picture_type, + int coded_order, + int display_order) +{ + VAEncSequenceParameterBufferMPEG2 *seq_param = &ctx->seq_param; + + /* update the time_code info for the new GOP */ + if (ctx->new_gop_header) { + seq_param->gop_header.bits.time_code = mpeg2enc_time_code(seq_param, display_order); + } +} + +static void +mpeg2enc_update_picture_parameter(struct mpeg2enc_context *ctx, + VAEncPictureType picture_type, + int coded_order, + int display_order) +{ + VAEncPictureParameterBufferMPEG2 *pic_param = &ctx->pic_param; + uint8_t f_code_x, f_code_y; + + pic_param->picture_type = picture_type; + pic_param->temporal_reference = (display_order - ctx->gop_header_in_display_order) & 0x3FF; + pic_param->reconstructed_picture = surface_ids[SID_RECON_PICTURE]; + pic_param->forward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L0]; + pic_param->backward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L1]; + + f_code_x = 0xf; + f_code_y = 0xf; + if (pic_param->picture_type != VAEncPictureTypeIntra) { + if (ctx->level == MPEG2_LEVEL_LOW) { + f_code_x = 7; + f_code_y = 4; + } else if (ctx->level == MPEG2_LEVEL_MAIN) { + f_code_x = 8; + f_code_y = 5; + } else { + f_code_x = 9; + f_code_y = 5; + } + } + + if (pic_param->picture_type == VAEncPictureTypeIntra) { + pic_param->f_code[0][0] = 0xf; + pic_param->f_code[0][1] = 0xf; + pic_param->f_code[1][0] = 0xf; + pic_param->f_code[1][1] = 0xf; + pic_param->forward_reference_picture = VA_INVALID_SURFACE; + pic_param->backward_reference_picture = VA_INVALID_SURFACE; + + } else if (pic_param->picture_type == VAEncPictureTypePredictive) { + pic_param->f_code[0][0] = f_code_x; + pic_param->f_code[0][1] = f_code_y; + pic_param->f_code[1][0] = 0xf; + pic_param->f_code[1][1] = 0xf; + pic_param->forward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L0]; + pic_param->backward_reference_picture = VA_INVALID_SURFACE; + } else if (pic_param->picture_type == VAEncPictureTypeBidirectional) { + pic_param->f_code[0][0] = f_code_x; + pic_param->f_code[0][1] = f_code_y; + pic_param->f_code[1][0] = f_code_x; + pic_param->f_code[1][1] = f_code_y; + pic_param->forward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L0]; + pic_param->backward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L1]; + } else { + assert(0); + } +} + +static void +mpeg2enc_update_picture_parameter_buffer(struct mpeg2enc_context *ctx, + VAEncPictureType picture_type, + int coded_order, + int display_order) +{ + VAEncPictureParameterBufferMPEG2 *pic_param = &ctx->pic_param; + VAStatus va_status; + + /* update the coded buffer id */ + pic_param->coded_buf = ctx->codedbuf_buf_id; + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPictureParameterBufferType, + sizeof(*pic_param), + 1, + pic_param, + &ctx->pic_param_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer"); +} + +static void +mpeg2enc_update_slice_parameter(struct mpeg2enc_context *ctx, VAEncPictureType picture_type) +{ + VAEncSequenceParameterBufferMPEG2 *seq_param; + VAEncPictureParameterBufferMPEG2 *pic_param; + VAEncSliceParameterBufferMPEG2 *slice_param; + VAStatus va_status; + int i, width_in_mbs, height_in_mbs; + + pic_param = &ctx->pic_param; + assert(pic_param->picture_coding_extension.bits.q_scale_type == 0); + + seq_param = &ctx->seq_param; + width_in_mbs = (seq_param->picture_width + 15) / 16; + height_in_mbs = (seq_param->picture_height + 15) / 16; + ctx->num_slice_groups = 1; + + for (i = 0; i < height_in_mbs; i++) { + slice_param = &ctx->slice_param[i]; + slice_param->macroblock_address = i * width_in_mbs; + slice_param->num_macroblocks = width_in_mbs; + slice_param->is_intra_slice = (picture_type == VAEncPictureTypeIntra); + slice_param->quantiser_scale_code = ctx->qp / 2; + } + + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncSliceParameterBufferType, + sizeof(*slice_param), + height_in_mbs, + ctx->slice_param, + ctx->slice_param_buf_id); + CHECK_VASTATUS(va_status, "vaCreateBuffer");; +} + +static int +begin_picture(struct mpeg2enc_context *ctx, + int coded_order, + int display_order, + VAEncPictureType picture_type) +{ + VAStatus va_status; + int tmp; + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + unsigned int length_in_bits; + unsigned char *packed_seq_buffer = NULL, *packed_pic_buffer = NULL; + + if (ctx->upload_thread_value != 0) { + fprintf(stderr, "FATAL error!!!\n"); + exit(1); + } + + pthread_join(ctx->upload_thread_id, NULL); + + ctx->upload_thread_value = -1; + tmp = ctx->current_input_surface; + ctx->current_input_surface = ctx->current_upload_surface; + ctx->current_upload_surface = tmp; + + mpeg2enc_update_sequence_parameter(ctx, picture_type, coded_order, display_order); + mpeg2enc_update_picture_parameter(ctx, picture_type, coded_order, display_order); + + if (ctx->new_sequence || ctx->new_gop_header) { + assert(picture_type == VAEncPictureTypeIntra); + length_in_bits = build_packed_seq_buffer(ctx, &ctx->seq_param, &packed_seq_buffer); + packed_header_param_buffer.type = VAEncPackedHeaderMPEG2_SPS; + packed_header_param_buffer.has_emulation_bytes = 0; + packed_header_param_buffer.bit_length = length_in_bits; + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &ctx->packed_seq_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_seq_buffer, + &ctx->packed_seq_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + free(packed_seq_buffer); + } + + length_in_bits = build_packed_pic_buffer(&ctx->seq_param, &ctx->pic_param, &packed_pic_buffer); + packed_header_param_buffer.type = VAEncPackedHeaderMPEG2_PPS; + packed_header_param_buffer.has_emulation_bytes = 0; + packed_header_param_buffer.bit_length = length_in_bits; + + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderParameterBufferType, + sizeof(packed_header_param_buffer), 1, &packed_header_param_buffer, + &ctx->packed_pic_header_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncPackedHeaderDataBufferType, + (length_in_bits + 7) / 8, 1, packed_pic_buffer, + &ctx->packed_pic_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + free(packed_pic_buffer); + + /* sequence parameter set */ + VAEncSequenceParameterBufferMPEG2 *seq_param = &ctx->seq_param; + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncSequenceParameterBufferType, + sizeof(*seq_param), + 1, + seq_param, + &ctx->seq_param_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer");; + + /* slice parameter */ + mpeg2enc_update_slice_parameter(ctx, picture_type); + + return 0; +} + +static int +mpeg2enc_render_picture(struct mpeg2enc_context *ctx) +{ + VAStatus va_status; + VABufferID va_buffers[16]; + unsigned int num_va_buffers = 0; + + va_buffers[num_va_buffers++] = ctx->seq_param_buf_id; + va_buffers[num_va_buffers++] = ctx->pic_param_buf_id; + + if (ctx->packed_seq_header_param_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = ctx->packed_seq_header_param_buf_id; + + if (ctx->packed_seq_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = ctx->packed_seq_buf_id; + + if (ctx->packed_pic_header_param_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = ctx->packed_pic_header_param_buf_id; + + if (ctx->packed_pic_buf_id != VA_INVALID_ID) + va_buffers[num_va_buffers++] = ctx->packed_pic_buf_id; + + va_status = vaBeginPicture(ctx->va_dpy, + ctx->context_id, + surface_ids[ctx->current_input_surface]); + CHECK_VASTATUS(va_status,"vaBeginPicture"); + + va_status = vaRenderPicture(ctx->va_dpy, + ctx->context_id, + va_buffers, + num_va_buffers); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + va_status = vaRenderPicture(ctx->va_dpy, + ctx->context_id, + &ctx->slice_param_buf_id[0], + ctx->num_slice_groups); + CHECK_VASTATUS(va_status,"vaRenderPicture"); + + va_status = vaEndPicture(ctx->va_dpy, ctx->context_id); + CHECK_VASTATUS(va_status,"vaEndPicture"); + + return 0; +} + +static int +mpeg2enc_destroy_buffers(struct mpeg2enc_context *ctx, VABufferID *va_buffers, unsigned int num_va_buffers) +{ + VAStatus va_status; + unsigned int i; + + for (i = 0; i < num_va_buffers; i++) { + if (va_buffers[i] != VA_INVALID_ID) { + va_status = vaDestroyBuffer(ctx->va_dpy, va_buffers[i]); + CHECK_VASTATUS(va_status,"vaDestroyBuffer"); + va_buffers[i] = VA_INVALID_ID; + } + } + + return 0; +} + +static void +end_picture(struct mpeg2enc_context *ctx, VAEncPictureType picture_type, int next_is_bpic) +{ + VABufferID tempID; + + /* Prepare for next picture */ + tempID = surface_ids[SID_RECON_PICTURE]; + + if (picture_type != VAEncPictureTypeBidirectional) { + if (next_is_bpic) { + surface_ids[SID_RECON_PICTURE] = surface_ids[SID_REFERENCE_PICTURE_L1]; + surface_ids[SID_REFERENCE_PICTURE_L1] = tempID; + } else { + surface_ids[SID_RECON_PICTURE] = surface_ids[SID_REFERENCE_PICTURE_L0]; + surface_ids[SID_REFERENCE_PICTURE_L0] = tempID; + } + } else { + if (!next_is_bpic) { + surface_ids[SID_RECON_PICTURE] = surface_ids[SID_REFERENCE_PICTURE_L0]; + surface_ids[SID_REFERENCE_PICTURE_L0] = surface_ids[SID_REFERENCE_PICTURE_L1]; + surface_ids[SID_REFERENCE_PICTURE_L1] = tempID; + } + } + + mpeg2enc_destroy_buffers(ctx, &ctx->seq_param_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->pic_param_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->packed_seq_header_param_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->packed_seq_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->packed_pic_header_param_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->packed_pic_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->slice_param_buf_id[0], ctx->num_slice_groups); + mpeg2enc_destroy_buffers(ctx, &ctx->codedbuf_buf_id, 1); + memset(ctx->slice_param, 0, sizeof(ctx->slice_param)); + ctx->num_slice_groups = 0; +} + +static int +store_coded_buffer(struct mpeg2enc_context *ctx, VAEncPictureType picture_type) +{ + VACodedBufferSegment *coded_buffer_segment; + unsigned char *coded_mem; + int slice_data_length; + VAStatus va_status; + VASurfaceStatus surface_status; + size_t w_items; + + va_status = vaSyncSurface(ctx->va_dpy, surface_ids[ctx->current_input_surface]); + CHECK_VASTATUS(va_status,"vaSyncSurface"); + + surface_status = 0; + va_status = vaQuerySurfaceStatus(ctx->va_dpy, surface_ids[ctx->current_input_surface], &surface_status); + CHECK_VASTATUS(va_status,"vaQuerySurfaceStatus"); + + va_status = vaMapBuffer(ctx->va_dpy, ctx->codedbuf_buf_id, (void **)(&coded_buffer_segment)); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + coded_mem = coded_buffer_segment->buf; + + if (coded_buffer_segment->status & VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK) { + if (picture_type == VAEncPictureTypeIntra) + ctx->codedbuf_i_size *= 2; + else + ctx->codedbuf_pb_size *= 2; + + vaUnmapBuffer(ctx->va_dpy, ctx->codedbuf_buf_id); + return -1; + } + + slice_data_length = coded_buffer_segment->size; + + do { + w_items = fwrite(coded_mem, slice_data_length, 1, ctx->ofp); + } while (w_items != 1); + + if (picture_type == VAEncPictureTypeIntra) { + if (ctx->codedbuf_i_size > slice_data_length * 3 / 2) { + ctx->codedbuf_i_size = slice_data_length * 3 / 2; + } + + if (ctx->codedbuf_pb_size < slice_data_length) { + ctx->codedbuf_pb_size = slice_data_length; + } + } else { + if (ctx->codedbuf_pb_size > slice_data_length * 3 / 2) { + ctx->codedbuf_pb_size = slice_data_length * 3 / 2; + } + } + + vaUnmapBuffer(ctx->va_dpy, ctx->codedbuf_buf_id); + + return 0; +} + +static void +encode_picture(struct mpeg2enc_context *ctx, + int coded_order, + int display_order, + VAEncPictureType picture_type, + int next_is_bpic, + int next_display_order) +{ + VAStatus va_status; + int ret = 0, codedbuf_size; + + begin_picture(ctx, coded_order, display_order, picture_type); + + if (1) { + /* upload YUV data to VA surface for next frame */ + if (next_display_order >= ctx->num_pictures) + next_display_order = ctx->num_pictures - 1; + + fseek(ctx->ifp, ctx->frame_size * next_display_order, SEEK_SET); + ctx->upload_thread_value = pthread_create(&ctx->upload_thread_id, + NULL, + upload_yuv_to_surface, + ctx); + } + + do { + mpeg2enc_destroy_buffers(ctx, &ctx->codedbuf_buf_id, 1); + mpeg2enc_destroy_buffers(ctx, &ctx->pic_param_buf_id, 1); + + + if (VAEncPictureTypeIntra == picture_type) { + codedbuf_size = ctx->codedbuf_i_size; + } else { + codedbuf_size = ctx->codedbuf_pb_size; + } + + /* coded buffer */ + va_status = vaCreateBuffer(ctx->va_dpy, + ctx->context_id, + VAEncCodedBufferType, + codedbuf_size, 1, NULL, + &ctx->codedbuf_buf_id); + CHECK_VASTATUS(va_status,"vaCreateBuffer"); + + /* picture parameter set */ + mpeg2enc_update_picture_parameter_buffer(ctx, picture_type, coded_order, display_order); + + mpeg2enc_render_picture(ctx); + + ret = store_coded_buffer(ctx, picture_type); + } while (ret); + + end_picture(ctx, picture_type, next_is_bpic); +} + +static void +update_next_frame_info(struct mpeg2enc_context *ctx, + VAEncPictureType curr_type, + int curr_coded_order, + int curr_display_order) +{ + if (((curr_coded_order + 1) % ctx->intra_period) == 0) { + ctx->next_type = VAEncPictureTypeIntra; + ctx->next_display_order = curr_coded_order + 1; + + return; + } + + if (curr_type == VAEncPictureTypeIntra) { + assert(curr_display_order == curr_coded_order); + ctx->next_type = VAEncPictureTypePredictive; + ctx->next_bframes = ctx->ip_period; + ctx->next_display_order = curr_display_order + ctx->next_bframes + 1; + } else if (curr_type == VAEncPictureTypePredictive) { + if (ctx->ip_period == 0) { + assert(curr_display_order == curr_coded_order); + ctx->next_type = VAEncPictureTypePredictive; + ctx->next_display_order = curr_display_order + 1; + } else { + ctx->next_type = VAEncPictureTypeBidirectional; + ctx->next_display_order = curr_display_order - ctx->next_bframes; + ctx->next_bframes--; + } + } else if (curr_type == VAEncPictureTypeBidirectional) { + if (ctx->next_bframes == 0) { + ctx->next_type = VAEncPictureTypePredictive; + ctx->next_bframes = ctx->ip_period; + ctx->next_display_order = curr_display_order + ctx->next_bframes + 2; + } else { + ctx->next_type = VAEncPictureTypeBidirectional; + ctx->next_display_order = curr_display_order + 1; + ctx->next_bframes--; + } + } + + if (ctx->next_display_order >= ctx->num_pictures) { + int rtmp = ctx->next_display_order - (ctx->num_pictures - 1); + ctx->next_display_order = ctx->num_pictures - 1; + ctx->next_bframes -= rtmp; + } +} + +static void +mpeg2enc_run(struct mpeg2enc_context *ctx) +{ + int display_order = 0, coded_order = 0; + VAEncPictureType type; + + ctx->new_sequence = 1; + ctx->new_gop_header = 1; + ctx->gop_header_in_display_order = display_order; + + while (coded_order < ctx->num_pictures) { + type = ctx->next_type; + display_order = ctx->next_display_order; + /* follow the IPBxxBPBxxB mode */ + update_next_frame_info(ctx, type, coded_order, display_order); + encode_picture(ctx, + coded_order, + display_order, + type, + ctx->next_type == VAEncPictureTypeBidirectional, + ctx->next_display_order); + + /* update gop_header */ + ctx->new_sequence = 0; + ctx->new_gop_header = ctx->next_type == VAEncPictureTypeIntra; + + if (ctx->new_gop_header) + ctx->gop_header_in_display_order += ctx->intra_period; + + coded_order++; + + fprintf(stderr, "\r %d/%d ...", coded_order, ctx->num_pictures); + fflush(stdout); + } +} + +/* + * end + */ +static void +mpeg2enc_release_va_resources(struct mpeg2enc_context *ctx) +{ + vaDestroySurfaces(ctx->va_dpy, surface_ids, SID_NUMBER); + vaDestroyContext(ctx->va_dpy, ctx->context_id); + vaDestroyConfig(ctx->va_dpy, ctx->config_id); + vaTerminate(ctx->va_dpy); + va_close_display(ctx->va_dpy); +} + +static void +mpeg2enc_end(struct mpeg2enc_context *ctx) +{ + pthread_join(ctx->upload_thread_id, NULL); + mpeg2enc_release_va_resources(ctx); +} + +int +main(int argc, char *argv[]) +{ + struct mpeg2enc_context ctx; + struct timeval tpstart, tpend; + float timeuse; + + gettimeofday(&tpstart, NULL); + + memset(&ctx, 0, sizeof(ctx)); + parse_args(&ctx, argc, argv); + mpeg2enc_init(&ctx); + mpeg2enc_run(&ctx); + mpeg2enc_end(&ctx); + + gettimeofday(&tpend, NULL); + timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) + tpend.tv_usec - tpstart.tv_usec; + timeuse /= 1000000; + fprintf(stderr, "\ndone!\n"); + fprintf(stderr, "encode %d frames in %f secondes, FPS is %.1f\n", ctx.num_pictures, timeuse, ctx.num_pictures / timeuse); + + mpeg2enc_exit(&ctx, 0); + + return 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/loadsurface.h b/contrib/sdk/sources/vaapi/libva-1.6.2/test/loadsurface.h new file mode 100644 index 000000000..a4cdb9d46 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/loadsurface.h @@ -0,0 +1,464 @@ +/* + * Copyright (c) 2008-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "loadsurface_yuv.h" + +static int scale_2dimage(unsigned char *src_img, int src_imgw, int src_imgh, + unsigned char *dst_img, int dst_imgw, int dst_imgh) +{ + int row=0, col=0; + + for (row=0; row&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = putsurface$(EXEEXT) $(am__EXEEXT_1) +@USE_WAYLAND_TRUE@am__append_1 = putsurface_wayland +subdir = test/putsurface +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@USE_WAYLAND_TRUE@am__EXEEXT_1 = putsurface_wayland$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_putsurface_OBJECTS = putsurface-putsurface_x11.$(OBJEXT) +putsurface_OBJECTS = $(am_putsurface_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(top_builddir)/va/libva.la +putsurface_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ + $(top_builddir)/va/libva-x11.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +putsurface_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(putsurface_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__putsurface_wayland_SOURCES_DIST = putsurface_wayland.c +@USE_WAYLAND_TRUE@am_putsurface_wayland_OBJECTS = putsurface_wayland-putsurface_wayland.$(OBJEXT) +putsurface_wayland_OBJECTS = $(am_putsurface_wayland_OBJECTS) +@USE_WAYLAND_TRUE@putsurface_wayland_DEPENDENCIES = \ +@USE_WAYLAND_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ +@USE_WAYLAND_TRUE@ $(top_builddir)/va/libva-wayland.la +putsurface_wayland_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(putsurface_wayland_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(putsurface_SOURCES) $(putsurface_wayland_SOURCES) +DIST_SOURCES = $(putsurface_SOURCES) \ + $(am__putsurface_wayland_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -I$(top_builddir) \ + $(NULL) + +TEST_CFLAGS = \ + -DIN_LIBVA \ + $(NULL) + +TEST_LIBS = \ + $(top_builddir)/va/libva.la \ + -lpthread \ + $(NULL) + +putsurface_SOURCES = putsurface_x11.c +putsurface_CFLAGS = $(X11_CFLAGS) $(TEST_CFLAGS) +putsurface_LDADD = $(X11_LIBS) $(TEST_LIBS) \ + $(top_builddir)/va/libva-x11.la \ + $(NULL) + +@USE_WAYLAND_TRUE@putsurface_wayland_SOURCES = putsurface_wayland.c +@USE_WAYLAND_TRUE@putsurface_wayland_CFLAGS = $(WAYLAND_CFLAGS) $(TEST_CFLAGS) +@USE_WAYLAND_TRUE@putsurface_wayland_LDADD = $(WAYLAND_LIBS) $(TEST_LIBS) \ +@USE_WAYLAND_TRUE@ $(top_builddir)/va/libva-wayland.la \ +@USE_WAYLAND_TRUE@ $(NULL) + +EXTRA_DIST = putsurface_common.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/putsurface/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/putsurface/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +putsurface$(EXEEXT): $(putsurface_OBJECTS) $(putsurface_DEPENDENCIES) $(EXTRA_putsurface_DEPENDENCIES) + @rm -f putsurface$(EXEEXT) + $(AM_V_CCLD)$(putsurface_LINK) $(putsurface_OBJECTS) $(putsurface_LDADD) $(LIBS) + +putsurface_wayland$(EXEEXT): $(putsurface_wayland_OBJECTS) $(putsurface_wayland_DEPENDENCIES) $(EXTRA_putsurface_wayland_DEPENDENCIES) + @rm -f putsurface_wayland$(EXEEXT) + $(AM_V_CCLD)$(putsurface_wayland_LINK) $(putsurface_wayland_OBJECTS) $(putsurface_wayland_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putsurface-putsurface_x11.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putsurface_wayland-putsurface_wayland.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +putsurface-putsurface_x11.o: putsurface_x11.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_CFLAGS) $(CFLAGS) -MT putsurface-putsurface_x11.o -MD -MP -MF $(DEPDIR)/putsurface-putsurface_x11.Tpo -c -o putsurface-putsurface_x11.o `test -f 'putsurface_x11.c' || echo '$(srcdir)/'`putsurface_x11.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/putsurface-putsurface_x11.Tpo $(DEPDIR)/putsurface-putsurface_x11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='putsurface_x11.c' object='putsurface-putsurface_x11.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_CFLAGS) $(CFLAGS) -c -o putsurface-putsurface_x11.o `test -f 'putsurface_x11.c' || echo '$(srcdir)/'`putsurface_x11.c + +putsurface-putsurface_x11.obj: putsurface_x11.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_CFLAGS) $(CFLAGS) -MT putsurface-putsurface_x11.obj -MD -MP -MF $(DEPDIR)/putsurface-putsurface_x11.Tpo -c -o putsurface-putsurface_x11.obj `if test -f 'putsurface_x11.c'; then $(CYGPATH_W) 'putsurface_x11.c'; else $(CYGPATH_W) '$(srcdir)/putsurface_x11.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/putsurface-putsurface_x11.Tpo $(DEPDIR)/putsurface-putsurface_x11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='putsurface_x11.c' object='putsurface-putsurface_x11.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_CFLAGS) $(CFLAGS) -c -o putsurface-putsurface_x11.obj `if test -f 'putsurface_x11.c'; then $(CYGPATH_W) 'putsurface_x11.c'; else $(CYGPATH_W) '$(srcdir)/putsurface_x11.c'; fi` + +putsurface_wayland-putsurface_wayland.o: putsurface_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_wayland_CFLAGS) $(CFLAGS) -MT putsurface_wayland-putsurface_wayland.o -MD -MP -MF $(DEPDIR)/putsurface_wayland-putsurface_wayland.Tpo -c -o putsurface_wayland-putsurface_wayland.o `test -f 'putsurface_wayland.c' || echo '$(srcdir)/'`putsurface_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/putsurface_wayland-putsurface_wayland.Tpo $(DEPDIR)/putsurface_wayland-putsurface_wayland.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='putsurface_wayland.c' object='putsurface_wayland-putsurface_wayland.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_wayland_CFLAGS) $(CFLAGS) -c -o putsurface_wayland-putsurface_wayland.o `test -f 'putsurface_wayland.c' || echo '$(srcdir)/'`putsurface_wayland.c + +putsurface_wayland-putsurface_wayland.obj: putsurface_wayland.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_wayland_CFLAGS) $(CFLAGS) -MT putsurface_wayland-putsurface_wayland.obj -MD -MP -MF $(DEPDIR)/putsurface_wayland-putsurface_wayland.Tpo -c -o putsurface_wayland-putsurface_wayland.obj `if test -f 'putsurface_wayland.c'; then $(CYGPATH_W) 'putsurface_wayland.c'; else $(CYGPATH_W) '$(srcdir)/putsurface_wayland.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/putsurface_wayland-putsurface_wayland.Tpo $(DEPDIR)/putsurface_wayland-putsurface_wayland.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='putsurface_wayland.c' object='putsurface_wayland-putsurface_wayland.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(putsurface_wayland_CFLAGS) $(CFLAGS) -c -o putsurface_wayland-putsurface_wayland.obj `if test -f 'putsurface_wayland.c'; then $(CYGPATH_W) 'putsurface_wayland.c'; else $(CYGPATH_W) '$(srcdir)/putsurface_wayland.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +valgrind: $(bin_PROGRAMS) + for a in $(bin_PROGRAMS); do \ + valgrind --leak-check=full --show-reachable=yes .libs/$$a; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_common.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_common.c new file mode 100644 index 000000000..3806bbc38 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_common.c @@ -0,0 +1,688 @@ +/* + * Copyright (c) 2008-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + +/*currently, if XCheckWindowEvent was called in more than one thread, it would cause + * XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" + * after 87 requests (83 known processed) with 0 events remaining. + * + * X Error of failed request: BadGC (invalid GC parameter) + * Major opcode of failed request: 60 (X_FreeGC) + * Resource id in failed request: 0x600034 + * Serial number of failed request: 398 + * Current serial number in output stream: 399 + * The root cause is unknown. */ + +#define CHECK_VASTATUS(va_status,func) \ +if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \ + exit(1); \ +} +#include "../loadsurface.h" + +#define SURFACE_NUM 16 + +static void *win_display; +static VADisplay va_dpy; +static VAImageFormat *va_image_formats; +static int va_num_image_formats = -1; +static VAConfigID vpp_config_id = VA_INVALID_ID; +static VASurfaceAttrib *va_surface_attribs; +static int va_num_surface_attribs = -1; +static VASurfaceID surface_id[SURFACE_NUM]; +static pthread_mutex_t surface_mutex[SURFACE_NUM]; + +static void *drawable_thread0, *drawable_thread1; +static int surface_width = 352, surface_height = 288; +static int win_x = 0, win_y = 0; +static int win_width = 352, win_height = 288; +static int frame_rate = 0; +static unsigned long long frame_num_total = ~0; +static int check_event = 1; +static int put_pixmap = 0; +static int test_clip = 0; +static int display_field = VA_FRAME_PICTURE; +static pthread_mutex_t gmutex; +static int box_width = 32; +static int multi_thread = 0; +static int verbose = 0; +static int test_color_conversion = 0; +static int csc_src_fourcc = 0, csc_dst_fourcc = 0; +static VAImage csc_dst_fourcc_image; +static VASurfaceID csc_render_surface; + + +typedef struct { + char* fmt_str; + unsigned int fourcc; +} fourcc_map; +fourcc_map va_fourcc_map[] = { + {"YUYV", VA_FOURCC_YUY2}, + {"YUY2", VA_FOURCC_YUY2}, + {"NV12", VA_FOURCC_NV12}, + {"YV12", VA_FOURCC_YV12}, + {"BGRA", VA_FOURCC_BGRA}, + {"RGBA", VA_FOURCC_RGBA}, + {"BGRX", VA_FOURCC_BGRX}, + {"RGBX", VA_FOURCC_RGBX}, +}; +unsigned int map_str_to_vafourcc (char * str) +{ + int i; + for (i=0; i< sizeof(va_fourcc_map)/sizeof(fourcc_map); i++) { + if (!strcmp(va_fourcc_map[i].fmt_str, str)) { + return va_fourcc_map[i].fourcc; + } + } + + return 0; + +} +char* map_vafourcc_to_str (unsigned int format) +{ + static char unknown_format[] = "unknown-format"; + int i; + for (i=0; i< sizeof(va_fourcc_map)/sizeof(fourcc_map); i++) { + if (va_fourcc_map[i].fourcc == format) { + return va_fourcc_map[i].fmt_str; + } + } + + return unknown_format; + +} + +static int +va_value_equals(const VAGenericValue *v1, const VAGenericValue *v2) +{ + if (v1->type != v2->type) + return 0; + + switch (v1->type) { + case VAGenericValueTypeInteger: + return v1->value.i == v2->value.i; + case VAGenericValueTypeFloat: + return v1->value.f == v2->value.f; + case VAGenericValueTypePointer: + return v1->value.p == v2->value.p; + case VAGenericValueTypeFunc: + return v1->value.fn == v2->value.fn; + } + return 0; +} + +static int +ensure_image_formats(void) +{ + VAStatus va_status; + VAImageFormat *image_formats; + int num_image_formats; + + if (va_num_image_formats >= 0) + return va_num_image_formats; + + num_image_formats = vaMaxNumImageFormats(va_dpy); + if (num_image_formats == 0) + return 0; + + image_formats = malloc(num_image_formats * sizeof(*image_formats)); + if (!image_formats) + return 0; + + va_status = vaQueryImageFormats(va_dpy, image_formats, &num_image_formats); + CHECK_VASTATUS(va_status, "vaQuerySurfaceAttributes()"); + + va_image_formats = image_formats; + va_num_image_formats = num_image_formats; + return num_image_formats; +} + +static const VAImageFormat * +lookup_image_format(uint32_t fourcc) +{ + int i; + + if (!ensure_image_formats()) + return NULL; + + for (i = 0; i < va_num_image_formats; i++) { + const VAImageFormat * const image_format = &va_image_formats[i]; + if (image_format->fourcc == fourcc) + return image_format; + } + return NULL; +} + +static int +ensure_surface_attribs(void) +{ + VAStatus va_status; + VASurfaceAttrib *surface_attribs; + unsigned int num_image_formats, num_surface_attribs; + + if (va_num_surface_attribs >= 0) + return va_num_surface_attribs; + + num_image_formats = vaMaxNumImageFormats(va_dpy); + if (num_image_formats == 0) + return 0; + + va_status = vaCreateConfig(va_dpy, VAProfileNone, VAEntrypointVideoProc, + NULL, 0, &vpp_config_id); + CHECK_VASTATUS(va_status, "vaCreateConfig()"); + + /* Guess the number of surface attributes, thus including any + pixel-format supported by the VA driver */ + num_surface_attribs = VASurfaceAttribCount + num_image_formats; + surface_attribs = malloc(num_surface_attribs * sizeof(*surface_attribs)); + if (!surface_attribs) + return 0; + + va_status = vaQuerySurfaceAttributes(va_dpy, vpp_config_id, + surface_attribs, &num_surface_attribs); + if (va_status == VA_STATUS_SUCCESS) + va_surface_attribs = surface_attribs; + else if (va_status == VA_STATUS_ERROR_MAX_NUM_EXCEEDED) { + va_surface_attribs = realloc(surface_attribs, + num_surface_attribs * sizeof(*va_surface_attribs)); + if (!va_surface_attribs) { + free(surface_attribs); + return 0; + } + va_status = vaQuerySurfaceAttributes(va_dpy, vpp_config_id, + va_surface_attribs, &num_surface_attribs); + } + CHECK_VASTATUS(va_status, "vaQuerySurfaceAttributes()"); + va_num_surface_attribs = num_surface_attribs; + return num_surface_attribs; +} + +static const VASurfaceAttrib * +lookup_surface_attrib(VASurfaceAttribType type, const VAGenericValue *value) +{ + int i; + + if (!ensure_surface_attribs()) + return NULL; + + for (i = 0; i < va_num_surface_attribs; i++) { + const VASurfaceAttrib * const surface_attrib = &va_surface_attribs[i]; + if (surface_attrib->type != type) + continue; + if (!(surface_attrib->flags & VA_SURFACE_ATTRIB_SETTABLE)) + continue; + if (va_value_equals(&surface_attrib->value, value)) + return surface_attrib; + } + return NULL; +} + +int csc_preparation () +{ + VAStatus va_status; + + // 1. make sure dst fourcc is supported for vaImage + if (!lookup_image_format(csc_dst_fourcc)) { + test_color_conversion = 0; + printf("VA driver doesn't support %s image, skip additional color conversion\n", map_vafourcc_to_str(csc_dst_fourcc)); + goto cleanup; + } + + // 2. make sure src_fourcc is supported for vaSurface + VASurfaceAttrib surface_attribs[1], * const s_attrib = &surface_attribs[0]; + s_attrib->type = VASurfaceAttribPixelFormat; + s_attrib->flags = VA_SURFACE_ATTRIB_SETTABLE; + s_attrib->value.type = VAGenericValueTypeInteger; + s_attrib->value.value.i = csc_src_fourcc; + + if (!lookup_surface_attrib(VASurfaceAttribPixelFormat, &s_attrib->value)) { + printf("VA driver doesn't support %s surface, skip additional color conversion\n", map_vafourcc_to_str(csc_src_fourcc)); + test_color_conversion = 0; + goto cleanup; + } + + // 3 create all objs required by csc + // 3.1 vaSurface with src fourcc + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, surface_width, surface_height, + &surface_id[0], SURFACE_NUM, + surface_attribs, 1 + ); + CHECK_VASTATUS(va_status,"vaCreateSurfaces"); + + // 3.2 vaImage with dst fourcc + VAImageFormat image_format; + image_format.fourcc = csc_dst_fourcc; + image_format.byte_order = VA_LSB_FIRST; + image_format.bits_per_pixel = 16; + + va_status = vaCreateImage(va_dpy, &image_format, + surface_width, surface_height, + &csc_dst_fourcc_image); + CHECK_VASTATUS(va_status,"vaCreateImage"); + + + // 3.3 create a temp VASurface for final rendering(vaPutSurface) + s_attrib->value.value.i = VA_FOURCC_NV12; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, + surface_width, surface_height, + &csc_render_surface, 1, + surface_attribs, 1); + CHECK_VASTATUS(va_status,"vaCreateSurfaces"); + + +cleanup: + return test_color_conversion; +} + +static VASurfaceID get_next_free_surface(int *index) +{ + VASurfaceStatus surface_status; + int i; + + assert(index); + + if (multi_thread == 0) { + i = *index; + i++; + if (i == SURFACE_NUM) + i = 0; + *index = i; + + return surface_id[i]; + } + + for (i=0; i= frame_num_total) + quit = 1; + } + + if (drawable == drawable_thread1) + pthread_exit(NULL); + + return 0; +} +int main(int argc,char **argv) +{ + int major_ver, minor_ver; + VAStatus va_status; + pthread_t thread1; + int ret; + char c; + int i; + char str_src_fmt[5], str_dst_fmt[5]; + + static struct option long_options[] = + { + {"fmt1", required_argument, NULL, '1'}, + {"fmt2", required_argument, NULL, '2'}, + {0, 0, 0, 0} + }; + + while ((c =getopt_long(argc,argv,"w:h:g:r:d:f:tcep?n:1:2:v", long_options, NULL)) != EOF) { + switch (c) { + case '?': + printf("putsurface \n"); + printf(" -g window geometry\n"); + printf(" -w/-h resolution of surface\n"); + printf(" -r \n"); + printf(" -d the dimension of black/write square box, default is 32\n"); + printf(" -t multi-threads\n"); + printf(" -c test clipbox\n"); + printf(" -f <1/2> top field, or bottom field\n"); + printf(" -1 source format (fourcc) for color conversion test\n"); + printf(" -2 dest format (fourcc) for color conversion test\n"); + printf(" --fmt1 same to -1\n"); + printf(" --fmt2 same to -2\n"); + printf(" -v verbose output\n"); + exit(0); + break; + case 'g': + ret = sscanf(optarg, "%dx%d+%d+%d", &win_width, &win_height, &win_x, &win_y); + if (ret != 4) { + printf("invalid window geometry, must be widthxheight+x_location+y_location\n"); + exit(0); + } else + printf("Create window at (%d, %d), width = %d, height = %d\n", + win_x, win_y, win_width, win_height); + break; + case 'r': + frame_rate = atoi(optarg); + break; + case 'w': + surface_width = atoi(optarg); + break; + case 'h': + surface_height = atoi(optarg); + break; + case 'n': + frame_num_total = atoi(optarg); + break; + case 'd': + box_width = atoi(optarg); + break; + case 't': + multi_thread = 1; + printf("Two threads to do vaPutSurface\n"); + break; + case 'e': + check_event = 0; + break; + case 'p': + put_pixmap = 1; + break; + case 'c': + test_clip = 1; + break; + case 'f': + if (atoi(optarg) == 1) { + printf("Display TOP field\n"); + display_field = VA_TOP_FIELD; + } else if (atoi(optarg) == 2) { + printf("Display BOTTOM field\n"); + display_field = VA_BOTTOM_FIELD; + } else + printf("The validate input for -f is: 1(top field)/2(bottom field)\n"); + break; + case '1': + sscanf(optarg, "%s", str_src_fmt); + csc_src_fourcc = map_str_to_vafourcc (str_src_fmt); + + if (!csc_src_fourcc) { + printf("invalid fmt1: %s\n", str_src_fmt ); + exit(0); + } + break; + case '2': + sscanf(optarg, "%s", str_dst_fmt); + csc_dst_fourcc = map_str_to_vafourcc (str_dst_fmt); + + if (!csc_dst_fourcc) { + printf("invalid fmt1: %s\n", str_dst_fmt ); + exit(0); + } + break; + case 'v': + verbose = 1; + printf("Enable verbose output\n"); + break; + } + } + + if (csc_src_fourcc && csc_dst_fourcc) { + test_color_conversion = 1; + } + + win_display = (void *)open_display(); + if (win_display == NULL) { + fprintf(stderr, "Can't open the connection of display!\n"); + exit(-1); + } + create_window(win_display, win_x, win_y, win_width, win_height); + + va_dpy = vaGetDisplay(win_display); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + CHECK_VASTATUS(va_status, "vaInitialize"); + + if (test_color_conversion) { + ret = csc_preparation(); + } + if (!test_color_conversion || !ret ) { + va_status = vaCreateSurfaces( + va_dpy, + VA_RT_FORMAT_YUV420, surface_width, surface_height, + &surface_id[0], SURFACE_NUM, + NULL, 0 + ); + } + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + if (multi_thread == 0) /* upload the content for all surfaces */ + upload_source_YUV_once_for_all(); + + if (check_event) + pthread_mutex_init(&gmutex, NULL); + + for(i = 0; i< SURFACE_NUM; i++) + pthread_mutex_init(&surface_mutex[i], NULL); + + if (multi_thread == 1) + ret = pthread_create(&thread1, NULL, putsurface_thread, (void*)drawable_thread1); + + putsurface_thread((void *)drawable_thread0); + + if (multi_thread == 1) + pthread_join(thread1, (void **)&ret); + printf("thread1 is free\n"); + + if (test_color_conversion) { + // destroy temp surface/image + va_status = vaDestroySurfaces(va_dpy, &csc_render_surface, 1); + CHECK_VASTATUS(va_status,"vaDestroySurfaces"); + + va_status = vaDestroyImage(va_dpy, csc_dst_fourcc_image.image_id); + CHECK_VASTATUS(va_status,"vaDestroyImage"); + } + + if (vpp_config_id != VA_INVALID_ID) { + vaDestroyConfig (va_dpy, vpp_config_id); + vpp_config_id = VA_INVALID_ID; + } + + vaDestroySurfaces(va_dpy,&surface_id[0],SURFACE_NUM); + vaTerminate(va_dpy); + + free(va_image_formats); + free(va_surface_attribs); + close_display(win_display); + + return 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_wayland.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_wayland.c new file mode 100644 index 000000000..b93334de8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_wayland.c @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#ifdef IN_LIBVA +# include "va/wayland/va_wayland.h" +#else +# include +#endif +#include + +static void *open_display(void); +static void close_display(void *win_display); +static int create_window(void *win_display, + int x, int y, int width, int height); +static int check_window_event(void *win_display, void *drawable, + int *width, int *height, int *quit); + +struct display; +struct drawable; + +static VAStatus +va_put_surface( + VADisplay dpy, + struct drawable *wl_drawable, + VASurfaceID va_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + const VARectangle *cliprects, + unsigned int num_cliprects, + unsigned int flags +); + +/* Glue code for the current PutSurface test design */ +#define CAST_DRAWABLE(a) (struct drawable *)(a) + +static inline VADisplay +vaGetDisplay(VANativeDisplay native_dpy) +{ + return vaGetDisplayWl(native_dpy); +} + +static VAStatus +vaPutSurface( + VADisplay dpy, + VASurfaceID surface, + struct drawable *wl_drawable, + short src_x, + short src_y, + unsigned short src_w, + unsigned short src_h, + short dst_x, + short dst_y, + unsigned short dst_w, + unsigned short dst_h, + const VARectangle *cliprects, + unsigned int num_cliprects, + unsigned int flags +) +{ + VARectangle src_rect, dst_rect; + + src_rect.x = src_x; + src_rect.y = src_y; + src_rect.width = src_w; + src_rect.height = src_h; + + dst_rect.x = src_x; + dst_rect.y = src_y; + dst_rect.width = src_w; + dst_rect.height = src_h; + return va_put_surface(dpy, wl_drawable, surface, &src_rect, &dst_rect, + cliprects, num_cliprects, flags); +} + +#include "putsurface_common.c" + +struct display { + struct wl_display *display; + struct wl_compositor *compositor; + struct wl_shell *shell; + struct wl_registry *registry; + int event_fd; +}; + +struct drawable { + struct wl_display *display; + struct wl_surface *surface; + unsigned int redraw_pending : 1; +}; + +static void +frame_redraw_callback(void *data, struct wl_callback *callback, uint32_t time) +{ + struct drawable * const drawable = data; + + drawable->redraw_pending = 0; + wl_callback_destroy(callback); +} + +static const struct wl_callback_listener frame_callback_listener = { + frame_redraw_callback +}; + +static VAStatus +va_put_surface( + VADisplay dpy, + struct drawable *wl_drawable, + VASurfaceID va_surface, + const VARectangle *src_rect, + const VARectangle *dst_rect, + const VARectangle *cliprects, + unsigned int num_cliprects, + unsigned int flags +) +{ + struct display *d; + struct wl_callback *callback; + VAStatus va_status; + struct wl_buffer *buffer; + + if (!wl_drawable) + return VA_STATUS_ERROR_INVALID_SURFACE; + + d = wl_display_get_user_data(wl_drawable->display); + if (!d) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + /* Wait for the previous frame to complete redraw */ + if (wl_drawable->redraw_pending) { + wl_display_flush(d->display); + while (wl_drawable->redraw_pending) + wl_display_dispatch(wl_drawable->display); + } + + va_status = vaGetSurfaceBufferWl(va_dpy, va_surface, VA_FRAME_PICTURE, &buffer); + if (va_status != VA_STATUS_SUCCESS) + return va_status; + + wl_surface_attach(wl_drawable->surface, buffer, 0, 0); + wl_surface_damage( + wl_drawable->surface, + dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height + ); + + wl_display_flush(d->display); + wl_drawable->redraw_pending = 1; + callback = wl_surface_frame(wl_drawable->surface); + wl_surface_commit(wl_drawable->surface); + wl_callback_add_listener(callback, &frame_callback_listener, wl_drawable); + return VA_STATUS_SUCCESS; +} + +static void +registry_handle_global( + void *data, + struct wl_registry *registry, + uint32_t id, + const char *interface, + uint32_t version +) +{ + struct display * const d = data; + + if (strcmp(interface, "wl_compositor") == 0) + d->compositor = + wl_registry_bind(registry, id, &wl_compositor_interface, 1); + else if (strcmp(interface, "wl_shell") == 0) + d->shell = wl_registry_bind(registry, id, &wl_shell_interface, 1); +} + +static const struct wl_registry_listener registry_listener = { + registry_handle_global, + NULL, +}; + +static void * +open_display(void) +{ + struct display *d; + + d = calloc(1, sizeof *d); + if (!d) + return NULL; + + d->display = wl_display_connect(NULL); + if (!d->display) + return NULL; + + wl_display_set_user_data(d->display, d); + d->registry = wl_display_get_registry(d->display); + wl_registry_add_listener(d->registry, ®istry_listener, d); + d->event_fd = wl_display_get_fd(d->display); + wl_display_dispatch(d->display); + return d->display; +} + +static void +close_display(void *win_display) +{ + struct display * const d = wl_display_get_user_data(win_display); + + if (d->shell) { + wl_shell_destroy(d->shell); + d->shell = NULL; + } + + if (d->compositor) { + wl_compositor_destroy(d->compositor); + d->compositor = NULL; + } + + if (d->display) { + wl_display_disconnect(d->display); + d->display = NULL; + } + free(d); +} + +static int +create_window(void *win_display, int x, int y, int width, int height) +{ + struct wl_display * const display = win_display; + struct display * const d = wl_display_get_user_data(display); + struct wl_surface *surface1, *surface2; + struct wl_shell_surface *shell_surface; + struct wl_shell_surface *shell_surface_2; + struct drawable *drawable1, *drawable2; + + surface1 = wl_compositor_create_surface(d->compositor); + shell_surface = wl_shell_get_shell_surface(d->shell, surface1); + wl_shell_surface_set_toplevel(shell_surface); + + drawable1 = malloc(sizeof(*drawable1)); + drawable1->display = display; + drawable1->surface = surface1; + drawable1->redraw_pending = 0; + + /* global out */ + drawable_thread0 = drawable1; + + if (multi_thread == 0) + return 0; + + surface2 = wl_compositor_create_surface(d->compositor); + shell_surface_2 = wl_shell_get_shell_surface(d->shell, surface2); + wl_shell_surface_set_toplevel(shell_surface_2); + + drawable2 = malloc(sizeof(*drawable2)); + drawable2->display = display; + drawable1->surface = surface2; + drawable2->redraw_pending = 0; + + /* global out */ + drawable_thread1 = drawable2; + return 0; +} + +static int +check_window_event( + void *win_display, + void *drawable, + int *width, + int *height, + int *quit +) +{ + struct wl_display * const display = win_display; + struct display * const d = wl_display_get_user_data(display); + struct timeval tv; + fd_set rfds; + int retval; + + if (check_event == 0) + return 0; + + tv.tv_sec = 0; + tv.tv_usec = 0; + do { + FD_ZERO(&rfds); + FD_SET(d->event_fd, &rfds); + + retval = select(d->event_fd + 1, &rfds, NULL, NULL, &tv); + if (retval < 0) { + perror("select"); + break; + } + if (retval == 1) + wl_display_dispatch(d->display); + } while (retval > 0); + +#if 0 + /* bail on any focused key press */ + if(event.type == KeyPress) { + *quit = 1; + return 0; + } +#endif + +#if 0 + /* rescale the video to fit the window */ + if(event.type == ConfigureNotify) { + *width = event.xconfigure.width; + *height = event.xconfigure.height; + printf("Scale window to %dx%d\n", width, height); + } +#endif + return 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_x11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_x11.c new file mode 100644 index 000000000..db765af71 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/putsurface/putsurface_x11.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2008-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include + +static Window window_thread0, window_thread1; +static GC context_thread0, context_thread1; +static pthread_mutex_t gmutex; + +static void *open_display(void); +static void close_display(void *win_display); +static int create_window(void *win_display, int x, int y, int width, int height); +static int check_window_event(void *x11_display, void *drawable, int *width, int *height, int *quit); + +#define CAST_DRAWABLE(a) (Drawable)(a) + +#include "putsurface_common.c" + +static void *open_display(void) +{ + return XOpenDisplay(NULL); +} + +static void close_display(void *win_display) +{ + XCloseDisplay(win_display); +} + +static Pixmap create_pixmap(void *win_display, int width, int height) +{ + Display *x11_display = (Display *)win_display; + int screen = DefaultScreen(x11_display); + Window root; + Pixmap pixmap; + XWindowAttributes attr; + + root = RootWindow(x11_display, screen); + + XGetWindowAttributes (x11_display, root, &attr); + + printf("Create a pixmap from ROOT window %dx%d, pixmap size %dx%d\n\n", attr.width, attr.height, width, height); + pixmap = XCreatePixmap(x11_display, root, width, height, + DefaultDepth(x11_display, DefaultScreen(x11_display))); + + return pixmap; +} + +static int create_window(void *win_display, int x, int y, int width, int height) +{ + Display *x11_display = (Display *)win_display; + int screen = DefaultScreen(x11_display); + Window root, win; + + root = RootWindow(x11_display, screen); + + printf("Create window0 for thread0\n"); + drawable_thread0 = (void *)XCreateSimpleWindow(x11_display, root, x, y, width, height, + 0, 0, WhitePixel(x11_display, 0)); + + win = (Window)drawable_thread0; + if (drawable_thread0) { + XSizeHints sizehints; + sizehints.width = width; + sizehints.height = height; + sizehints.flags = USSize; + XSetNormalHints(x11_display, win, &sizehints); + XSetStandardProperties(x11_display, win, "Thread 0", "Thread 0", + None, (char **)NULL, 0, &sizehints); + + XMapWindow(x11_display, win); + } + context_thread0 = XCreateGC(x11_display, win, 0, 0); + XSelectInput(x11_display, win, KeyPressMask | StructureNotifyMask); + XSync(x11_display, False); + + if (put_pixmap) { + window_thread0 = (Window)drawable_thread0; + drawable_thread0 = (void *)create_pixmap(x11_display, width, height); + } + + if (multi_thread == 0) + return 0; + + printf("Create window1 for thread1\n"); + + drawable_thread1 = (void *)XCreateSimpleWindow(x11_display, root, width, 0, width, height, + 0, 0, WhitePixel(x11_display, 0)); + win = (Window)drawable_thread1; + if (drawable_thread1) { + XSizeHints sizehints; + sizehints.width = width; + sizehints.height = height; + sizehints.flags = USSize; + XSetNormalHints(x11_display, win, &sizehints); + XSetStandardProperties(x11_display, win, "Thread 1", "Thread 1", + None, (char **)NULL, 0, &sizehints); + + XMapWindow(x11_display, win); + } + if (put_pixmap) { + window_thread1 = (Window)drawable_thread1; + drawable_thread1 = (void *)create_pixmap(x11_display, width, height); + } + + context_thread1 = XCreateGC(x11_display, win, 0, 0); + XSelectInput(x11_display, win, KeyPressMask | StructureNotifyMask); + XSync(x11_display, False); + + return 0; +} + +static int check_window_event(void *win_display, void *drawable, int *width, int *height, int *quit) +{ + int is_event = 0; + XEvent event; + Window win = (Window)drawable; + Display *x11_display = (Display *)win_display; + + + if (check_event == 0) + return 0; + + pthread_mutex_lock(&gmutex); + is_event = XCheckWindowEvent(x11_display, win, StructureNotifyMask|KeyPressMask,&event); + pthread_mutex_unlock(&gmutex); + + if (is_event == 0) + return 0; + + /* bail on any focused key press */ + if(event.type == KeyPress) { + *quit = 1; + return 0; + } + +#if 0 + /* rescale the video to fit the window */ + if(event.type == ConfigureNotify) { + *width = event.xconfigure.width; + *height = event.xconfigure.height; + printf("Scale window to %dx%d\n", width, height); + } +#endif + + return 0; +} + + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.am new file mode 100644 index 000000000..680d099a5 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.am @@ -0,0 +1,44 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +bin_PROGRAMS = vainfo + +vainfo_cflags = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + -I$(top_srcdir)/test/common \ + -I$(top_builddir) \ + -DLIBVA_VERSION_S="\"$(LIBVA_VERSION)\"" \ + $(NULL) + +vainfo_libs = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + $(NULL) + +vainfo_SOURCES = vainfo.c +noinst_HEADERS = $(source_h) +vainfo_CFLAGS = $(vainfo_cflags) +vainfo_LDADD = $(vainfo_libs) + +valgrind: vainfo + valgrind --leak-check=full --show-reachable=yes .libs/vainfo; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.in new file mode 100644 index 000000000..2c064e251 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/Makefile.in @@ -0,0 +1,710 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = vainfo$(EXEEXT) +subdir = test/vainfo +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_vainfo_OBJECTS = vainfo-vainfo.$(OBJEXT) +vainfo_OBJECTS = $(am_vainfo_OBJECTS) +am__DEPENDENCIES_1 = $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la +vainfo_DEPENDENCIES = $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +vainfo_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(vainfo_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(vainfo_SOURCES) +DIST_SOURCES = $(vainfo_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +vainfo_cflags = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + -I$(top_srcdir)/test/common \ + -I$(top_builddir) \ + -DLIBVA_VERSION_S="\"$(LIBVA_VERSION)\"" \ + $(NULL) + +vainfo_libs = \ + $(top_builddir)/va/libva.la \ + $(top_builddir)/test/common/libva-display.la \ + $(NULL) + +vainfo_SOURCES = vainfo.c +noinst_HEADERS = $(source_h) +vainfo_CFLAGS = $(vainfo_cflags) +vainfo_LDADD = $(vainfo_libs) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/vainfo/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/vainfo/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +vainfo$(EXEEXT): $(vainfo_OBJECTS) $(vainfo_DEPENDENCIES) $(EXTRA_vainfo_DEPENDENCIES) + @rm -f vainfo$(EXEEXT) + $(AM_V_CCLD)$(vainfo_LINK) $(vainfo_OBJECTS) $(vainfo_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vainfo-vainfo.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +vainfo-vainfo.o: vainfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vainfo_CFLAGS) $(CFLAGS) -MT vainfo-vainfo.o -MD -MP -MF $(DEPDIR)/vainfo-vainfo.Tpo -c -o vainfo-vainfo.o `test -f 'vainfo.c' || echo '$(srcdir)/'`vainfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vainfo-vainfo.Tpo $(DEPDIR)/vainfo-vainfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vainfo.c' object='vainfo-vainfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vainfo_CFLAGS) $(CFLAGS) -c -o vainfo-vainfo.o `test -f 'vainfo.c' || echo '$(srcdir)/'`vainfo.c + +vainfo-vainfo.obj: vainfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vainfo_CFLAGS) $(CFLAGS) -MT vainfo-vainfo.obj -MD -MP -MF $(DEPDIR)/vainfo-vainfo.Tpo -c -o vainfo-vainfo.obj `if test -f 'vainfo.c'; then $(CYGPATH_W) 'vainfo.c'; else $(CYGPATH_W) '$(srcdir)/vainfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vainfo-vainfo.Tpo $(DEPDIR)/vainfo-vainfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vainfo.c' object='vainfo-vainfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vainfo_CFLAGS) $(CFLAGS) -c -o vainfo-vainfo.obj `if test -f 'vainfo.c'; then $(CYGPATH_W) 'vainfo.c'; else $(CYGPATH_W) '$(srcdir)/vainfo.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +valgrind: vainfo + valgrind --leak-check=full --show-reachable=yes .libs/vainfo; + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/vainfo.c b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/vainfo.c new file mode 100644 index 000000000..0605d8cda --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/test/vainfo/vainfo.c @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include "va_display.h" +#include "va/sysdeps.h" + +#define CHECK_VASTATUS(va_status,func, ret) \ +if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr,"%s failed with error code %d (%s),exit\n",func, va_status, vaErrorStr(va_status)); \ + ret_val = ret; \ + goto error; \ +} + +static char * profile_string(VAProfile profile) +{ + switch (profile) { + case VAProfileNone: return "VAProfileNone"; + case VAProfileMPEG2Simple: return "VAProfileMPEG2Simple"; + case VAProfileMPEG2Main: return "VAProfileMPEG2Main"; + case VAProfileMPEG4Simple: return "VAProfileMPEG4Simple"; + case VAProfileMPEG4AdvancedSimple: return "VAProfileMPEG4AdvancedSimple"; + case VAProfileMPEG4Main: return "VAProfileMPEG4Main"; + case VAProfileH264Baseline: return "VAProfileH264Baseline"; + case VAProfileH264Main: return "VAProfileH264Main"; + case VAProfileH264High: return "VAProfileH264High"; + case VAProfileVC1Simple: return "VAProfileVC1Simple"; + case VAProfileVC1Main: return "VAProfileVC1Main"; + case VAProfileVC1Advanced: return "VAProfileVC1Advanced"; + case VAProfileH263Baseline: return "VAProfileH263Baseline"; + case VAProfileH264ConstrainedBaseline: return "VAProfileH264ConstrainedBaseline"; + case VAProfileJPEGBaseline: return "VAProfileJPEGBaseline"; + case VAProfileVP8Version0_3: return "VAProfileVP8Version0_3"; + case VAProfileH264MultiviewHigh: return "VAProfileH264MultiviewHigh"; + case VAProfileH264StereoHigh: return "VAProfileH264StereoHigh"; + case VAProfileHEVCMain: return "VAProfileHEVCMain"; + case VAProfileHEVCMain10: return "VAProfileHEVCMain10"; + case VAProfileVP9Profile0: return "VAProfileVP9Profile0"; + + default: + break; + } + return ""; +} + + +static char * entrypoint_string(VAEntrypoint entrypoint) +{ + switch (entrypoint) { + case VAEntrypointVLD:return "VAEntrypointVLD"; + case VAEntrypointIZZ:return "VAEntrypointIZZ"; + case VAEntrypointIDCT:return "VAEntrypointIDCT"; + case VAEntrypointMoComp:return "VAEntrypointMoComp"; + case VAEntrypointDeblocking:return "VAEntrypointDeblocking"; + case VAEntrypointEncSlice:return "VAEntrypointEncSlice"; + case VAEntrypointEncPicture:return "VAEntrypointEncPicture"; + case VAEntrypointVideoProc:return "VAEntrypointVideoProc"; + default: + break; + } + return ""; +} + +int main(int argc, const char* argv[]) +{ + VADisplay va_dpy; + VAStatus va_status; + int major_version, minor_version; + const char *driver; + const char *name = strrchr(argv[0], '/'); + VAProfile profile, *profile_list = NULL; + int num_profiles, max_num_profiles, i; + VAEntrypoint entrypoint, entrypoints[10]; + int num_entrypoint; + int ret_val = 0; + + if (name) + name++; + else + name = argv[0]; + + va_init_display_args(&argc, (char **)argv); + + va_dpy = va_open_display(); + if (NULL == va_dpy) + { + fprintf(stderr, "%s: vaGetDisplay() failed\n", name); + return 2; + } + + va_status = vaInitialize(va_dpy, &major_version, &minor_version); + CHECK_VASTATUS(va_status, "vaInitialize", 3); + + printf("%s: VA-API version: %d.%d (libva %s)\n", + name, major_version, minor_version, LIBVA_VERSION_S); + + driver = vaQueryVendorString(va_dpy); + printf("%s: Driver version: %s\n", name, driver ? driver : ""); + + printf("%s: Supported profile and entrypoints\n", name); + max_num_profiles = vaMaxNumProfiles(va_dpy); + profile_list = malloc(max_num_profiles * sizeof(VAProfile)); + + if (!profile_list) { + printf("Failed to allocate memory for profile list\n"); + ret_val = 5; + goto error; + } + + va_status = vaQueryConfigProfiles(va_dpy, profile_list, &num_profiles); + CHECK_VASTATUS(va_status, "vaQueryConfigProfiles", 6); + + for (i = 0; i < num_profiles; i++) { + char *profile_str; + + profile = profile_list[i]; + va_status = vaQueryConfigEntrypoints(va_dpy, profile, entrypoints, + &num_entrypoint); + if (va_status == VA_STATUS_ERROR_UNSUPPORTED_PROFILE) + continue; + + CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints", 4); + + profile_str = profile_string(profile); + for (entrypoint = 0; entrypoint < num_entrypoint; entrypoint++) + printf(" %-32s: %s\n", profile_str, entrypoint_string(entrypoints[entrypoint])); + } + +error: + free(profile_list); + vaTerminate(va_dpy); + va_close_display(va_dpy); + + return ret_val; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.am new file mode 100644 index 000000000..34ee9613e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.am @@ -0,0 +1,146 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +SUBDIRS = + +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" + +LDADD = \ + $(LIBVA_LT_LDFLAGS) + +libva_source_c = \ + va.c \ + va_compat.c \ + va_fool.c \ + va_trace.c \ + $(NULL) + +libva_source_h = \ + va.h \ + va_backend.h \ + va_backend_tpi.h \ + va_backend_vpp.h \ + va_compat.h \ + va_dec_hevc.h \ + va_dec_jpeg.h \ + va_dec_vp8.h \ + va_dec_vp9.h \ + va_drmcommon.h \ + va_enc_hevc.h \ + va_enc_h264.h \ + va_enc_jpeg.h \ + va_enc_vp8.h \ + va_enc_mpeg2.h \ + va_tpi.h \ + va_version.h \ + va_vpp.h \ + $(NULL) + +libva_source_h_priv = \ + sysdeps.h \ + va_fool.h \ + va_trace.h \ + $(NULL) + +libva_ldflags = \ + $(LDADD) -no-undefined \ + -Wl,-version-script,${srcdir}/libva.syms \ + $(NULL) + +lib_LTLIBRARIES = libva.la +libvaincludedir = ${includedir}/va +libvainclude_HEADERS = $(libva_source_h) +noinst_HEADERS = $(libva_source_h_priv) +libva_la_SOURCES = $(libva_source_c) +libva_la_LDFLAGS = $(libva_ldflags) +libva_la_DEPENDENCIES = libva.syms +libva_la_LIBADD = $(LIBVA_LIBS) -ldl + +lib_LTLIBRARIES += libva-tpi.la +libva_tpi_la_SOURCES = va_tpi.c +libva_tpi_la_LDFLAGS = $(LDADD) -no-undefined +libva_tpi_la_DEPENDENCIES = libva.la +libva_tpi_la_LIBADD = libva.la -ldl + +if USE_DRM +SUBDIRS += drm +lib_LTLIBRARIES += libva-drm.la +libva_drm_la_SOURCES = +libva_drm_la_LDFLAGS = $(LDADD) +libva_drm_la_DEPENDENCIES = libva.la drm/libva_drm.la +libva_drm_la_LIBADD = libva.la drm/libva_drm.la \ + $(LIBVA_LIBS) $(DRM_LIBS) -ldl +endif + +if USE_X11 +SUBDIRS += x11 +lib_LTLIBRARIES += libva-x11.la +libva_source_h += va_x11.h +libva_x11_la_SOURCES = +libva_x11_la_LDFLAGS = $(LDADD) +libva_x11_la_DEPENDENCIES = libva.la x11/libva_x11.la +libva_x11_la_LIBADD = libva.la x11/libva_x11.la \ + $(LIBVA_LIBS) $(X11_LIBS) $(XEXT_LIBS) $(XFIXES_LIBS) $(DRM_LIBS) -ldl +endif + +if USE_GLX +SUBDIRS += glx +lib_LTLIBRARIES += libva-glx.la +libva_glx_la_SOURCES = +libva_glx_la_LDFLAGS = $(LDADD) +libva_glx_la_DEPENDENCIES = libva.la glx/libva_glx.la libva-x11.la +libva_glx_la_LIBADD = libva.la glx/libva_glx.la libva-x11.la \ + $(GLX_LIBS) -ldl +endif + +if USE_EGL +SUBDIRS += egl +lib_LTLIBRARIES += libva-egl.la +libva_egl_la_SOURCES = +libva_egl_la_LDFLAGS = $(LDADD) +libva_egl_la_DEPENDENCIES = libva.la egl/libva_egl.la +libva_egl_la_LIBADD = libva.la egl/libva_egl.la \ + $(EGL_LIBS) -ldl +endif + +if USE_WAYLAND +SUBDIRS += wayland +lib_LTLIBRARIES += libva-wayland.la +libva_wayland_la_SOURCES = +libva_wayland_la_LDFLAGS = $(LDADD) +libva_wayland_la_DEPENDENCIES = libva.la wayland/libva_wayland.la +libva_wayland_la_LIBADD = libva.la wayland/libva_wayland.la \ + $(WAYLAND_LIBS) $(DRM_LIBS) -ldl +endif + +DIST_SUBDIRS = x11 glx egl drm wayland + +DISTCLEANFILES = \ + va_version.h \ + $(NULL) + +EXTRA_DIST = \ + libva.syms \ + va_version.h.in \ + $(NULL) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.in new file mode 100644 index 000000000..1dfe2c8a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/Makefile.in @@ -0,0 +1,995 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_DRM_TRUE@am__append_1 = drm +@USE_DRM_TRUE@am__append_2 = libva-drm.la +@USE_X11_TRUE@am__append_3 = x11 +@USE_X11_TRUE@am__append_4 = libva-x11.la +@USE_X11_TRUE@am__append_5 = va_x11.h +@USE_GLX_TRUE@am__append_6 = glx +@USE_GLX_TRUE@am__append_7 = libva-glx.la +@USE_EGL_TRUE@am__append_8 = egl +@USE_EGL_TRUE@am__append_9 = libva-egl.la +@USE_WAYLAND_TRUE@am__append_10 = wayland +@USE_WAYLAND_TRUE@am__append_11 = libva-wayland.la +subdir = va +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/va_version.h.in $(top_srcdir)/depcomp \ + $(am__libvainclude_HEADERS_DIST) $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = va_version.h +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libvaincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +am_libva_drm_la_OBJECTS = +libva_drm_la_OBJECTS = $(am_libva_drm_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libva_drm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_drm_la_LDFLAGS) $(LDFLAGS) -o $@ +@USE_DRM_TRUE@am_libva_drm_la_rpath = -rpath $(libdir) +am_libva_egl_la_OBJECTS = +libva_egl_la_OBJECTS = $(am_libva_egl_la_OBJECTS) +libva_egl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_egl_la_LDFLAGS) $(LDFLAGS) -o $@ +@USE_EGL_TRUE@am_libva_egl_la_rpath = -rpath $(libdir) +am_libva_glx_la_OBJECTS = +libva_glx_la_OBJECTS = $(am_libva_glx_la_OBJECTS) +libva_glx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_glx_la_LDFLAGS) $(LDFLAGS) -o $@ +@USE_GLX_TRUE@am_libva_glx_la_rpath = -rpath $(libdir) +am_libva_tpi_la_OBJECTS = va_tpi.lo +libva_tpi_la_OBJECTS = $(am_libva_tpi_la_OBJECTS) +libva_tpi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_tpi_la_LDFLAGS) $(LDFLAGS) -o $@ +am_libva_wayland_la_OBJECTS = +libva_wayland_la_OBJECTS = $(am_libva_wayland_la_OBJECTS) +libva_wayland_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libva_wayland_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +@USE_WAYLAND_TRUE@am_libva_wayland_la_rpath = -rpath $(libdir) +am_libva_x11_la_OBJECTS = +libva_x11_la_OBJECTS = $(am_libva_x11_la_OBJECTS) +libva_x11_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_x11_la_LDFLAGS) $(LDFLAGS) -o $@ +@USE_X11_TRUE@am_libva_x11_la_rpath = -rpath $(libdir) +am__objects_1 = va.lo va_compat.lo va_fool.lo va_trace.lo +am_libva_la_OBJECTS = $(am__objects_1) +libva_la_OBJECTS = $(am_libva_la_OBJECTS) +libva_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libva_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_drm_la_SOURCES) $(libva_egl_la_SOURCES) \ + $(libva_glx_la_SOURCES) $(libva_tpi_la_SOURCES) \ + $(libva_wayland_la_SOURCES) $(libva_x11_la_SOURCES) \ + $(libva_la_SOURCES) +DIST_SOURCES = $(libva_drm_la_SOURCES) $(libva_egl_la_SOURCES) \ + $(libva_glx_la_SOURCES) $(libva_tpi_la_SOURCES) \ + $(libva_wayland_la_SOURCES) $(libva_x11_la_SOURCES) \ + $(libva_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__libvainclude_HEADERS_DIST = va.h va_backend.h va_backend_tpi.h \ + va_backend_vpp.h va_compat.h va_dec_hevc.h va_dec_jpeg.h \ + va_dec_vp8.h va_dec_vp9.h va_drmcommon.h va_enc_hevc.h \ + va_enc_h264.h va_enc_jpeg.h va_enc_vp8.h va_enc_mpeg2.h \ + va_tpi.h va_version.h va_vpp.h va_x11.h +HEADERS = $(libvainclude_HEADERS) $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = $(am__append_1) $(am__append_3) $(am__append_6) \ + $(am__append_8) $(am__append_10) +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" + +LDADD = \ + $(LIBVA_LT_LDFLAGS) + +libva_source_c = \ + va.c \ + va_compat.c \ + va_fool.c \ + va_trace.c \ + $(NULL) + +libva_source_h = va.h va_backend.h va_backend_tpi.h va_backend_vpp.h \ + va_compat.h va_dec_hevc.h va_dec_jpeg.h va_dec_vp8.h \ + va_dec_vp9.h va_drmcommon.h va_enc_hevc.h va_enc_h264.h \ + va_enc_jpeg.h va_enc_vp8.h va_enc_mpeg2.h va_tpi.h \ + va_version.h va_vpp.h $(NULL) $(am__append_5) +libva_source_h_priv = \ + sysdeps.h \ + va_fool.h \ + va_trace.h \ + $(NULL) + +libva_ldflags = \ + $(LDADD) -no-undefined \ + -Wl,-version-script,${srcdir}/libva.syms \ + $(NULL) + +lib_LTLIBRARIES = libva.la libva-tpi.la $(am__append_2) \ + $(am__append_4) $(am__append_7) $(am__append_9) \ + $(am__append_11) +libvaincludedir = ${includedir}/va +libvainclude_HEADERS = $(libva_source_h) +noinst_HEADERS = $(libva_source_h_priv) +libva_la_SOURCES = $(libva_source_c) +libva_la_LDFLAGS = $(libva_ldflags) +libva_la_DEPENDENCIES = libva.syms +libva_la_LIBADD = $(LIBVA_LIBS) -ldl +libva_tpi_la_SOURCES = va_tpi.c +libva_tpi_la_LDFLAGS = $(LDADD) -no-undefined +libva_tpi_la_DEPENDENCIES = libva.la +libva_tpi_la_LIBADD = libva.la -ldl +@USE_DRM_TRUE@libva_drm_la_SOURCES = +@USE_DRM_TRUE@libva_drm_la_LDFLAGS = $(LDADD) +@USE_DRM_TRUE@libva_drm_la_DEPENDENCIES = libva.la drm/libva_drm.la +@USE_DRM_TRUE@libva_drm_la_LIBADD = libva.la drm/libva_drm.la \ +@USE_DRM_TRUE@ $(LIBVA_LIBS) $(DRM_LIBS) -ldl + +@USE_X11_TRUE@libva_x11_la_SOURCES = +@USE_X11_TRUE@libva_x11_la_LDFLAGS = $(LDADD) +@USE_X11_TRUE@libva_x11_la_DEPENDENCIES = libva.la x11/libva_x11.la +@USE_X11_TRUE@libva_x11_la_LIBADD = libva.la x11/libva_x11.la \ +@USE_X11_TRUE@ $(LIBVA_LIBS) $(X11_LIBS) $(XEXT_LIBS) $(XFIXES_LIBS) $(DRM_LIBS) -ldl + +@USE_GLX_TRUE@libva_glx_la_SOURCES = +@USE_GLX_TRUE@libva_glx_la_LDFLAGS = $(LDADD) +@USE_GLX_TRUE@libva_glx_la_DEPENDENCIES = libva.la glx/libva_glx.la libva-x11.la +@USE_GLX_TRUE@libva_glx_la_LIBADD = libva.la glx/libva_glx.la libva-x11.la \ +@USE_GLX_TRUE@ $(GLX_LIBS) -ldl + +@USE_EGL_TRUE@libva_egl_la_SOURCES = +@USE_EGL_TRUE@libva_egl_la_LDFLAGS = $(LDADD) +@USE_EGL_TRUE@libva_egl_la_DEPENDENCIES = libva.la egl/libva_egl.la +@USE_EGL_TRUE@libva_egl_la_LIBADD = libva.la egl/libva_egl.la \ +@USE_EGL_TRUE@ $(EGL_LIBS) -ldl + +@USE_WAYLAND_TRUE@libva_wayland_la_SOURCES = +@USE_WAYLAND_TRUE@libva_wayland_la_LDFLAGS = $(LDADD) +@USE_WAYLAND_TRUE@libva_wayland_la_DEPENDENCIES = libva.la wayland/libva_wayland.la +@USE_WAYLAND_TRUE@libva_wayland_la_LIBADD = libva.la wayland/libva_wayland.la \ +@USE_WAYLAND_TRUE@ $(WAYLAND_LIBS) $(DRM_LIBS) -ldl + +DIST_SUBDIRS = x11 glx egl drm wayland +DISTCLEANFILES = \ + va_version.h \ + $(NULL) + +EXTRA_DIST = \ + libva.syms \ + va_version.h.in \ + $(NULL) + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +va_version.h: $(top_builddir)/config.status $(srcdir)/va_version.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva-drm.la: $(libva_drm_la_OBJECTS) $(libva_drm_la_DEPENDENCIES) $(EXTRA_libva_drm_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_drm_la_LINK) $(am_libva_drm_la_rpath) $(libva_drm_la_OBJECTS) $(libva_drm_la_LIBADD) $(LIBS) + +libva-egl.la: $(libva_egl_la_OBJECTS) $(libva_egl_la_DEPENDENCIES) $(EXTRA_libva_egl_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_egl_la_LINK) $(am_libva_egl_la_rpath) $(libva_egl_la_OBJECTS) $(libva_egl_la_LIBADD) $(LIBS) + +libva-glx.la: $(libva_glx_la_OBJECTS) $(libva_glx_la_DEPENDENCIES) $(EXTRA_libva_glx_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_glx_la_LINK) $(am_libva_glx_la_rpath) $(libva_glx_la_OBJECTS) $(libva_glx_la_LIBADD) $(LIBS) + +libva-tpi.la: $(libva_tpi_la_OBJECTS) $(libva_tpi_la_DEPENDENCIES) $(EXTRA_libva_tpi_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_tpi_la_LINK) -rpath $(libdir) $(libva_tpi_la_OBJECTS) $(libva_tpi_la_LIBADD) $(LIBS) + +libva-wayland.la: $(libva_wayland_la_OBJECTS) $(libva_wayland_la_DEPENDENCIES) $(EXTRA_libva_wayland_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_wayland_la_LINK) $(am_libva_wayland_la_rpath) $(libva_wayland_la_OBJECTS) $(libva_wayland_la_LIBADD) $(LIBS) + +libva-x11.la: $(libva_x11_la_OBJECTS) $(libva_x11_la_DEPENDENCIES) $(EXTRA_libva_x11_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_x11_la_LINK) $(am_libva_x11_la_rpath) $(libva_x11_la_OBJECTS) $(libva_x11_la_LIBADD) $(LIBS) + +libva.la: $(libva_la_OBJECTS) $(libva_la_DEPENDENCIES) $(EXTRA_libva_la_DEPENDENCIES) + $(AM_V_CCLD)$(libva_la_LINK) -rpath $(libdir) $(libva_la_OBJECTS) $(libva_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_compat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_fool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_tpi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_trace.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libvaincludeHEADERS: $(libvainclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libvainclude_HEADERS)'; test -n "$(libvaincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libvaincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libvaincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libvaincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libvaincludedir)" || exit $$?; \ + done + +uninstall-libvaincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libvainclude_HEADERS)'; test -n "$(libvaincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libvaincludedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libvaincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-libvaincludeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES uninstall-libvaincludeHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libLTLIBRARIES \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-libvaincludeHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-libLTLIBRARIES \ + uninstall-libvaincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.am new file mode 100644 index 000000000..c7ba3f658 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.am @@ -0,0 +1,58 @@ +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(DRM_CFLAGS) \ + $(NULL) + +source_c = \ + va_drm.c \ + va_drm_auth.c \ + va_drm_utils.c \ + $(NULL) + +source_h = \ + va_drm.h \ + $(NULL) + +source_h_priv = \ + va_drm_auth.h \ + va_drm_auth_x11.h \ + va_drm_utils.h \ + $(NULL) + +if USE_X11 +source_c += va_drm_auth_x11.c +AM_CPPFLAGS += $(X11_CFLAGS) +endif + +noinst_LTLIBRARIES = libva_drm.la +libva_drmincludedir = ${includedir}/va +libva_drminclude_HEADERS = $(source_h) +libva_drm_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.in new file mode 100644 index 000000000..76fb9f7cc --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/Makefile.in @@ -0,0 +1,715 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@USE_X11_TRUE@am__append_1 = va_drm_auth_x11.c +@USE_X11_TRUE@am__append_2 = $(X11_CFLAGS) +subdir = va/drm +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(libva_drminclude_HEADERS) \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libva_drm_la_LIBADD = +am__libva_drm_la_SOURCES_DIST = va_drm.c va_drm_auth.c va_drm_utils.c \ + va_drm_auth_x11.c +@USE_X11_TRUE@am__objects_1 = va_drm_auth_x11.lo +am__objects_2 = va_drm.lo va_drm_auth.lo va_drm_utils.lo \ + $(am__objects_1) +am_libva_drm_la_OBJECTS = $(am__objects_2) +libva_drm_la_OBJECTS = $(am_libva_drm_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_drm_la_SOURCES) +DIST_SOURCES = $(am__libva_drm_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libva_drmincludedir)" +HEADERS = $(libva_drminclude_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -DLINUX -I$(top_srcdir) -I$(top_srcdir)/va $(DRM_CFLAGS) \ + $(NULL) $(am__append_2) +source_c = va_drm.c va_drm_auth.c va_drm_utils.c $(NULL) \ + $(am__append_1) +source_h = \ + va_drm.h \ + $(NULL) + +source_h_priv = \ + va_drm_auth.h \ + va_drm_auth_x11.h \ + va_drm_utils.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_drm.la +libva_drmincludedir = ${includedir}/va +libva_drminclude_HEADERS = $(source_h) +libva_drm_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/drm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/drm/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva_drm.la: $(libva_drm_la_OBJECTS) $(libva_drm_la_DEPENDENCIES) $(EXTRA_libva_drm_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libva_drm_la_OBJECTS) $(libva_drm_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_drm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_drm_auth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_drm_auth_x11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_drm_utils.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libva_drmincludeHEADERS: $(libva_drminclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libva_drminclude_HEADERS)'; test -n "$(libva_drmincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libva_drmincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libva_drmincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libva_drmincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libva_drmincludedir)" || exit $$?; \ + done + +uninstall-libva_drmincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libva_drminclude_HEADERS)'; test -n "$(libva_drmincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libva_drmincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libva_drmincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-libva_drmincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libva_drmincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libva_drmincludeHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libva_drmincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.c new file mode 100644 index 000000000..295497dff --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.c @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include "va_drm.h" +#include "va_backend.h" +#include "va_drmcommon.h" +#include "va_drm_auth.h" +#include "va_drm_utils.h" + +static int +va_DisplayContextIsValid(VADisplayContextP pDisplayContext) +{ + VADriverContextP const pDriverContext = pDisplayContext->pDriverContext; + + return (pDriverContext && + ((pDriverContext->display_type & VA_DISPLAY_MAJOR_MASK) == + VA_DISPLAY_DRM)); +} + +static void +va_DisplayContextDestroy(VADisplayContextP pDisplayContext) +{ + if (!pDisplayContext) + return; + + free(pDisplayContext->pDriverContext->drm_state); + free(pDisplayContext->pDriverContext); + free(pDisplayContext); +} + +static VAStatus +va_DisplayContextGetDriverName( + VADisplayContextP pDisplayContext, + char **driver_name_ptr +) +{ + + VADriverContextP const ctx = pDisplayContext->pDriverContext; + struct drm_state * const drm_state = ctx->drm_state; + VAStatus status; + + status = VA_DRM_GetDriverName(ctx, driver_name_ptr); + if (status != VA_STATUS_SUCCESS) + return status; + + drm_state->auth_type = VA_DRM_AUTH_CUSTOM; + + return VA_STATUS_SUCCESS; +} + +VADisplay +vaGetDisplayDRM(int fd) +{ + VADisplayContextP pDisplayContext = NULL; + VADriverContextP pDriverContext = NULL; + struct drm_state *drm_state = NULL; + + if (fd == 0) + return NULL; + + /* Create new entry */ + /* XXX: handle cache? */ + drm_state = calloc(1, sizeof(*drm_state)); + if (!drm_state) + goto error; + drm_state->fd = fd; + + pDriverContext = calloc(1, sizeof(*pDriverContext)); + if (!pDriverContext) + goto error; + pDriverContext->native_dpy = NULL; + pDriverContext->display_type = VA_DISPLAY_DRM; + pDriverContext->drm_state = drm_state; + + pDisplayContext = calloc(1, sizeof(*pDisplayContext)); + if (!pDisplayContext) + goto error; + + pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; + pDisplayContext->pDriverContext = pDriverContext; + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + return pDisplayContext; + +error: + free(pDisplayContext); + free(pDriverContext); + free(drm_state); + return NULL; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.h new file mode 100644 index 000000000..9af3cc8bd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm.h @@ -0,0 +1,61 @@ +/* + * va_drm.h - Raw DRM API + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DRM_H +#define VA_DRM_H + +#include + +/** + * \file va_drm.h + * \brief The raw DRM API + * + * This file contains the \ref api_drm "Raw DRM API". + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Returns a VA display derived from the specified DRM connection. + * + * This function returns a (possibly cached) VA display from the + * specified DRM connection @fd. + * + * @param[in] fd the DRM connection descriptor + * @return the VA display + */ +VADisplay +vaGetDisplayDRM(int fd); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DRM_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.c new file mode 100644 index 000000000..53794d385 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include "va_drm_auth.h" +#include "va_drm_auth_x11.h" + +#if defined __linux__ +# include +#endif + +/* Checks whether the thread id is the current thread */ +static bool +is_local_tid(pid_t tid) +{ +#if defined __linux__ + /* On Linux systems, drmGetClient() would return the thread ID + instead of the actual process ID */ + return syscall(SYS_gettid) == tid; +#else + return false; +#endif +} + +/* Checks whether DRM connection is authenticated */ +bool +va_drm_is_authenticated(int fd) +{ + pid_t client_pid; + int i, auth, pid, uid; + unsigned long magic, iocs; + bool is_authenticated = false; + + client_pid = getpid(); + for (i = 0; !is_authenticated; i++) { + if (drmGetClient(fd, i, &auth, &pid, &uid, &magic, &iocs) != 0) + break; + is_authenticated = auth && (pid == client_pid || is_local_tid(pid)); + } + return is_authenticated; +} + +/* Try to authenticate the DRM connection with the supplied magic id */ +bool +va_drm_authenticate(int fd, uint32_t magic) +{ + /* XXX: try to authenticate through Wayland, etc. */ +#ifdef HAVE_VA_X11 + if (va_drm_authenticate_x11(fd, magic)) + return true; +#endif + + /* Default: root + master privs are needed for the following call */ + return drmAuthMagic(fd, magic) == 0; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.h new file mode 100644 index 000000000..1aa6989dc --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DRM_AUTH_H +#define VA_DRM_AUTH_H + +#include +#include + +DLL_HIDDEN +bool +va_drm_is_authenticated(int fd); + +DLL_HIDDEN +bool +va_drm_authenticate(int fd, uint32_t magic); + +#endif /* VA_DRM_AUTH_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.c new file mode 100644 index 000000000..54e740280 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include +#include +#include "va_drm_auth_x11.h" + +#define LIBVA_MAJOR_VERSION 1 + +typedef struct drm_auth_x11 DRMAuthX11; +typedef struct drm_auth_x11_vtable DRMAuthX11VTable; + +typedef void (*VAGenericFunc)(void); +typedef Display *(*X11OpenDisplayFunc)(const char *display_name); +typedef int (*X11CloseDisplayFunc)(Display *display); +typedef Bool (*VADRI2QueryExtensionFunc)( + Display *display, int *event_base, int *error_base); +typedef Bool (*VADRI2QueryVersionFunc)( + Display *display, int *major, int *minor); +typedef Bool (*VADRI2AuthenticateFunc)( + Display *display, XID window, uint32_t magic); + +struct drm_auth_x11_vtable { + X11OpenDisplayFunc x11_open_display; + X11CloseDisplayFunc x11_close_display; + VADRI2QueryExtensionFunc va_dri2_query_extension; + VADRI2QueryVersionFunc va_dri2_query_version; + VADRI2AuthenticateFunc va_dri2_authenticate; +}; + +struct drm_auth_x11 { + void *handle; /* libva-x11.so.1 */ + DRMAuthX11VTable vtable; + Display *display; + Window window; +}; + +static bool +get_symbol(void *handle, void *func_vptr, const char *name) +{ + VAGenericFunc func, *func_ptr = func_vptr; + const char *error; + + dlerror(); + func = (VAGenericFunc)dlsym(handle, name); + error = dlerror(); + + if (error) { + fprintf(stderr, "error: failed to resolve %s() function: %s\n", + name, error); + return false; + } + + *func_ptr = func; + return true; +} + +static bool +drm_auth_x11_init(DRMAuthX11 *auth) +{ + struct drm_auth_x11_vtable *vtable; + char libva_x11_name[16]; + int ret; + + ret = snprintf( + libva_x11_name, sizeof(libva_x11_name), + "libva-x11.so.%d", LIBVA_MAJOR_VERSION + ); + if (ret < 0 || ret >= sizeof(libva_x11_name)) + return false; + + auth->handle = dlopen(libva_x11_name, RTLD_LAZY | RTLD_GLOBAL); + if (!auth->handle) { + perror("open lib"); + return false; + } + + vtable = &auth->vtable; + if (!get_symbol(RTLD_DEFAULT, &vtable->x11_open_display, "XOpenDisplay")) + return false; + if (!get_symbol(RTLD_DEFAULT, &vtable->x11_close_display, "XCloseDisplay")) + return false; + if (!get_symbol(auth->handle, &vtable->va_dri2_query_extension, + "VA_DRI2QueryExtension")) + return false; + if (!get_symbol(auth->handle, &vtable->va_dri2_query_version, + "VA_DRI2QueryVersion")) + return false; + if (!get_symbol(auth->handle, &vtable->va_dri2_authenticate, + "VA_DRI2Authenticate")) + return false; + + auth->display = vtable->x11_open_display(NULL); + if (!auth->display) + return false; + + auth->window = DefaultRootWindow(auth->display); + return true; +} + +static void +drm_auth_x11_terminate(DRMAuthX11 *auth) +{ + if (!auth) + return; + + if (auth->display) { + auth->vtable.x11_close_display(auth->display); + auth->display = NULL; + auth->window = None; + } + + if (auth->handle) { + dlclose(auth->handle); + auth->handle = NULL; + } +} + +static bool +drm_auth_x11_authenticate(DRMAuthX11 *auth, int fd, uint32_t magic) +{ + DRMAuthX11VTable * const vtable = &auth->vtable; + int evt_base, err_base, v_major, v_minor; + + if (!vtable->va_dri2_query_extension(auth->display, &evt_base, &err_base)) + return false; + if (!vtable->va_dri2_query_version(auth->display, &v_major, &v_minor)) + return false; + if (!vtable->va_dri2_authenticate(auth->display, auth->window, magic)) + return false; + return true; +} + +/* Try to authenticate the DRM connection with the supplied magic through X11 */ +bool +va_drm_authenticate_x11(int fd, uint32_t magic) +{ + DRMAuthX11 auth; + bool success = false; + + memset(&auth, 0, sizeof(auth)); + if (!drm_auth_x11_init(&auth)) + goto end; + success = drm_auth_x11_authenticate(&auth, fd, magic); + +end: + drm_auth_x11_terminate(&auth); + return success; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.h new file mode 100644 index 000000000..530eeed74 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_auth_x11.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DRM_AUTH_X11_H +#define VA_DRM_AUTH_X11_H + +#include +#include + +DLL_HIDDEN +bool +va_drm_authenticate_x11(int fd, uint32_t magic); + +#endif /* VA_DRM_AUTH_X11_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.c new file mode 100644 index 000000000..0c555aef3 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.c @@ -0,0 +1,69 @@ +/* + * va_drm_utils.c - VA/DRM Utilities + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include "va_drm_utils.h" +#include "va_drmcommon.h" + +/* Returns the VA driver name for the active display */ +VAStatus +VA_DRM_GetDriverName(VADriverContextP ctx, char **driver_name_ptr) +{ + char *driver_name = NULL; + + *driver_name_ptr = NULL; + + driver_name = strdup("i965"); + if (!driver_name) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + *driver_name_ptr = driver_name; + return VA_STATUS_SUCCESS; +} + +#if 0 +/* Checks whether the file descriptor is a DRM Render-Nodes one */ +int +VA_DRM_IsRenderNodeFd(int fd) +{ + struct stat st; + const char *name; + + /* Check by device node */ + if (fstat(fd, &st) == 0) + return S_ISCHR(st.st_mode) && (st.st_rdev & 0x80); + + /* Check by device name */ + name = drmGetDeviceNameFromFd(fd); + if (name) + return strncmp(name, "/dev/dri/renderD", 16) == 0; + + /* Unrecoverable error */ + return -1; +} +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.h new file mode 100644 index 000000000..b468c597a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/drm/va_drm_utils.h @@ -0,0 +1,83 @@ +/* + * va_drm_utils.h - VA/DRM Utilities + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DRM_UTILS_H +#define VA_DRM_UTILS_H + +#include + +/** + * \file va_drm_utils.h + * \brief VA/DRM Utilities + * + * This file contains VA/DRM utility functions. The API herein defined is + * internal to libva. Users include the VA/DRM API itself or VA/Android, + * should it be based on DRM. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Returns the VA driver name for the active display. + * + * This functions returns a newly allocated buffer in @driver_name_ptr that + * contains the VA driver name for the active display. Active display means + * the display obtained with any of the vaGetDisplay*() functions. + * + * The VADriverContext.drm_state structure must be valid, i.e. allocated + * and containing an open DRM connection descriptor. The DRM connection + * does *not* need to be authenticated as it only performs a call to + * drmGetVersion(). + * + * @param[in] ctx the pointer to a VADriverContext + * @param[out] driver_name_ptr the newly allocated buffer containing + * the VA driver name + * @return VA_STATUS_SUCCESS if operation is successful, or another + * #VAStatus value otherwise. + */ +DLL_HIDDEN +VAStatus +VA_DRM_GetDriverName(VADriverContextP ctx, char **driver_name_ptr); + +/** + * \brief Checks whether the file descriptor is a DRM Render-Nodes one + * + * This functions checks whether the supplied file descriptor @fd + * falls into the set of DRM Render-Nodes. + */ +DLL_HIDDEN +int +VA_DRM_IsRenderNodeFd(int fd); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DRM_UTILS_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.am new file mode 100644 index 000000000..aee49759a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.am @@ -0,0 +1,43 @@ +# Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(EGL_CFLAGS) \ + $(NULL) + +source_c = \ + va_egl.c + +source_h = \ + va_egl.h \ + va_backend_egl.h + +source_h_priv = + +noinst_LTLIBRARIES = libva_egl.la +libva_eglincludedir = ${includedir}/va +libva_eglinclude_HEADERS = $(source_h) +libva_egl_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.in new file mode 100644 index 000000000..130989546 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/Makefile.in @@ -0,0 +1,703 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = va/egl +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(libva_eglinclude_HEADERS) \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libva_egl_la_LIBADD = +am__objects_1 = va_egl.lo +am_libva_egl_la_OBJECTS = $(am__objects_1) +libva_egl_la_OBJECTS = $(am_libva_egl_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_egl_la_SOURCES) +DIST_SOURCES = $(libva_egl_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libva_eglincludedir)" +HEADERS = $(libva_eglinclude_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(EGL_CFLAGS) \ + $(NULL) + +source_c = \ + va_egl.c + +source_h = \ + va_egl.h \ + va_backend_egl.h + +source_h_priv = +noinst_LTLIBRARIES = libva_egl.la +libva_eglincludedir = ${includedir}/va +libva_eglinclude_HEADERS = $(source_h) +libva_egl_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/egl/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/egl/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva_egl.la: $(libva_egl_la_OBJECTS) $(libva_egl_la_DEPENDENCIES) $(EXTRA_libva_egl_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libva_egl_la_OBJECTS) $(libva_egl_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_egl.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libva_eglincludeHEADERS: $(libva_eglinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libva_eglinclude_HEADERS)'; test -n "$(libva_eglincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libva_eglincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libva_eglincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libva_eglincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libva_eglincludedir)" || exit $$?; \ + done + +uninstall-libva_eglincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libva_eglinclude_HEADERS)'; test -n "$(libva_eglincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libva_eglincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libva_eglincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-libva_eglincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libva_eglincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libva_eglincludeHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libva_eglincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_backend_egl.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_backend_egl.h new file mode 100644 index 000000000..925d93364 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_backend_egl.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_BACKEND_EGL_H +#define VA_BACKEND_EGL_H + +#include +#include + +struct VADriverVTableEGL { + /* Get EGL ClientBufer buffer index and device id from surface id*/ + VAStatus (*vaGetEGLClientBufferFromSurface) ( + VADriverContextP ctx, + VASurfaceID surface, + void **buffer + ); + /* TBD: more APIs for EGL */ +}; + +#endif /* VA_BACKEND_EGL_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.c new file mode 100644 index 000000000..36e5504cd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Initial EGL backend, and subject to change + * + * Gstreamer gst-gltexture has a framework to support associating a buffer + * to a texture via EGL_KHR_image_base and GL_OES_EGL_image_external. + * + * EGL_KHR_image_base: + * EGLImageKHR eglCreateImageKHR( + * EGLDisplay dpy, + * EGLContext ctx, + * EGLenum target, + * EGLClientBuffer buffer, + * const EGLint *attrib_list) + * + * GL_OES_EGL_image_external: + * This extension provides a mechanism for creating EGLImage texture targets + * from EGLImages. This extension defines a new texture target TEXTURE_EXTERNAL_OES. + * This texture target can only be specified using an EGLImage. + * The first eglCreateImageKHR will create an EGLImage from an EGLClientBufferm, and with + * an EGLImage, gst-gltexture can use GL_OES_EGL_image_external extension to create textures. + * + * eglCreateImageKHR and GL_OES_EGL_image_external are all called directly from gst-gltexture, + * thus the simplest way to support gst-gltexture is defining a new API to pass EGLClientBuffer + * to gst-gltexture. + * + * EGLClientBuffer is gfx/video driver implementation specific (?). It means we need to pass up + * the low-level buffer ID (or handle) of the decoded surface to gst-gltexture, and gst-gltexture + * then pass down it to gfx driver. + * + * Bellow API vaGetEGLClientBufferFromSurface is for this purpose + */ + +#include "va.h" +#include "va_backend_egl.h" +#include "va_egl.h" + +#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) +#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } + +VAStatus vaGetEGLClientBufferFromSurface ( + VADisplay dpy, + VASurfaceID surface, + EGLClientBuffer *buffer /* out*/ +) +{ + VADriverContextP ctx; + struct VADriverVTableEGL *va_egl; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + va_egl = (struct VADriverVTableEGL *)ctx->vtable_egl; + if (va_egl && va_egl->vaGetEGLClientBufferFromSurface) { + return va_egl->vaGetEGLClientBufferFromSurface(ctx, surface, buffer); + } else + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.h new file mode 100644 index 000000000..4243d0b40 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/egl/va_egl.h @@ -0,0 +1,27 @@ +#ifndef _VA_EGL_H_ +#define _VA_EGL_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void* EGLClientBuffer; + +/*This function is used to get EGLClientBuffer + * (lower 16bits is buffer index, upper 16bits + * is BC device id.) from surface id. Application + * should maintain EGLClientBuffer itself.*/ + +VAStatus vaGetEGLClientBufferFromSurface ( + VADisplay dpy, + VASurfaceID surface, + EGLClientBuffer *buffer /* out*/ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_EGL_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.am new file mode 100644 index 000000000..8ff8ae9b6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.am @@ -0,0 +1,51 @@ +# Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + -I$(top_srcdir)/va/x11 \ + $(X11_CFLAGS) \ + $(GLX_CFLAGS) \ + $(NULL) + +source_c = \ + va_glx.c \ + va_glx_impl.c \ + $(NULL) + +source_h = \ + va_backend_glx.h \ + va_glx.h \ + $(NULL) + +source_h_priv = \ + va_glx_impl.h \ + va_glx_private.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_glx.la +libva_glxincludedir = ${includedir}/va +libva_glxinclude_HEADERS = $(source_h) +libva_glx_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.in new file mode 100644 index 000000000..22eb665cd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/Makefile.in @@ -0,0 +1,713 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = va/glx +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(libva_glxinclude_HEADERS) \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libva_glx_la_LIBADD = +am__objects_1 = va_glx.lo va_glx_impl.lo +am_libva_glx_la_OBJECTS = $(am__objects_1) +libva_glx_la_OBJECTS = $(am_libva_glx_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_glx_la_SOURCES) +DIST_SOURCES = $(libva_glx_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libva_glxincludedir)" +HEADERS = $(libva_glxinclude_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + -I$(top_srcdir)/va/x11 \ + $(X11_CFLAGS) \ + $(GLX_CFLAGS) \ + $(NULL) + +source_c = \ + va_glx.c \ + va_glx_impl.c \ + $(NULL) + +source_h = \ + va_backend_glx.h \ + va_glx.h \ + $(NULL) + +source_h_priv = \ + va_glx_impl.h \ + va_glx_private.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_glx.la +libva_glxincludedir = ${includedir}/va +libva_glxinclude_HEADERS = $(source_h) +libva_glx_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/glx/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/glx/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva_glx.la: $(libva_glx_la_OBJECTS) $(libva_glx_la_DEPENDENCIES) $(EXTRA_libva_glx_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libva_glx_la_OBJECTS) $(libva_glx_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_glx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_glx_impl.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libva_glxincludeHEADERS: $(libva_glxinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libva_glxinclude_HEADERS)'; test -n "$(libva_glxincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libva_glxincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libva_glxincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libva_glxincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libva_glxincludedir)" || exit $$?; \ + done + +uninstall-libva_glxincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libva_glxinclude_HEADERS)'; test -n "$(libva_glxincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libva_glxincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libva_glxincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-libva_glxincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libva_glxincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libva_glxincludeHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libva_glxincludeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_backend_glx.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_backend_glx.h new file mode 100644 index 000000000..d11048549 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_backend_glx.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_BACKEND_GLX_H +#define VA_BACKEND_GLX_H + +struct VADriverContext; + +struct VADriverVTableGLX { + /* Optional: create a surface used for display to OpenGL */ + VAStatus (*vaCreateSurfaceGLX)( + struct VADriverContext *ctx, + unsigned int gl_target, + unsigned int gl_texture, + void **gl_surface + ); + + /* Optional: destroy a VA/GLX surface */ + VAStatus (*vaDestroySurfaceGLX)( + struct VADriverContext *ctx, + void *gl_surface + ); + + /* Optional: copy a VA surface to a VA/GLX surface */ + VAStatus (*vaCopySurfaceGLX)( + struct VADriverContext *ctx, + void *gl_surface, + VASurfaceID surface, + unsigned int flags + ); +}; + +#endif /* VA_BACKEND_GLX_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.c new file mode 100644 index 000000000..25ef005a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.c @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include "va_glx_private.h" +#include "va_glx_impl.h" + +#define INIT_CONTEXT(ctx, dpy) do { \ + if (!vaDisplayIsValid(dpy)) \ + return VA_STATUS_ERROR_INVALID_DISPLAY; \ + \ + ctx = ((VADisplayContextP)(dpy))->pDriverContext; \ + if (!(ctx)) \ + return VA_STATUS_ERROR_INVALID_DISPLAY; \ + \ + VAStatus status = va_glx_init_context(ctx); \ + if (status != VA_STATUS_SUCCESS) \ + return status; \ + } while (0) + +#define INVOKE(ctx, func, args) do { \ + VADriverVTableGLXP vtable; \ + vtable = &VA_DRIVER_CONTEXT_GLX(ctx)->vtable; \ + if (!vtable->va##func##GLX) \ + return VA_STATUS_ERROR_UNIMPLEMENTED; \ + status = vtable->va##func##GLX args; \ + } while (0) + + +// Destroy VA/GLX display context +static void va_DisplayContextDestroy(VADisplayContextP pDisplayContext) +{ + VADisplayContextGLXP pDisplayContextGLX; + VADriverContextP pDriverContext; + VADriverContextGLXP pDriverContextGLX; + + if (!pDisplayContext) + return; + + pDriverContext = pDisplayContext->pDriverContext; + pDriverContextGLX = pDriverContext->glx; + if (pDriverContextGLX) { + free(pDriverContextGLX); + pDriverContext->glx = NULL; + } + + pDisplayContextGLX = pDisplayContext->opaque; + if (pDisplayContextGLX) { + vaDestroyFunc vaDestroy = pDisplayContextGLX->vaDestroy; + free(pDisplayContextGLX); + pDisplayContext->opaque = NULL; + if (vaDestroy) + vaDestroy(pDisplayContext); + } +} + +// Return a suitable VADisplay for VA API +VADisplay vaGetDisplayGLX(Display *native_dpy) +{ + VADisplay dpy = NULL; + VADisplayContextP pDisplayContext = NULL; + VADisplayContextGLXP pDisplayContextGLX = NULL; + VADriverContextP pDriverContext; + VADriverContextGLXP pDriverContextGLX = NULL; + + dpy = vaGetDisplay(native_dpy); + if (!dpy) + return NULL; + pDisplayContext = (VADisplayContextP)dpy; + pDriverContext = pDisplayContext->pDriverContext; + + pDisplayContextGLX = calloc(1, sizeof(*pDisplayContextGLX)); + if (!pDisplayContextGLX) + goto error; + + pDriverContextGLX = calloc(1, sizeof(*pDriverContextGLX)); + if (!pDriverContextGLX) + goto error; + + pDriverContext->display_type = VA_DISPLAY_GLX; + pDisplayContextGLX->vaDestroy = pDisplayContext->vaDestroy; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->opaque = pDisplayContextGLX; + pDriverContext->glx = pDriverContextGLX; + return dpy; + +error: + free(pDriverContextGLX); + free(pDisplayContextGLX); + pDisplayContext->vaDestroy(pDisplayContext); + return NULL; +} + +// Create a surface used for display to OpenGL +VAStatus vaCreateSurfaceGLX( + VADisplay dpy, + GLenum target, + GLuint texture, + void **gl_surface +) +{ + VADriverContextP ctx; + VAStatus status; + + /* Make sure it is a valid GL texture object */ + if (!glIsTexture(texture)) + return VA_STATUS_ERROR_INVALID_PARAMETER; + + INIT_CONTEXT(ctx, dpy); + + INVOKE(ctx, CreateSurface, (ctx, target, texture, gl_surface)); + return status; +} + +// Destroy a VA/GLX surface +VAStatus vaDestroySurfaceGLX( + VADisplay dpy, + void *gl_surface +) +{ + VADriverContextP ctx; + VAStatus status; + + INIT_CONTEXT(ctx, dpy); + + INVOKE(ctx, DestroySurface, (ctx, gl_surface)); + return status; +} + +// Copy a VA surface to a VA/GLX surface +VAStatus vaCopySurfaceGLX( + VADisplay dpy, + void *gl_surface, + VASurfaceID surface, + unsigned int flags +) +{ + VADriverContextP ctx; + VAStatus status; + + INIT_CONTEXT(ctx, dpy); + + INVOKE(ctx, CopySurface, (ctx, gl_surface, surface, flags)); + return status; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.h new file mode 100644 index 000000000..1a0624d1c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_GLX_H +#define VA_GLX_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Return a suitable VADisplay for VA API + * + * @param[in] dpy the X11 display + * @return a VADisplay + */ +VADisplay vaGetDisplayGLX( + Display *dpy +); + +/** + * Create a surface used for display to OpenGL + * + * The application shall maintain the live GLX context itself. + * Implementations are free to use glXGetCurrentContext() and + * glXGetCurrentDrawable() functions for internal purposes. + * + * @param[in] dpy the VA display + * @param[in] target the GL target to which the texture needs to be bound + * @param[in] texture the GL texture + * @param[out] gl_surface the VA/GLX surface + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus vaCreateSurfaceGLX( + VADisplay dpy, + GLenum target, + GLuint texture, + void **gl_surface +); + +/** + * Destroy a VA/GLX surface + * + * The application shall maintain the live GLX context itself. + * Implementations are free to use glXGetCurrentContext() and + * glXGetCurrentDrawable() functions for internal purposes. + * + * @param[in] dpy the VA display + * @param[in] gl_surface the VA surface + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus vaDestroySurfaceGLX( + VADisplay dpy, + void *gl_surface +); + +/** + * Copy a VA surface to a VA/GLX surface + * + * This function will not return until the copy is completed. At this + * point, the underlying GL texture will contain the surface pixels + * in an RGB format defined by the user. + * + * The application shall maintain the live GLX context itself. + * Implementations are free to use glXGetCurrentContext() and + * glXGetCurrentDrawable() functions for internal purposes. + * + * @param[in] dpy the VA display + * @param[in] gl_surface the VA/GLX destination surface + * @param[in] surface the VA source surface + * @param[in] flags the PutSurface flags + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus vaCopySurfaceGLX( + VADisplay dpy, + void *gl_surface, + VASurfaceID surface, + unsigned int flags +); + +#ifdef __cplusplus +} +#endif + +#endif /* VA_GLX_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.c new file mode 100644 index 000000000..c066582fc --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.c @@ -0,0 +1,1104 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va_glx_private.h" +#include "va_glx_impl.h" +#include +#include +#include +#include +#include +#include + +static void va_glx_error_message(const char *format, ...) +{ + va_list args; + va_start(args, format); + fprintf(stderr, "libva-glx error: "); + vfprintf(stderr, format, args); + va_end(args); +} + +// X error trap +static int x11_error_code = 0; +static int (*old_error_handler)(Display *, XErrorEvent *); + +static int error_handler(Display *dpy, XErrorEvent *error) +{ + x11_error_code = error->error_code; + return 0; +} + +static void x11_trap_errors(void) +{ + x11_error_code = 0; + old_error_handler = XSetErrorHandler(error_handler); +} + +static int x11_untrap_errors(void) +{ + XSetErrorHandler(old_error_handler); + return x11_error_code; +} + +// Returns a string representation of an OpenGL error +static const char *gl_get_error_string(GLenum error) +{ + static const struct { + GLenum val; + const char *str; + } + gl_errors[] = { + { GL_NO_ERROR, "no error" }, + { GL_INVALID_ENUM, "invalid enumerant" }, + { GL_INVALID_VALUE, "invalid value" }, + { GL_INVALID_OPERATION, "invalid operation" }, + { GL_STACK_OVERFLOW, "stack overflow" }, + { GL_STACK_UNDERFLOW, "stack underflow" }, + { GL_OUT_OF_MEMORY, "out of memory" }, +#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT + { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" }, +#endif + { ~0, NULL } + }; + + int i; + for (i = 0; gl_errors[i].str; i++) { + if (gl_errors[i].val == error) + return gl_errors[i].str; + } + return "unknown"; +} + +static inline int gl_do_check_error(int report) +{ + GLenum error; + int is_error = 0; + while ((error = glGetError()) != GL_NO_ERROR) { + if (report) + va_glx_error_message("glError: %s caught\n", + gl_get_error_string(error)); + is_error = 1; + } + return is_error; +} + +static inline void gl_purge_errors(void) +{ + gl_do_check_error(0); +} + +static inline int gl_check_error(void) +{ + return gl_do_check_error(1); +} + +// glGetTexLevelParameteriv() wrapper +static int gl_get_texture_param(GLenum param, unsigned int *pval) +{ + GLint val; + + gl_purge_errors(); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, param, &val); + if (gl_check_error()) + return 0; + if (pval) + *pval = val; + return 1; +} + +// Returns the OpenGL VTable +static inline VAOpenGLVTableP gl_get_vtable(VADriverContextP ctx) +{ + return &VA_DRIVER_CONTEXT_GLX(ctx)->gl_vtable; +} + +// Lookup for a GLX function +typedef void (*GLFuncPtr)(void); +typedef GLFuncPtr (*GLXGetProcAddressProc)(const char *); + +static GLFuncPtr get_proc_address_default(const char *name) +{ + return NULL; +} + +static GLXGetProcAddressProc get_proc_address_func(void) +{ + GLXGetProcAddressProc get_proc_func; + + dlerror(); + get_proc_func = (GLXGetProcAddressProc) + dlsym(RTLD_DEFAULT, "glXGetProcAddress"); + if (!dlerror()) + return get_proc_func; + + get_proc_func = (GLXGetProcAddressProc) + dlsym(RTLD_DEFAULT, "glXGetProcAddressARB"); + if (!dlerror()) + return get_proc_func; + + return get_proc_address_default; +} + +static inline GLFuncPtr get_proc_address(const char *name) +{ + static GLXGetProcAddressProc get_proc_func = NULL; + if (!get_proc_func) + get_proc_func = get_proc_address_func(); + return get_proc_func(name); +} + +// Check for GLX extensions (TFP, FBO) +static int check_extension(const char *name, const char *ext) +{ + const char *end; + int name_len, n; + + if (!name || !ext) + return 0; + + end = ext + strlen(ext); + name_len = strlen(name); + while (ext < end) { + n = strcspn(ext, " "); + if (n == name_len && strncmp(name, ext, n) == 0) + return 1; + ext += (n + 1); + } + return 0; +} + +static int check_tfp_extensions(VADriverContextP ctx) +{ + const char *gl_extensions; + const char *glx_extensions; + + gl_extensions = (const char *)glGetString(GL_EXTENSIONS); + if (!check_extension("GL_ARB_texture_non_power_of_two", gl_extensions)) + return 0; + + glx_extensions = glXQueryExtensionsString(ctx->native_dpy, ctx->x11_screen); + if (!check_extension("GLX_EXT_texture_from_pixmap", glx_extensions)) + return 0; + return 1; +} + +static int check_fbo_extensions(VADriverContextP ctx) +{ + const char *gl_extensions; + + gl_extensions = (const char *)glGetString(GL_EXTENSIONS); + if (check_extension("GL_ARB_framebuffer_object", gl_extensions)) + return 1; + if (check_extension("GL_EXT_framebuffer_object", gl_extensions)) + return 1; + return 0; +} + +// Load GLX extensions +static int load_tfp_extensions(VADriverContextP ctx) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + pOpenGLVTable->glx_create_pixmap = (PFNGLXCREATEPIXMAPPROC) + get_proc_address("glXCreatePixmap"); + if (!pOpenGLVTable->glx_create_pixmap) + return 0; + pOpenGLVTable->glx_destroy_pixmap = (PFNGLXDESTROYPIXMAPPROC) + get_proc_address("glXDestroyPixmap"); + if (!pOpenGLVTable->glx_destroy_pixmap) + return 0; + pOpenGLVTable->glx_bind_tex_image = (PFNGLXBINDTEXIMAGEEXTPROC) + get_proc_address("glXBindTexImageEXT"); + if (!pOpenGLVTable->glx_bind_tex_image) + return 0; + pOpenGLVTable->glx_release_tex_image = (PFNGLXRELEASETEXIMAGEEXTPROC) + get_proc_address("glXReleaseTexImageEXT"); + if (!pOpenGLVTable->glx_release_tex_image) + return 0; + return 1; +} + +static int load_fbo_extensions(VADriverContextP ctx) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + pOpenGLVTable->gl_gen_framebuffers = (PFNGLGENFRAMEBUFFERSEXTPROC) + get_proc_address("glGenFramebuffersEXT"); + if (!pOpenGLVTable->gl_gen_framebuffers) + return 0; + pOpenGLVTable->gl_delete_framebuffers = (PFNGLDELETEFRAMEBUFFERSEXTPROC) + get_proc_address("glDeleteFramebuffersEXT"); + if (!pOpenGLVTable->gl_delete_framebuffers) + return 0; + pOpenGLVTable->gl_bind_framebuffer = (PFNGLBINDFRAMEBUFFEREXTPROC) + get_proc_address("glBindFramebufferEXT"); + if (!pOpenGLVTable->gl_bind_framebuffer) + return 0; + pOpenGLVTable->gl_gen_renderbuffers = (PFNGLGENRENDERBUFFERSEXTPROC) + get_proc_address("glGenRenderbuffersEXT"); + if (!pOpenGLVTable->gl_gen_renderbuffers) + return 0; + pOpenGLVTable->gl_delete_renderbuffers = (PFNGLDELETERENDERBUFFERSEXTPROC) + get_proc_address("glDeleteRenderbuffersEXT"); + if (!pOpenGLVTable->gl_delete_renderbuffers) + return 0; + pOpenGLVTable->gl_bind_renderbuffer = (PFNGLBINDRENDERBUFFEREXTPROC) + get_proc_address("glBindRenderbufferEXT"); + if (!pOpenGLVTable->gl_bind_renderbuffer) + return 0; + pOpenGLVTable->gl_renderbuffer_storage = (PFNGLRENDERBUFFERSTORAGEEXTPROC) + get_proc_address("glRenderbufferStorageEXT"); + if (!pOpenGLVTable->gl_renderbuffer_storage) + return 0; + pOpenGLVTable->gl_framebuffer_renderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) + get_proc_address("glFramebufferRenderbufferEXT"); + if (!pOpenGLVTable->gl_framebuffer_renderbuffer) + return 0; + pOpenGLVTable->gl_framebuffer_texture_2d = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) + get_proc_address("glFramebufferTexture2DEXT"); + if (!pOpenGLVTable->gl_framebuffer_texture_2d) + return 0; + pOpenGLVTable->gl_check_framebuffer_status = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) + get_proc_address("glCheckFramebufferStatusEXT"); + if (!pOpenGLVTable->gl_check_framebuffer_status) + return 0; + return 1; +} + + +/* ========================================================================= */ +/* === VA/GLX helpers === */ +/* ========================================================================= */ + +// OpenGL context state +typedef struct OpenGLContextState *OpenGLContextStateP; + +struct OpenGLContextState { + Display *display; + Window window; + GLXContext context; +}; + +static void +gl_destroy_context(OpenGLContextStateP cs) +{ + if (!cs) + return; + + if (cs->display && cs->context) { + if (glXGetCurrentContext() == cs->context) + glXMakeCurrent(cs->display, None, NULL); + glXDestroyContext(cs->display, cs->context); + cs->display = NULL; + cs->context = NULL; + } + free(cs); +} + +static OpenGLContextStateP +gl_create_context(VADriverContextP ctx, OpenGLContextStateP parent) +{ + OpenGLContextStateP cs; + GLXFBConfig *fbconfigs = NULL; + int fbconfig_id, val, n, n_fbconfigs; + Status status; + + static GLint fbconfig_attrs[] = { + GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_DOUBLEBUFFER, True, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + None + }; + + cs = malloc(sizeof(*cs)); + if (!cs) + goto error; + + if (parent) { + cs->display = parent->display; + cs->window = parent->window; + } + else { + cs->display = ctx->native_dpy; + cs->window = None; + } + cs->context = NULL; + + if (parent && parent->context) { + status = glXQueryContext( + parent->display, + parent->context, + GLX_FBCONFIG_ID, &fbconfig_id + ); + if (status != Success) + goto error; + + if (fbconfig_id == GLX_DONT_CARE) + goto choose_fbconfig; + + fbconfigs = glXGetFBConfigs( + parent->display, + DefaultScreen(parent->display), + &n_fbconfigs + ); + if (!fbconfigs) + goto error; + + /* Find out a GLXFBConfig compatible with the parent context */ + for (n = 0; n < n_fbconfigs; n++) { + status = glXGetFBConfigAttrib( + cs->display, + fbconfigs[n], + GLX_FBCONFIG_ID, &val + ); + if (status == Success && val == fbconfig_id) + break; + } + if (n == n_fbconfigs) + goto error; + } + else { + choose_fbconfig: + fbconfigs = glXChooseFBConfig( + ctx->native_dpy, + ctx->x11_screen, + fbconfig_attrs, &n_fbconfigs + ); + if (!fbconfigs) + goto error; + + /* Select the first one */ + n = 0; + } + + cs->context = glXCreateNewContext( + cs->display, + fbconfigs[n], + GLX_RGBA_TYPE, + parent ? parent->context : NULL, + True + ); + if (cs->context) + goto end; + +error: + gl_destroy_context(cs); + cs = NULL; +end: + if (fbconfigs) + XFree(fbconfigs); + return cs; +} + +static void gl_get_current_context(OpenGLContextStateP cs) +{ + cs->display = glXGetCurrentDisplay(); + cs->window = glXGetCurrentDrawable(); + cs->context = glXGetCurrentContext(); +} + +static int +gl_set_current_context(OpenGLContextStateP new_cs, OpenGLContextStateP old_cs) +{ + /* If display is NULL, this could be that new_cs was retrieved from + gl_get_current_context() with none set previously. If that case, + the other fields are also NULL and we don't return an error */ + if (!new_cs->display) + return !new_cs->window && !new_cs->context; + + if (old_cs) { + if (old_cs == new_cs) + return 1; + gl_get_current_context(old_cs); + if (old_cs->display == new_cs->display && + old_cs->window == new_cs->window && + old_cs->context == new_cs->context) + return 1; + } + return glXMakeCurrent(new_cs->display, new_cs->window, new_cs->context); +} + +/** Unique VASurfaceGLX identifier */ +#define VA_SURFACE_GLX_MAGIC VA_FOURCC('V','A','G','L') + +struct VASurfaceGLX { + uint32_t magic; ///< Magic number identifying a VASurfaceGLX + GLenum target; ///< GL target to which the texture is bound + GLuint texture; ///< GL texture + VASurfaceID surface; ///< Associated VA surface + unsigned int width; + unsigned int height; + OpenGLContextStateP gl_context; + int is_bound; + Pixmap pixmap; + GLuint pix_texture; + GLXPixmap glx_pixmap; + GLuint fbo; +}; + +// Create Pixmaps for GLX texture-from-pixmap extension +static int create_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP const pOpenGLVTable = gl_get_vtable(ctx); + const unsigned int width = pSurfaceGLX->width; + const unsigned int height = pSurfaceGLX->height; + Pixmap pixmap = None; + GLXFBConfig *fbconfig = NULL; + GLXPixmap glx_pixmap = None; + Window root_window; + XWindowAttributes wattr; + int *attrib; + int n_fbconfig_attrs; + + root_window = RootWindow(ctx->native_dpy, ctx->x11_screen); + XGetWindowAttributes(ctx->native_dpy, root_window, &wattr); + if (wattr.depth != 24 && wattr.depth != 32) + return 0; + pixmap = XCreatePixmap( + ctx->native_dpy, + root_window, + width, + height, + wattr.depth + ); + if (!pixmap) + return 0; + pSurfaceGLX->pixmap = pixmap; + + int fbconfig_attrs[32] = { + GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, + GLX_DOUBLEBUFFER, GL_TRUE, + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_X_RENDERABLE, GL_TRUE, + GLX_Y_INVERTED_EXT, GL_TRUE, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + /* + * depth test isn't enabled in the implementaion of VA GLX, + * so depth buffer is unnecessary. However to workaround a + * bug in older verson of xorg-server, always require a depth + * buffer. + * + * See https://bugs.freedesktop.org/show_bug.cgi?id=76755 + */ + GLX_DEPTH_SIZE, 1, + GL_NONE, + }; + for (attrib = fbconfig_attrs; *attrib != GL_NONE; attrib += 2) + ; + if (wattr.depth == 32) { + *attrib++ = GLX_ALPHA_SIZE; *attrib++ = 8; + *attrib++ = GLX_BIND_TO_TEXTURE_RGBA_EXT; *attrib++ = GL_TRUE; + } + else { + *attrib++ = GLX_BIND_TO_TEXTURE_RGB_EXT; *attrib++ = GL_TRUE; + } + *attrib++ = GL_NONE; + + fbconfig = glXChooseFBConfig( + ctx->native_dpy, + ctx->x11_screen, + fbconfig_attrs, + &n_fbconfig_attrs + ); + if (!fbconfig) + return 0; + + int pixmap_attrs[10] = { + GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT, + GLX_MIPMAP_TEXTURE_EXT, GL_FALSE, + GL_NONE, + }; + for (attrib = pixmap_attrs; *attrib != GL_NONE; attrib += 2) + ; + *attrib++ = GLX_TEXTURE_FORMAT_EXT; + if (wattr.depth == 32) + *attrib++ = GLX_TEXTURE_FORMAT_RGBA_EXT; + else + *attrib++ = GLX_TEXTURE_FORMAT_RGB_EXT; + *attrib++ = GL_NONE; + + x11_trap_errors(); + glx_pixmap = pOpenGLVTable->glx_create_pixmap( + ctx->native_dpy, + fbconfig[0], + pixmap, + pixmap_attrs + ); + free(fbconfig); + if (x11_untrap_errors() != 0) + return 0; + pSurfaceGLX->glx_pixmap = glx_pixmap; + + glGenTextures(1, &pSurfaceGLX->pix_texture); + glBindTexture(GL_TEXTURE_2D, pSurfaceGLX->pix_texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + return 1; +} + +// Destroy Pixmaps used for TFP +static void destroy_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP const pOpenGLVTable = gl_get_vtable(ctx); + + if (pSurfaceGLX->pix_texture) { + glDeleteTextures(1, &pSurfaceGLX->pix_texture); + pSurfaceGLX->pix_texture = 0; + } + + if (pSurfaceGLX->glx_pixmap) { + pOpenGLVTable->glx_destroy_pixmap(ctx->native_dpy, pSurfaceGLX->glx_pixmap); + pSurfaceGLX->glx_pixmap = None; + } + + if (pSurfaceGLX->pixmap) { + XFreePixmap(ctx->native_dpy, pSurfaceGLX->pixmap); + pSurfaceGLX->pixmap = None; + } +} + +// Bind GLX Pixmap to texture +static int bind_pixmap(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + if (pSurfaceGLX->is_bound) + return 1; + + glBindTexture(GL_TEXTURE_2D, pSurfaceGLX->pix_texture); + + x11_trap_errors(); + pOpenGLVTable->glx_bind_tex_image( + ctx->native_dpy, + pSurfaceGLX->glx_pixmap, + GLX_FRONT_LEFT_EXT, + NULL + ); + XSync(ctx->native_dpy, False); + if (x11_untrap_errors() != 0) { + va_glx_error_message("failed to bind pixmap\n"); + return 0; + } + + pSurfaceGLX->is_bound = 1; + return 1; +} + +// Release GLX Pixmap from texture +static int unbind_pixmap(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + if (!pSurfaceGLX->is_bound) + return 1; + + x11_trap_errors(); + pOpenGLVTable->glx_release_tex_image( + ctx->native_dpy, + pSurfaceGLX->glx_pixmap, + GLX_FRONT_LEFT_EXT + ); + XSync(ctx->native_dpy, False); + if (x11_untrap_errors() != 0) { + va_glx_error_message("failed to release pixmap\n"); + return 0; + } + + glBindTexture(GL_TEXTURE_2D, 0); + + pSurfaceGLX->is_bound = 0; + return 1; +} + +// Render GLX Pixmap to texture +static void render_pixmap(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + const unsigned int w = pSurfaceGLX->width; + const unsigned int h = pSurfaceGLX->height; + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glBegin(GL_QUADS); + { + glTexCoord2f(0.0f, 0.0f); glVertex2i(0, 0); + glTexCoord2f(0.0f, 1.0f); glVertex2i(0, h); + glTexCoord2f(1.0f, 1.0f); glVertex2i(w, h); + glTexCoord2f(1.0f, 0.0f); glVertex2i(w, 0); + } + glEnd(); +} + +// Create offscreen surface +static int create_fbo_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + GLuint fbo; + GLenum status; + + pOpenGLVTable->gl_gen_framebuffers(1, &fbo); + pOpenGLVTable->gl_bind_framebuffer(GL_FRAMEBUFFER_EXT, fbo); + pOpenGLVTable->gl_framebuffer_texture_2d( + GL_FRAMEBUFFER_EXT, + GL_COLOR_ATTACHMENT0_EXT, + GL_TEXTURE_2D, + pSurfaceGLX->texture, + 0 + ); + + status = pOpenGLVTable->gl_check_framebuffer_status(GL_DRAW_FRAMEBUFFER_EXT); + pOpenGLVTable->gl_bind_framebuffer(GL_FRAMEBUFFER_EXT, 0); + if (status != GL_FRAMEBUFFER_COMPLETE_EXT) + return 0; + + pSurfaceGLX->fbo = fbo; + return 1; +} + +// Destroy offscreen surface +static void destroy_fbo_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + if (pSurfaceGLX->fbo) { + pOpenGLVTable->gl_delete_framebuffers(1, &pSurfaceGLX->fbo); + pSurfaceGLX->fbo = 0; + } +} + +// Setup matrices to match the FBO texture dimensions +static void fbo_enter(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + const unsigned int width = pSurfaceGLX->width; + const unsigned int height = pSurfaceGLX->height; + + pOpenGLVTable->gl_bind_framebuffer(GL_FRAMEBUFFER_EXT, pSurfaceGLX->fbo); + glPushAttrib(GL_VIEWPORT_BIT); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glViewport(0, 0, width, height); + glTranslatef(-1.0f, -1.0f, 0.0f); + glScalef(2.0f / width, 2.0f / height, 1.0f); +} + +// Restore original OpenGL matrices +static void fbo_leave(VADriverContextP ctx) +{ + VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + + glPopAttrib(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + pOpenGLVTable->gl_bind_framebuffer(GL_FRAMEBUFFER_EXT, 0); +} + +// Check internal texture format is supported +static int is_supported_internal_format(GLenum format) +{ + /* XXX: we don't support other textures than RGBA */ + switch (format) { + case 4: + case GL_RGBA: + case GL_RGBA8: + return 1; + } + return 0; +} + +// Destroy VA/GLX surface +static void +destroy_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + unbind_pixmap(ctx, pSurfaceGLX); + destroy_fbo_surface(ctx, pSurfaceGLX); + destroy_tfp_surface(ctx, pSurfaceGLX); + free(pSurfaceGLX); +} + +// Create VA/GLX surface +static VASurfaceGLXP +create_surface(VADriverContextP ctx, GLenum target, GLuint texture) +{ + VASurfaceGLXP pSurfaceGLX = NULL; + unsigned int internal_format, border_width, width, height; + int is_error = 1; + + pSurfaceGLX = malloc(sizeof(*pSurfaceGLX)); + if (!pSurfaceGLX) + goto end; + + pSurfaceGLX->magic = VA_SURFACE_GLX_MAGIC; + pSurfaceGLX->target = target; + pSurfaceGLX->texture = texture; + pSurfaceGLX->surface = VA_INVALID_SURFACE; + pSurfaceGLX->gl_context = NULL; + pSurfaceGLX->is_bound = 0; + pSurfaceGLX->pixmap = None; + pSurfaceGLX->pix_texture = 0; + pSurfaceGLX->glx_pixmap = None; + pSurfaceGLX->fbo = 0; + + glEnable(target); + glBindTexture(target, texture); + if (!gl_get_texture_param(GL_TEXTURE_INTERNAL_FORMAT, &internal_format)) + goto end; + if (!is_supported_internal_format(internal_format)) + goto end; + + /* Check texture dimensions */ + if (!gl_get_texture_param(GL_TEXTURE_BORDER, &border_width)) + goto end; + if (!gl_get_texture_param(GL_TEXTURE_WIDTH, &width)) + goto end; + if (!gl_get_texture_param(GL_TEXTURE_HEIGHT, &height)) + goto end; + + width -= 2 * border_width; + height -= 2 * border_width; + if (width == 0 || height == 0) + goto end; + + pSurfaceGLX->width = width; + pSurfaceGLX->height = height; + + /* Create TFP objects */ + if (!create_tfp_surface(ctx, pSurfaceGLX)) + goto end; + + /* Create FBO objects */ + if (!create_fbo_surface(ctx, pSurfaceGLX)) + goto end; + + is_error = 0; +end: + if (is_error && pSurfaceGLX) { + destroy_surface(ctx, pSurfaceGLX); + pSurfaceGLX = NULL; + } + return pSurfaceGLX; +} + + +/* ========================================================================= */ +/* === VA/GLX implementation from the driver (fordward calls) === */ +/* ========================================================================= */ + +#define INVOKE(ctx, func, args) do { \ + VADriverVTableGLXP vtable = (ctx)->vtable_glx; \ + if (!vtable->va##func##GLX) \ + return VA_STATUS_ERROR_UNIMPLEMENTED; \ + \ + VAStatus status = vtable->va##func##GLX args; \ + if (status != VA_STATUS_SUCCESS) \ + return status; \ + } while (0) + +static VAStatus +vaCreateSurfaceGLX_impl_driver( + VADriverContextP ctx, + GLenum target, + GLuint texture, + void **gl_surface +) +{ + INVOKE(ctx, CreateSurface, (ctx, target, texture, gl_surface)); + return VA_STATUS_SUCCESS; +} + +static VAStatus +vaDestroySurfaceGLX_impl_driver(VADriverContextP ctx, void *gl_surface) +{ + INVOKE(ctx, DestroySurface, (ctx, gl_surface)); + return VA_STATUS_SUCCESS; +} + +static VAStatus +vaCopySurfaceGLX_impl_driver( + VADriverContextP ctx, + void *gl_surface, + VASurfaceID surface, + unsigned int flags +) +{ + INVOKE(ctx, CopySurface, (ctx, gl_surface, surface, flags)); + return VA_STATUS_SUCCESS; +} + +#undef INVOKE + + +/* ========================================================================= */ +/* === VA/GLX implementation from libVA (generic and suboptimal path) === */ +/* ========================================================================= */ + +#define INIT_SURFACE(surface, surface_arg) do { \ + surface = (VASurfaceGLXP)(surface_arg); \ + if (!check_surface(surface)) \ + return VA_STATUS_ERROR_INVALID_SURFACE; \ + } while (0) + +// Check VASurfaceGLX is valid +static inline int check_surface(VASurfaceGLXP pSurfaceGLX) +{ + return pSurfaceGLX && pSurfaceGLX->magic == VA_SURFACE_GLX_MAGIC; +} + +static VAStatus +vaCreateSurfaceGLX_impl_libva( + VADriverContextP ctx, + GLenum target, + GLuint texture, + void **gl_surface +) +{ + VASurfaceGLXP pSurfaceGLX; + struct OpenGLContextState old_cs, *new_cs; + + gl_get_current_context(&old_cs); + new_cs = gl_create_context(ctx, &old_cs); + if (!new_cs) + goto error; + if (!gl_set_current_context(new_cs, NULL)) + goto error; + + pSurfaceGLX = create_surface(ctx, target, texture); + if (!pSurfaceGLX) + goto error; + + pSurfaceGLX->gl_context = new_cs; + *gl_surface = pSurfaceGLX; + + gl_set_current_context(&old_cs, NULL); + return VA_STATUS_SUCCESS; + +error: + if (new_cs) + gl_destroy_context(new_cs); + + return VA_STATUS_ERROR_ALLOCATION_FAILED; +} + +static VAStatus +vaDestroySurfaceGLX_impl_libva(VADriverContextP ctx, void *gl_surface) +{ + VASurfaceGLXP pSurfaceGLX; + struct OpenGLContextState old_cs, *new_cs; + + INIT_SURFACE(pSurfaceGLX, gl_surface); + + new_cs = pSurfaceGLX->gl_context; + if (!gl_set_current_context(new_cs, &old_cs)) + return VA_STATUS_ERROR_OPERATION_FAILED; + + destroy_surface(ctx, pSurfaceGLX); + + gl_destroy_context(new_cs); + gl_set_current_context(&old_cs, NULL); + return VA_STATUS_SUCCESS; +} + +static inline VAStatus +deassociate_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + if (!unbind_pixmap(ctx, pSurfaceGLX)) + return VA_STATUS_ERROR_OPERATION_FAILED; + + pSurfaceGLX->surface = VA_INVALID_SURFACE; + return VA_STATUS_SUCCESS; +} + +static VAStatus +associate_surface( + VADriverContextP ctx, + VASurfaceGLXP pSurfaceGLX, + VASurfaceID surface, + unsigned int flags +) +{ + VAStatus status; + + /* XXX: optimise case where we are associating the same VA surface + as before an no changed occurred to it */ + status = deassociate_surface(ctx, pSurfaceGLX); + if (status != VA_STATUS_SUCCESS) + return status; + + x11_trap_errors(); + status = ctx->vtable->vaPutSurface( + ctx, + surface, + (void *)pSurfaceGLX->pixmap, + 0, 0, pSurfaceGLX->width, pSurfaceGLX->height, + 0, 0, pSurfaceGLX->width, pSurfaceGLX->height, + NULL, 0, + flags + ); + XSync(ctx->native_dpy, False); + if (x11_untrap_errors() != 0) + return VA_STATUS_ERROR_OPERATION_FAILED; + if (status != VA_STATUS_SUCCESS) + return status; + + pSurfaceGLX->surface = surface; + return VA_STATUS_SUCCESS; +} + +static inline VAStatus +sync_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + if (pSurfaceGLX->surface == VA_INVALID_SURFACE) + return VA_STATUS_ERROR_INVALID_SURFACE; + + return ctx->vtable->vaSyncSurface(ctx, pSurfaceGLX->surface); +} + +static inline VAStatus +begin_render_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + VAStatus status; + + status = sync_surface(ctx, pSurfaceGLX); + if (status != VA_STATUS_SUCCESS) + return status; + + if (!bind_pixmap(ctx, pSurfaceGLX)) + return VA_STATUS_ERROR_OPERATION_FAILED; + + return VA_STATUS_SUCCESS; +} + +static inline VAStatus +end_render_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) +{ + if (!unbind_pixmap(ctx, pSurfaceGLX)) + return VA_STATUS_ERROR_OPERATION_FAILED; + + return VA_STATUS_SUCCESS; +} + +static VAStatus +copy_surface( + VADriverContextP ctx, + VASurfaceGLXP pSurfaceGLX, + VASurfaceID surface, + unsigned int flags +) +{ + VAStatus status; + + /* Associate VA surface */ + status = associate_surface(ctx, pSurfaceGLX, surface, flags); + if (status != VA_STATUS_SUCCESS) + return status; + + /* Render to FBO */ + fbo_enter(ctx, pSurfaceGLX); + status = begin_render_surface(ctx, pSurfaceGLX); + if (status == VA_STATUS_SUCCESS) { + render_pixmap(ctx, pSurfaceGLX); + status = end_render_surface(ctx, pSurfaceGLX); + } + fbo_leave(ctx); + if (status != VA_STATUS_SUCCESS) + return status; + + return deassociate_surface(ctx, pSurfaceGLX); +} + +static VAStatus +vaCopySurfaceGLX_impl_libva( + VADriverContextP ctx, + void *gl_surface, + VASurfaceID surface, + unsigned int flags +) +{ + VASurfaceGLXP pSurfaceGLX; + VAStatus status; + struct OpenGLContextState old_cs; + + INIT_SURFACE(pSurfaceGLX, gl_surface); + + if (!gl_set_current_context(pSurfaceGLX->gl_context, &old_cs)) + return VA_STATUS_ERROR_OPERATION_FAILED; + + status = copy_surface(ctx, pSurfaceGLX, surface, flags); + + gl_set_current_context(&old_cs, NULL); + return status; +} + +#undef INIT_SURFACE + + +/* ========================================================================= */ +/* === Private VA/GLX vtable initialization === */ +/* ========================================================================= */ + +// Initialize GLX driver context +VAStatus va_glx_init_context(VADriverContextP ctx) +{ + VADriverContextGLXP glx_ctx = VA_DRIVER_CONTEXT_GLX(ctx); + VADriverVTableGLXP vtable = &glx_ctx->vtable; + int glx_major, glx_minor; + + if (glx_ctx->is_initialized) + return VA_STATUS_SUCCESS; + + if (ctx->vtable_glx && ctx->vtable_glx->vaCopySurfaceGLX) { + vtable->vaCreateSurfaceGLX = vaCreateSurfaceGLX_impl_driver; + vtable->vaDestroySurfaceGLX = vaDestroySurfaceGLX_impl_driver; + vtable->vaCopySurfaceGLX = vaCopySurfaceGLX_impl_driver; + } + else { + vtable->vaCreateSurfaceGLX = vaCreateSurfaceGLX_impl_libva; + vtable->vaDestroySurfaceGLX = vaDestroySurfaceGLX_impl_libva; + vtable->vaCopySurfaceGLX = vaCopySurfaceGLX_impl_libva; + + if (!glXQueryVersion(ctx->native_dpy, &glx_major, &glx_minor)) + return VA_STATUS_ERROR_UNIMPLEMENTED; + + if (!check_tfp_extensions(ctx) || !load_tfp_extensions(ctx)) + return VA_STATUS_ERROR_UNIMPLEMENTED; + + if (!check_fbo_extensions(ctx) || !load_fbo_extensions(ctx)) + return VA_STATUS_ERROR_UNIMPLEMENTED; + } + + glx_ctx->is_initialized = 1; + return VA_STATUS_SUCCESS; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.h new file mode 100644 index 000000000..c47f54aeb --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_impl.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_GLX_IMPL_H +#define VA_GLX_IMPL_H + +/** + * Initialize GLX driver context + * + * @param[in] ctx the VA driver context + * @return VA_STATUS_SUCCESS if successful + */ +DLL_HIDDEN +VAStatus va_glx_init_context(VADriverContextP ctx); + +#endif /* VA_GLX_IMPL_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_private.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_private.h new file mode 100644 index 000000000..e86efb6a8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/glx/va_glx_private.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_GLX_PRIVATE_H +#define VA_GLX_PRIVATE_H + +#include "sysdeps.h" +#include "va.h" +#include "va_backend.h" +#include "va_x11.h" +#include "va_glx.h" +#include "va_backend_glx.h" +#include + +#if GLX_GLXEXT_VERSION < 18 +typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display *, GLXDrawable, int, const int *); +typedef void (*PFNGLXRELEASETEXIMAGEEXTPROC)(Display *, GLXDrawable, int); +#endif + +#if GLX_GLXEXT_VERSION < 27 +/* XXX: this is not exactly that version but this is the only means to + make sure we have the correct with those signatures */ +typedef GLXPixmap (*PFNGLXCREATEPIXMAPPROC)(Display *, GLXFBConfig, Pixmap, const int *); +typedef void (*PFNGLXDESTROYPIXMAPPROC)(Display *, GLXPixmap); +#endif + +typedef struct VAOpenGLVTable *VAOpenGLVTableP; + +struct VAOpenGLVTable { + PFNGLXCREATEPIXMAPPROC glx_create_pixmap; + PFNGLXDESTROYPIXMAPPROC glx_destroy_pixmap; + PFNGLXBINDTEXIMAGEEXTPROC glx_bind_tex_image; + PFNGLXRELEASETEXIMAGEEXTPROC glx_release_tex_image; + PFNGLGENFRAMEBUFFERSEXTPROC gl_gen_framebuffers; + PFNGLDELETEFRAMEBUFFERSEXTPROC gl_delete_framebuffers; + PFNGLBINDFRAMEBUFFEREXTPROC gl_bind_framebuffer; + PFNGLGENRENDERBUFFERSEXTPROC gl_gen_renderbuffers; + PFNGLDELETERENDERBUFFERSEXTPROC gl_delete_renderbuffers; + PFNGLBINDRENDERBUFFEREXTPROC gl_bind_renderbuffer; + PFNGLRENDERBUFFERSTORAGEEXTPROC gl_renderbuffer_storage; + PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC gl_framebuffer_renderbuffer; + PFNGLFRAMEBUFFERTEXTURE2DEXTPROC gl_framebuffer_texture_2d; + PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC gl_check_framebuffer_status; +}; + +typedef struct VADisplayContextGLX *VADisplayContextGLXP; +typedef struct VADriverContextGLX *VADriverContextGLXP; +typedef struct VASurfaceGLX *VASurfaceGLXP; +typedef struct VADriverVTableGLX *VADriverVTableGLXP; + +typedef void (*vaDestroyFunc)(VADisplayContextP); + +struct VADisplayContextGLX { + vaDestroyFunc vaDestroy; +}; + +#define VA_DRIVER_CONTEXT_GLX(ctx) ((VADriverContextGLXP)((ctx)->glx)) + +struct VADriverContextGLX { + struct VADriverVTableGLX vtable; + struct VAOpenGLVTable gl_vtable; + unsigned int is_initialized : 1; +}; + +#endif /* VA_GLX_PRIVATE_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/libva.syms b/contrib/sdk/sources/vaapi/libva-1.6.2/va/libva.syms new file mode 100644 index 000000000..b15d5460d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/libva.syms @@ -0,0 +1,11 @@ +VA_API_0.32.0 { + local: + vaCreateSurfaces_0_32_0; +}; + +VA_API_0.33.0 { + global: + vaCreateSurfaces; + local: + vaCreateSurfaces_0_33_0; +} VA_API_0.32.0; diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/sysdeps.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/sysdeps.h new file mode 100644 index 000000000..4de764d76 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/sysdeps.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef SYSDEPS_H +#define SYSDEPS_H + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef ANDROID +# define Bool int +# define True 1 +# define False 0 + +/* Macros generated from configure */ +# define LIBVA_VERSION_S "1.1.0" + +/* Android logging utilities */ +# include + +# ifdef ANDROID_ALOG +# define va_log_error(buffer) do { ALOGE("%s", buffer); } while (0) +# define va_log_info(buffer) do { ALOGI("%s", buffer); } while (0) +# elif ANDROID_LOG +# define va_log_error(buffer) do { LOGE("%s", buffer); } while (0) +# define va_log_info(buffer) do { LOGI("%s", buffer); } while (0) +# endif +#endif + +#ifndef va_log_error +#define va_log_error(buffer) do { \ + fprintf(stderr, "libva error: %s", buffer); \ + } while (0) +#endif + +#ifndef va_log_info +#define va_log_info(buffer) do { \ + fprintf(stderr, "libva info: %s", buffer); \ + } while (0) +#endif + +#if defined __GNUC__ && defined HAVE_GNUC_VISIBILITY_ATTRIBUTE +# define DLL_HIDDEN __attribute__((visibility("hidden"))) +# define DLL_EXPORT __attribute__((visibility("default"))) +#else +# define DLL_HIDDEN +# define DLL_EXPORT +#endif + +#endif /* SYSDEPS_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.c new file mode 100644 index 000000000..a33aa91ff --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.c @@ -0,0 +1,1703 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va.h" +#include "va_backend.h" +#include "va_backend_vpp.h" +#include "va_trace.h" +#include "va_fool.h" + +#include +#include +#include +#include +#include +#include +#include + +#define DRIVER_EXTENSION "-video.dll" +#define VA_DRIVERS_PATH "/kolibrios/lib" + +#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) +#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } + +#define ASSERT assert +#define CHECK_VTABLE(s, ctx, func) if (!va_checkVtable(ctx->vtable->va##func, #func)) s = VA_STATUS_ERROR_UNKNOWN; +#define CHECK_MAXIMUM(s, ctx, var) if (!va_checkMaximum(ctx->max_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; +#define CHECK_STRING(s, ctx, var) if (!va_checkString(ctx->str_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; + +/* + * read a config "env" for libva.conf or from environment setting + * liva.conf has higher priority + * return 0: the "env" is set, and the value is copied into env_value + * 1: the env is not set + */ +int va_parseConfig(char *env, char *env_value) +{ + char *token, *value, *saveptr; + char oneline[1024]; + FILE *fp=NULL; + + if (env == NULL) + return 1; + + fp = fopen("/etc/libva.conf", "r"); + while (fp && (fgets(oneline, 1024, fp) != NULL)) { + if (strlen(oneline) == 1) + continue; + token = strtok_r(oneline, "=\n", &saveptr); + value = strtok_r(NULL, "=\n", &saveptr); + + if (NULL == token || NULL == value) + continue; + + if (strcmp(token, env) == 0) { + if (env_value) + strncpy(env_value,value, 1024); + + fclose(fp); + + return 0; + } + } + if (fp) + fclose(fp); + + /* no setting in config file, use env setting */ + value = getenv(env); + if (value) { + if (env_value) + strncpy(env_value, value, 1024); + return 0; + } + + return 1; +} + +int vaDisplayIsValid(VADisplay dpy) +{ + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); +} + +void va_errorMessage(const char *msg, ...) +{ + char buf[512], *dynbuf; + va_list args; + int n, len; + + va_start(args, msg); + len = vsnprintf(buf, sizeof(buf), msg, args); + va_end(args); + + if (len >= (int)sizeof(buf)) { + dynbuf = malloc(len + 1); + if (!dynbuf) + return; + va_start(args, msg); + n = vsnprintf(dynbuf, len + 1, msg, args); + va_end(args); + if (n == len) + va_log_error(dynbuf); + free(dynbuf); + } + else if (len > 0) + va_log_error(buf); +} + +void va_infoMessage(const char *msg, ...) +{ + char buf[512], *dynbuf; + va_list args; + int n, len; + + va_start(args, msg); + len = vsnprintf(buf, sizeof(buf), msg, args); + va_end(args); + + if (len >= (int)sizeof(buf)) { + dynbuf = malloc(len + 1); + if (!dynbuf) + return; + va_start(args, msg); + n = vsnprintf(dynbuf, len + 1, msg, args); + va_end(args); + if (n == len) + va_log_info(dynbuf); + free(dynbuf); + } + else if (len > 0) + va_log_info(buf); +} + +static bool va_checkVtable(void *ptr, char *function) +{ + if (!ptr) { + va_errorMessage("No valid vtable entry for va%s\n", function); + return false; + } + return true; +} + +static bool va_checkMaximum(int value, char *variable) +{ + if (!value) { + va_errorMessage("Failed to define max_%s in init\n", variable); + return false; + } + return true; +} + +static bool va_checkString(const char* value, char *variable) +{ + if (!value) { + va_errorMessage("Failed to define str_%s in init\n", variable); + return false; + } + return true; +} + +static inline int +va_getDriverInitName(char *name, int namelen, int major, int minor) +{ + int ret = snprintf(name, namelen, "__vaDriverInit_%d_%d", major, minor); + return ret > 0 && ret < namelen; +} + +static VAStatus va_getDriverName(VADisplay dpy, char **driver_name) +{ + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + + return pDisplayContext->vaGetDriverName(pDisplayContext, driver_name); +} + +static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +{ + VADriverContextP ctx = CTX(dpy); + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + char *search_path = NULL; + char *saveptr; + char *driver_dir; + + if (!search_path) + search_path = VA_DRIVERS_PATH; + + search_path = strdup((const char *)search_path); + driver_dir = strtok_r(search_path, ":", &saveptr); + while (driver_dir) { + void *handle = NULL; + char *driver_path = (char *) malloc( strlen(driver_dir) + + strlen(driver_name) + + strlen(DRIVER_EXTENSION) + 2 ); + if (!driver_path) { + va_errorMessage("%s L%d Out of memory!n", + __FUNCTION__, __LINE__); + free(search_path); + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + strncpy( driver_path, driver_dir, strlen(driver_dir) + 1); + strncat( driver_path, "/", strlen("/") ); + strncat( driver_path, driver_name, strlen(driver_name) ); + strncat( driver_path, DRIVER_EXTENSION, strlen(DRIVER_EXTENSION) ); + + va_infoMessage("Trying to open %s\n", driver_path); + handle = load_library( driver_path); + if (!handle) { + /* Don't give errors for non-existing files */ + if (0 == access( driver_path, F_OK)) + va_errorMessage("load_library of %s failed\n", driver_path); + } else { + VADriverInit init_func = NULL; + char init_func_s[256]; + int i; + + static const struct { + int major; + int minor; + } compatible_versions[] = { + { VA_MAJOR_VERSION, VA_MINOR_VERSION }, + { 0, 37 }, + { 0, 36 }, + { 0, 35 }, + { 0, 34 }, + { 0, 33 }, + { 0, 32 }, + { -1, } + }; + + for (i = 0; compatible_versions[i].major >= 0; i++) { + if (va_getDriverInitName(init_func_s, sizeof(init_func_s), + compatible_versions[i].major, + compatible_versions[i].minor)) { + init_func = (VADriverInit)get_proc_address(handle, init_func_s); + if (init_func) { + va_infoMessage("Found init function %s\n", init_func_s); + break; + } + } + } + + if (compatible_versions[i].major < 0) { + va_errorMessage("%s has no function %s\n", + driver_path, init_func_s); +// dlclose(handle); + } else { + struct VADriverVTable *vtable = ctx->vtable; + struct VADriverVTableVPP *vtable_vpp = ctx->vtable_vpp; + + vaStatus = VA_STATUS_SUCCESS; + if (!vtable) { + vtable = calloc(1, sizeof(*vtable)); + if (!vtable) + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + } + ctx->vtable = vtable; + + if (!vtable_vpp) { + vtable_vpp = calloc(1, sizeof(*vtable_vpp)); + if (vtable_vpp) + vtable_vpp->version = VA_DRIVER_VTABLE_VPP_VERSION; + else + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + } + ctx->vtable_vpp = vtable_vpp; + + if (init_func && VA_STATUS_SUCCESS == vaStatus) + vaStatus = (*init_func)(ctx); + + if (VA_STATUS_SUCCESS == vaStatus) { + CHECK_MAXIMUM(vaStatus, ctx, profiles); + CHECK_MAXIMUM(vaStatus, ctx, entrypoints); + CHECK_MAXIMUM(vaStatus, ctx, attributes); + CHECK_MAXIMUM(vaStatus, ctx, image_formats); + CHECK_MAXIMUM(vaStatus, ctx, subpic_formats); + CHECK_MAXIMUM(vaStatus, ctx, display_attributes); + CHECK_STRING(vaStatus, ctx, vendor); + CHECK_VTABLE(vaStatus, ctx, Terminate); + CHECK_VTABLE(vaStatus, ctx, QueryConfigProfiles); + CHECK_VTABLE(vaStatus, ctx, QueryConfigEntrypoints); + CHECK_VTABLE(vaStatus, ctx, QueryConfigAttributes); + CHECK_VTABLE(vaStatus, ctx, CreateConfig); + CHECK_VTABLE(vaStatus, ctx, DestroyConfig); + CHECK_VTABLE(vaStatus, ctx, GetConfigAttributes); + CHECK_VTABLE(vaStatus, ctx, CreateSurfaces); + CHECK_VTABLE(vaStatus, ctx, DestroySurfaces); + CHECK_VTABLE(vaStatus, ctx, CreateContext); + CHECK_VTABLE(vaStatus, ctx, DestroyContext); + CHECK_VTABLE(vaStatus, ctx, CreateBuffer); + CHECK_VTABLE(vaStatus, ctx, BufferSetNumElements); + CHECK_VTABLE(vaStatus, ctx, MapBuffer); + CHECK_VTABLE(vaStatus, ctx, UnmapBuffer); + CHECK_VTABLE(vaStatus, ctx, DestroyBuffer); + CHECK_VTABLE(vaStatus, ctx, BeginPicture); + CHECK_VTABLE(vaStatus, ctx, RenderPicture); + CHECK_VTABLE(vaStatus, ctx, EndPicture); + CHECK_VTABLE(vaStatus, ctx, SyncSurface); + CHECK_VTABLE(vaStatus, ctx, QuerySurfaceStatus); + CHECK_VTABLE(vaStatus, ctx, PutSurface); + CHECK_VTABLE(vaStatus, ctx, QueryImageFormats); + CHECK_VTABLE(vaStatus, ctx, CreateImage); + CHECK_VTABLE(vaStatus, ctx, DeriveImage); + CHECK_VTABLE(vaStatus, ctx, DestroyImage); + CHECK_VTABLE(vaStatus, ctx, SetImagePalette); + CHECK_VTABLE(vaStatus, ctx, GetImage); + CHECK_VTABLE(vaStatus, ctx, PutImage); + CHECK_VTABLE(vaStatus, ctx, QuerySubpictureFormats); + CHECK_VTABLE(vaStatus, ctx, CreateSubpicture); + CHECK_VTABLE(vaStatus, ctx, DestroySubpicture); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureImage); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureChromakey); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureGlobalAlpha); + CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture); + CHECK_VTABLE(vaStatus, ctx, DeassociateSubpicture); + CHECK_VTABLE(vaStatus, ctx, QueryDisplayAttributes); + CHECK_VTABLE(vaStatus, ctx, GetDisplayAttributes); + CHECK_VTABLE(vaStatus, ctx, SetDisplayAttributes); + } + if (VA_STATUS_SUCCESS != vaStatus) { + va_errorMessage("%s init failed\n", driver_path); +// dlclose(handle); + } + if (VA_STATUS_SUCCESS == vaStatus) + ctx->handle = handle; + free(driver_path); + break; + } + } + free(driver_path); + + driver_dir = strtok_r(NULL, ":", &saveptr); + } + + free(search_path); + + return vaStatus; +} + +VAPrivFunc vaGetLibFunc(VADisplay dpy, const char *func) +{ + VADriverContextP ctx; + if (!vaDisplayIsValid(dpy)) + return NULL; + ctx = CTX(dpy); + + if (NULL == ctx->handle) + return NULL; + + return (VAPrivFunc) get_proc_address(ctx->handle, func); +} + + +/* + * Returns a short english description of error_status + */ +const char *vaErrorStr(VAStatus error_status) +{ + switch(error_status) { + case VA_STATUS_SUCCESS: + return "success (no error)"; + case VA_STATUS_ERROR_OPERATION_FAILED: + return "operation failed"; + case VA_STATUS_ERROR_ALLOCATION_FAILED: + return "resource allocation failed"; + case VA_STATUS_ERROR_INVALID_DISPLAY: + return "invalid VADisplay"; + case VA_STATUS_ERROR_INVALID_CONFIG: + return "invalid VAConfigID"; + case VA_STATUS_ERROR_INVALID_CONTEXT: + return "invalid VAContextID"; + case VA_STATUS_ERROR_INVALID_SURFACE: + return "invalid VASurfaceID"; + case VA_STATUS_ERROR_INVALID_BUFFER: + return "invalid VABufferID"; + case VA_STATUS_ERROR_INVALID_IMAGE: + return "invalid VAImageID"; + case VA_STATUS_ERROR_INVALID_SUBPICTURE: + return "invalid VASubpictureID"; + case VA_STATUS_ERROR_ATTR_NOT_SUPPORTED: + return "attribute not supported"; + case VA_STATUS_ERROR_MAX_NUM_EXCEEDED: + return "list argument exceeds maximum number"; + case VA_STATUS_ERROR_UNSUPPORTED_PROFILE: + return "the requested VAProfile is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT: + return "the requested VAEntryPoint is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT: + return "the requested RT Format is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: + return "the requested VABufferType is not supported"; + case VA_STATUS_ERROR_SURFACE_BUSY: + return "surface is in use"; + case VA_STATUS_ERROR_FLAG_NOT_SUPPORTED: + return "flag not supported"; + case VA_STATUS_ERROR_INVALID_PARAMETER: + return "invalid parameter"; + case VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED: + return "resolution not supported"; + case VA_STATUS_ERROR_UNIMPLEMENTED: + return "the requested function is not implemented"; + case VA_STATUS_ERROR_SURFACE_IN_DISPLAYING: + return "surface is in displaying (may by overlay)" ; + case VA_STATUS_ERROR_INVALID_IMAGE_FORMAT: + return "invalid VAImageFormat"; + case VA_STATUS_ERROR_INVALID_VALUE: + return "an invalid/unsupported value was supplied"; + case VA_STATUS_ERROR_UNSUPPORTED_FILTER: + return "the requested filter is not supported"; + case VA_STATUS_ERROR_INVALID_FILTER_CHAIN: + return "an invalid filter chain was supplied"; + case VA_STATUS_ERROR_UNKNOWN: + return "unknown libva error"; + } + return "unknown libva error / description missing"; +} + +VAStatus vaInitialize ( + VADisplay dpy, + int *major_version, /* out */ + int *minor_version /* out */ +) +{ + char *driver_name = NULL; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + + va_TraceInit(dpy); + + va_FoolInit(dpy); + + va_infoMessage("VA-API version %s\n", VA_VERSION_S); + + vaStatus = va_getDriverName(dpy, &driver_name); + va_infoMessage("va_getDriverName() returns %d\n", vaStatus); + + if ((VA_STATUS_SUCCESS == vaStatus) && (driver_name != NULL)) { + vaStatus = va_openDriver(dpy, driver_name); + va_infoMessage("va_openDriver() returns %d\n", vaStatus); + + *major_version = VA_MAJOR_VERSION; + *minor_version = VA_MINOR_VERSION; + } else + va_errorMessage("va_getDriverName() failed with %s,driver_name=%s\n", + vaErrorStr(vaStatus), driver_name); + + if (driver_name) + free(driver_name); + + VA_TRACE_LOG(va_TraceInitialize, dpy, major_version, minor_version); + + return vaStatus; +} + + +/* + * After this call, all library internal resources will be cleaned up + */ +VAStatus vaTerminate ( + VADisplay dpy +) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + VADriverContextP old_ctx; + + CHECK_DISPLAY(dpy); + old_ctx = CTX(dpy); + + if (old_ctx->handle) { + vaStatus = old_ctx->vtable->vaTerminate(old_ctx); +// dlclose(old_ctx->handle); + old_ctx->handle = NULL; + } + free(old_ctx->vtable); + old_ctx->vtable = NULL; + free(old_ctx->vtable_vpp); + old_ctx->vtable_vpp = NULL; + + VA_TRACE_LOG(va_TraceTerminate, dpy); + + va_TraceEnd(dpy); + + va_FoolEnd(dpy); + + if (VA_STATUS_SUCCESS == vaStatus) + pDisplayContext->vaDestroy(pDisplayContext); + + return vaStatus; +} + +/* + * vaQueryVendorString returns a pointer to a zero-terminated string + * describing some aspects of the VA implemenation on a specific + * hardware accelerator. The format of the returned string is: + * --- + * e.g. for the Intel GMA500 implementation, an example would be: + * "IntelGMA500-1.0-0.2-patch3 + */ +const char *vaQueryVendorString ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return NULL; + + return CTX(dpy)->str_vendor; +} + + +/* Get maximum number of profiles supported by the implementation */ +int vaMaxNumProfiles ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return 0; + + return CTX(dpy)->max_profiles; +} + +/* Get maximum number of entrypoints supported by the implementation */ +int vaMaxNumEntrypoints ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return 0; + + return CTX(dpy)->max_entrypoints; +} + + +/* Get maximum number of attributs supported by the implementation */ +int vaMaxNumConfigAttributes ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return 0; + + return CTX(dpy)->max_attributes; +} + +VAStatus vaQueryConfigEntrypoints ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint *entrypoints, /* out */ + int *num_entrypoints /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaQueryConfigEntrypoints ( ctx, profile, entrypoints, num_entrypoints); +} + +VAStatus vaGetConfigAttributes ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaGetConfigAttributes ( ctx, profile, entrypoint, attrib_list, num_attribs ); +} + +VAStatus vaQueryConfigProfiles ( + VADisplay dpy, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaQueryConfigProfiles ( ctx, profile_list, num_profiles ); +} + +VAStatus vaCreateConfig ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +) +{ + VADriverContextP ctx; + VAStatus vaStatus = VA_STATUS_SUCCESS; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + vaStatus = ctx->vtable->vaCreateConfig ( ctx, profile, entrypoint, attrib_list, num_attribs, config_id ); + + /* record the current entrypoint for further trace/fool determination */ + VA_TRACE_ALL(va_TraceCreateConfig, dpy, profile, entrypoint, attrib_list, num_attribs, config_id); + VA_FOOL_FUNC(va_FoolCreateConfig, dpy, profile, entrypoint, attrib_list, num_attribs, config_id); + + return vaStatus; +} + +VAStatus vaDestroyConfig ( + VADisplay dpy, + VAConfigID config_id +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDestroyConfig ( ctx, config_id ); +} + +VAStatus vaQueryConfigAttributes ( + VADisplay dpy, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list,/* out */ + int *num_attribs /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaQueryConfigAttributes( ctx, config_id, profile, entrypoint, attrib_list, num_attribs); +} + +/* XXX: this is a slow implementation that will be removed */ +static VAStatus +va_impl_query_surface_attributes( + VADriverContextP ctx, + VAConfigID config, + VASurfaceAttrib *out_attribs, + unsigned int *out_num_attribs_ptr +) +{ + VASurfaceAttrib *attribs = NULL; + unsigned int num_attribs, n; + VASurfaceAttrib *out_attrib; + unsigned int out_num_attribs; + VAImageFormat *image_formats = NULL; + int num_image_formats, i; + VAStatus va_status; + + /* List of surface attributes to query */ + struct va_surface_attrib_map { + VASurfaceAttribType type; + VAGenericValueType value_type; + }; + static const struct va_surface_attrib_map attribs_map[] = { + { VASurfaceAttribMinWidth, VAGenericValueTypeInteger }, + { VASurfaceAttribMaxWidth, VAGenericValueTypeInteger }, + { VASurfaceAttribMinHeight, VAGenericValueTypeInteger }, + { VASurfaceAttribMaxHeight, VAGenericValueTypeInteger }, + { VASurfaceAttribMemoryType, VAGenericValueTypeInteger }, + { VASurfaceAttribNone, } + }; + + if (!out_attribs || !out_num_attribs_ptr) + return VA_STATUS_ERROR_INVALID_PARAMETER; + if (!ctx->vtable->vaGetSurfaceAttributes) + return VA_STATUS_ERROR_UNIMPLEMENTED; + + num_image_formats = ctx->max_image_formats; + image_formats = malloc(num_image_formats * sizeof(*image_formats)); + if (!image_formats) { + va_status = VA_STATUS_ERROR_ALLOCATION_FAILED; + goto end; + } + + va_status = ctx->vtable->vaQueryImageFormats( + ctx, image_formats, &num_image_formats); + if (va_status != VA_STATUS_SUCCESS) + goto end; + + num_attribs = VASurfaceAttribCount + num_image_formats; + attribs = malloc(num_attribs * sizeof(*attribs)); + if (!attribs) { + va_status = VA_STATUS_ERROR_ALLOCATION_FAILED; + goto end; + } + + /* Initialize with base surface attributes, except pixel-formats */ + for (n = 0; attribs_map[n].type != VASurfaceAttribNone; n++) { + VASurfaceAttrib * const attrib = &attribs[n]; + attrib->type = attribs_map[n].type; + attrib->flags = VA_SURFACE_ATTRIB_GETTABLE; + attrib->value.type = attribs_map[n].value_type; + } + + /* Append image formats */ + for (i = 0; i < num_image_formats; i++) { + VASurfaceAttrib * const attrib = &attribs[n]; + attrib->type = VASurfaceAttribPixelFormat; + attrib->flags = VA_SURFACE_ATTRIB_GETTABLE|VA_SURFACE_ATTRIB_SETTABLE; + attrib->value.type = VAGenericValueTypeInteger; + attrib->value.value.i = image_formats[i].fourcc; + if (++n == num_attribs) { + va_status = VA_STATUS_ERROR_ALLOCATION_FAILED; + goto end; + } + } + num_attribs = n; + + va_status = ctx->vtable->vaGetSurfaceAttributes( + ctx, config, attribs, num_attribs); + if (va_status != VA_STATUS_SUCCESS) + goto end; + + /* Remove invalid entries */ + out_num_attribs = 0; + for (n = 0; n < num_attribs; n++) { + VASurfaceAttrib * const attrib = &attribs[n]; + + if (attrib->flags == VA_SURFACE_ATTRIB_NOT_SUPPORTED) + continue; + + // Accept all surface attributes that are not pixel-formats + if (attrib->type != VASurfaceAttribPixelFormat) { + out_num_attribs++; + continue; + } + + // Drop invalid pixel-format attribute + if (!attrib->value.value.i) { + attrib->flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + continue; + } + + // Check for duplicates + int is_duplicate = 0; + for (i = n - 1; i >= 0 && !is_duplicate; i--) { + const VASurfaceAttrib * const prev_attrib = &attribs[i]; + if (prev_attrib->type != VASurfaceAttribPixelFormat) + break; + is_duplicate = prev_attrib->value.value.i == attrib->value.value.i; + } + if (is_duplicate) + attrib->flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED; + else + out_num_attribs++; + } + + if (*out_num_attribs_ptr < out_num_attribs) { + *out_num_attribs_ptr = out_num_attribs; + va_status = VA_STATUS_ERROR_MAX_NUM_EXCEEDED; + goto end; + } + + out_attrib = out_attribs; + for (n = 0; n < num_attribs; n++) { + const VASurfaceAttrib * const attrib = &attribs[n]; + if (attrib->flags == VA_SURFACE_ATTRIB_NOT_SUPPORTED) + continue; + *out_attrib++ = *attrib; + } + +end: + free(attribs); + free(image_formats); + return va_status; +} + +VAStatus +vaQuerySurfaceAttributes( + VADisplay dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +) +{ + VADriverContextP ctx; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + if (!ctx) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + if (!ctx->vtable->vaQuerySurfaceAttributes) + vaStatus = va_impl_query_surface_attributes(ctx, config, + attrib_list, num_attribs); + else + vaStatus = ctx->vtable->vaQuerySurfaceAttributes(ctx, config, + attrib_list, num_attribs); + + VA_TRACE_LOG(va_TraceQuerySurfaceAttributes, dpy, config, attrib_list, num_attribs); + + return vaStatus; +} + +VAStatus +vaCreateSurfaces( + VADisplay dpy, + unsigned int format, + unsigned int width, + unsigned int height, + VASurfaceID *surfaces, + unsigned int num_surfaces, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs +) +{ + VADriverContextP ctx; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + if (!ctx) + return VA_STATUS_ERROR_INVALID_DISPLAY; + + if (ctx->vtable->vaCreateSurfaces2) + vaStatus = ctx->vtable->vaCreateSurfaces2(ctx, format, width, height, + surfaces, num_surfaces, + attrib_list, num_attribs); + else if (attrib_list && num_attribs > 0) + vaStatus = VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; + else + vaStatus = ctx->vtable->vaCreateSurfaces(ctx, width, height, format, + num_surfaces, surfaces); + VA_TRACE_LOG(va_TraceCreateSurfaces, + dpy, width, height, format, num_surfaces, surfaces, + attrib_list, num_attribs); + + return vaStatus; +} + + +VAStatus vaDestroySurfaces ( + VADisplay dpy, + VASurfaceID *surface_list, + int num_surfaces +) +{ + VADriverContextP ctx; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_TRACE_LOG(va_TraceDestroySurfaces, + dpy, surface_list, num_surfaces); + + vaStatus = ctx->vtable->vaDestroySurfaces( ctx, surface_list, num_surfaces ); + + return vaStatus; +} + +VAStatus vaCreateContext ( + VADisplay dpy, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ +) +{ + VADriverContextP ctx; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + vaStatus = ctx->vtable->vaCreateContext( ctx, config_id, picture_width, picture_height, + flag, render_targets, num_render_targets, context ); + + /* keep current encode/decode resoluton */ + VA_TRACE_ALL(va_TraceCreateContext, dpy, config_id, picture_width, picture_height, flag, render_targets, num_render_targets, context); + + return vaStatus; +} + +VAStatus vaDestroyContext ( + VADisplay dpy, + VAContextID context +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDestroyContext( ctx, context ); +} + +VAStatus vaCreateBuffer ( + VADisplay dpy, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +) +{ + VADriverContextP ctx; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolCreateBuffer, dpy, context, type, size, num_elements, data, buf_id); + + vaStatus = ctx->vtable->vaCreateBuffer( ctx, context, type, size, num_elements, data, buf_id); + + VA_TRACE_LOG(va_TraceCreateBuffer, + dpy, context, type, size, num_elements, data, buf_id); + + return vaStatus; +} + +VAStatus vaBufferSetNumElements ( + VADisplay dpy, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + return ctx->vtable->vaBufferSetNumElements( ctx, buf_id, num_elements ); +} + + +VAStatus vaMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +) +{ + VADriverContextP ctx; + VAStatus va_status; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolMapBuffer, dpy, buf_id, pbuf); + + va_status = ctx->vtable->vaMapBuffer( ctx, buf_id, pbuf ); + + VA_TRACE_ALL(va_TraceMapBuffer, dpy, buf_id, pbuf); + + return va_status; +} + +VAStatus vaUnmapBuffer ( + VADisplay dpy, + VABufferID buf_id /* in */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + return ctx->vtable->vaUnmapBuffer( ctx, buf_id ); +} + +VAStatus vaDestroyBuffer ( + VADisplay dpy, + VABufferID buffer_id +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + VA_TRACE_LOG(va_TraceDestroyBuffer, + dpy, buffer_id); + + return ctx->vtable->vaDestroyBuffer( ctx, buffer_id ); +} + +VAStatus vaBufferInfo ( + VADisplay dpy, + VAContextID context, /* in */ + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ +) +{ + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolBufferInfo, dpy, buf_id, type, size, num_elements); + + return ctx->vtable->vaBufferInfo( ctx, buf_id, type, size, num_elements ); +} + +/* Locks buffer for external API usage */ +VAStatus +vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info) +{ + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + if (!ctx->vtable->vaAcquireBufferHandle) + return VA_STATUS_ERROR_UNIMPLEMENTED; + return ctx->vtable->vaAcquireBufferHandle(ctx, buf_id, buf_info); +} + +/* Unlocks buffer after usage from external API */ +VAStatus +vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id) +{ + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + if (!ctx->vtable->vaReleaseBufferHandle) + return VA_STATUS_ERROR_UNIMPLEMENTED; + return ctx->vtable->vaReleaseBufferHandle(ctx, buf_id); +} + +VAStatus vaBeginPicture ( + VADisplay dpy, + VAContextID context, + VASurfaceID render_target +) +{ + VADriverContextP ctx; + VAStatus va_status; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_TRACE_ALL(va_TraceBeginPicture, dpy, context, render_target); + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + va_status = ctx->vtable->vaBeginPicture( ctx, context, render_target ); + + return va_status; +} + +VAStatus vaRenderPicture ( + VADisplay dpy, + VAContextID context, + VABufferID *buffers, + int num_buffers +) +{ + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_TRACE_LOG(va_TraceRenderPicture, dpy, context, buffers, num_buffers); + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + return ctx->vtable->vaRenderPicture( ctx, context, buffers, num_buffers ); +} + +VAStatus vaEndPicture ( + VADisplay dpy, + VAContextID context +) +{ + VAStatus va_status = VA_STATUS_SUCCESS; + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); + + va_status = ctx->vtable->vaEndPicture( ctx, context ); + + /* dump surface content */ + VA_TRACE_ALL(va_TraceEndPicture, dpy, context, 1); + + return va_status; +} + +VAStatus vaSyncSurface ( + VADisplay dpy, + VASurfaceID render_target +) +{ + VAStatus va_status; + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + va_status = ctx->vtable->vaSyncSurface( ctx, render_target ); + VA_TRACE_LOG(va_TraceSyncSurface, dpy, render_target); + + return va_status; +} + +VAStatus vaQuerySurfaceStatus ( + VADisplay dpy, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ +) +{ + VAStatus va_status; + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + va_status = ctx->vtable->vaQuerySurfaceStatus( ctx, render_target, status ); + + VA_TRACE_LOG(va_TraceQuerySurfaceStatus, dpy, render_target, status); + + return va_status; +} + +VAStatus vaQuerySurfaceError ( + VADisplay dpy, + VASurfaceID surface, + VAStatus error_status, + void **error_info /*out*/ +) +{ + VAStatus va_status; + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + va_status = ctx->vtable->vaQuerySurfaceError( ctx, surface, error_status, error_info ); + + VA_TRACE_LOG(va_TraceQuerySurfaceError, dpy, surface, error_status, error_info); + + return va_status; +} + +/* Get maximum number of image formats supported by the implementation */ +int vaMaxNumImageFormats ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return 0; + + return CTX(dpy)->max_image_formats; +} + +VAStatus vaQueryImageFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaQueryImageFormats ( ctx, format_list, num_formats); +} + +/* + * The width and height fields returned in the VAImage structure may get + * enlarged for some YUV formats. The size of the data buffer that needs + * to be allocated will be given in the "data_size" field in VAImage. + * Image data is not allocated by this function. The client should + * allocate the memory and fill in the VAImage structure's data field + * after looking at "data_size" returned from the library. + */ +VAStatus vaCreateImage ( + VADisplay dpy, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaCreateImage ( ctx, format, width, height, image); +} + +/* + * Should call DestroyImage before destroying the surface it is bound to + */ +VAStatus vaDestroyImage ( + VADisplay dpy, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDestroyImage ( ctx, image); +} + +VAStatus vaSetImagePalette ( + VADisplay dpy, + VAImageID image, + unsigned char *palette +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaSetImagePalette ( ctx, image, palette); +} + +/* + * Retrieve surface data into a VAImage + * Image must be in a format supported by the implementation + */ +VAStatus vaGetImage ( + VADisplay dpy, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaGetImage ( ctx, surface, x, y, width, height, image); +} + +/* + * Copy data from a VAImage to a surface + * Image must be in a format supported by the implementation + */ +VAStatus vaPutImage ( + VADisplay dpy, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaPutImage ( ctx, surface, image, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height ); +} + +/* + * Derive an VAImage from an existing surface. + * This interface will derive a VAImage and corresponding image buffer from + * an existing VA Surface. The image buffer can then be mapped/unmapped for + * direct CPU access. This operation is only possible on implementations with + * direct rendering capabilities and internal surface formats that can be + * represented with a VAImage. When the operation is not possible this interface + * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back + * to using vaCreateImage + vaPutImage to accomplish the same task in an + * indirect manner. + * + * Implementations should only return success when the resulting image buffer + * would be useable with vaMap/Unmap. + * + * When directly accessing a surface special care must be taken to insure + * proper synchronization with the graphics hardware. Clients should call + * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent + * rendering or currently being displayed by an overlay. + * + * Additionally nothing about the contents of a surface should be assumed + * following a vaPutSurface. Implementations are free to modify the surface for + * scaling or subpicture blending within a call to vaPutImage. + * + * Calls to vaPutImage or vaGetImage using the same surface from which the image + * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or + * vaGetImage with other surfaces is supported. + * + * An image created with vaDeriveImage should be freed with vaDestroyImage. The + * image and image buffer structures will be destroyed; however, the underlying + * surface will remain unchanged until freed with vaDestroySurfaces. + */ +VAStatus vaDeriveImage ( + VADisplay dpy, + VASurfaceID surface, + VAImage *image /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDeriveImage ( ctx, surface, image ); +} + + +/* Get maximum number of subpicture formats supported by the implementation */ +int vaMaxNumSubpictureFormats ( + VADisplay dpy +) +{ + if (!vaDisplayIsValid(dpy)) + return 0; + + return CTX(dpy)->max_subpic_formats; +} + +/* + * Query supported subpicture formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag + * for each format to indicate additional capabilities for that format. The actual + * number of formats returned in "format_list" is returned in "num_formats". + */ +VAStatus vaQuerySubpictureFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ +) +{ + VADriverContextP ctx; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaQuerySubpictureFormats ( ctx, format_list, flags, num_formats); +} + +/* + * Subpictures are created with an image associated. + */ +VAStatus vaCreateSubpicture ( + VADisplay dpy, + VAImageID image, + VASubpictureID *subpicture /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaCreateSubpicture ( ctx, image, subpicture ); +} + +/* + * Destroy the subpicture before destroying the image it is assocated to + */ +VAStatus vaDestroySubpicture ( + VADisplay dpy, + VASubpictureID subpicture +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDestroySubpicture ( ctx, subpicture); +} + +VAStatus vaSetSubpictureImage ( + VADisplay dpy, + VASubpictureID subpicture, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaSetSubpictureImage ( ctx, subpicture, image); +} + + +/* + * If chromakey is enabled, then the area where the source value falls within + * the chromakey [min, max] range is transparent + */ +VAStatus vaSetSubpictureChromakey ( + VADisplay dpy, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaSetSubpictureChromakey ( ctx, subpicture, chromakey_min, chromakey_max, chromakey_mask ); +} + + +/* + * Global alpha value is between 0 and 1. A value of 1 means fully opaque and + * a value of 0 means fully transparent. If per-pixel alpha is also specified then + * the overall alpha is per-pixel alpha multiplied by the global alpha + */ +VAStatus vaSetSubpictureGlobalAlpha ( + VADisplay dpy, + VASubpictureID subpicture, + float global_alpha +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaSetSubpictureGlobalAlpha ( ctx, subpicture, global_alpha ); +} + +/* + vaAssociateSubpicture associates the subpicture with the target_surface. + It defines the region mapping between the subpicture and the target + surface through source and destination rectangles (with the same width and height). + Both will be displayed at the next call to vaPutSurface. Additional + associations before the call to vaPutSurface simply overrides the association. +*/ +VAStatus vaAssociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaAssociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height, flags ); +} + +/* + * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. + */ +VAStatus vaDeassociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaDeassociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces ); +} + + +/* Get maximum number of display attributes supported by the implementation */ +int vaMaxNumDisplayAttributes ( + VADisplay dpy +) +{ + int tmp; + + if (!vaDisplayIsValid(dpy)) + return 0; + + tmp = CTX(dpy)->max_display_attributes; + + VA_TRACE_LOG(va_TraceMaxNumDisplayAttributes, dpy, tmp); + + return tmp; +} + +/* + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus vaQueryDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ +) +{ + VADriverContextP ctx; + VAStatus va_status; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + va_status = ctx->vtable->vaQueryDisplayAttributes ( ctx, attr_list, num_attributes ); + + VA_TRACE_LOG(va_TraceQueryDisplayAttributes, dpy, attr_list, num_attributes); + + return va_status; + +} + +/* + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus vaGetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes +) +{ + VADriverContextP ctx; + VAStatus va_status; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + va_status = ctx->vtable->vaGetDisplayAttributes ( ctx, attr_list, num_attributes ); + + VA_TRACE_LOG(va_TraceGetDisplayAttributes, dpy, attr_list, num_attributes); + + return va_status; +} + +/* + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus vaSetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, + int num_attributes +) +{ + VADriverContextP ctx; + VAStatus va_status; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + va_status = ctx->vtable->vaSetDisplayAttributes ( ctx, attr_list, num_attributes ); + VA_TRACE_LOG(va_TraceSetDisplayAttributes, dpy, attr_list, num_attributes); + + return va_status; +} + +VAStatus vaLockSurface(VADisplay dpy, + VASurfaceID surface, + unsigned int *fourcc, /* following are output argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + unsigned int *buffer_name, + void **buffer +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaLockSurface( ctx, surface, fourcc, luma_stride, chroma_u_stride, chroma_v_stride, luma_offset, chroma_u_offset, chroma_v_offset, buffer_name, buffer); +} + + +VAStatus vaUnlockSurface(VADisplay dpy, + VASurfaceID surface +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + return ctx->vtable->vaUnlockSurface( ctx, surface ); +} + +/* Video Processing */ +#define VA_VPP_INIT_CONTEXT(ctx, dpy) do { \ + CHECK_DISPLAY(dpy); \ + ctx = CTX(dpy); \ + if (!ctx) \ + return VA_STATUS_ERROR_INVALID_DISPLAY; \ + } while (0) + +#define VA_VPP_INVOKE(dpy, func, args) do { \ + if (!ctx->vtable_vpp->va##func) \ + return VA_STATUS_ERROR_UNIMPLEMENTED; \ + status = ctx->vtable_vpp->va##func args; \ + } while (0) + +VAStatus +vaQueryVideoProcFilters( + VADisplay dpy, + VAContextID context, + VAProcFilterType *filters, + unsigned int *num_filters +) +{ + VADriverContextP ctx; + VAStatus status; + + VA_VPP_INIT_CONTEXT(ctx, dpy); + VA_VPP_INVOKE( + ctx, + QueryVideoProcFilters, + (ctx, context, filters, num_filters) + ); + return status; +} + +VAStatus +vaQueryVideoProcFilterCaps( + VADisplay dpy, + VAContextID context, + VAProcFilterType type, + void *filter_caps, + unsigned int *num_filter_caps +) +{ + VADriverContextP ctx; + VAStatus status; + + VA_VPP_INIT_CONTEXT(ctx, dpy); + VA_VPP_INVOKE( + ctx, + QueryVideoProcFilterCaps, + (ctx, context, type, filter_caps, num_filter_caps) + ); + return status; +} + +VAStatus +vaQueryVideoProcPipelineCaps( + VADisplay dpy, + VAContextID context, + VABufferID *filters, + unsigned int num_filters, + VAProcPipelineCaps *pipeline_caps +) +{ + VADriverContextP ctx; + VAStatus status; + + VA_VPP_INIT_CONTEXT(ctx, dpy); + VA_VPP_INVOKE( + ctx, + QueryVideoProcPipelineCaps, + (ctx, context, filters, num_filters, pipeline_caps) + ); + return status; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.h new file mode 100644 index 000000000..fb3066f3e --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va.h @@ -0,0 +1,2869 @@ +/* + * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * Video Acceleration (VA) API Specification + * + * Rev. 0.30 + * + * + * Revision History: + * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft + * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors + * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode + * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() + * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. + * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management + * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration + * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. + * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode + * and MPEG-2 motion compensation. + * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. + * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. + * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. + * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. + * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. + * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. + * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. + * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics + * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage + * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture + * to enable scaling + * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, + * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED + * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes + * for ISO C conformance. + * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend + * Application needs to relink with the new library. + * + * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode + * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen + * screen relative rather than source video relative. + * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 + * update VAAPI to 0.32.0 + * + * Acknowledgements: + * Some concepts borrowed from XvMC and XvImage. + * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) + * contributed to various aspects of the API. + */ + +/** + * \file va.h + * \brief The Core API + * + * This file contains the \ref api_core "Core API". + */ + +#ifndef _VA_H_ +#define _VA_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \mainpage Video Acceleration (VA) API + * + * \section intro Introduction + * + * The main motivation for VA-API (Video Acceleration API) is to + * enable hardware accelerated video decode and encode at various + * entry-points (VLD, IDCT, Motion Compensation etc.) for the + * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 + * AVC/H.264, VC-1/VMW3, and JPEG). + * + * VA-API is split into several modules: + * - \ref api_core + * - \ref api_enc_h264 + * - \ref api_vpp + */ + +/** + * \defgroup api_core Core API + * + * @{ + */ + +/** +Overview + +The VA API is intended to provide an interface between a video decode/encode/display +application (client) and a hardware accelerator (server), to off-load +video decode/encode/display operations from the host to the hardware accelerator at various +entry-points. + +The basic operation steps are: + +- Negotiate a mutually acceptable configuration with the server to lock + down profile, entrypoints, and other attributes that will not change on + a frame-by-frame basis. +- Create a decode context which represents a "virtualized" hardware decode + device +- Get and fill decode buffers with picture level, slice level and macroblock + level data (depending on entrypoints) +- Pass the decode buffers to the server to decode the current frame + +Initialization & Configuration Management + +- Find out supported profiles +- Find out entrypoints for a given profile +- Find out configuration attributes for a given profile/entrypoint pair +- Create a configuration for use by the decoder + +*/ + +typedef void* VADisplay; /* window system dependent */ + +typedef int VAStatus; /** Return status type from functions */ +/** Values for the return status */ +#define VA_STATUS_SUCCESS 0x00000000 +#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 +#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 +#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 +#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 +#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 +#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 +#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 +#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 +#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 +#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a +#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b +#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c +#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d +#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e +#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f +#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 +#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 +#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 +#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 +#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 +#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 +#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 +#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 +#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 +/** + * \brief An invalid/unsupported value was supplied. + * + * This is a catch-all error code for invalid or unsupported values. + * e.g. value exceeding the valid range, invalid type in the context + * of generic attribute values. + */ +#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 +/** \brief An unsupported filter was supplied. */ +#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 +/** \brief An invalid filter chain was supplied. */ +#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 +/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ +#define VA_STATUS_ERROR_HW_BUSY 0x00000022 +/** \brief An unsupported memory type was supplied. */ +#define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024 +#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF + +/** De-interlacing flags for vaPutSurface() */ +#define VA_FRAME_PICTURE 0x00000000 +#define VA_TOP_FIELD 0x00000001 +#define VA_BOTTOM_FIELD 0x00000002 + +/** + * Enabled the positioning/cropping/blending feature: + * 1, specify the video playback position in the isurface + * 2, specify the cropping info for video playback + * 3, encoded video will blend with background color + */ +#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ + +/** + * Clears the drawable with background color. + * for hardware overlay based implementation this flag + * can be used to turn off the overlay + */ +#define VA_CLEAR_DRAWABLE 0x00000008 + +/** Color space conversion flags for vaPutSurface() */ +#define VA_SRC_COLOR_MASK 0x000000f0 +#define VA_SRC_BT601 0x00000010 +#define VA_SRC_BT709 0x00000020 +#define VA_SRC_SMPTE_240 0x00000040 + +/** Scaling flags for vaPutSurface() */ +#define VA_FILTER_SCALING_DEFAULT 0x00000000 +#define VA_FILTER_SCALING_FAST 0x00000100 +#define VA_FILTER_SCALING_HQ 0x00000200 +#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 +#define VA_FILTER_SCALING_MASK 0x00000f00 + +/** + * Returns a short english description of error_status + */ +const char *vaErrorStr(VAStatus error_status); + +/** + * Initialization: + * A display must be obtained by calling vaGetDisplay() before calling + * vaInitialize() and other functions. This connects the API to the + * native window system. + * For X Windows, native_dpy would be from XOpenDisplay() + */ +typedef void* VANativeDisplay; /* window system dependent */ + +int vaDisplayIsValid(VADisplay dpy); + +/** + * Set the override driver name instead of queried driver driver. + */ +VAStatus vaSetDriverName(VADisplay dpy, + char *driver_name +); + +/** + * Initialize the library + */ +VAStatus vaInitialize ( + VADisplay dpy, + int *major_version, /* out */ + int *minor_version /* out */ +); + +/** + * After this call, all library internal resources will be cleaned up + */ +VAStatus vaTerminate ( + VADisplay dpy +); + +/** + * vaQueryVendorString returns a pointer to a zero-terminated string + * describing some aspects of the VA implemenation on a specific + * hardware accelerator. The format of the returned string is vendor + * specific and at the discretion of the implementer. + * e.g. for the Intel GMA500 implementation, an example would be: + * "Intel GMA500 - 2.0.0.32L.0005" + */ +const char *vaQueryVendorString ( + VADisplay dpy +); + +typedef int (*VAPrivFunc)(); + +/** + * Return a function pointer given a function name in the library. + * This allows private interfaces into the library + */ +VAPrivFunc vaGetLibFunc ( + VADisplay dpy, + const char *func +); + +/** Currently defined profiles */ +typedef enum +{ + /** \brief Profile ID used for video processing. */ + VAProfileNone = -1, + VAProfileMPEG2Simple = 0, + VAProfileMPEG2Main = 1, + VAProfileMPEG4Simple = 2, + VAProfileMPEG4AdvancedSimple = 3, + VAProfileMPEG4Main = 4, + VAProfileH264Baseline = 5, + VAProfileH264Main = 6, + VAProfileH264High = 7, + VAProfileVC1Simple = 8, + VAProfileVC1Main = 9, + VAProfileVC1Advanced = 10, + VAProfileH263Baseline = 11, + VAProfileJPEGBaseline = 12, + VAProfileH264ConstrainedBaseline = 13, + VAProfileVP8Version0_3 = 14, + VAProfileH264MultiviewHigh = 15, + VAProfileH264StereoHigh = 16, + VAProfileHEVCMain = 17, + VAProfileHEVCMain10 = 18, + VAProfileVP9Profile0 = 19 +} VAProfile; + +/** + * Currently defined entrypoints + */ +typedef enum +{ + VAEntrypointVLD = 1, + VAEntrypointIZZ = 2, + VAEntrypointIDCT = 3, + VAEntrypointMoComp = 4, + VAEntrypointDeblocking = 5, + VAEntrypointEncSlice = 6, /* slice level encode */ + VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ + VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ +} VAEntrypoint; + +/** Currently defined configuration attribute types */ +typedef enum +{ + VAConfigAttribRTFormat = 0, + VAConfigAttribSpatialResidual = 1, + VAConfigAttribSpatialClipping = 2, + VAConfigAttribIntraResidual = 3, + VAConfigAttribEncryption = 4, + VAConfigAttribRateControl = 5, + + /** @name Attributes for decoding */ + /**@{*/ + /** + * \brief Slice Decoding mode. Read/write. + * + * This attribute determines what mode the driver supports for slice + * decoding, through vaGetConfigAttributes(); and what mode the user + * will be providing to the driver, through vaCreateConfig(), if the + * driver supports those. If this attribute is not set by the user then + * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. + * + * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. + */ + VAConfigAttribDecSliceMode = 6, + + /** @name Attributes for encoding */ + /**@{*/ + /** + * \brief Packed headers mode. Read/write. + * + * This attribute determines what packed headers the driver supports, + * through vaGetConfigAttributes(); and what packed headers the user + * will be providing to the driver, through vaCreateConfig(), if the + * driver supports those. + * + * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. + */ + VAConfigAttribEncPackedHeaders = 10, + /** + * \brief Interlaced mode. Read/write. + * + * This attribute determines what kind of interlaced encoding mode + * the driver supports. + * + * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. + */ + VAConfigAttribEncInterlaced = 11, + /** + * \brief Maximum number of reference frames. Read-only. + * + * This attribute determines the maximum number of reference + * frames supported for encoding. + * + * Note: for H.264 encoding, the value represents the maximum number + * of reference frames for both the reference picture list 0 (bottom + * 16 bits) and the reference picture list 1 (top 16 bits). + */ + VAConfigAttribEncMaxRefFrames = 13, + /** + * \brief Maximum number of slices per frame. Read-only. + * + * This attribute determines the maximum number of slices the + * driver can support to encode a single frame. + */ + VAConfigAttribEncMaxSlices = 14, + /** + * \brief Slice structure. Read-only. + * + * This attribute determines slice structures supported by the + * driver for encoding. This attribute is a hint to the user so + * that he can choose a suitable surface size and how to arrange + * the encoding process of multiple slices per frame. + * + * More specifically, for H.264 encoding, this attribute + * determines the range of accepted values to + * VAEncSliceParameterBufferH264::macroblock_address and + * VAEncSliceParameterBufferH264::num_macroblocks. + * + * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice + * structure types. + */ + VAConfigAttribEncSliceStructure = 15, + /** + * \brief Macroblock information. Read-only. + * + * This attribute determines whether the driver supports extra + * encoding information per-macroblock. e.g. QP. + * + * More specifically, for H.264 encoding, if the driver returns a non-zero + * value for this attribute, this means the application can create + * additional #VAEncMacroblockParameterBufferH264 buffers referenced + * through VAEncSliceParameterBufferH264::macroblock_info. + */ + VAConfigAttribEncMacroblockInfo = 16, + /** + * \brief JPEG encoding attribute. Read-only. + * + * This attribute exposes a number of capabilities of the underlying + * JPEG implementation. The attribute value is partitioned into fields as defined in the + * VAConfigAttribValEncJPEG union. + */ + VAConfigAttribEncJPEG = 20, + /** + * \brief Encoding quality range attribute. Read-only. + * + * This attribute conveys whether the driver supports different quality level settings + * for encoding. A value less than or equal to 1 means that the encoder only has a single + * quality setting, and a value greater than 1 represents the number of quality levels + * that can be configured. e.g. a value of 2 means there are two distinct quality levels. + */ + VAConfigAttribEncQualityRange = 21, + /** + * \brief Encoding skip frame attribute. Read-only. + * + * This attribute conveys whether the driver supports sending skip frame parameters + * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has + * externally skipped frames. + */ + VAConfigAttribEncSkipFrame = 24, + /**@}*/ + VAConfigAttribTypeMax +} VAConfigAttribType; + +/** + * Configuration attributes + * If there is more than one value for an attribute, a default + * value will be assigned to the attribute if the client does not + * specify the attribute when creating a configuration + */ +typedef struct _VAConfigAttrib { + VAConfigAttribType type; + unsigned int value; /* OR'd flags (bits) for this attribute */ +} VAConfigAttrib; + +/** attribute value for VAConfigAttribRTFormat */ +#define VA_RT_FORMAT_YUV420 0x00000001 +#define VA_RT_FORMAT_YUV422 0x00000002 +#define VA_RT_FORMAT_YUV444 0x00000004 +#define VA_RT_FORMAT_YUV411 0x00000008 +#define VA_RT_FORMAT_YUV400 0x00000010 +/** YUV formats with more than 8 bpp */ +#define VA_RT_FORMAT_YUV420_10BPP 0x00000100 +/** RGB formats */ +#define VA_RT_FORMAT_RGB16 0x00010000 +#define VA_RT_FORMAT_RGB32 0x00020000 +/* RGBP covers RGBP and BGRP fourcc */ +#define VA_RT_FORMAT_RGBP 0x00100000 +#define VA_RT_FORMAT_PROTECTED 0x80000000 + +/** @name Attribute values for VAConfigAttribRateControl */ +/**@{*/ +/** \brief Driver does not support any form of rate control. */ +#define VA_RC_NONE 0x00000001 +/** \brief Constant bitrate. */ +#define VA_RC_CBR 0x00000002 +/** \brief Variable bitrate. */ +#define VA_RC_VBR 0x00000004 +/** \brief Video conference mode. */ +#define VA_RC_VCM 0x00000008 +/** \brief Constant QP. */ +#define VA_RC_CQP 0x00000010 +/** \brief Variable bitrate with peak rate higher than average bitrate. */ +#define VA_RC_VBR_CONSTRAINED 0x00000020 +/**@}*/ + +/** @name Attribute values for VAConfigAttribDecSliceMode */ +/**@{*/ +/** \brief Driver supports normal mode for slice decoding */ +#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 +/** \brief Driver supports base mode for slice decoding */ +#define VA_DEC_SLICE_MODE_BASE 0x00000002 +/**@}*/ + +/** @name Attribute values for VAConfigAttribEncPackedHeaders */ +/**@{*/ +/** \brief Driver does not support any packed headers mode. */ +#define VA_ENC_PACKED_HEADER_NONE 0x00000000 +/** \brief Driver supports packed sequence headers. e.g. SPS for H.264. */ +#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 +/** \brief Driver supports packed picture headers. e.g. PPS for H.264. */ +#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 +/** \brief Driver supports packed slice headers. e.g. \c slice_header() for H.264. */ +#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 +/** \brief Driver supports misc packed headers. e.g. SEI for H.264. */ +#define VA_ENC_PACKED_HEADER_MISC 0x00000008 +/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */ +#define VA_ENC_PACKED_HEADER_RAW_DATA 0x00000010 +/**@}*/ + +/** @name Attribute values for VAConfigAttribEncInterlaced */ +/**@{*/ +/** \brief Driver does not support interlaced coding. */ +#define VA_ENC_INTERLACED_NONE 0x00000000 +/** \brief Driver supports interlaced frame coding. */ +#define VA_ENC_INTERLACED_FRAME 0x00000001 +/** \brief Driver supports interlaced field coding. */ +#define VA_ENC_INTERLACED_FIELD 0x00000002 +/** \brief Driver supports macroblock adaptive frame field coding. */ +#define VA_ENC_INTERLACED_MBAFF 0x00000004 +/** \brief Driver supports picture adaptive frame field coding. */ +#define VA_ENC_INTERLACED_PAFF 0x00000008 +/**@}*/ + +/** @name Attribute values for VAConfigAttribEncSliceStructure */ +/**@{*/ +/** \brief Driver supports an arbitrary number of rows per slice. */ +#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000000 +/** \brief Driver supports a power-of-two number of rows per slice. */ +#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 +/** \brief Driver supports an arbitrary number of rows per slice. */ +#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 +/**@}*/ + +/** \brief Attribute value for VAConfigAttribEncJPEG */ +typedef union _VAConfigAttribValEncJPEG { + struct { + /** \brief set to 1 for arithmatic coding. */ + unsigned int arithmatic_coding_mode : 1; + /** \brief set to 1 for progressive dct. */ + unsigned int progressive_dct_mode : 1; + /** \brief set to 1 for non-interleaved. */ + unsigned int non_interleaved_mode : 1; + /** \brief set to 1 for differential. */ + unsigned int differential_mode : 1; + unsigned int max_num_components : 3; + unsigned int max_num_scans : 4; + unsigned int max_num_huffman_tables : 3; + unsigned int max_num_quantization_tables : 3; + } bits; + unsigned int value; +} VAConfigAttribValEncJPEG; + +/** + * if an attribute is not applicable for a given + * profile/entrypoint pair, then set the value to the following + */ +#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 + +/** Get maximum number of profiles supported by the implementation */ +int vaMaxNumProfiles ( + VADisplay dpy +); + +/** Get maximum number of entrypoints supported by the implementation */ +int vaMaxNumEntrypoints ( + VADisplay dpy +); + +/** Get maximum number of attributs supported by the implementation */ +int vaMaxNumConfigAttributes ( + VADisplay dpy +); + +/** + * Query supported profiles + * The caller must provide a "profile_list" array that can hold at + * least vaMaxNumProfile() entries. The actual number of profiles + * returned in "profile_list" is returned in "num_profile". + */ +VAStatus vaQueryConfigProfiles ( + VADisplay dpy, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ +); + +/** + * Query supported entrypoints for a given profile + * The caller must provide an "entrypoint_list" array that can hold at + * least vaMaxNumEntrypoints() entries. The actual number of entrypoints + * returned in "entrypoint_list" is returned in "num_entrypoints". + */ +VAStatus vaQueryConfigEntrypoints ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints /* out */ +); + +/** + * Get attributes for a given profile/entrypoint pair + * The caller must provide an "attrib_list" with all attributes to be + * retrieved. Upon return, the attributes in "attrib_list" have been + * updated with their value. Unknown attributes or attributes that are + * not supported for the given profile/entrypoint pair will have their + * value set to VA_ATTRIB_NOT_SUPPORTED + */ +VAStatus vaGetConfigAttributes ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs +); + +/** Generic ID type, can be re-typed for specific implementation */ +typedef unsigned int VAGenericID; + +typedef VAGenericID VAConfigID; + +/** + * Create a configuration for the decode pipeline + * it passes in the attribute list that specifies the attributes it cares + * about, with the rest taking default values. + */ +VAStatus vaCreateConfig ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +); + +/** + * Free resources associdated with a given config + */ +VAStatus vaDestroyConfig ( + VADisplay dpy, + VAConfigID config_id +); + +/** + * Query all attributes for a given configuration + * The profile of the configuration is returned in "profile" + * The entrypoint of the configuration is returned in "entrypoint" + * The caller must provide an "attrib_list" array that can hold at least + * vaMaxNumConfigAttributes() entries. The actual number of attributes + * returned in "attrib_list" is returned in "num_attribs" + */ +VAStatus vaQueryConfigAttributes ( + VADisplay dpy, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list,/* out */ + int *num_attribs /* out */ +); + + +/** + * Contexts and Surfaces + * + * Context represents a "virtual" video decode pipeline. Surfaces are render + * targets for a given context. The data in the surfaces are not accessible + * to the client and the internal data format of the surface is implementatin + * specific. + * + * Surfaces will be bound to a context when the context is created. Once + * a surface is bound to a given context, it can not be used to create + * another context. The association is removed when the context is destroyed + * + * Both contexts and surfaces are identified by unique IDs and its + * implementation specific internals are kept opaque to the clients + */ + +typedef VAGenericID VAContextID; + +typedef VAGenericID VASurfaceID; + +#define VA_INVALID_ID 0xffffffff +#define VA_INVALID_SURFACE VA_INVALID_ID + +/** \brief Generic value types. */ +typedef enum { + VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ + VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ + VAGenericValueTypePointer, /**< Generic pointer type */ + VAGenericValueTypeFunc /**< Pointer to function */ +} VAGenericValueType; + +/** \brief Generic function type. */ +typedef void (*VAGenericFunc)(void); + +/** \brief Generic value. */ +typedef struct _VAGenericValue { + /** \brief Value type. See #VAGenericValueType. */ + VAGenericValueType type; + /** \brief Value holder. */ + union { + /** \brief 32-bit signed integer. */ + int i; + /** \brief 32-bit float. */ + float f; + /** \brief Generic pointer. */ + void *p; + /** \brief Pointer to function. */ + VAGenericFunc fn; + } value; +} VAGenericValue; + +/** @name Surface attribute flags */ +/**@{*/ +/** \brief Surface attribute is not supported. */ +#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 +/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ +#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 +/** \brief Surface attribute can be set through vaCreateSurfaces(). */ +#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 +/**@}*/ + +/** \brief Surface attribute types. */ +typedef enum { + VASurfaceAttribNone = 0, + /** + * \brief Pixel format (fourcc). + * + * The value is meaningful as input to vaQuerySurfaceAttributes(). + * If zero, the driver returns the optimal pixel format for the + * specified config. Otherwise, if non-zero, the value represents + * a pixel format (FOURCC) that is kept as is on output, if the + * driver supports it. Otherwise, the driver sets the value to + * zero and drops the \c VA_SURFACE_ATTRIB_SETTABLE flag. + */ + VASurfaceAttribPixelFormat, + /** \brief Minimal width in pixels (int, read-only). */ + VASurfaceAttribMinWidth, + /** \brief Maximal width in pixels (int, read-only). */ + VASurfaceAttribMaxWidth, + /** \brief Minimal height in pixels (int, read-only). */ + VASurfaceAttribMinHeight, + /** \brief Maximal height in pixels (int, read-only). */ + VASurfaceAttribMaxHeight, + /** \brief Surface memory type expressed in bit fields (int, read/write). */ + VASurfaceAttribMemoryType, + /** \brief External buffer descriptor (pointer, write). */ + VASurfaceAttribExternalBufferDescriptor, + /** \brief Surface usage hint, gives the driver a hint of intended usage + * to optimize allocation (e.g. tiling) (int, read/write). */ + VASurfaceAttribUsageHint, + /** \brief Number of surface attributes. */ + VASurfaceAttribCount +} VASurfaceAttribType; + +/** \brief Surface attribute. */ +typedef struct _VASurfaceAttrib { + /** \brief Type. */ + VASurfaceAttribType type; + /** \brief Flags. See "Surface attribute flags". */ + unsigned int flags; + /** \brief Value. See "Surface attribute types" for the expected types. */ + VAGenericValue value; +} VASurfaceAttrib; + +/** + * @name VASurfaceAttribMemoryType values in bit fields. + * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for + * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific + * types are defined in DRM and Android header files. + */ +/**@{*/ +/** \brief VA memory type (default) is supported. */ +#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 +/** \brief V4L2 buffer memory type is supported. */ +#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 +/** \brief User pointer memory type is supported. */ +#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 +/**@}*/ + +/** + * \brief VASurfaceAttribExternalBuffers structure for + * the VASurfaceAttribExternalBufferDescriptor attribute. + */ +typedef struct _VASurfaceAttribExternalBuffers { + /** \brief pixel format in fourcc. */ + unsigned int pixel_format; + /** \brief width in pixels. */ + unsigned int width; + /** \brief height in pixels. */ + unsigned int height; + /** \brief total size of the buffer in bytes. */ + unsigned int data_size; + /** \brief number of planes for planar layout */ + unsigned int num_planes; + /** \brief pitch for each plane in bytes */ + unsigned int pitches[4]; + /** \brief offset for each plane in bytes */ + unsigned int offsets[4]; + /** \brief buffer handles or user pointers */ + unsigned long *buffers; + /** \brief number of elements in the "buffers" array */ + unsigned int num_buffers; + /** \brief flags. See "Surface external buffer descriptor flags". */ + unsigned int flags; + /** \brief reserved for passing private data */ + void *private_data; +} VASurfaceAttribExternalBuffers; + +/** @name VASurfaceAttribExternalBuffers flags */ +/**@{*/ +/** \brief Enable memory tiling */ +#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 +/** \brief Memory is cacheable */ +#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 +/** \brief Memory is non-cacheable */ +#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 +/** \brief Memory is write-combined */ +#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 +/** \brief Memory is protected */ +#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 + +/** @name VASurfaceAttribUsageHint attribute usage hint flags */ +/**@{*/ +/** \brief Surface usage not indicated. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC 0x00000000 +/** \brief Surface used by video decoder. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER 0x00000001 +/** \brief Surface used by video encoder. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER 0x00000002 +/** \brief Surface read by video post-processing. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ 0x00000004 +/** \brief Surface written by video post-processing. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE 0x00000008 +/** \brief Surface used for display. */ +#define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY 0x00000010 + +/**@}*/ + +/** + * \brief Queries surface attributes for the supplied config. + * + * Unlike vaGetSurfaceAttributes(), this function queries for all + * supported attributes for the supplied VA @config. In particular, if + * the underlying hardware supports the creation of VA surfaces in + * various formats, then this function will enumerate all pixel + * formats that are supported. + * + * The \c attrib_list array is allocated by the user and \c + * num_attribs shall be initialized to the number of allocated + * elements in that array. Upon successful return, the actual number + * of attributes will be overwritten into \c num_attribs. Otherwise, + * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs + * is adjusted to the number of elements that would be returned if + * enough space was available. + * + * Note: it is perfectly valid to pass NULL to the \c attrib_list + * argument when vaQuerySurfaceAttributes() is used to determine the + * actual number of elements that need to be allocated. + * + * @param[in] dpy the VA display + * @param[in] config the config identifying a codec or a video + * processing pipeline + * @param[out] attrib_list the output array of #VASurfaceAttrib elements + * @param[in,out] num_attribs the number of elements allocated on + * input, the number of elements actually filled in output + */ +VAStatus +vaQuerySurfaceAttributes( + VADisplay dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +); + +/** + * \brief Creates an array of surfaces + * + * Creates an array of surfaces. The optional list of attributes shall + * be constructed and validated through vaGetSurfaceAttributes() or + * constructed based based on what the underlying hardware could + * expose through vaQuerySurfaceAttributes(). + * + * @param[in] dpy the VA display + * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* + * @param[in] width the surface width + * @param[in] height the surface height + * @param[out] surfaces the array of newly created surfaces + * @param[in] num_surfaces the number of surfaces to create + * @param[in] attrib_list the list of (optional) attributes, or \c NULL + * @param[in] num_attribs the number of attributes supplied in + * \c attrib_list, or zero + */ +VAStatus +vaCreateSurfaces( + VADisplay dpy, + unsigned int format, + unsigned int width, + unsigned int height, + VASurfaceID *surfaces, + unsigned int num_surfaces, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs +); + +/** + * vaDestroySurfaces - Destroy resources associated with surfaces. + * Surfaces can only be destroyed after the context associated has been + * destroyed. + * dpy: display + * surfaces: array of surfaces to destroy + * num_surfaces: number of surfaces in the array to be destroyed. + */ +VAStatus vaDestroySurfaces ( + VADisplay dpy, + VASurfaceID *surfaces, + int num_surfaces +); + +#define VA_PROGRESSIVE 0x1 +/** + * vaCreateContext - Create a context + * dpy: display + * config_id: configuration for the context + * picture_width: coded picture width + * picture_height: coded picture height + * flag: any combination of the following: + * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) + * render_targets: render targets (surfaces) tied to the context + * num_render_targets: number of render targets in the above array + * context: created context id upon return + */ +VAStatus vaCreateContext ( + VADisplay dpy, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ +); + +/** + * vaDestroyContext - Destroy a context + * dpy: display + * context: context to be destroyed + */ +VAStatus vaDestroyContext ( + VADisplay dpy, + VAContextID context +); + +/** + * Buffers + * Buffers are used to pass various types of data from the + * client to the server. The server maintains a data store + * for each buffer created, and the client idenfies a buffer + * through a unique buffer id assigned by the server. + */ + +typedef VAGenericID VABufferID; + +typedef enum +{ + VAPictureParameterBufferType = 0, + VAIQMatrixBufferType = 1, + VABitPlaneBufferType = 2, + VASliceGroupMapBufferType = 3, + VASliceParameterBufferType = 4, + VASliceDataBufferType = 5, + VAMacroblockParameterBufferType = 6, + VAResidualDataBufferType = 7, + VADeblockingParameterBufferType = 8, + VAImageBufferType = 9, + VAProtectedSliceDataBufferType = 10, + VAQMatrixBufferType = 11, + VAHuffmanTableBufferType = 12, + VAProbabilityBufferType = 13, + +/* Following are encode buffer types */ + VAEncCodedBufferType = 21, + VAEncSequenceParameterBufferType = 22, + VAEncPictureParameterBufferType = 23, + VAEncSliceParameterBufferType = 24, + VAEncPackedHeaderParameterBufferType = 25, + VAEncPackedHeaderDataBufferType = 26, + VAEncMiscParameterBufferType = 27, + VAEncMacroblockParameterBufferType = 28, + VAEncMacroblockMapBufferType = 29, +/* Following are video processing buffer types */ + /** + * \brief Video processing pipeline parameter buffer. + * + * This buffer describes the video processing pipeline. See + * #VAProcPipelineParameterBuffer for details. + */ + VAProcPipelineParameterBufferType = 41, + /** + * \brief Video filter parameter buffer. + * + * This buffer describes the video filter parameters. All buffers + * inherit from #VAProcFilterParameterBufferBase, thus including + * a unique filter buffer type. + * + * The default buffer used by most filters is #VAProcFilterParameterBuffer. + * Filters requiring advanced parameters include, but are not limited to, + * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), + * color balance (#VAProcFilterParameterBufferColorBalance), etc. + */ + VAProcFilterParameterBufferType = 42, + VABufferTypeMax +} VABufferType; + +typedef enum +{ + VAEncMiscParameterTypeFrameRate = 0, + VAEncMiscParameterTypeRateControl = 1, + VAEncMiscParameterTypeMaxSliceSize = 2, + VAEncMiscParameterTypeAIR = 3, + /** \brief Buffer type used to express a maximum frame size (in bits). */ + VAEncMiscParameterTypeMaxFrameSize = 4, + /** \brief Buffer type used for HRD parameters. */ + VAEncMiscParameterTypeHRD = 5, + VAEncMiscParameterTypeQualityLevel = 6, + /** \brief Buffer type used for sending skip frame parameters to the encoder's + * rate control, when the user has externally skipped frames. */ + VAEncMiscParameterTypeSkipFrame = 9 +} VAEncMiscParameterType; + +/** \brief Packed header type. */ +typedef enum { + /** \brief Packed sequence header. */ + VAEncPackedHeaderSequence = 1, + /** \brief Packed picture header. */ + VAEncPackedHeaderPicture = 2, + /** \brief Packed slice header. */ + VAEncPackedHeaderSlice = 3, + /** + * \brief Packed raw header. + * + * Packed raw data header can be used by the client to insert a header + * into the bitstream data buffer at the point it is passed, the driver + * will handle the raw packed header based on "has_emulation_bytes" field + * in the packed header parameter structure. + */ + VAEncPackedHeaderRawData = 4, + /** \brief Misc packed header. See codec-specific definitions. */ + VAEncPackedHeaderMiscMask = 0x80000000, +} VAEncPackedHeaderType; + +/** \brief Packed header parameter. */ +typedef struct _VAEncPackedHeaderParameterBuffer { + /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ + unsigned int type; + /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ + unsigned int bit_length; + /** \brief Flag: buffer contains start code emulation prevention bytes? */ + unsigned char has_emulation_bytes; +} VAEncPackedHeaderParameterBuffer; + +/** + * For application, e.g. set a new bitrate + * VABufferID buf_id; + * VAEncMiscParameterBuffer *misc_param; + * VAEncMiscParameterRateControl *misc_rate_ctrl; + * + * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, + * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), + * 1, NULL, &buf_id); + * + * vaMapBuffer(dpy,buf_id,(void **)&misc_param); + * misc_param->type = VAEncMiscParameterTypeRateControl; + * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; + * misc_rate_ctrl->bits_per_second = 6400000; + * vaUnmapBuffer(dpy, buf_id); + * vaRenderPicture(dpy, context, &buf_id, 1); + */ +typedef struct _VAEncMiscParameterBuffer +{ + VAEncMiscParameterType type; + unsigned int data[0]; +} VAEncMiscParameterBuffer; + + +/** \brief Rate control parameters */ +typedef struct _VAEncMiscParameterRateControl +{ + /* this is the maximum bit-rate to be constrained by the rate control implementation */ + unsigned int bits_per_second; + /* this is the bit-rate the rate control is targeting, as a percentage of the maximum + * bit-rate for example if target_percentage is 95 then the rate control will target + * a bit-rate that is 95% of the maximum bit-rate + */ + unsigned int target_percentage; + /* windows size in milliseconds. For example if this is set to 500, + * then the rate control will guarantee the target bit-rate over a 500 ms window + */ + unsigned int window_size; + /* initial QP at I frames */ + unsigned int initial_qp; + unsigned int min_qp; + unsigned int basic_unit_size; + union + { + struct + { + unsigned int reset : 1; + unsigned int disable_frame_skip : 1; /* Disable frame skip in rate control mode */ + unsigned int disable_bit_stuffing : 1; /* Disable bit stuffing in rate control mode */ + } bits; + unsigned int value; + } rc_flags; +} VAEncMiscParameterRateControl; + +typedef struct _VAEncMiscParameterFrameRate +{ + unsigned int framerate; +} VAEncMiscParameterFrameRate; + +/** + * Allow a maximum slice size to be specified (in bits). + * The encoder will attempt to make sure that individual slices do not exceed this size + * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment + */ +typedef struct _VAEncMiscParameterMaxSliceSize +{ + unsigned int max_slice_size; +} VAEncMiscParameterMaxSliceSize; + +typedef struct _VAEncMiscParameterAIR +{ + unsigned int air_num_mbs; + unsigned int air_threshold; + unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ +} VAEncMiscParameterAIR; + +typedef struct _VAEncMiscParameterHRD +{ + unsigned int initial_buffer_fullness; /* in bits */ + unsigned int buffer_size; /* in bits */ +} VAEncMiscParameterHRD; + +/** + * \brief Defines a maximum frame size (in bits). + * + * This misc parameter buffer defines the maximum size of a frame (in + * bits). The encoder will try to make sure that each frame does not + * exceed this size. Otherwise, if the frame size exceeds this size, + * the \c status flag of #VACodedBufferSegment will contain + * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. + */ +typedef struct _VAEncMiscParameterBufferMaxFrameSize { + /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ + VAEncMiscParameterType type; + /** \brief Maximum size of a frame (in bits). */ + unsigned int max_frame_size; +} VAEncMiscParameterBufferMaxFrameSize; + +/** + * \brief Encoding quality level. + * + * The encoding quality could be set through this structure, if the implementation + * supports multiple quality levels. The quality level set through this structure is + * persistent over the entire coded sequence, or until a new structure is being sent. + * The quality level range can be queried through the VAConfigAttribEncQualityRange + * attribute. A lower value means higher quality, and a value of 1 represents the highest + * quality. The quality level setting is used as a trade-off between quality and speed/power + * consumption, with higher quality corresponds to lower speed and higher power consumption. + */ +typedef struct _VAEncMiscParameterBufferQualityLevel { + /** \brief Encoding quality level setting. When set to 0, default quality + * level is used. + */ + unsigned int quality_level; +} VAEncMiscParameterBufferQualityLevel; + +/** + * \brief Encoding skip frame. + * + * The application may choose to skip frames externally to the encoder (e.g. drop completely or + * code as all skip's). For rate control purposes the encoder will need to know the size and number + * of skipped frames. Skip frame(s) indicated through this structure is applicable only to the + * current frame. It is allowed for the application to still send in packed headers for the driver to + * pack, although no frame will be encoded (e.g. for HW to encrypt the frame). + */ +typedef struct _VAEncMiscParameterSkipFrame { + /** \brief Indicates skip frames as below. + * 0: Encode as normal, no skip. + * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal. + * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents + * (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame + * in VAEncPackedHeaderPicture). */ + unsigned char skip_frame_flag; + /** \brief The number of frames skipped prior to the current frame. Valid when skip_frame_flag = 1. */ + unsigned char num_skip_frames; + /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. When skip_frame_flag = 2, + * the size of the current skipped frame that is to be packed/encrypted in bits. */ + unsigned int size_skip_frames; +} VAEncMiscParameterSkipFrame; + +/* + * There will be cases where the bitstream buffer will not have enough room to hold + * the data for the entire slice, and the following flags will be used in the slice + * parameter to signal to the server for the possible cases. + * If a slice parameter buffer and slice data buffer pair is sent to the server with + * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), + * then a slice parameter and data buffer needs to be sent again to complete this slice. + */ +#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ +#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ +#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ +#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ + +/* Codec-independent Slice Parameter Buffer base */ +typedef struct _VASliceParameterBufferBase +{ + unsigned int slice_data_size; /* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset; /* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ +} VASliceParameterBufferBase; + +/********************************** + * JPEG common data structures + **********************************/ +/** + * \brief Huffman table for JPEG decoding. + * + * This structure holds the complete Huffman tables. This is an + * aggregation of all Huffman table (DHT) segments maintained by the + * application. i.e. up to 2 Huffman tables are stored in there for + * baseline profile. + * + * The #load_huffman_table array can be used as a hint to notify the + * VA driver implementation about which table(s) actually changed + * since the last submission of this buffer. + */ +typedef struct _VAHuffmanTableBufferJPEGBaseline { + /** \brief Specifies which #huffman_table is valid. */ + unsigned char load_huffman_table[2]; + /** \brief Huffman tables indexed by table identifier (Th). */ + struct { + /** @name DC table (up to 12 categories) */ + /**@{*/ + /** \brief Number of Huffman codes of length i + 1 (Li). */ + unsigned char num_dc_codes[16]; + /** \brief Value associated with each Huffman code (Vij). */ + unsigned char dc_values[12]; + /**@}*/ + /** @name AC table (2 special codes + up to 16 * 10 codes) */ + /**@{*/ + /** \brief Number of Huffman codes of length i + 1 (Li). */ + unsigned char num_ac_codes[16]; + /** \brief Value associated with each Huffman code (Vij). */ + unsigned char ac_values[162]; + /** \brief Padding to 4-byte boundaries. Must be set to zero. */ + unsigned char pad[2]; + /**@}*/ + } huffman_table[2]; +} VAHuffmanTableBufferJPEGBaseline; + +/**************************** + * MPEG-2 data structures + ****************************/ + +/* MPEG-2 Picture Parameter Buffer */ +/* + * For each frame or field, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferMPEG2 +{ + unsigned short horizontal_size; + unsigned short vertical_size; + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + /* meanings of the following fields are the same as in the standard */ + int picture_coding_type; + int f_code; /* pack all four fcode into this */ + union { + struct { + unsigned int intra_dc_precision : 2; + unsigned int picture_structure : 2; + unsigned int top_field_first : 1; + unsigned int frame_pred_frame_dct : 1; + unsigned int concealment_motion_vectors : 1; + unsigned int q_scale_type : 1; + unsigned int intra_vlc_format : 1; + unsigned int alternate_scan : 1; + unsigned int repeat_first_field : 1; + unsigned int progressive_frame : 1; + unsigned int is_first_field : 1; /* indicate whether the current field + * is the first field for field picture + */ + } bits; + unsigned int value; + } picture_coding_extension; +} VAPictureParameterBufferMPEG2; + +/** MPEG-2 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferMPEG2 +{ + /** \brief Same as the MPEG-2 bitstream syntax element. */ + int load_intra_quantiser_matrix; + /** \brief Same as the MPEG-2 bitstream syntax element. */ + int load_non_intra_quantiser_matrix; + /** \brief Same as the MPEG-2 bitstream syntax element. */ + int load_chroma_intra_quantiser_matrix; + /** \brief Same as the MPEG-2 bitstream syntax element. */ + int load_chroma_non_intra_quantiser_matrix; + /** \brief Luminance intra matrix, in zig-zag scan order. */ + unsigned char intra_quantiser_matrix[64]; + /** \brief Luminance non-intra matrix, in zig-zag scan order. */ + unsigned char non_intra_quantiser_matrix[64]; + /** \brief Chroma intra matrix, in zig-zag scan order. */ + unsigned char chroma_intra_quantiser_matrix[64]; + /** \brief Chroma non-intra matrix, in zig-zag scan order. */ + unsigned char chroma_non_intra_quantiser_matrix[64]; +} VAIQMatrixBufferMPEG2; + +/** MPEG-2 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferMPEG2 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int slice_horizontal_position; + unsigned int slice_vertical_position; + int quantiser_scale_code; + int intra_slice_flag; +} VASliceParameterBufferMPEG2; + +/** MPEG-2 Macroblock Parameter Buffer */ +typedef struct _VAMacroblockParameterBufferMPEG2 +{ + unsigned short macroblock_address; + /* + * macroblock_address (in raster scan order) + * top-left: 0 + * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 + */ + unsigned char macroblock_type; /* see definition below */ + union { + struct { + unsigned int frame_motion_type : 2; + unsigned int field_motion_type : 2; + unsigned int dct_type : 1; + } bits; + unsigned int value; + } macroblock_modes; + unsigned char motion_vertical_field_select; + /* + * motion_vertical_field_select: + * see section 6.3.17.2 in the spec + * only the lower 4 bits are used + * bit 0: first vector forward + * bit 1: first vector backward + * bit 2: second vector forward + * bit 3: second vector backward + */ + short PMV[2][2][2]; /* see Table 7-7 in the spec */ + unsigned short coded_block_pattern; + /* + * The bitplanes for coded_block_pattern are described + * in Figure 6.10-12 in the spec + */ + + /* Number of skipped macroblocks after this macroblock */ + unsigned short num_skipped_macroblocks; +} VAMacroblockParameterBufferMPEG2; + +/* + * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) + */ +#define VA_MB_TYPE_MOTION_FORWARD 0x02 +#define VA_MB_TYPE_MOTION_BACKWARD 0x04 +#define VA_MB_TYPE_MOTION_PATTERN 0x08 +#define VA_MB_TYPE_MOTION_INTRA 0x10 + +/** + * MPEG-2 Residual Data Buffer + * For each macroblock, there wil be 64 shorts (16-bit) in the + * residual data buffer + */ + +/**************************** + * MPEG-4 Part 2 data structures + ****************************/ + +/* MPEG-4 Picture Parameter Buffer */ +/* + * For each frame or field, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferMPEG4 +{ + unsigned short vop_width; + unsigned short vop_height; + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + union { + struct { + unsigned int short_video_header : 1; + unsigned int chroma_format : 2; + unsigned int interlaced : 1; + unsigned int obmc_disable : 1; + unsigned int sprite_enable : 2; + unsigned int sprite_warping_accuracy : 2; + unsigned int quant_type : 1; + unsigned int quarter_sample : 1; + unsigned int data_partitioned : 1; + unsigned int reversible_vlc : 1; + unsigned int resync_marker_disable : 1; + } bits; + unsigned int value; + } vol_fields; + unsigned char no_of_sprite_warping_points; + short sprite_trajectory_du[3]; + short sprite_trajectory_dv[3]; + unsigned char quant_precision; + union { + struct { + unsigned int vop_coding_type : 2; + unsigned int backward_reference_vop_coding_type : 2; + unsigned int vop_rounding_type : 1; + unsigned int intra_dc_vlc_thr : 3; + unsigned int top_field_first : 1; + unsigned int alternate_vertical_scan_flag : 1; + } bits; + unsigned int value; + } vop_fields; + unsigned char vop_fcode_forward; + unsigned char vop_fcode_backward; + unsigned short vop_time_increment_resolution; + /* short header related */ + unsigned char num_gobs_in_vop; + unsigned char num_macroblocks_in_gob; + /* for direct mode prediction */ + short TRB; + short TRD; +} VAPictureParameterBufferMPEG4; + +/** MPEG-4 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferMPEG4 +{ + /** Same as the MPEG-4:2 bitstream syntax element. */ + int load_intra_quant_mat; + /** Same as the MPEG-4:2 bitstream syntax element. */ + int load_non_intra_quant_mat; + /** The matrix for intra blocks, in zig-zag scan order. */ + unsigned char intra_quant_mat[64]; + /** The matrix for non-intra blocks, in zig-zag scan order. */ + unsigned char non_intra_quant_mat[64]; +} VAIQMatrixBufferMPEG4; + +/** MPEG-4 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferMPEG4 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int macroblock_number; + int quant_scale; +} VASliceParameterBufferMPEG4; + +/** + VC-1 data structures +*/ + +typedef enum /* see 7.1.1.32 */ +{ + VAMvMode1Mv = 0, + VAMvMode1MvHalfPel = 1, + VAMvMode1MvHalfPelBilinear = 2, + VAMvModeMixedMv = 3, + VAMvModeIntensityCompensation = 4 +} VAMvModeVC1; + +/** VC-1 Picture Parameter Buffer */ +/* + * For each picture, and before any slice data, a picture parameter + * buffer must be send. Multiple picture parameter buffers may be + * sent for a single picture. In that case picture parameters will + * apply to all slice data that follow it until a new picture + * parameter buffer is sent. + * + * Notes: + * pic_quantizer_type should be set to the applicable quantizer + * type as defined by QUANTIZER (J.1.19) and either + * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) + */ +typedef struct _VAPictureParameterBufferVC1 +{ + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + /* if out-of-loop post-processing is done on the render + target, then we need to keep the in-loop decoded + picture as a reference picture */ + VASurfaceID inloop_decoded_picture; + + /* sequence layer for AP or meta data for SP and MP */ + union { + struct { + unsigned int pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ + unsigned int interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ + unsigned int tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ + unsigned int finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ + unsigned int psf : 1; /* SEQUENCE_LAYER::PSF */ + unsigned int multires : 1; /* METADATA::MULTIRES */ + unsigned int overlap : 1; /* METADATA::OVERLAP */ + unsigned int syncmarker : 1; /* METADATA::SYNCMARKER */ + unsigned int rangered : 1; /* METADATA::RANGERED */ + unsigned int max_b_frames : 3; /* METADATA::MAXBFRAMES */ + unsigned int profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ + } bits; + unsigned int value; + } sequence_fields; + + unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ + unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ + union { + struct { + unsigned int broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ + unsigned int closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ + unsigned int panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ + unsigned int loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ + } bits; + unsigned int value; + } entrypoint_fields; + unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ + unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ + union { + struct { + unsigned int luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ + unsigned int luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ + unsigned int chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ + unsigned int chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ + } bits; + unsigned int value; + } range_mapping_fields; + + unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */ + unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ + unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ + unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ + unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */ + unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */ + unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */ + unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */ + unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */ + union { + struct { + unsigned int picture_type : 3; /* PICTURE_LAYER::PTYPE */ + unsigned int frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ + unsigned int top_field_first : 1; /* PICTURE_LAYER::TFF */ + unsigned int is_first_field : 1; /* set to 1 if it is the first field */ + unsigned int intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ + } bits; + unsigned int value; + } picture_fields; + union { + struct { + unsigned int mv_type_mb : 1; /* PICTURE::MVTYPEMB */ + unsigned int direct_mb : 1; /* PICTURE::DIRECTMB */ + unsigned int skip_mb : 1; /* PICTURE::SKIPMB */ + unsigned int field_tx : 1; /* PICTURE::FIELDTX */ + unsigned int forward_mb : 1; /* PICTURE::FORWARDMB */ + unsigned int ac_pred : 1; /* PICTURE::ACPRED */ + unsigned int overflags : 1; /* PICTURE::OVERFLAGS */ + } flags; + unsigned int value; + } raw_coding; + union { + struct { + unsigned int bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ + unsigned int bp_direct_mb : 1; /* PICTURE::DIRECTMB */ + unsigned int bp_skip_mb : 1; /* PICTURE::SKIPMB */ + unsigned int bp_field_tx : 1; /* PICTURE::FIELDTX */ + unsigned int bp_forward_mb : 1; /* PICTURE::FORWARDMB */ + unsigned int bp_ac_pred : 1; /* PICTURE::ACPRED */ + unsigned int bp_overflags : 1; /* PICTURE::OVERFLAGS */ + } flags; + unsigned int value; + } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ + union { + struct { + unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ + unsigned int reference_distance : 5;/* PICTURE_LAYER::REFDIST */ + unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ + unsigned int reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ + } bits; + unsigned int value; + } reference_fields; + union { + struct { + unsigned int mv_mode : 3; /* PICTURE_LAYER::MVMODE */ + unsigned int mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ + unsigned int mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ + unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ + unsigned int four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ + unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ + unsigned int extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ + unsigned int extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ + unsigned int extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ + unsigned int extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ + } bits; + unsigned int value; + } mv_fields; + union { + struct { + unsigned int dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ + unsigned int quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ + unsigned int half_qp : 1; /* PICTURE_LAYER::HALFQP */ + unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ + unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ + unsigned int dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ + unsigned int dq_profile : 2; /* VOPDQUANT::DQPROFILE */ + unsigned int dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ + unsigned int dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ + unsigned int dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ + unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ + } bits; + unsigned int value; + } pic_quantizer_fields; + union { + struct { + unsigned int variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ + unsigned int mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ + unsigned int frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ + unsigned int transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ + unsigned int transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ + unsigned int intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ + } bits; + unsigned int value; + } transform_fields; +} VAPictureParameterBufferVC1; + +/** VC-1 Bitplane Buffer +There will be at most three bitplanes coded in any picture header. To send +the bitplane data more efficiently, each byte is divided in two nibbles, with +each nibble carrying three bitplanes for one macroblock. The following table +shows the bitplane data arrangement within each nibble based on the picture +type. + +Picture Type Bit3 Bit2 Bit1 Bit0 +I or BI OVERFLAGS ACPRED FIELDTX +P MYTYPEMB SKIPMB DIRECTMB +B FORWARDMB SKIPMB DIRECTMB + +Within each byte, the lower nibble is for the first MB and the upper nibble is +for the second MB. E.g. the lower nibble of the first byte in the bitplane +buffer is for Macroblock #1 and the upper nibble of the first byte is for +Macroblock #2 in the first row. +*/ + +/* VC-1 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferVC1 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int slice_vertical_position; +} VASliceParameterBufferVC1; + +/* VC-1 Slice Data Buffer */ +/* +This is simplely a buffer containing raw bit-stream bytes +*/ + +/**************************** + * H.264/AVC data structures + ****************************/ + +typedef struct _VAPictureH264 +{ + VASurfaceID picture_id; + unsigned int frame_idx; + unsigned int flags; + signed int TopFieldOrderCnt; + signed int BottomFieldOrderCnt; +} VAPictureH264; +/* flags in VAPictureH264 could be OR of the following */ +#define VA_PICTURE_H264_INVALID 0x00000001 +#define VA_PICTURE_H264_TOP_FIELD 0x00000002 +#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 +#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 +#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 + +/** H.264 Picture Parameter Buffer */ +/* + * For each picture, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferH264 +{ + VAPictureH264 CurrPic; + VAPictureH264 ReferenceFrames[16]; /* in DPB */ + unsigned short picture_width_in_mbs_minus1; + unsigned short picture_height_in_mbs_minus1; + unsigned char bit_depth_luma_minus8; + unsigned char bit_depth_chroma_minus8; + unsigned char num_ref_frames; + union { + struct { + unsigned int chroma_format_idc : 2; + unsigned int residual_colour_transform_flag : 1; + unsigned int gaps_in_frame_num_value_allowed_flag : 1; + unsigned int frame_mbs_only_flag : 1; + unsigned int mb_adaptive_frame_field_flag : 1; + unsigned int direct_8x8_inference_flag : 1; + unsigned int MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ + unsigned int log2_max_frame_num_minus4 : 4; + unsigned int pic_order_cnt_type : 2; + unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; + unsigned int delta_pic_order_always_zero_flag : 1; + } bits; + unsigned int value; + } seq_fields; + unsigned char num_slice_groups_minus1; + unsigned char slice_group_map_type; + unsigned short slice_group_change_rate_minus1; + signed char pic_init_qp_minus26; + signed char pic_init_qs_minus26; + signed char chroma_qp_index_offset; + signed char second_chroma_qp_index_offset; + union { + struct { + unsigned int entropy_coding_mode_flag : 1; + unsigned int weighted_pred_flag : 1; + unsigned int weighted_bipred_idc : 2; + unsigned int transform_8x8_mode_flag : 1; + unsigned int field_pic_flag : 1; + unsigned int constrained_intra_pred_flag : 1; + unsigned int pic_order_present_flag : 1; + unsigned int deblocking_filter_control_present_flag : 1; + unsigned int redundant_pic_cnt_present_flag : 1; + unsigned int reference_pic_flag : 1; /* nal_ref_idc != 0 */ + } bits; + unsigned int value; + } pic_fields; + unsigned short frame_num; +} VAPictureParameterBufferH264; + +/** H.264 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferH264 +{ + /** \brief 4x4 scaling list, in raster scan order. */ + unsigned char ScalingList4x4[6][16]; + /** \brief 8x8 scaling list, in raster scan order. */ + unsigned char ScalingList8x8[2][64]; +} VAIQMatrixBufferH264; + +/** + * H.264 Slice Group Map Buffer + * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0, + * A slice group map buffer should be sent for each picture if required. The buffer + * is sent only when there is a change in the mapping values. + * The slice group map buffer map "map units" to slice groups as specified in + * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each macroblock + * in raster scan order + */ + +/** H.264 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferH264 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + /** \brief Byte offset to the NAL Header Unit for this slice. */ + unsigned int slice_data_offset; + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + /** + * \brief Bit offset from NAL Header Unit to the begining of slice_data(). + * + * This bit offset is relative to and includes the NAL unit byte + * and represents the number of bits parsed in the slice_header() + * after the removal of any emulation prevention bytes in + * there. However, the slice data buffer passed to the hardware is + * the original bitstream, thus including any emulation prevention + * bytes. + */ + unsigned short slice_data_bit_offset; + unsigned short first_mb_in_slice; + unsigned char slice_type; + unsigned char direct_spatial_mv_pred_flag; + unsigned char num_ref_idx_l0_active_minus1; + unsigned char num_ref_idx_l1_active_minus1; + unsigned char cabac_init_idc; + char slice_qp_delta; + unsigned char disable_deblocking_filter_idc; + char slice_alpha_c0_offset_div2; + char slice_beta_offset_div2; + VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ + VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ + unsigned char luma_log2_weight_denom; + unsigned char chroma_log2_weight_denom; + unsigned char luma_weight_l0_flag; + short luma_weight_l0[32]; + short luma_offset_l0[32]; + unsigned char chroma_weight_l0_flag; + short chroma_weight_l0[32][2]; + short chroma_offset_l0[32][2]; + unsigned char luma_weight_l1_flag; + short luma_weight_l1[32]; + short luma_offset_l1[32]; + unsigned char chroma_weight_l1_flag; + short chroma_weight_l1[32][2]; + short chroma_offset_l1[32][2]; +} VASliceParameterBufferH264; + +/**************************** + * Common encode data structures + ****************************/ +typedef enum +{ + VAEncPictureTypeIntra = 0, + VAEncPictureTypePredictive = 1, + VAEncPictureTypeBidirectional = 2, +} VAEncPictureType; + +/* Encode Slice Parameter Buffer */ +typedef struct _VAEncSliceParameterBuffer +{ + unsigned int start_row_number; /* starting MB row number for this slice */ + unsigned int slice_height; /* slice height measured in MB */ + union { + struct { + unsigned int is_intra : 1; + unsigned int disable_deblocking_filter_idc : 2; + unsigned int uses_long_term_ref :1; + unsigned int is_long_term_ref :1; + } bits; + unsigned int value; + } slice_flags; +} VAEncSliceParameterBuffer; + + +/**************************** + * H.263 specific encode data structures + ****************************/ + +typedef struct _VAEncSequenceParameterBufferH263 +{ + unsigned int intra_period; + unsigned int bits_per_second; + unsigned int frame_rate; + unsigned int initial_qp; + unsigned int min_qp; +} VAEncSequenceParameterBufferH263; + +typedef struct _VAEncPictureParameterBufferH263 +{ + VASurfaceID reference_picture; + VASurfaceID reconstructed_picture; + VABufferID coded_buf; + unsigned short picture_width; + unsigned short picture_height; + VAEncPictureType picture_type; +} VAEncPictureParameterBufferH263; + +/**************************** + * MPEG-4 specific encode data structures + ****************************/ + +typedef struct _VAEncSequenceParameterBufferMPEG4 +{ + unsigned char profile_and_level_indication; + unsigned int intra_period; + unsigned int video_object_layer_width; + unsigned int video_object_layer_height; + unsigned int vop_time_increment_resolution; + unsigned int fixed_vop_rate; + unsigned int fixed_vop_time_increment; + unsigned int bits_per_second; + unsigned int frame_rate; + unsigned int initial_qp; + unsigned int min_qp; +} VAEncSequenceParameterBufferMPEG4; + +typedef struct _VAEncPictureParameterBufferMPEG4 +{ + VASurfaceID reference_picture; + VASurfaceID reconstructed_picture; + VABufferID coded_buf; + unsigned short picture_width; + unsigned short picture_height; + unsigned int modulo_time_base; /* number of 1s */ + unsigned int vop_time_increment; + VAEncPictureType picture_type; +} VAEncPictureParameterBufferMPEG4; + + + +/** Buffer functions */ + +/** + * Creates a buffer for "num_elements" elements of "size" bytes and + * initalize with "data". + * if "data" is null, then the contents of the buffer data store + * are undefined. + * Basically there are two ways to get buffer data to the server side. One is + * to call vaCreateBuffer() with a non-null "data", which results the data being + * copied to the data store on the server side. A different method that + * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), + * and then use vaMapBuffer() to map the data store from the server side to the + * client address space for access. + * Note: image buffers are created by the library, not the client. Please see + * vaCreateImage on how image buffers are managed. + */ +VAStatus vaCreateBuffer ( + VADisplay dpy, + VAContextID context, + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +); + +/** + * Convey to the server how many valid elements are in the buffer. + * e.g. if multiple slice parameters are being held in a single buffer, + * this will communicate to the server the number of slice parameters + * that are valid in the buffer. + */ +VAStatus vaBufferSetNumElements ( + VADisplay dpy, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ +); + + +/** + * device independent data structure for codedbuffer + */ + +/* + * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame + * LARGE_SLICE(bit8):At least one slice in the current frame was large + * enough for the encoder to attempt to limit its size. + * SLICE_OVERFLOW(bit9): At least one slice in the current frame has + * exceeded the maximum slice size specified. + * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. + * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) + * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB + */ +#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff +#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 +#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 +#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 +#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 +/** + * \brief The frame has exceeded the maximum requested size. + * + * This flag indicates that the encoded frame size exceeds the value + * specified through a misc parameter buffer of type + * #VAEncMiscParameterTypeMaxFrameSize. + */ +#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 +#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 + +/** + * \brief The coded buffer segment contains a single NAL unit. + * + * This flag indicates that the coded buffer segment contains a + * single NAL unit. This flag might be useful to the user for + * processing the coded buffer. + */ +#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 + +/** + * \brief Coded buffer segment. + * + * #VACodedBufferSegment is an element of a linked list describing + * some information on the coded buffer. The coded buffer segment + * could contain either a single NAL unit, or more than one NAL unit. + * It is recommended (but not required) to return a single NAL unit + * in a coded buffer segment, and the implementation should set the + * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. + */ +typedef struct _VACodedBufferSegment { + /** + * \brief Size of the data buffer in this segment (in bytes). + */ + unsigned int size; + /** \brief Bit offset into the data buffer where the video data starts. */ + unsigned int bit_offset; + /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ + unsigned int status; + /** \brief Reserved for future use. */ + unsigned int reserved; + /** \brief Pointer to the start of the data buffer. */ + void *buf; + /** + * \brief Pointer to the next #VACodedBufferSegment element, + * or \c NULL if there is none. + */ + void *next; +} VACodedBufferSegment; + +/** + * Map data store of the buffer into the client's address space + * vaCreateBuffer() needs to be called with "data" set to NULL before + * calling vaMapBuffer() + * + * if buffer type is VAEncCodedBufferType, pbuf points to link-list of + * VACodedBufferSegment, and the list is terminated if "next" is NULL + */ +VAStatus vaMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +); + +/** + * After client making changes to a mapped data store, it needs to + * "Unmap" it to let the server know that the data is ready to be + * consumed by the server + */ +VAStatus vaUnmapBuffer ( + VADisplay dpy, + VABufferID buf_id /* in */ +); + +/** + * After this call, the buffer is deleted and this buffer_id is no longer valid + * Only call this if the buffer is not going to be passed to vaRenderBuffer + */ +VAStatus vaDestroyBuffer ( + VADisplay dpy, + VABufferID buffer_id +); + +/** \brief VA buffer information */ +typedef struct { + /** \brief Buffer handle */ + uintptr_t handle; + /** \brief Buffer type (See \ref VABufferType). */ + uint32_t type; + /** + * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType). + * + * On input to vaAcquireBufferHandle(), this field can serve as a hint + * to specify the set of memory types the caller is interested in. + * On successful return from vaAcquireBufferHandle(), the field is + * updated with the best matching memory type. + */ + uint32_t mem_type; + /** \brief Size of the underlying buffer. */ + size_t mem_size; +} VABufferInfo; + +/** + * \brief Acquires buffer handle for external API usage + * + * Locks the VA buffer object \ref buf_id for external API usage like + * EGL or OpenCL (OCL). This function is a synchronization point. This + * means that any pending operation is guaranteed to be completed + * prior to returning from the function. + * + * If the referenced VA buffer object is the backing store of a VA + * surface, then this function acts as if vaSyncSurface() on the + * parent surface was called first. + * + * The \ref VABufferInfo argument shall be zero'ed on input. On + * successful output, the data structure is filled in with all the + * necessary buffer level implementation details like handle, type, + * memory type and memory size. + * + * Note: the external API implementation, or the application, can + * express the memory types it is interested in by filling in the \ref + * mem_type field accordingly. On successful output, the memory type + * that fits best the request and that was used is updated in the \ref + * VABufferInfo data structure. If none of the supplied memory types + * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE + * error is returned. + * + * The \ref VABufferInfo data is valid until vaReleaseBufferHandle() + * is called. Besides, no additional operation is allowed on any of + * the buffer parent object until vaReleaseBufferHandle() is called. + * e.g. decoding into a VA surface backed with the supplied VA buffer + * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY + * error. + * + * Possible errors: + * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation + * does not support this interface + * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied + * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied + * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation + * does not support exporting buffers of the specified type + * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested + * memory types in \ref VABufferInfo.mem_type was supported + * + * @param[in] dpy the VA display + * @param[in] buf_id the VA buffer + * @param[in,out] buf_info the associated VA buffer information + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus +vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); + +/** + * \brief Releases buffer after usage from external API + * + * Unlocks the VA buffer object \ref buf_id from external API usage like + * EGL or OpenCL (OCL). This function is a synchronization point. This + * means that any pending operation is guaranteed to be completed + * prior to returning from the function. + * + * The \ref VABufferInfo argument shall point to the original data + * structure that was obtained from vaAcquireBufferHandle(), unaltered. + * This is necessary so that the VA driver implementation could + * deallocate any resources that were needed. + * + * In any case, returning from this function invalidates any contents + * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer + * valid. Therefore, VA driver implementations are free to reset this + * data structure to safe defaults. + * + * Possible errors: + * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation + * does not support this interface + * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied + * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied + * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation + * does not support exporting buffers of the specified type + * + * @param[in] dpy the VA display + * @param[in] buf_id the VA buffer + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus +vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); + +/* +Render (Decode) Pictures + +A picture represents either a frame or a field. + +The Begin/Render/End sequence sends the decode buffers to the server +*/ + +/** + * Get ready to decode a picture to a target surface + */ +VAStatus vaBeginPicture ( + VADisplay dpy, + VAContextID context, + VASurfaceID render_target +); + +/** + * Send decode buffers to the server. + * Buffers are automatically destroyed afterwards + */ +VAStatus vaRenderPicture ( + VADisplay dpy, + VAContextID context, + VABufferID *buffers, + int num_buffers +); + +/** + * Make the end of rendering for a picture. + * The server should start processing all pending operations for this + * surface. This call is non-blocking. The client can start another + * Begin/Render/End sequence on a different render target. + */ +VAStatus vaEndPicture ( + VADisplay dpy, + VAContextID context +); + +/* + +Synchronization + +*/ + +/** + * This function blocks until all pending operations on the render target + * have been completed. Upon return it is safe to use the render target for a + * different picture. + */ +VAStatus vaSyncSurface ( + VADisplay dpy, + VASurfaceID render_target +); + +typedef enum +{ + VASurfaceRendering = 1, /* Rendering in progress */ + VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ + /* this status is useful if surface is used as the source */ + /* of an overlay */ + VASurfaceReady = 4, /* not being rendered or displayed */ + VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ +} VASurfaceStatus; + +/** + * Find out any pending ops on the render target + */ +VAStatus vaQuerySurfaceStatus ( + VADisplay dpy, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ +); + +typedef enum +{ + VADecodeSliceMissing = 0, + VADecodeMBError = 1, +} VADecodeErrorType; + +/** + * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns + * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 +*/ +typedef struct _VASurfaceDecodeMBErrors +{ + int status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ + unsigned int start_mb; /* start mb address with errors */ + unsigned int end_mb; /* end mb address with errors */ + VADecodeErrorType decode_error_type; +} VASurfaceDecodeMBErrors; + +/** + * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), + * it can call vaQuerySurfaceError to find out further details on the particular error. + * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", + * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, + * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. + * The array is terminated if "status==-1" is detected. + */ +VAStatus vaQuerySurfaceError( + VADisplay dpy, + VASurfaceID surface, + VAStatus error_status, + void **error_info +); + +/** + * Images and Subpictures + * VAImage is used to either get the surface data to client memory, or + * to copy image data in client memory to a surface. + * Both images, subpictures and surfaces follow the same 2D coordinate system where origin + * is at the upper left corner with positive X to the right and positive Y down + */ +#define VA_FOURCC(ch0, ch1, ch2, ch3) \ + ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ + ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) + +/* + * Pre-defined fourcc codes + */ +#define VA_FOURCC_NV12 0x3231564E +#define VA_FOURCC_AI44 0x34344149 +#define VA_FOURCC_RGBA 0x41424752 +#define VA_FOURCC_RGBX 0x58424752 +#define VA_FOURCC_BGRA 0x41524742 +#define VA_FOURCC_BGRX 0x58524742 +#define VA_FOURCC_ARGB 0x42475241 +#define VA_FOURCC_XRGB 0x42475258 +#define VA_FOURCC_ABGR 0x52474241 +#define VA_FOURCC_XBGR 0x52474258 +#define VA_FOURCC_UYVY 0x59565955 +#define VA_FOURCC_YUY2 0x32595559 +#define VA_FOURCC_AYUV 0x56555941 +#define VA_FOURCC_NV11 0x3131564e +#define VA_FOURCC_YV12 0x32315659 +#define VA_FOURCC_P208 0x38303250 +#define VA_FOURCC_IYUV 0x56555949 +#define VA_FOURCC_YV24 0x34325659 +#define VA_FOURCC_YV32 0x32335659 +#define VA_FOURCC_Y800 0x30303859 +#define VA_FOURCC_IMC3 0x33434D49 +#define VA_FOURCC_411P 0x50313134 +#define VA_FOURCC_422H 0x48323234 +#define VA_FOURCC_422V 0x56323234 +#define VA_FOURCC_444P 0x50343434 +#define VA_FOURCC_RGBP 0x50424752 +#define VA_FOURCC_BGRP 0x50524742 +#define VA_FOURCC_411R 0x52313134 /* rotated 411P */ +/** + * Planar YUV 4:2:2. + * 8-bit Y plane, followed by 8-bit 2x1 subsampled V and U planes + */ +#define VA_FOURCC_YV16 0x36315659 +/** + * 10-bit and 16-bit Planar YUV 4:2:0. + */ +#define VA_FOURCC_P010 0x30313050 +#define VA_FOURCC_P016 0x36313050 + +/* byte order */ +#define VA_LSB_FIRST 1 +#define VA_MSB_FIRST 2 + +typedef struct _VAImageFormat +{ + unsigned int fourcc; + unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ + unsigned int bits_per_pixel; + /* for RGB formats */ + unsigned int depth; /* significant bits per pixel */ + unsigned int red_mask; + unsigned int green_mask; + unsigned int blue_mask; + unsigned int alpha_mask; +} VAImageFormat; + +typedef VAGenericID VAImageID; + +typedef struct _VAImage +{ + VAImageID image_id; /* uniquely identify this image */ + VAImageFormat format; + VABufferID buf; /* image data buffer */ + /* + * Image data will be stored in a buffer of type VAImageBufferType to facilitate + * data store on the server side for optimal performance. The buffer will be + * created by the CreateImage function, and proper storage allocated based on the image + * size and format. This buffer is managed by the library implementation, and + * accessed by the client through the buffer Map/Unmap functions. + */ + unsigned short width; + unsigned short height; + unsigned int data_size; + unsigned int num_planes; /* can not be greater than 3 */ + /* + * An array indicating the scanline pitch in bytes for each plane. + * Each plane may have a different pitch. Maximum 3 planes for planar formats + */ + unsigned int pitches[3]; + /* + * An array indicating the byte offset from the beginning of the image data + * to the start of each plane. + */ + unsigned int offsets[3]; + + /* The following fields are only needed for paletted formats */ + int num_palette_entries; /* set to zero for non-palette images */ + /* + * Each component is one byte and entry_bytes indicates the number of components in + * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images + */ + int entry_bytes; + /* + * An array of ascii characters describing the order of the components within the bytes. + * Only entry_bytes characters of the string are used. + */ + char component_order[4]; +} VAImage; + +/** Get maximum number of image formats supported by the implementation */ +int vaMaxNumImageFormats ( + VADisplay dpy +); + +/** + * Query supported image formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumImageFormats() entries. The actual number of formats + * returned in "format_list" is returned in "num_formats". + */ +VAStatus vaQueryImageFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ +); + +/** + * Create a VAImage structure + * The width and height fields returned in the VAImage structure may get + * enlarged for some YUV formats. Upon return from this function, + * image->buf has been created and proper storage allocated by the library. + * The client can access the image through the Map/Unmap calls. + */ +VAStatus vaCreateImage ( + VADisplay dpy, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ +); + +/** + * Should call DestroyImage before destroying the surface it is bound to + */ +VAStatus vaDestroyImage ( + VADisplay dpy, + VAImageID image +); + +VAStatus vaSetImagePalette ( + VADisplay dpy, + VAImageID image, + /* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VAImage struct + */ + unsigned char *palette +); + +/** + * Retrive surface data into a VAImage + * Image must be in a format supported by the implementation + */ +VAStatus vaGetImage ( + VADisplay dpy, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image +); + +/** + * Copy data from a VAImage to a surface + * Image must be in a format supported by the implementation + * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface + * shouldn't be rendered into when this is called + */ +VAStatus vaPutImage ( + VADisplay dpy, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height +); + +/** + * Derive an VAImage from an existing surface. + * This interface will derive a VAImage and corresponding image buffer from + * an existing VA Surface. The image buffer can then be mapped/unmapped for + * direct CPU access. This operation is only possible on implementations with + * direct rendering capabilities and internal surface formats that can be + * represented with a VAImage. When the operation is not possible this interface + * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back + * to using vaCreateImage + vaPutImage to accomplish the same task in an + * indirect manner. + * + * Implementations should only return success when the resulting image buffer + * would be useable with vaMap/Unmap. + * + * When directly accessing a surface special care must be taken to insure + * proper synchronization with the graphics hardware. Clients should call + * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent + * rendering or currently being displayed by an overlay. + * + * Additionally nothing about the contents of a surface should be assumed + * following a vaPutSurface. Implementations are free to modify the surface for + * scaling or subpicture blending within a call to vaPutImage. + * + * Calls to vaPutImage or vaGetImage using the same surface from which the image + * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or + * vaGetImage with other surfaces is supported. + * + * An image created with vaDeriveImage should be freed with vaDestroyImage. The + * image and image buffer structures will be destroyed; however, the underlying + * surface will remain unchanged until freed with vaDestroySurfaces. + */ +VAStatus vaDeriveImage ( + VADisplay dpy, + VASurfaceID surface, + VAImage *image /* out */ +); + +/** + * Subpictures + * Subpicture is a special type of image that can be blended + * with a surface during vaPutSurface(). Subpicture can be used to render + * DVD sub-titles or closed captioning text etc. + */ + +typedef VAGenericID VASubpictureID; + +/** Get maximum number of subpicture formats supported by the implementation */ +int vaMaxNumSubpictureFormats ( + VADisplay dpy +); + +/** flags for subpictures */ +#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 +#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 +#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 +/** + * Query supported subpicture formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag + * for each format to indicate additional capabilities for that format. The actual + * number of formats returned in "format_list" is returned in "num_formats". + * flags: returned value to indicate addtional capabilities + * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying + * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha + * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display + */ + +VAStatus vaQuerySubpictureFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ +); + +/** + * Subpictures are created with an image associated. + */ +VAStatus vaCreateSubpicture ( + VADisplay dpy, + VAImageID image, + VASubpictureID *subpicture /* out */ +); + +/** + * Destroy the subpicture before destroying the image it is assocated to + */ +VAStatus vaDestroySubpicture ( + VADisplay dpy, + VASubpictureID subpicture +); + +/** + * Bind an image to the subpicture. This image will now be associated with + * the subpicture instead of the one at creation. + */ +VAStatus vaSetSubpictureImage ( + VADisplay dpy, + VASubpictureID subpicture, + VAImageID image +); + +/** + * If chromakey is enabled, then the area where the source value falls within + * the chromakey [min, max] range is transparent + * The chromakey component format is the following: + * For RGB: [0:7] Red [8:15] Blue [16:23] Green + * For YUV: [0:7] V [8:15] U [16:23] Y + * The chromakey mask can be used to mask out certain components for chromakey + * comparision + */ +VAStatus vaSetSubpictureChromakey ( + VADisplay dpy, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask +); + +/** + * Global alpha value is between 0 and 1. A value of 1 means fully opaque and + * a value of 0 means fully transparent. If per-pixel alpha is also specified then + * the overall alpha is per-pixel alpha multiplied by the global alpha + */ +VAStatus vaSetSubpictureGlobalAlpha ( + VADisplay dpy, + VASubpictureID subpicture, + float global_alpha +); + +/** + * vaAssociateSubpicture associates the subpicture with target_surfaces. + * It defines the region mapping between the subpicture and the target + * surfaces through source and destination rectangles (with the same width and height). + * Both will be displayed at the next call to vaPutSurface. Additional + * associations before the call to vaPutSurface simply overrides the association. + */ +VAStatus vaAssociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying, global-alpha, or screen relative mode + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags +); + +/** + * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. + */ +VAStatus vaDeassociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces +); + +typedef struct _VARectangle +{ + short x; + short y; + unsigned short width; + unsigned short height; +} VARectangle; + +/** + * Display attributes + * Display attributes are used to control things such as contrast, hue, saturation, + * brightness etc. in the rendering process. The application can query what + * attributes are supported by the driver, and then set the appropriate attributes + * before calling vaPutSurface() + */ +/* PowerVR IEP Lite attributes */ +typedef enum +{ + VADISPLAYATTRIB_BLE_OFF = 0x00, + VADISPLAYATTRIB_BLE_LOW, + VADISPLAYATTRIB_BLE_MEDIUM, + VADISPLAYATTRIB_BLE_HIGH, + VADISPLAYATTRIB_BLE_NONE, +} VADisplayAttribBLEMode; + +/** attribute value for VADisplayAttribRotation */ +#define VA_ROTATION_NONE 0x00000000 +#define VA_ROTATION_90 0x00000001 +#define VA_ROTATION_180 0x00000002 +#define VA_ROTATION_270 0x00000003 + +/** attribute value for VADisplayAttribOutOfLoopDeblock */ +#define VA_OOL_DEBLOCKING_FALSE 0x00000000 +#define VA_OOL_DEBLOCKING_TRUE 0x00000001 + +/** Render mode */ +#define VA_RENDER_MODE_UNDEFINED 0 +#define VA_RENDER_MODE_LOCAL_OVERLAY 1 +#define VA_RENDER_MODE_LOCAL_GPU 2 +#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 +#define VA_RENDER_MODE_EXTERNAL_GPU 8 + +/** Render device */ +#define VA_RENDER_DEVICE_UNDEFINED 0 +#define VA_RENDER_DEVICE_LOCAL 1 +#define VA_RENDER_DEVICE_EXTERNAL 2 + +/** Currently defined display attribute types */ +typedef enum +{ + VADisplayAttribBrightness = 0, + VADisplayAttribContrast = 1, + VADisplayAttribHue = 2, + VADisplayAttribSaturation = 3, + /* client can specifiy a background color for the target window + * the new feature of video conference, + * the uncovered area of the surface is filled by this color + * also it will blend with the decoded video color + */ + VADisplayAttribBackgroundColor = 4, + /* + * this is a gettable only attribute. For some implementations that use the + * hardware overlay, after PutSurface is called, the surface can not be + * re-used until after the subsequent PutSurface call. If this is the case + * then the value for this attribute will be set to 1 so that the client + * will not attempt to re-use the surface right after returning from a call + * to PutSurface. + * + * Don't use it, use flag VASurfaceDisplaying of vaQuerySurfaceStatus since + * driver may use overlay or GPU alternatively + */ + VADisplayAttribDirectSurface = 5, + VADisplayAttribRotation = 6, + VADisplayAttribOutofLoopDeblock = 7, + + /* PowerVR IEP Lite specific attributes */ + VADisplayAttribBLEBlackMode = 8, + VADisplayAttribBLEWhiteMode = 9, + VADisplayAttribBlueStretch = 10, + VADisplayAttribSkinColorCorrection = 11, + /* + * For type VADisplayAttribCSCMatrix, "value" field is a pointer to the color + * conversion matrix. Each element in the matrix is float-point + */ + VADisplayAttribCSCMatrix = 12, + /* specify the constant color used to blend with video surface + * Cd = Cv*Cc*Ac + Cb *(1 - Ac) C means the constant RGB + * d: the final color to overwrite into the frame buffer + * v: decoded video after color conversion, + * c: video color specified by VADisplayAttribBlendColor + * b: background color of the drawable + */ + VADisplayAttribBlendColor = 13, + /* + * Indicate driver to skip painting color key or not. + * only applicable if the render is overlay + */ + VADisplayAttribOverlayAutoPaintColorKey = 14, + /* + * customized overlay color key, the format is RGB888 + * [23:16] = Red, [15:08] = Green, [07:00] = Blue. + */ + VADisplayAttribOverlayColorKey = 15, + /* + * The hint for the implementation of vaPutSurface + * normally, the driver could use an overlay or GPU to render the surface on the screen + * this flag provides APP the flexibity to switch the render dynamically + */ + VADisplayAttribRenderMode = 16, + /* + * specify if vaPutSurface needs to render into specified monitors + * one example is that one external monitor (e.g. HDMI) is enabled, + * but the window manager is not aware of it, and there is no associated drawable + */ + VADisplayAttribRenderDevice = 17, + /* + * specify vaPutSurface render area if there is no drawable on the monitor + */ + VADisplayAttribRenderRect = 18, +} VADisplayAttribType; + +/* flags for VADisplayAttribute */ +#define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000 +#define VA_DISPLAY_ATTRIB_GETTABLE 0x0001 +#define VA_DISPLAY_ATTRIB_SETTABLE 0x0002 + +typedef struct _VADisplayAttribute +{ + VADisplayAttribType type; + int min_value; + int max_value; + int value; /* used by the set/get attribute functions */ +/* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */ + unsigned int flags; +} VADisplayAttribute; + +/** Get maximum number of display attributs supported by the implementation */ +int vaMaxNumDisplayAttributes ( + VADisplay dpy +); + +/** + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus vaQueryDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ +); + +/** + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus vaGetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes +); + +/** + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus vaSetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, + int num_attributes +); + +/**************************** + * HEVC data structures + ****************************/ +/** + * \brief Description of picture properties of those in DPB surfaces. + * + * If only progressive scan is supported, each surface contains one whole + * frame picture. + * Otherwise, each surface contains two fields of whole picture. + * In this case, two entries of ReferenceFrames[] may share same picture_id + * value. + */ +typedef struct _VAPictureHEVC +{ + /** \brief reconstructed picture buffer surface index + * invalid when taking value VA_INVALID_SURFACE. + */ + VASurfaceID picture_id; + /** \brief picture order count. + * in HEVC, POCs for top and bottom fields of same picture should + * take different values. + */ + int32_t pic_order_cnt; + /* described below */ + uint32_t flags; +} VAPictureHEVC; + +/* flags in VAPictureHEVC could be OR of the following */ +#define VA_PICTURE_HEVC_INVALID 0x00000001 +/** \brief indication of interlace scan picture. + * should take same value for all the pictures in sequence. + */ +#define VA_PICTURE_HEVC_FIELD_PIC 0x00000002 +/** \brief polarity of the field picture. + * top field takes even lines of buffer surface. + * bottom field takes odd lines of buffer surface. + */ +#define VA_PICTURE_HEVC_BOTTOM_FIELD 0x00000004 +/** \brief Long term reference picture */ +#define VA_PICTURE_HEVC_LONG_TERM_REFERENCE 0x00000008 +/** + * VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE, VA_PICTURE_HEVC_RPS_ST_CURR_AFTER + * and VA_PICTURE_HEVC_RPS_LT_CURR of any picture in ReferenceFrames[] should + * be exclusive. No more than one of them can be set for any picture. + * Sum of NumPocStCurrBefore, NumPocStCurrAfter and NumPocLtCurr + * equals NumPocTotalCurr, which should be equal to or smaller than 8. + * Application should provide valid values for both short format and long format. + * The pictures in DPB with any of these three flags turned on are referred by + * the current picture. + */ +/** \brief RefPicSetStCurrBefore of HEVC spec variable + * Number of ReferenceFrames[] entries with this bit set equals + * NumPocStCurrBefore. + */ +#define VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE 0x00000010 +/** \brief RefPicSetStCurrAfter of HEVC spec variable + * Number of ReferenceFrames[] entries with this bit set equals + * NumPocStCurrAfter. + */ +#define VA_PICTURE_HEVC_RPS_ST_CURR_AFTER 0x00000020 +/** \brief RefPicSetLtCurr of HEVC spec variable + * Number of ReferenceFrames[] entries with this bit set equals + * NumPocLtCurr. + */ +#define VA_PICTURE_HEVC_RPS_LT_CURR 0x00000040 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend.h new file mode 100644 index 000000000..e24b95c9b --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend.h @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Video Decode Acceleration -Backend API + */ + +#ifndef _VA_BACKEND_H_ +#define _VA_BACKEND_H_ + +#include +//#include + +typedef struct VADriverContext *VADriverContextP; +typedef struct VADisplayContext *VADisplayContextP; + +/** \brief VA display types. */ +enum { + /** \brief Mask to major identifier for VA display type. */ + VA_DISPLAY_MAJOR_MASK = 0xf0, + + /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ + VA_DISPLAY_X11 = 0x10, + /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ + VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), + /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ + VA_DISPLAY_ANDROID = 0x20, + /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ + VA_DISPLAY_DRM = 0x30, + /** \brief VA/DRM API is used, with a render-node device path */ + VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), + /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ + VA_DISPLAY_WAYLAND = 0x40, +}; + +struct VADriverVTable +{ + VAStatus (*vaTerminate) ( VADriverContextP ctx ); + + VAStatus (*vaQueryConfigProfiles) ( + VADriverContextP ctx, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ + ); + + VAStatus (*vaQueryConfigEntrypoints) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints /* out */ + ); + + VAStatus (*vaGetConfigAttributes) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs + ); + + VAStatus (*vaCreateConfig) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ + ); + + VAStatus (*vaDestroyConfig) ( + VADriverContextP ctx, + VAConfigID config_id + ); + + VAStatus (*vaQueryConfigAttributes) ( + VADriverContextP ctx, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list, /* out */ + int *num_attribs /* out */ + ); + + VAStatus (*vaCreateSurfaces) ( + VADriverContextP ctx, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces /* out */ + ); + + VAStatus (*vaDestroySurfaces) ( + VADriverContextP ctx, + VASurfaceID *surface_list, + int num_surfaces + ); + + VAStatus (*vaCreateContext) ( + VADriverContextP ctx, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ + ); + + VAStatus (*vaDestroyContext) ( + VADriverContextP ctx, + VAContextID context + ); + + VAStatus (*vaCreateBuffer) ( + VADriverContextP ctx, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ + ); + + VAStatus (*vaBufferSetNumElements) ( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ + ); + + VAStatus (*vaMapBuffer) ( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + void **pbuf /* out */ + ); + + VAStatus (*vaUnmapBuffer) ( + VADriverContextP ctx, + VABufferID buf_id /* in */ + ); + + VAStatus (*vaDestroyBuffer) ( + VADriverContextP ctx, + VABufferID buffer_id + ); + + VAStatus (*vaBeginPicture) ( + VADriverContextP ctx, + VAContextID context, + VASurfaceID render_target + ); + + VAStatus (*vaRenderPicture) ( + VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers + ); + + VAStatus (*vaEndPicture) ( + VADriverContextP ctx, + VAContextID context + ); + + VAStatus (*vaSyncSurface) ( + VADriverContextP ctx, + VASurfaceID render_target + ); + + VAStatus (*vaQuerySurfaceStatus) ( + VADriverContextP ctx, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ + ); + + VAStatus (*vaQuerySurfaceError) ( + VADriverContextP ctx, + VASurfaceID render_target, + VAStatus error_status, + void **error_info /*out*/ + ); + + VAStatus (*vaPutSurface) ( + VADriverContextP ctx, + VASurfaceID surface, + void* draw, /* Drawable of window system */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ + ); + + VAStatus (*vaQueryImageFormats) ( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ + ); + + VAStatus (*vaCreateImage) ( + VADriverContextP ctx, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ + ); + + VAStatus (*vaDeriveImage) ( + VADriverContextP ctx, + VASurfaceID surface, + VAImage *image /* out */ + ); + + VAStatus (*vaDestroyImage) ( + VADriverContextP ctx, + VAImageID image + ); + + VAStatus (*vaSetImagePalette) ( + VADriverContextP ctx, + VAImageID image, + /* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VAImage struct + */ + unsigned char *palette + ); + + VAStatus (*vaGetImage) ( + VADriverContextP ctx, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image + ); + + VAStatus (*vaPutImage) ( + VADriverContextP ctx, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height + ); + + VAStatus (*vaQuerySubpictureFormats) ( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ + ); + + VAStatus (*vaCreateSubpicture) ( + VADriverContextP ctx, + VAImageID image, + VASubpictureID *subpicture /* out */ + ); + + VAStatus (*vaDestroySubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture + ); + + VAStatus (*vaSetSubpictureImage) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VAImageID image + ); + + VAStatus (*vaSetSubpictureChromakey) ( + VADriverContextP ctx, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask + ); + + VAStatus (*vaSetSubpictureGlobalAlpha) ( + VADriverContextP ctx, + VASubpictureID subpicture, + float global_alpha + ); + + VAStatus (*vaAssociateSubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags + ); + + VAStatus (*vaDeassociateSubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces + ); + + VAStatus (*vaQueryDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ + ); + + VAStatus (*vaGetDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes + ); + + VAStatus (*vaSetDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, + int num_attributes + ); + + /* used by va trace */ + VAStatus (*vaBufferInfo) ( + VADriverContextP ctx, /* in */ + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ + ); + + /* lock/unlock surface for external access */ + VAStatus (*vaLockSurface) ( + VADriverContextP ctx, + VASurfaceID surface, + unsigned int *fourcc, /* out for follow argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + unsigned int *buffer_name, /* if it is not NULL, assign the low lever + * surface buffer name + */ + void **buffer /* if it is not NULL, map the surface buffer for + * CPU access + */ + ); + + VAStatus (*vaUnlockSurface) ( + VADriverContextP ctx, + VASurfaceID surface + ); + + /* DEPRECATED */ + VAStatus + (*vaGetSurfaceAttributes)( + VADriverContextP dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs + ); + + VAStatus + (*vaCreateSurfaces2)( + VADriverContextP ctx, + unsigned int format, + unsigned int width, + unsigned int height, + VASurfaceID *surfaces, + unsigned int num_surfaces, + VASurfaceAttrib *attrib_list, + unsigned int num_attribs + ); + + VAStatus + (*vaQuerySurfaceAttributes)( + VADriverContextP dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs + ); + + VAStatus + (*vaAcquireBufferHandle)( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + VABufferInfo * buf_info /* in/out */ + ); + + VAStatus + (*vaReleaseBufferHandle)( + VADriverContextP ctx, + VABufferID buf_id /* in */ + ); +}; + +struct VADriverContext +{ + void *pDriverData; + + /** + * The core VA implementation hooks. + * + * This structure is allocated from libva with calloc(). + */ + struct VADriverVTable *vtable; + + /** + * The VA/GLX implementation hooks. + * + * This structure is intended for drivers that implement the + * VA/GLX API. The driver implementation is responsible for the + * allocation and deallocation of this structure. + */ + struct VADriverVTableGLX *vtable_glx; + + /** + * The VA/EGL implementation hooks. + * + * This structure is intended for drivers that implement the + * VA/EGL API. The driver implementation is responsible for the + * allocation and deallocation of this structure. + */ + struct VADriverVTableEGL *vtable_egl; + + /** + * The third-party/private implementation hooks. + * + * This structure is intended for drivers that implement the + * private API. The driver implementation is responsible for the + * allocation and deallocation of this structure. + */ + void *vtable_tpi; + + void *native_dpy; + int x11_screen; + int version_major; + int version_minor; + int max_profiles; + int max_entrypoints; + int max_attributes; + int max_image_formats; + int max_subpic_formats; + int max_display_attributes; + const char *str_vendor; + + void *handle; /* dlopen handle */ + + /** + * \brief DRM state. + * + * This field holds driver specific data for DRM-based + * drivers. This structure is allocated from libva with + * calloc(). Do not deallocate from within VA driver + * implementations. + * + * All structures shall be derived from struct drm_state. So, for + * instance, this field holds a dri_state structure for VA/X11 + * drivers that use the DRM protocol. + */ + void *drm_state; + + void *glx; /* opaque for GLX code */ + + /** \brief VA display type. */ + unsigned long display_type; + + /** + * The VA/Wayland implementation hooks. + * + * This structure is intended for drivers that implement the + * VA/Wayland API. libVA allocates this structure with calloc() + * and owns the resulting memory. + */ + struct VADriverVTableWayland *vtable_wayland; + + /** + * \brief The VA/VPP implementation hooks. + * + * This structure is allocated from libva with calloc(). + */ + struct VADriverVTableVPP *vtable_vpp; + + char *override_driver_name; + + unsigned long reserved[41]; /* reserve for future add-ins, decrease the subscript accordingly */ +}; + +#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ +struct VADisplayContext +{ + int vadpy_magic; + + VADisplayContextP pNext; + VADriverContextP pDriverContext; + + int (*vaIsValid) ( + VADisplayContextP ctx + ); + + void (*vaDestroy) ( + VADisplayContextP ctx + ); + + VAStatus (*vaGetDriverName) ( + VADisplayContextP ctx, + char **driver_name + ); + + void *opaque; /* opaque for display extensions (e.g. GLX) */ + void *vatrace; /* opaque for VA trace context */ + void *vafool; /* opaque for VA fool context */ +}; + +typedef VAStatus (*VADriverInit) ( + VADriverContextP driver_context +); + +#endif /* _VA_BACKEND_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_tpi.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_tpi.h new file mode 100644 index 000000000..141eb75f0 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_tpi.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Video Decode Acceleration -Backend API + */ + +#ifndef _VA_BACKEND_TPI_H_ +#define _VA_BACKEND_TPI_H_ + +#include +#include +#include + +struct VADriverVTableTPI +{ + VAStatus (*vaCreateSurfacesWithAttribute) ( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces, /* out */ + VASurfaceAttributeTPI *attribute_tpi + ); + + + VAStatus (*vaPutSurfaceBuf) ( + VADriverContextP ctx, + VASurfaceID surface, + unsigned char* data, + int* data_len, + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ + ); +}; + + +#endif /* _VA_BACKEND_TPI_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_vpp.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_vpp.h new file mode 100644 index 000000000..b776ef697 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_backend_vpp.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_BACKEND_VPP_H +#define VA_BACKEND_VPP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \brief VTable version for VA/VPP hooks. */ +#define VA_DRIVER_VTABLE_VPP_VERSION 1 + +struct VADriverVTableVPP { + unsigned int version; + + VAStatus + (*vaQueryVideoProcFilters)( + VADriverContextP ctx, + VAContextID context, + VAProcFilterType *filters, + unsigned int *num_filters + ); + + VAStatus + (*vaQueryVideoProcFilterCaps)( + VADriverContextP ctx, + VAContextID context, + VAProcFilterType type, + void *filter_caps, + unsigned int *num_filter_caps + ); + + VAStatus + (*vaQueryVideoProcPipelineCaps)( + VADriverContextP ctx, + VAContextID context, + VABufferID *filters, + unsigned int num_filters, + VAProcPipelineCaps *pipeline_caps + ); +}; + +#ifdef __cplusplus +} +#endif + +#endif /* VA_BACKEND_VPP_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.c new file mode 100644 index 000000000..83ba7b3ef --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define VA_COMPAT_DISABLED 1 +#include "sysdeps.h" +#include "va.h" +#include "va_compat.h" + +VAStatus +vaCreateSurfaces_0_32_0( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces +) +{ + return vaCreateSurfaces(dpy, format, width, height, surfaces, num_surfaces, + NULL, 0); +} +//VA_CPP_HELPER_ALIAS(vaCreateSurfaces, 0,32,0); diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.h new file mode 100644 index 000000000..41a3f73e7 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_compat.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_compat.h + * \brief The Compatibility API + * + * This file contains the \ref api_compat "Compatibility API". + */ + +#ifndef VA_COMPAT_H +#define VA_COMPAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_compat Compatibility API + * + * The Compatibility API allows older programs that are not ported to + * the current API to still build and run correctly. In particular, + * this exposes older API to allow for backwards source compatibility. + * + * @{ + */ + +/** + * Makes a string literal out of the macro argument + */ +#define VA_CPP_HELPER_STRINGIFY(x) \ + VA_CPP_HELPER_STRINGIFY_(x) +#define VA_CPP_HELPER_STRINGIFY_(x) \ + #x + +/** + * Concatenates two macro arguments at preprocessing time. + */ +#define VA_CPP_HELPER_CONCAT(a, b) \ + VA_CPP_HELPER_CONCAT_(a, b) +#define VA_CPP_HELPER_CONCAT_(a, b) \ + a ## b + +/** + * Generates the number of macro arguments at preprocessing time. + * + * + * Note: this doesn't work for macros with no arguments + */ +#define VA_CPP_HELPER_N_ARGS(...) \ + VA_CPP_HELPER_N_ARGS_(__VA_ARGS__, VA_CPP_HELPER_N_ARGS_LIST_REV()) +#define VA_CPP_HELPER_N_ARGS_(...) \ + VA_CPP_HELPER_N_ARGS_LIST(__VA_ARGS__) +#define VA_CPP_HELPER_N_ARGS_LIST(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a12, a13, a14, a15, a16, N, ...) N +#define VA_CPP_HELPER_N_ARGS_LIST_REV() \ + 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + +/** + * Generates a versioned function alias. + * + * VA_CPP_HELPER_ALIAS(vaSomeFunction, 0,32,0) will generate + * .symber vaSomeFunction_0_32_0, vaSomeFunction@VA_API_0.32.0 + */ +#define VA_CPP_HELPER_ALIAS(func, major, minor, micro) \ + VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@") +#define VA_CPP_HELPER_ALIAS_DEFAULT(func, major, minor, micro) \ + VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@@") +#define VA_CPP_HELPER_ALIAS_(func, major, minor, micro, binding) \ + asm(".symver " #func "_" #major "_" #minor "_" #micro ", " \ + #func binding "VA_API_" #major "." #minor "." #micro) + +/* vaCreateSurfaces() */ + +#ifndef VA_COMPAT_DISABLED +#define vaCreateSurfaces(dpy, ...) \ + VA_CPP_HELPER_CONCAT(vaCreateSurfaces, \ + VA_CPP_HELPER_N_ARGS(dpy, __VA_ARGS__)) \ + (dpy, __VA_ARGS__) +#endif + +#define vaCreateSurfaces6(dpy, width, height, format, num_surfaces, surfaces) \ + (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ + NULL, 0) + +#define vaCreateSurfaces8(dpy, format, width, height, surfaces, num_surfaces, attribs, num_attribs) \ + (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ + attribs, num_attribs) + +/*@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_COMPAT_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_hevc.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_hevc.h new file mode 100644 index 000000000..d61a2834c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_hevc.h @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2014 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_dec_hevc.h + * \brief The HEVC decoding API + * + * This file contains the \ref api_dec_hevc "HEVC decoding API". + */ + +#ifndef VA_DEC_HEVC_H +#define VA_DEC_HEVC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_dec_hevc HEVC decoding API + * + * This HEVC decoding API supports Main and Main Still Picture profiles. + * And it supports both short slice format and long slice format. + * + * @{ + */ + +/** + * \brief HEVC Decoding Picture Parameter Buffer Structure + * + * This structure conveys picture level parameters and should be sent once + * per frame. + * + */ +typedef struct _VAPictureParameterBufferHEVC +{ + /** \brief buffer description of decoded current picture + * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD + * of "flags" fields are meaningful. + */ + VAPictureHEVC CurrPic; + /** \brief buffer description of reference frames in DPB */ + VAPictureHEVC ReferenceFrames[15]; + /** \brief picture width, shall be integer multiple of minimum CB size. */ + uint16_t pic_width_in_luma_samples; + /** \brief picture height, shall be integer multiple of minimum CB size. */ + uint16_t pic_height_in_luma_samples; + + + union + { + struct + { + /** following flags have same syntax and semantic as those in HEVC spec */ + uint32_t chroma_format_idc : 2; + uint32_t separate_colour_plane_flag : 1; + uint32_t pcm_enabled_flag : 1; + uint32_t scaling_list_enabled_flag : 1; + uint32_t transform_skip_enabled_flag : 1; + uint32_t amp_enabled_flag : 1; + uint32_t strong_intra_smoothing_enabled_flag : 1; + uint32_t sign_data_hiding_enabled_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t cu_qp_delta_enabled_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t weighted_bipred_flag : 1; + uint32_t transquant_bypass_enabled_flag : 1; + uint32_t tiles_enabled_flag : 1; + uint32_t entropy_coding_sync_enabled_flag : 1; + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + uint32_t loop_filter_across_tiles_enabled_flag : 1; + uint32_t pcm_loop_filter_disabled_flag : 1; + /** set based on sps_max_num_reorder_pics of current temporal layer. */ + uint32_t NoPicReorderingFlag : 1; + /** picture has no B slices */ + uint32_t NoBiPredFlag : 1; + + uint32_t ReservedBits : 11; + } bits; + uint32_t value; + } pic_fields; + + /** following parameters have same syntax with those in HEVC spec */ + /** \brief DPB size for current temporal layer */ + uint8_t sps_max_dec_pic_buffering_minus1; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t pcm_sample_bit_depth_luma_minus1; + uint8_t pcm_sample_bit_depth_chroma_minus1; + uint8_t log2_min_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_luma_coding_block_size; + uint8_t log2_min_transform_block_size_minus2; + uint8_t log2_diff_max_min_transform_block_size; + uint8_t log2_min_pcm_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_pcm_luma_coding_block_size; + uint8_t max_transform_hierarchy_depth_intra; + uint8_t max_transform_hierarchy_depth_inter; + int8_t init_qp_minus26; + uint8_t diff_cu_qp_delta_depth; + int8_t pps_cb_qp_offset; + int8_t pps_cr_qp_offset; + uint8_t log2_parallel_merge_level_minus2; + uint8_t num_tile_columns_minus1; + uint8_t num_tile_rows_minus1; + /** + * when uniform_spacing_flag equals 1, application should populate + * column_width_minus[], and row_height_minus1[] with approperiate values. + */ + uint16_t column_width_minus1[19]; + uint16_t row_height_minus1[21]; + + /** + * The Following Parameters are needed for Short Slice Format Only. + * Only format decoding can ignore them. + */ + + /** + * \brief Parameters needed for parsing slice segment headers + */ + union + { + struct + { + /** following parameters have same syntax with those in HEVC spec */ + uint32_t lists_modification_present_flag : 1; + uint32_t long_term_ref_pics_present_flag : 1; + uint32_t sps_temporal_mvp_enabled_flag : 1; + uint32_t cabac_init_present_flag : 1; + uint32_t output_flag_present_flag : 1; + uint32_t dependent_slice_segments_enabled_flag : 1; + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; + uint32_t sample_adaptive_offset_enabled_flag : 1; + uint32_t deblocking_filter_override_enabled_flag : 1; + uint32_t pps_disable_deblocking_filter_flag : 1; + uint32_t slice_segment_header_extension_present_flag : 1; + + /** current picture with NUT between 16 and 21 inclusive */ + uint32_t RapPicFlag : 1; + /** current picture with NUT between 19 and 20 inclusive */ + uint32_t IdrPicFlag : 1; + /** current picture has only intra slices */ + uint32_t IntraPicFlag : 1; + + uint32_t ReservedBits : 18; + } bits; + uint32_t value; + } slice_parsing_fields; + + /** following parameters have same syntax with those in HEVC spec */ + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t num_short_term_ref_pic_sets; + uint8_t num_long_term_ref_pic_sps; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + int8_t pps_beta_offset_div2; + int8_t pps_tc_offset_div2; + uint8_t num_extra_slice_header_bits; + + /** + * \brief number of bits that structure + * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice + * segment header when short_term_ref_pic_set_sps_flag equals 0. + * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. + * the bit count is calculated after emulation prevention bytes are removed + * from bit streams. + * This variable is used for accelorater to skip parsing the + * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. + */ + uint32_t st_rps_bits; + +} VAPictureParameterBufferHEVC; + + + +/** + * \brief HEVC Slice Parameter Buffer Structure For Short Format + * + * VASliceParameterBufferBaseHEVC structure should be accompanied by a + * slice data buffer, which holds the whole raw slice NAL unit bit streams + * including start code prefix and emulation prevention bytes not removed. + * + * This structure conveys parameters related to slice segment header and should + * be sent once per slice. + * + * For long format, this data structure is not sent by application. + * + */ +typedef struct _VASliceParameterBufferBaseHEVC +{ + /** @name Codec-independent Slice Parameter Buffer base. */ + + /**@{*/ + + /** \brief Number of bytes in the slice data buffer for this slice + * counting from and including NAL unit header. + */ + uint32_t slice_data_size; + /** \brief The offset to the NAL unit header for this slice */ + uint32_t slice_data_offset; + /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ + uint16_t slice_data_flag; + /**@}*/ + +} VASliceParameterBufferBaseHEVC; + + + + +/** + * \brief HEVC Slice Parameter Buffer Structure For Long Format + * + * VASliceParameterBufferHEVC structure should be accompanied by a + * slice data buffer, which holds the whole raw slice NAL unit bit streams + * including start code prefix and emulation prevention bytes not removed. + * + * This structure conveys parameters related to slice segment header and should + * be sent once per slice. + * + * For short format, this data structure is not sent by application. + * + */ +typedef struct _VASliceParameterBufferHEVC +{ + /** @name Codec-independent Slice Parameter Buffer base. */ + + /**@{*/ + + /** \brief Number of bytes in the slice data buffer for this slice + * counting from and including NAL unit header. + */ + uint32_t slice_data_size; + /** \brief The offset to the NAL unit header for this slice */ + uint32_t slice_data_offset; + /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ + uint16_t slice_data_flag; + /** + * \brief Byte offset from NAL unit header to the begining of slice_data(). + * + * This byte offset is relative to and includes the NAL unit header + * and represents the number of bytes parsed in the slice_header() + * after the removal of any emulation prevention bytes in + * there. However, the slice data buffer passed to the hardware is + * the original bitstream, thus including any emulation prevention + * bytes. + */ + uint32_t slice_data_byte_offset; + /** HEVC syntax element. */ + uint32_t slice_segment_address; + /** \brief index into ReferenceFrames[] + * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. + * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. + * value range [0..14, 0xFF], where 0xFF indicates invalid entry. + */ + uint8_t RefPicList[2][15]; + union + { + uint32_t value; + struct + { + /** current slice is last slice of picture. */ + uint32_t LastSliceOfPic : 1; + /** HEVC syntax element. */ + uint32_t dependent_slice_segment_flag : 1; + /** HEVC syntax element. */ + uint32_t slice_type : 2; + /** HEVC syntax element. */ + uint32_t color_plane_id : 2; + /** HEVC syntax element. */ + uint32_t slice_sao_luma_flag : 1; + /** HEVC syntax element. */ + uint32_t slice_sao_chroma_flag : 1; + /** HEVC syntax element. */ + uint32_t mvd_l1_zero_flag : 1; + /** HEVC syntax element. */ + uint32_t cabac_init_flag : 1; + /** HEVC syntax element. */ + uint32_t slice_temporal_mvp_enabled_flag : 1; + /** HEVC syntax element. */ + uint32_t slice_deblocking_filter_disabled_flag : 1; + /** HEVC syntax element. */ + uint32_t collocated_from_l0_flag : 1; + /** HEVC syntax element. */ + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + uint32_t reserved : 18; + } fields; + } LongSliceFlags; + + /** HEVC syntax element. Collocated Reference Picture Index. + * index to RefPicList[0][] or RefPicList[1][]. + * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. + * value range [0..14, 0xFF]. + */ + uint8_t collocated_ref_idx; + /** HEVC syntax element. + * if num_ref_idx_active_override_flag equals 0, host decoder should + * set its value to num_ref_idx_l0_default_minus1. + */ + uint8_t num_ref_idx_l0_active_minus1; + /** HEVC syntax element. + * if num_ref_idx_active_override_flag equals 0, host decoder should + * set its value to num_ref_idx_l1_default_minus1. + */ + uint8_t num_ref_idx_l1_active_minus1; + /** HEVC syntax element. */ + int8_t slice_qp_delta; + /** HEVC syntax element. */ + int8_t slice_cb_qp_offset; + /** HEVC syntax element. */ + int8_t slice_cr_qp_offset; + /** HEVC syntax element. */ + int8_t slice_beta_offset_div2; + /** HEVC syntax element. */ + int8_t slice_tc_offset_div2; + /** HEVC syntax element. */ + uint8_t luma_log2_weight_denom; + /** HEVC syntax element. */ + int8_t delta_chroma_log2_weight_denom; + /** HEVC syntax element. */ + int8_t delta_luma_weight_l0[15]; + /** HEVC syntax element. */ + int8_t luma_offset_l0[15]; + /** HEVC syntax element. */ + int8_t delta_chroma_weight_l0[15][2]; + /** corresponds to HEVC spec variable of the same name. */ + int8_t ChromaOffsetL0[15][2]; + /** HEVC syntax element. */ + int8_t delta_luma_weight_l1[15]; + /** HEVC syntax element. */ + int8_t luma_offset_l1[15]; + /** HEVC syntax element. */ + int8_t delta_chroma_weight_l1[15][2]; + /** corresponds to HEVC spec variable of the same name. */ + int8_t ChromaOffsetL1[15][2]; + /** HEVC syntax element. */ + uint8_t five_minus_max_num_merge_cand; + /**@}*/ + +} VASliceParameterBufferHEVC; + + + +/** + * \brief HEVC Inverse Quantization Matrix Buffer Structure + * + * This structure is sent once per frame, + * and only when scaling_list_enabled_flag = 1. + * When sps_scaling_list_data_present_flag = 0, app still + * needs to send in this structure with default matrix values. + * + * Matrix entries are in raster scan order which follows HEVC spec. + */ +typedef struct _VAIQMatrixBufferHEVC +{ + /** + * \brief scaling lists, + * corresponds to same HEVC spec syntax element + * ScalingList[ i ][ MatrixID ][ j ]. + * + * \brief 4x4 scaling, + * correspongs i = 0, MatrixID is in the range of 0 to 5, + * inclusive. And j is in the range of 0 to 15, inclusive. + */ + uint8_t ScalingList4x4[6][16]; + /** + * \brief 8x8 scaling, + * correspongs i = 1, MatrixID is in the range of 0 to 5, + * inclusive. And j is in the range of 0 to 63, inclusive. + */ + uint8_t ScalingList8x8[6][64]; + /** + * \brief 16x16 scaling, + * correspongs i = 2, MatrixID is in the range of 0 to 5, + * inclusive. And j is in the range of 0 to 63, inclusive. + */ + uint8_t ScalingList16x16[6][64]; + /** + * \brief 32x32 scaling, + * correspongs i = 3, MatrixID is in the range of 0 to 1, + * inclusive. And j is in the range of 0 to 63, inclusive. + */ + uint8_t ScalingList32x32[2][64]; + /** + * \brief DC values of the 16x16 scaling lists, + * corresponds to HEVC spec syntax + * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 + * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. + */ + uint8_t ScalingListDC16x16[6]; + /** + * \brief DC values of the 32x32 scaling lists, + * corresponds to HEVC spec syntax + * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 + * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. + */ + uint8_t ScalingListDC32x32[2]; +} VAIQMatrixBufferHEVC; + + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DEC_HEVC_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_jpeg.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_jpeg.h new file mode 100644 index 000000000..644ce3b81 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_jpeg.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_dec_jpeg.h + * \brief The JPEG decoding API + * + * This file contains the \ref api_dec_jpeg "JPEG decoding API". + */ + +#ifndef VA_DEC_JPEG_H +#define VA_DEC_JPEG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + * \defgroup api_dec_jpeg JPEG decoding API + * + * This JPEG decoding API supports Baseline profile only. + * + * @{ + */ + +/** + * \brief Picture parameter for JPEG decoding. + * + * This structure holds information from the frame header, along with + * definitions from additional segments. + */ +typedef struct _VAPictureParameterBufferJPEGBaseline { + /** \brief Picture width in pixels. */ + unsigned short picture_width; + /** \brief Picture height in pixels. */ + unsigned short picture_height; + + struct { + /** \brief Component identifier (Ci). */ + unsigned char component_id; + /** \brief Horizontal sampling factor (Hi). */ + unsigned char h_sampling_factor; + /** \brief Vertical sampling factor (Vi). */ + unsigned char v_sampling_factor; + /* \brief Quantization table selector (Tqi). */ + unsigned char quantiser_table_selector; + } components[255]; + /** \brief Number of components in frame (Nf). */ + unsigned char num_components; +} VAPictureParameterBufferJPEGBaseline; + +/** + * \brief Quantization table for JPEG decoding. + * + * This structure holds the complete quantization tables. This is an + * aggregation of all quantization table (DQT) segments maintained by + * the application. i.e. up to 4 quantization tables are stored in + * there for baseline profile. + * + * The #load_quantization_table array can be used as a hint to notify + * the VA driver implementation about which table(s) actually changed + * since the last submission of this buffer. + * + * The #quantiser_table values are specified in zig-zag scan order. + */ +typedef struct _VAIQMatrixBufferJPEGBaseline { + /** \brief Specifies which #quantiser_table is valid. */ + unsigned char load_quantiser_table[4]; + /** \brief Quanziation tables indexed by table identifier (Tqi). */ + unsigned char quantiser_table[4][64]; +} VAIQMatrixBufferJPEGBaseline; + +/** + * \brief Slice parameter for JPEG decoding. + * + * This structure holds information from the scan header, along with + * definitions from additional segments. The associated slice data + * buffer holds all entropy coded segments (ECS) in the scan. + */ +typedef struct _VASliceParameterBufferJPEGBaseline { + /** @name Codec-independent Slice Parameter Buffer base. */ + /**@{*/ + /** \brief Number of bytes in the slice data buffer for this slice. */ + unsigned int slice_data_size; + /** \brief The offset to the first byte of the first MCU. */ + unsigned int slice_data_offset; + /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */ + unsigned int slice_data_flag; + /**@}*/ + + /** \brief Scan horizontal position. */ + unsigned int slice_horizontal_position; + /** \brief Scan vertical position. */ + unsigned int slice_vertical_position; + + struct { + /** \brief Scan component selector (Csj). */ + unsigned char component_selector; + /** \brief DC entropy coding table selector (Tdj). */ + unsigned char dc_table_selector; + /** \brief AC entropy coding table selector (Taj). */ + unsigned char ac_table_selector; + } components[4]; + /** \brief Number of components in scan (Ns). */ + unsigned char num_components; + + /** \brief Restart interval definition (Ri). */ + unsigned short restart_interval; + /** \brief Number of MCUs in a scan. */ + unsigned int num_mcus; +} VASliceParameterBufferJPEGBaseline; + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DEC_JPEG_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_vp8.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_vp8.h new file mode 100644 index 000000000..32830cb4a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_dec_vp8.h @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_dec_vp.h + * \brief VP8 decoding API + * + * This file contains the \ref api_dec_vp8 "VP8 decoding API". + */ + +#ifndef VA_DEC_VP8_H +#define VA_DEC_VP8_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_dec_vp8 VP8 decoding API + * + * @{ + */ + +/** + * \brief VPX Bool Coder Context structure + * + * This common structure is defined for potential sharing by other VP formats + * + */ +typedef struct _VABoolCoderContextVPX +{ + /* partition 0 "range" */ + unsigned char range; + /* partition 0 "value" */ + unsigned char value; + /* + * 'partition 0 number of shifts before an output byte is available' + * it is the number of remaining bits in 'value' for decoding, range [0, 7]. + */ + + unsigned char count; +} VABoolCoderContextVPX; + +/** + * \brief VP8 Decoding Picture Parameter Buffer Structure + * + * This structure conveys frame level parameters and should be sent once + * per frame. + * + */ +typedef struct _VAPictureParameterBufferVP8 +{ + /* frame width in pixels */ + unsigned int frame_width; + /* frame height in pixels */ + unsigned int frame_height; + + /* specifies the "last" reference frame */ + VASurfaceID last_ref_frame; + /* specifies the "golden" reference frame */ + VASurfaceID golden_ref_frame; + /* specifies the "alternate" referrence frame */ + VASurfaceID alt_ref_frame; + /* specifies the out-of-loop deblocked frame, not used currently */ + VASurfaceID out_of_loop_frame; + + union { + struct { + /* same as key_frame in bitstream syntax, 0 means a key frame */ + unsigned int key_frame : 1; + /* same as version in bitstream syntax */ + unsigned int version : 3; + /* same as segmentation_enabled in bitstream syntax */ + unsigned int segmentation_enabled : 1; + /* same as update_mb_segmentation_map in bitstream syntax */ + unsigned int update_mb_segmentation_map : 1; + /* same as update_segment_feature_data in bitstream syntax */ + unsigned int update_segment_feature_data : 1; + /* same as filter_type in bitstream syntax */ + unsigned int filter_type : 1; + /* same as sharpness_level in bitstream syntax */ + unsigned int sharpness_level : 3; + /* same as loop_filter_adj_enable in bitstream syntax */ + unsigned int loop_filter_adj_enable : 1; + /* same as mode_ref_lf_delta_update in bitstream syntax */ + unsigned int mode_ref_lf_delta_update : 1; + /* same as sign_bias_golden in bitstream syntax */ + unsigned int sign_bias_golden : 1; + /* same as sign_bias_alternate in bitstream syntax */ + unsigned int sign_bias_alternate : 1; + /* same as mb_no_coeff_skip in bitstream syntax */ + unsigned int mb_no_coeff_skip : 1; + /* flag to indicate that loop filter should be disabled */ + unsigned int loop_filter_disable : 1; + } bits; + unsigned int value; + } pic_fields; + + /* + * probabilities of the segment_id decoding tree and same as + * mb_segment_tree_probs in the spec. + */ + unsigned char mb_segment_tree_probs[3]; + + /* Post-adjustment loop filter levels for the 4 segments */ + unsigned char loop_filter_level[4]; + /* loop filter deltas for reference frame based MB level adjustment */ + char loop_filter_deltas_ref_frame[4]; + /* loop filter deltas for coding mode based MB level adjustment */ + char loop_filter_deltas_mode[4]; + + /* same as prob_skip_false in bitstream syntax */ + unsigned char prob_skip_false; + /* same as prob_intra in bitstream syntax */ + unsigned char prob_intra; + /* same as prob_last in bitstream syntax */ + unsigned char prob_last; + /* same as prob_gf in bitstream syntax */ + unsigned char prob_gf; + + /* + * list of 4 probabilities of the luma intra prediction mode decoding + * tree and same as y_mode_probs in frame header + */ + unsigned char y_mode_probs[4]; + /* + * list of 3 probabilities of the chroma intra prediction mode decoding + * tree and same as uv_mode_probs in frame header + */ + unsigned char uv_mode_probs[3]; + /* + * updated mv decoding probabilities and same as mv_probs in + * frame header + */ + unsigned char mv_probs[2][19]; + + VABoolCoderContextVPX bool_coder_ctx; + +} VAPictureParameterBufferVP8; + +/** + * \brief VP8 Slice Parameter Buffer Structure + * + * This structure conveys parameters related to data partitions and should be + * sent once per frame. Slice data buffer of VASliceDataBufferType is used + * to send the partition data. + * + */ +typedef struct _VASliceParameterBufferVP8 +{ + /* + * number of bytes in the slice data buffer for the partitions + */ + unsigned int slice_data_size; + /* + * offset to the first byte of partition data (control partition) + */ + unsigned int slice_data_offset; + /* + * see VA_SLICE_DATA_FLAG_XXX definitions + */ + unsigned int slice_data_flag; + /* + * offset to the first bit of MB from the first byte of partition data(slice_data_offset) + */ + unsigned int macroblock_offset; + + /* + * Partitions + * (1<lvl[seg][ref][mode] in VP9 code, + * where m is [ref], and n is [mode] in FilterLevel[m][n]. + */ + uint8_t filter_level[4][2]; + /** \brief Specifies per segment Luma AC quantization scale. + * Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer() + * function of VP9 code. + */ + int16_t luma_ac_quant_scale; + /** \brief Specifies per segment Luma DC quantization scale. + * Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer() + * function of VP9 code. + */ + int16_t luma_dc_quant_scale; + /** \brief Specifies per segment Chroma AC quantization scale. + * Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer() + * function of VP9 code. + */ + int16_t chroma_ac_quant_scale; + /** \brief Specifies per segment Chroma DC quantization scale. + * Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer() + * function of VP9 code. + */ + int16_t chroma_dc_quant_scale; + + /**@}*/ + +} VASegmentParameterVP9; + + + +/** + * \brief VP9 Slice Parameter Buffer Structure + * + * This structure conveys parameters related to segmentation data and should be + * sent once per frame. + * + * When segmentation is disabled, only SegParam[0] has valid values, + * all other entries should be populated with 0. + * Otherwise, all eight entries should be valid. + * + * Slice data buffer of VASliceDataBufferType is used + * to send the bitstream which should include whole or part of partition 0 + * (at least compressed header) to the end of frame. + * + */ +typedef struct _VASliceParameterBufferVP9 +{ + /**@{*/ + /** \brief The byte count of current frame in the bitstream buffer, + * starting from first byte of the buffer. + * It uses the name slice_data_size to be consitent with other codec, + * but actually means frame_data_size. + */ + uint32_t slice_data_size; + /** + * offset to the first byte of partition data (control partition) + */ + uint32_t slice_data_offset; + /** + * see VA_SLICE_DATA_FLAG_XXX definitions + */ + uint32_t slice_data_flag; + + /** + * \brief per segment information + */ + VASegmentParameterVP9 seg_param[8]; + + /**@}*/ + +} VASliceParameterBufferVP9; + + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DEC_VP9_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_drmcommon.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_drmcommon.h new file mode 100644 index 000000000..76820a3d8 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_drmcommon.h @@ -0,0 +1,76 @@ +/* + * va_drmcommon.h - Common utilities for DRM-based drivers + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_DRM_COMMON_H +#define VA_DRM_COMMON_H + +/** \brief DRM authentication type. */ +enum { + /** \brief Disconnected. */ + VA_DRM_AUTH_NONE = 0, + /** + * \brief Connected. Authenticated with DRI1 protocol. + * + * @deprecated + * This is a deprecated authentication type. All DRI-based drivers have + * been migrated to use the DRI2 protocol. Newly written drivers shall + * use DRI2 protocol only, or a custom authentication means. e.g. opt + * for authenticating on the VA driver side, instead of libva side. + */ + VA_DRM_AUTH_DRI1 = 1, + /** + * \brief Connected. Authenticated with DRI2 protocol. + * + * This is only useful to VA/X11 drivers. The libva-x11 library provides + * a helper function VA_DRI2Authenticate() for authenticating the + * connection. However, DRI2 conformant drivers don't need to call that + * function since authentication happens on the libva side, implicitly. + */ + VA_DRM_AUTH_DRI2 = 2, + /** + * \brief Connected. Authenticated with some alternate raw protocol. + * + * This authentication mode is mainly used in non-VA/X11 drivers. + * Authentication happens through some alternative method, at the + * discretion of the VA driver implementation. + */ + VA_DRM_AUTH_CUSTOM = 3 +}; + +/** \brief Base DRM state. */ +struct drm_state { + /** \brief DRM connection descriptor. */ + int fd; + /** \brief DRM authentication type. */ + int auth_type; +}; + +/** \brief Kernel DRM buffer memory type. */ +#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000 +/** \brief DRM PRIME memory type. */ +#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000 + +#endif /* VA_DRM_COMMON_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_h264.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_h264.h new file mode 100644 index 000000000..604877faf --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_h264.h @@ -0,0 +1,592 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc_h264.h + * \brief The H.264 encoding API + * + * This file contains the \ref api_enc_h264 "H.264 encoding API". + */ + +#ifndef VA_ENC_H264_H +#define VA_ENC_H264_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_enc_h264 H.264 encoding API + * + * @{ + */ + +/** + * @name Picture flags + * + * Those flags flags are meant to signal when a picture marks the end + * of a sequence, a stream, or even both at once. + * + * @{ + */ +/** + * \brief Marks the last picture in the sequence. + * + * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. + */ +#define H264_LAST_PICTURE_EOSEQ 0x01 +/** + * \brief Marks the last picture in the stream. + * + * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. + */ +#define H264_LAST_PICTURE_EOSTREAM 0x02 +/**@}*/ + +/** + * \brief Packed header types specific to H.264 encoding. + * + * Types of packed headers generally used for H.264 encoding. Each + * associated packed header data buffer shall contain the start code + * prefix 0x000001 followed by the complete NAL unit, thus also + * including the \c nal_unit_type. + * + * Note: the start code prefix can contain an arbitrary number of leading + * zeros. The driver will skip them for emulation prevention bytes insertion, + * if necessary. + */ +typedef enum { + /** + * \brief Packed Sequence Parameter Set (SPS). + * + * The corresponding packed header data buffer shall contain the + * complete seq_parameter_set_rbsp() syntax element. + * + * Note: packed \c nal_unit_type shall be equal to 7. + */ + VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, + /** + * \brief Packed Picture Parameter Set (PPS). + * + * The corresponding packed header data buffer shall contain the + * complete pic_parameter_set_rbsp() syntax element. + * + * Note: packed \c nal_unit_type shall be equal to 8. + */ + VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, + /** + * \brief Packed slice header. + * + * The corresponding packed header data buffer shall contain the + * \c slice_header() syntax element only, along with any start + * code prefix and NAL unit type preceeding it. i.e. this means + * that the buffer does not contain any of the \c slice_data() or + * the \c rbsp_slice_trailing_bits(). + * + * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR + * picture), or 5 (IDR picture). + */ + VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, + /** + * \brief Packed Supplemental Enhancement Information (SEI). + * + * The corresponding packed header data buffer shall contain the + * complete sei_rbsp() syntax element, thus including several + * sei_message() elements if necessary. + * + * Note: packed \c nal_unit_type shall be equal to 6. + */ + VAEncPackedHeaderH264_SEI = (VAEncPackedHeaderMiscMask | 1), +} VAEncPackedHeaderTypeH264; + +/** + * \brief Sequence parameter for H.264 encoding in baseline, main & high + * profiles. + * + * This structure holds information for \c seq_parameter_set_data() as + * defined by the H.264 specification. + * + * If packed sequence headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + * If \c seq_scaling_matrix_present_flag is set to \c 1, then a + * #VAIQMatrixBufferH264 buffer shall also be provided within the same + * \c vaRenderPicture() call as this sequence parameter buffer. + */ +typedef struct _VAEncSequenceParameterBufferH264 { + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char seq_parameter_set_id; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char level_idc; + /** \brief Period between I frames. */ + unsigned int intra_period; + /** \brief Period between IDR frames. */ + unsigned int intra_idr_period; + /** \brief Period between I/P frames. */ + unsigned int ip_period; + /** + * \brief Initial bitrate set for this sequence in CBR or VBR modes. + * + * This field represents the initial bitrate value for this + * sequence if CBR or VBR mode is used, i.e. if the encoder + * pipeline was created with a #VAConfigAttribRateControl + * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. + * + * The bitrate can be modified later on through + * #VAEncMiscParameterRateControl buffers. + */ + unsigned int bits_per_second; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int max_num_ref_frames; + /** \brief Picture width in macroblocks. */ + unsigned short picture_width_in_mbs; + /** \brief Picture height in macroblocks. */ + unsigned short picture_height_in_mbs; + + union { + struct { + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int chroma_format_idc : 2; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int frame_mbs_only_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int mb_adaptive_frame_field_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int seq_scaling_matrix_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int direct_8x8_inference_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int log2_max_frame_num_minus4 : 4; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int pic_order_cnt_type : 2; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int delta_pic_order_always_zero_flag : 1; + } bits; + unsigned int value; + } seq_fields; + + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char bit_depth_luma_minus8; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char bit_depth_chroma_minus8; + + /** if pic_order_cnt_type == 1 */ + /**@{*/ + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char num_ref_frames_in_pic_order_cnt_cycle; + /** \brief Same as the H.264 bitstream syntax element. */ + int offset_for_non_ref_pic; + /** \brief Same as the H.264 bitstream syntax element. */ + int offset_for_top_to_bottom_field; + /** \brief Same as the H.264 bitstream syntax element. */ + int offset_for_ref_frame[256]; + /**@}*/ + + /** @name Cropping (optional) */ + /**@{*/ + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char frame_cropping_flag; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int frame_crop_left_offset; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int frame_crop_right_offset; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int frame_crop_top_offset; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int frame_crop_bottom_offset; + /**@}*/ + + /** @name VUI parameters (optional) */ + /**@{*/ + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char vui_parameters_present_flag; + union { + struct { + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int aspect_ratio_info_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int timing_info_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int bitstream_restriction_flag : 1; + /** \brief Range: 0 to 16, inclusive. */ + unsigned int log2_max_mv_length_horizontal : 5; + /** \brief Range: 0 to 16, inclusive. */ + unsigned int log2_max_mv_length_vertical : 5; + } bits; + unsigned int value; + } vui_fields; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char aspect_ratio_idc; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int sar_width; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int sar_height; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int num_units_in_tick; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int time_scale; + /**@}*/ +} VAEncSequenceParameterBufferH264; + +/** + * \brief Picture parameter for H.264 encoding in baseline, main & high + * profiles. + * + * This structure holds information for \c pic_parameter_set_rbsp() as + * defined by the H.264 specification. + * + * If packed picture headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + * If \c pic_scaling_matrix_present_flag is set to \c 1, then a + * #VAIQMatrixBufferH264 buffer shall also be provided within the same + * \c vaRenderPicture() call as this picture parameter buffer. + */ +typedef struct _VAEncPictureParameterBufferH264 { + /** + * \brief Information about the picture to be encoded. + * + * See #VAPictureH264 for further description of each field. + * Note that CurrPic.picture_id represents the reconstructed + * (decoded) picture. User provides a scratch VA surface ID here. + */ + VAPictureH264 CurrPic; + /** + * \brief Decoded Picture Buffer (DPB). + * + * This array represents the list of reconstructed (decoded) + * frames used as reference. It is important to keep track of + * reconstructed frames so that they can be used later on as + * reference for P or B-frames encoding. + */ + VAPictureH264 ReferenceFrames[16]; + /** + * \brief Output encoded bitstream. + * + * \ref coded_buf has type #VAEncCodedBufferType. It should be + * large enough to hold the compressed NAL slice and possibly SPS + * and PPS NAL units. + */ + VABufferID coded_buf; + + /** \brief The picture parameter set referred to in the slice header. */ + unsigned char pic_parameter_set_id; + /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ + unsigned char seq_parameter_set_id; + + /** + * \brief OR'd flags describing whether the picture is the last one or not. + * + * This fields holds 0 if the picture to be encoded is not the last + * one in the stream or sequence. Otherwise, it is a combination of + * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. + */ + unsigned char last_picture; + + /** \brief The picture identifier. + * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. + */ + unsigned short frame_num; + + /** \brief \c pic_init_qp_minus26 + 26. */ + unsigned char pic_init_qp; + /** \brief Maximum reference index for reference picture list 0. + * Range: 0 to 31, inclusive. + */ + unsigned char num_ref_idx_l0_active_minus1; + /** \brief Maximum reference index for reference picture list 1. + * Range: 0 to 31, inclusive. + */ + unsigned char num_ref_idx_l1_active_minus1; + + /** \brief Range: -12 to 12, inclusive. */ + signed char chroma_qp_index_offset; + /** \brief Range: -12 to 12, inclusive. */ + signed char second_chroma_qp_index_offset; + + union { + struct { + /** \brief Is picture an IDR picture? */ + unsigned int idr_pic_flag : 1; + /** \brief Is picture a reference picture? */ + unsigned int reference_pic_flag : 2; + /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ + unsigned int entropy_coding_mode_flag : 1; + /** \brief Is weighted prediction applied to P slices? */ + unsigned int weighted_pred_flag : 1; + /** \brief Range: 0 to 2, inclusive. */ + unsigned int weighted_bipred_idc : 2; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int constrained_intra_pred_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int transform_8x8_mode_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int deblocking_filter_control_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int redundant_pic_cnt_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int pic_order_present_flag : 1; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned int pic_scaling_matrix_present_flag : 1; + } bits; + unsigned int value; + } pic_fields; +} VAEncPictureParameterBufferH264; + +/** + * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. + * + * This structure holds information for \c + * slice_layer_without_partitioning_rbsp() as defined by the H.264 + * specification. + * + * If packed slice headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + * If per-macroblock encoder configuration is needed, \c macroblock_info + * references a buffer of type #VAEncMacroblockParameterBufferH264. This + * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed + * by subsequent calls to vaRenderPicture() and then can be re-used + * without re-allocating the whole buffer. + */ +typedef struct _VAEncSliceParameterBufferH264 { + /** \brief Starting MB address for this slice. */ + unsigned int macroblock_address; + /** \brief Number of macroblocks in this slice. */ + unsigned int num_macroblocks; + /** + * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. + * + * If per-MB encoder configuration is needed, then \ref macroblock_info + * references a buffer of type #VAEncMacroblockParameterBufferH264 + * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id + * is set to \c VA_INVALID_ID and per-MB configuration is derived + * from this slice parameter. + * + * The \c macroblock_info buffer must hold \ref num_macroblocks + * elements. + */ + VABufferID macroblock_info; + /** \brief Slice type. + * Range: 0..2, 5..7, i.e. no switching slices. + */ + unsigned char slice_type; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char pic_parameter_set_id; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned short idr_pic_id; + + /** @name If pic_order_cnt_type == 0 */ + /**@{*/ + /** \brief The picture order count modulo MaxPicOrderCntLsb. */ + unsigned short pic_order_cnt_lsb; + /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ + int delta_pic_order_cnt_bottom; + /**@}*/ + /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ + /**@{*/ + /** \brief [0]: top, [1]: bottom. */ + int delta_pic_order_cnt[2]; + /**@}*/ + + /** @name If slice_type == B */ + /**@{*/ + unsigned char direct_spatial_mv_pred_flag; + /**@}*/ + + /** @name If slice_type == P */ + /**@{*/ + /** \brief Specifies if + * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or + * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are + * overriden by the values for this slice. + */ + unsigned char num_ref_idx_active_override_flag; + /** \brief Maximum reference index for reference picture list 0. + * Range: 0 to 31, inclusive. + */ + unsigned char num_ref_idx_l0_active_minus1; + /** \brief Maximum reference index for reference picture list 1. + * Range: 0 to 31, inclusive. + */ + unsigned char num_ref_idx_l1_active_minus1; + /** \brief Reference picture list 0 (for P slices). */ + VAPictureH264 RefPicList0[32]; + /** \brief Reference picture list 1 (for B slices). */ + VAPictureH264 RefPicList1[32]; + /**@}*/ + + /** @name pred_weight_table() */ + /**@{*/ + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char luma_log2_weight_denom; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char chroma_log2_weight_denom; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char luma_weight_l0_flag; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short luma_weight_l0[32]; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short luma_offset_l0[32]; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char chroma_weight_l0_flag; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short chroma_weight_l0[32][2]; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short chroma_offset_l0[32][2]; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char luma_weight_l1_flag; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short luma_weight_l1[32]; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short luma_offset_l1[32]; + /** \brief Same as the H.264 bitstream syntax element. */ + unsigned char chroma_weight_l1_flag; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short chroma_weight_l1[32][2]; + /** \brief Same as the H.264 bitstream syntax element. */ + signed short chroma_offset_l1[32][2]; + /**@}*/ + + /** \brief Range: 0 to 2, inclusive. */ + unsigned char cabac_init_idc; + /** \brief Same as the H.264 bitstream syntax element. */ + signed char slice_qp_delta; + /** @name If deblocking_filter_control_present_flag */ + /**@{*/ + /** \brief Range: 0 to 2, inclusive. */ + unsigned char disable_deblocking_filter_idc; + /** \brief Same as the H.264 bitstream syntax element. */ + signed char slice_alpha_c0_offset_div2; + /** \brief Same as the H.264 bitstream syntax element. */ + signed char slice_beta_offset_div2; + /**@}*/ +} VAEncSliceParameterBufferH264; + +/** + * @name Macroblock neighbour availability bits + * + * \anchor api_enc_h264_mb_pred_avail_bits + * Definitions for macroblock neighbour availability bits used in + * intra prediction mode (non MBAFF only). + * + * @{ + */ +/** \brief References macroblock in the top-left corner. */ +#define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) +/** \brief References macroblock above the current macroblock. */ +#define VA_MB_PRED_AVAIL_TOP (1 << 4) +/** \brief References macroblock in the top-right corner. */ +#define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) +/** \brief References macroblock on the left of the current macroblock. */ +#define VA_MB_PRED_AVAIL_LEFT (1 << 6) +/**@}*/ + +/** + * \brief Macroblock parameter for H.264 encoding in baseline, main & high + * profiles. + * + * This structure holds per-macroblock information. The buffer must be + * allocated with as many elements (macroblocks) as necessary to fit + * the slice to be encoded. Besides, the per-macroblock records must + * be written in a strict raster order and with no gap. i.e. every + * macroblock, regardless of its type, shall have an entry. + */ +typedef struct _VAEncMacroblockParameterBufferH264 { + /** + * \brief Quantization parameter. + * + * Requested quantization parameter. Range: 0 to 51, inclusive. + * If \ref qp is set to 0xff, then the actual value is derived + * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. + */ + unsigned char qp; + + union { + /** @name Data for intra macroblock */ + /**@{*/ + struct { + union { + /** + * \brief Flag specified to override MB neighbour + * availability bits from VME stage. + * + * This flag specifies that macroblock neighbour + * availability bits from the VME stage are overriden + * by the \ref pred_avail_flags hereunder. + */ + unsigned int pred_avail_override_flag : 1; + /** + * \brief Bitwise representation of which macroblocks + * are available for intra prediction. + * + * If the slice is intra-coded, this field represents + * the macroblocks available for intra prediction. + * See \ref api_enc_h264_mb_pred_avail_bits + * "macroblock neighbour availability" bit definitions. + */ + unsigned int pred_avail_flags : 8; + } bits; + unsigned int value; + } intra_fields; + /**@}*/ + + /** @name Data for inter macroblock */ + /**@{*/ + struct { + union { + } bits; + unsigned int value; + } inter_fields; + /**@}*/ + } info; +} VAEncMacroblockParameterBufferH264; + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_ENC_H264_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_hevc.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_hevc.h new file mode 100644 index 000000000..5cd614b81 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_hevc.h @@ -0,0 +1,701 @@ +/* + * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc_hevc.h + * \brief The HEVC encoding API + * + * This file contains the \ref api_enc_hevc "HEVC encoding API". + * + */ + +#ifndef VA_ENC_HEVC_H +#define VA_ENC_HEVC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + * \defgroup api_enc_hevc HEVC encoding API + * + * @{ + */ + +/** + * @name Picture flags + * + * Those flags flags are meant to signal when a picture marks the end + * of a sequence, a stream, or even both at once. + * + * @{ + */ +/** + * \brief Marks the last picture in the sequence. + * + * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. + */ +#define HEVC_LAST_PICTURE_EOSEQ 0x01 +/** + * \brief Marks the last picture in the stream. + * + * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. + */ +#define HEVC_LAST_PICTURE_EOSTREAM 0x02 +/**@}*/ + +/** + * \brief Packed header types specific to HEVC encoding. + * + * Types of packed headers generally used for HEVC encoding. Each + * associated packed header data buffer shall contain the start code + * prefix 0x000001 followed by the complete NAL unit, thus also + * including the \c nal_unit_type. + * + * Note: the start code prefix can contain an arbitrary number of leading + * zeros. The driver will skip them for emulation prevention bytes insertion, + * if necessary. + */ +typedef enum { + /** + * \brief Packed Video Parameter Set (VPS). + * + * The corresponding packed header data buffer shall contain the + * complete video_parameter_set_rbsp() syntax element. + * + * Note: packed \c nal_unit_type shall be equal to 32. + */ + VAEncPackedHeaderHEVC_VPS = VAEncPackedHeaderSequence, + /** + * \brief Packed Sequence Parameter Set (SPS). + * + * The corresponding packed header data buffer shall contain the + * complete seq_parameter_set_rbsp() syntax element. + * + * Note: packed \c nal_unit_type shall be equal to 33. + */ + VAEncPackedHeaderHEVC_SPS = VAEncPackedHeaderSequence, + /** + * \brief Packed Picture Parameter Set (PPS). + * + * The corresponding packed header data buffer shall contain the + * complete pic_parameter_set_rbsp() syntax element. + * + * Note: packed \c nal_unit_type shall be equal to 34. + */ + VAEncPackedHeaderHEVC_PPS = VAEncPackedHeaderPicture, + /** + * \brief Packed slice header. + * + * The corresponding packed header data buffer shall contain the + * \c slice_header() syntax element only, along with any start + * code prefix and NAL unit type preceeding it. i.e. this means + * that the buffer does not contain any of the \c slice_data() or + * the \c rbsp_slice_trailing_bits(). + * + * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP + * picture), or 16 to 21 (IRAP picture). + */ + VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice, + /** + * \brief Packed Supplemental Enhancement Information (SEI). + * + * The corresponding packed header data buffer shall contain the + * complete sei_rbsp() syntax element, thus including several + * sei_message() elements if necessary. + * + * Note: packed \c nal_unit_type shall be equal to 39 or 40. + */ + VAEncPackedHeaderHEVC_SEI = (VAEncPackedHeaderMiscMask | 1), +} VAEncPackedHeaderTypeHEVC; + +/** + * \brief Sequence parameter for HEVC encoding in main & main 10 + * profiles. + * + * This structure holds information for \c seq_parameter_set_data() as + * defined by the HEVC specification. + * + * If packed sequence headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + * If \c seq_scaling_matrix_present_flag is set to \c 1, then a + * #VAQMatrixBufferHEVC buffer shall also be provided within the same + * \c vaRenderPicture() call as this sequence parameter buffer. + */ +typedef struct _VAEncSequenceParameterBufferHEVC { + /** \brief Same as the HEVC bitstream syntax element. + * value range [1..2]. + */ + uint8_t general_profile_idc; + /** \brief Same as the HEVC bitstream syntax element. + * general_level_idc shall be set equal to a value of 30 times the level + * numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2] + */ + uint8_t general_level_idc; + /** \brief Same as the HEVC bitstream syntax element. + * Only value 0 is allowed for level value below 4, exclusive. + */ + uint8_t general_tier_flag; + /** \brief Period between I frames. */ + uint32_t intra_period; + /** \brief Period between IDR frames. */ + uint32_t intra_idr_period; + /** \brief Period between I/P frames. */ + uint32_t ip_period; + /** + * \brief Initial bitrate set for this sequence in CBR or VBR modes. + * + * This field represents the initial bitrate value for this + * sequence if CBR or VBR mode is used, i.e. if the encoder + * pipeline was created with a #VAConfigAttribRateControl + * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. + * + * The bitrate can be modified later on through + * #VAEncMiscParameterRateControl buffers. + */ + uint32_t bits_per_second; + /** \brief Picture width in pixel samples. + * Its value must be multiple of min CU size. + */ + uint16_t pic_width_in_luma_samples; + /** \brief Picture height in pixel samples. + * Its value must be multiple of min CU size. + */ + uint16_t pic_height_in_luma_samples; + + union { + struct { + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t chroma_format_idc : 2; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t separate_colour_plane_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t bit_depth_luma_minus8 : 3; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t bit_depth_chroma_minus8 : 3; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t scaling_list_enabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t strong_intra_smoothing_enabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t amp_enabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t sample_adaptive_offset_enabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t pcm_enabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t pcm_loop_filter_disabled_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t sps_temporal_mvp_enabled_flag : 1; + + uint32_t reserved_bits : 16; + } bits; + uint32_t value; + } seq_fields; + + /** \brief Same as the HEVC bitstream syntax element. + * value range [0..3] + */ + uint8_t log2_min_luma_coding_block_size_minus3; + + /** \brief Same as the HEVC bitstream syntax element. + */ + uint8_t log2_diff_max_min_luma_coding_block_size; + + /** \brief Same as the HEVC bitstream syntax element. + * value range [0..3] + */ + uint8_t log2_min_transform_block_size_minus2; + + /** \brief Same as the HEVC bitstream syntax element. + */ + uint8_t log2_diff_max_min_transform_block_size; + + /** \brief Same as the HEVC bitstream syntax element. + * value range [2] + */ + uint8_t max_transform_hierarchy_depth_inter; + + /** \brief Same as the HEVC bitstream syntax element. + * value range [2] + */ + uint8_t max_transform_hierarchy_depth_intra; + + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t pcm_sample_bit_depth_luma_minus1; + + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t pcm_sample_bit_depth_chroma_minus1; + + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t log2_min_pcm_luma_coding_block_size_minus3; + + /** \brief Derived from the HEVC bitstream syntax element. + * log2_min_pcm_luma_coding_block_size_minus3 + + * log2_diff_max_min_pcm_luma_coding_block_size + */ + uint32_t log2_max_pcm_luma_coding_block_size_minus3; + + /** @name VUI parameters (optional) */ + /**@{*/ + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t vui_parameters_present_flag; + union { + struct { + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t aspect_ratio_info_present_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t neutral_chroma_indication_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t field_seq_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t vui_timing_info_present_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t bitstream_restriction_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t tiles_fixed_structure_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t motion_vectors_over_pic_boundaries_flag : 1; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t restricted_ref_pic_lists_flag : 1; + /** \brief Range: 0 to 16, inclusive. */ + uint32_t log2_max_mv_length_horizontal : 5; + /** \brief Range: 0 to 16, inclusive. */ + uint32_t log2_max_mv_length_vertical : 5; + } bits; + uint32_t value; + } vui_fields; + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t aspect_ratio_idc; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t sar_width; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t sar_height; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t vui_num_units_in_tick; + /** \brief Same as the HEVC bitstream syntax element. */ + uint32_t vui_time_scale; + /** \brief Same as the HEVC bitstream syntax element. */ + uint16_t min_spatial_segmentation_idc; + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t max_bytes_per_pic_denom; + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t max_bits_per_min_cu_denom; + /**@}*/ +} VAEncSequenceParameterBufferHEVC; + +/**************************** + * HEVC data structures + ****************************/ +/** + * \brief Picture parameter for HEVC encoding in main & main 10 + * profiles. + * + * This structure holds information for \c pic_parameter_set_rbsp() as + * defined by the HEVC specification. + * + * If packed picture headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + * If \c pic_scaling_matrix_present_flag is set to \c 1, then a + * #VAQMatrixBufferHEVC buffer shall also be provided within the same + * \c vaRenderPicture() call as this picture parameter buffer. + */ +typedef struct _VAEncPictureParameterBufferHEVC { + /** + * \brief Information about the picture to be encoded. + * + * See #VAPictureHEVC for further description of each field. + * Note that decoded_curr_pic.picture_id represents the reconstructed + * (decoded) picture. User provides a scratch VA surface ID here. + * Long term reference and RPS related fields should be set to 0 + * and ignored. + */ + VAPictureHEVC decoded_curr_pic; + /** + * \brief Decoded Picture Buffer (DPB). + * + * This array represents the list of reconstructed (decoded) + * frames used as reference. It is important to keep track of + * reconstructed frames so that they can be used later on as + * reference for P or B-frames encoding. + */ + VAPictureHEVC reference_frames[15]; + /** + * \brief Output encoded bitstream. + * + * \ref coded_buf has type #VAEncCodedBufferType. It should be + * large enough to hold the compressed NAL slice and possibly VPS, SPS + * and PPS NAL units, and other NAL units such as SEI. + */ + VABufferID coded_buf; + + /** \brief collocated reference picture buffer index of ReferenceFrames[]. + * Please note it is different from HEVC syntac element collocated_ref_idx. + * When the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0, + * collocated_ref_pic_index should take value 0xFF. . + * Range: [0..14, 0xFF] + */ + uint8_t collocated_ref_pic_index; + + /** + * \brief OR'd flags describing whether the picture is the last one or not. + * + * This fields holds 0 if the picture to be encoded is not the last + * one in the stream or sequence. Otherwise, it is a combination of + * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM. + */ + uint8_t last_picture; + + /** \brief \c init_qp_minus26 + 26. */ + uint8_t pic_init_qp; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t diff_cu_qp_delta_depth; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + int8_t pps_cb_qp_offset; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + int8_t pps_cr_qp_offset; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t num_tile_columns_minus1; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t num_tile_rows_minus1; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t column_width_minus1[19]; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t row_height_minus1[21]; + + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint8_t log2_parallel_merge_level_minus2; + + /** \brief Application may set the CTU bit size limit based on + * spec requirement (A.3.2), or other value for special purpose. + * If the value is set 0, no bit size limit is checked. + */ + uint8_t ctu_max_bitsize_allowed; + + /** \brief Maximum reference index for reference picture list 0. + * value range: [0..14]. + */ + uint8_t num_ref_idx_l0_default_active_minus1; + + /** \brief Maximum reference index for reference picture list 1. + * value range: [0..14]. + */ + uint8_t num_ref_idx_l1_default_active_minus1; + + /** \brief PPS header + * Used by GPU to generate new slice headers in slice size control. + * value range: [0..63]. + */ + uint8_t slice_pic_parameter_set_id; + + /** \brief NAL unit type + * Used by GPU to generate new slice headers in slice size control. + * value range: [0..63]. + */ + uint8_t nal_unit_type; + + union { + struct { + /** \brief Is picture an IDR picture? */ + uint32_t idr_pic_flag : 1; + /** \brief Picture type. + * I - 1; + * P - 2; + * B - 3; + * B1 - 4; + * B2 - 5; + * B1 and B2 are frame types for hierachical B, explanation + * can refer to num_b_in_gop[]. + */ + uint32_t coding_type : 3; + /** \brief Is picture a reference picture? */ + uint32_t reference_pic_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t dependent_slice_segments_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t sign_data_hiding_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t constrained_intra_pred_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t transform_skip_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t cu_qp_delta_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t weighted_pred_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t weighted_bipred_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t transquant_bypass_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t tiles_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t entropy_coding_sync_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t loop_filter_across_tiles_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + /** \brief A combination of HEVC syntax element of + * sps_scaling_list_data_present_flag and + * pps_scaling_list_data_present_flag + * when scaling_list_enable_flag is 0, it must be 0. + */ + uint32_t scaling_list_data_present_flag : 1; + /** \brief indicate the current picture contains significant + * screen contents (text, characters, etc.) or animated image. + * GPU may want to treat them differently from normal video. + * For example, encoder may choose a small transform unit size + * and may use transform skip mode. + */ + uint32_t screen_content_flag : 1; + /** + * When either weighted_pred_flag or weighted_bipred_flag is + * turned on, the flag enable_gpu_weighted_prediction requests + * GPU to determine weighted prediction factors. In this case, + * the following parameters in slice control data structure + * shall be ignored: + * luma_log2_weight_denom, delta_chroma_log2_weight_denom, + * luma_offset_l0[15], luma_offset_l1[15], + * delta_luma_weight_l0[15], delta_luma_weight_l1[15], + * chroma_offset_l0[15][2], chroma_offset_l1[15][2], + * and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2]. + */ + uint32_t enable_gpu_weighted_prediction : 1; + /** \brief HEVC syntax element in slice segment header + * GPU uses it to generate new slice headers in slice size control. + */ + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t reserved : 11; + } bits; + uint32_t value; + } pic_fields; +} VAEncPictureParameterBufferHEVC; + +/** + * \brief Slice parameter for HEVC encoding in main & main 10 profiles. + * + * This structure holds information for \c + * slice_segment_layer_rbsp() as defined by the HEVC + * specification. + * + * If packed slice headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + */ +typedef struct _VAEncSliceParameterBufferHEVC { + /** \brief Starting CTU address for this slice. */ + uint32_t slice_segment_address; + /** \brief Number of CTUs in this slice. */ + uint32_t num_ctu_in_slice; + + /** \brief Slice type. + * Corresponds to HEVC syntax element of the same name. + */ + uint8_t slice_type; + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t slice_pic_parameter_set_id; + + /** \brief Maximum reference index for reference picture list 0. + * Range: 0 to 14, inclusive. + */ + uint8_t num_ref_idx_l0_active_minus1; + /** \brief Maximum reference index for reference picture list 1. + * Range: 0 to 14, inclusive. + */ + uint8_t num_ref_idx_l1_active_minus1; + /** \brief Reference picture list 0 (for P slices). */ + VAPictureHEVC ref_pic_list0[15]; + /** \brief Reference picture list 1 (for B slices). */ + VAPictureHEVC ref_pic_list1[15]; + /**@}*/ + + /** @name pred_weight_table() */ + /**@{*/ + /** \brief Same as the HEVC bitstream syntax element. */ + uint8_t luma_log2_weight_denom; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t delta_chroma_log2_weight_denom; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t delta_luma_weight_l0[15]; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t luma_offset_l0[15]; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t delta_chroma_weight_l0[15][2]; + /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */ + int8_t chroma_offset_l0[15][2]; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t delta_luma_weight_l1[15]; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t luma_offset_l1[15]; + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t delta_chroma_weight_l1[15][2]; + /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */ + int8_t chroma_offset_l1[15][2]; + /**@}*/ + + /** \brief Corresponds to HEVC spec variable MaxNumMergeCand. + * Range: [1..5]. + */ + uint8_t max_num_merge_cand; + + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t slice_qp_delta; + + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t slice_cb_qp_offset; + + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t slice_cr_qp_offset; + + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t slice_beta_offset_div2; + + /** \brief Same as the HEVC bitstream syntax element. */ + int8_t slice_tc_offset_div2; + + union { + struct { + /** \brief Indicates if current slice is the last one in picture */ + uint32_t last_slice_of_pic_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name */ + uint32_t dependent_slice_segment_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name */ + uint32_t colour_plane_id : 2; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t slice_temporal_mvp_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t slice_sao_luma_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t slice_sao_chroma_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. + * if this flag is set to 0, num_ref_idx_l0_active_minus1 should be + * equal to num_ref_idx_l0_default_active_minus1 + * as well as for that for l1. + */ + uint32_t num_ref_idx_active_override_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t mvd_l1_zero_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t cabac_init_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t slice_deblocking_filter_disabled_flag : 2; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + /** \brief Corresponds to HEVC syntax element of the same name. */ + uint32_t collocated_from_l0_flag : 1; + } bits; + uint32_t value; + } slice_fields; + /**@}*/ +} VAEncSliceParameterBufferHEVC; + +/** + * \brief HEVC Quantization Matrix Buffer Structure + * + * This structure is sent once per frame, + * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1. + * Only when scaling_list_data_present_flag = 1, app still + * needs to send in this structure. When scaling_list_enabled_flag = 1 and + * scaling_list_data_present_flag = 0, driver is responsible to generate + * the default scaling list values. + * + * Matrix entries are in raster scan order which follows HEVC spec. + */ +typedef struct _VAQMatrixBufferHEVC +{ + /** + * \brief scaling lists, + * corresponds to same HEVC spec syntax element + * ScalingList[ i ][ MatrixID ][ j ]. + * + * \brief 4x4 scaling, + */ + uint8_t scaling_lists_4x4[3][2][16]; + /** + * \brief 8x8 scaling, + */ + uint8_t scaling_lists_8x8[3][2][64]; + /** + * \brief 16x16 scaling, + * correspongs i = 2, MatrixID is in the range of 0 to 5, + * inclusive. And j is in the range of 0 to 63, inclusive. + */ + uint8_t scaling_lists_16x16[3][2][64]; + /** + * \brief 32x32 scaling, + * correspongs i = 3, MatrixID is in the range of 0 to 1, + * inclusive. And j is in the range of 0 to 63, inclusive. + */ + uint8_t scaling_lists_32x32[2][64]; + /** + * \brief DC values of the 16x16 scaling lists, + * corresponds to HEVC spec syntax + * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 + * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. + */ + uint8_t scaling_list_dc_16x16[3][2]; + /** + * \brief DC values of the 32x32 scaling lists, + * corresponds to HEVC spec syntax + * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 + * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. + */ + uint8_t scaling_list_dc_32x32[2]; +} VAQMatrixBufferHEVC; + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_ENC_HEVC_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_jpeg.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_jpeg.h new file mode 100644 index 000000000..3aba7ad44 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_jpeg.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc_jpeg.h + * \brief JPEG encoding API + * + * This file contains the \ref api_enc_jpeg "JPEG encoding API". + */ + +#ifndef VA_ENC_JPEG_H +#define VA_ENC_JPEG_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_enc_jpeg JPEG encoding API + * + * @{ + */ + +/** + * \brief JPEG Encoding Picture Parameter Buffer Structure + * + * This structure conveys picture level parameters. + * + */ +typedef struct _VAEncPictureParameterBufferJPEG +{ + /** \brief holds reconstructed picture. */ + VASurfaceID reconstructed_picture; + /** \brief picture width. */ + unsigned short picture_width; + /** \brief picture height. */ + unsigned short picture_height; + /** \brief holds coded data. */ + VABufferID coded_buf; + + /** + * \brief pic_flags + * + */ + union { + struct { + /** + * \brief profile: + * 0 - Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical + */ + unsigned int profile : 2; + /** + * \brief progressive: + * 0 - sequential, 1 - extended, 2 - progressive + */ + unsigned int progressive : 1; + /** + * \brief huffman: + * 0 - arithmetic, 1 - huffman + */ + unsigned int huffman : 1; + /** + * \brief interleaved: + * 0 - non interleaved, 1 - interleaved + */ + unsigned int interleaved : 1; + /** + * \brief differential: + * 0 - non differential, 1 - differential + */ + unsigned int differential : 1; + } bits; + unsigned int value; + } pic_flags; + + /** \brief number of bits per sample. */ + unsigned char sample_bit_depth; + /** \brief total number of scans in image. */ + unsigned char num_scan; + /** \brief number of image components in frame. */ + unsigned short num_components; + /** \brief Component identifier (Ci). */ + unsigned char component_id[4]; + /** \brief Quantization table selector (Tqi). */ + unsigned char quantiser_table_selector[4]; + /** \brief number from 1 to 100 that specifies quality of image. */ + unsigned char quality; + +} VAEncPictureParameterBufferJPEG; + + +/** + * \brief Slice parameter for JPEG encoding. + * + * This structure conveys slice (scan) level parameters. + * + */ +typedef struct _VAEncSliceParameterBufferJPEG { + /** \brief Restart interval definition (Ri). */ + unsigned short restart_interval; + /** \brief number of image components in a scan. */ + unsigned short num_components; + struct { + /** \brief Scan component selector (Csj). */ + unsigned char component_selector; + /** \brief DC entropy coding table selector (Tdj). */ + unsigned char dc_table_selector; + /** \brief AC entropy coding table selector (Taj). */ + unsigned char ac_table_selector; + } components[4]; +} VAEncSliceParameterBufferJPEG; + +/** + * \brief Quantization table for JPEG encoding. + * + */ +typedef struct _VAQMatrixBufferJPEG +{ + /** \brief load luma quantization table. */ + int load_lum_quantiser_matrix; + /** \brief load chroma quantization table. */ + int load_chroma_quantiser_matrix; + /** \brief luma quantization table. */ + unsigned char lum_quantiser_matrix[64]; + /** \brief chroma quantization table. */ + unsigned char chroma_quantiser_matrix[64]; +} VAQMatrixBufferJPEG; + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_ENC_JPEG_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_mpeg2.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_mpeg2.h new file mode 100644 index 000000000..c12c8defc --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_mpeg2.h @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc_mpeg2.h + * \brief The MPEG-2 encoding API + * + * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". + */ + +#ifndef _VA_ENC_MPEG2_H_ +#define _VA_ENC_MPEG2_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_enc_mpeg2 MPEG-2 encoding API + * + * @{ + */ + +/** + * \brief MPEG-2 Quantization Matrix Buffer + * + */ +typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; + +/** + * \brief Packed header types specific to MPEG-2 encoding. + * + * Types of packed headers generally used for MPEG-2 encoding. + */ +typedef enum { + /** + * \brief Packed Sequence Parameter Set (SPS). + * + */ + VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, + /** + * \brief Packed Picture Parameter Set (PPS). + * + */ + VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, + /** + * \brief Packed slice header. + * + */ + VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, +} VAEncPackedHeaderTypeMPEG2; + +/** + * \brief Sequence parameter for MPEG-2 encoding + * + * This structure holds information for \c sequence_header() and + * sequence_extension(). + * + * If packed sequence headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + */ +typedef struct _VAEncSequenceParameterBufferMPEG2 { + /** \brief Period between I frames. */ + unsigned int intra_period; + /** \brief Period between I/P frames. */ + unsigned int ip_period; + /** \brief Picture width. + * + * A 14bits unsigned inter, the lower 12bits + * is horizontal_size_value, and the upper + * 2bits is \c horizontal_size_extension + * + */ + unsigned short picture_width; + /** \brief Picture height. + * + * A 14bits unsigned inter, the lower 12bits + * is vertical_size_value, and the upper 2bits is + * vertical_size_size_extension + * + */ + unsigned short picture_height; + /** + * \brief Initial bitrate set for this sequence in CBR or VBR modes. + * + * This field represents the initial bitrate value for this + * sequence if CBR or VBR mode is used, i.e. if the encoder + * pipeline was created with a #VAConfigAttribRateControl + * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. + * + * bits_per_second may be derived from bit_rate. + * + */ + unsigned int bits_per_second; + /** + * \brief Frame rate + * + * Derived from frame_rate_value, frame_rate_extension_n and + * frame_rate_extension_d + * + */ + float frame_rate; + /** \brief Same as the element in sequence_header() */ + unsigned short aspect_ratio_information; + /** \brief Define the size of VBV */ + unsigned int vbv_buffer_size; + + union { + struct { + /** \brief Same as the element in Sequence extension() */ + unsigned int profile_and_level_indication : 8; + /** \brief Same as the element in Sequence extension() */ + unsigned int progressive_sequence : 1; + /** \brief Same as the element in Sequence extension() */ + unsigned int chroma_format : 2; + /** \brief Same as the element in Sequence extension() */ + unsigned int low_delay : 1; + /** \brief Same as the element in Sequence extension() */ + unsigned int frame_rate_extension_n : 2; + /** \brief Same as the element in Sequence extension() */ + unsigned int frame_rate_extension_d : 5; + } bits; + unsigned int value; + } sequence_extension; + + /** \brief Flag to indicate the following GOP header are being updated */ + unsigned int new_gop_header; + + union { + struct { + /** \brief Time code */ + unsigned int time_code : 25; + /** \brief Same as the element in GOP header */ + unsigned int closed_gop : 1; + /** \brief SAme as the element in GOP header */ + unsigned int broken_link : 1; + } bits; + unsigned int value; + } gop_header; +} VAEncSequenceParameterBufferMPEG2; + +/** + * \brief Picture parameter for MPEG-2 encoding + * + * This structure holds information for picture_header() and + * picture_coding_extension() + * + * If packed picture headers mode is used, i.e. if the encoding + * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE + * flag, then the driver expects two more buffers to be provided to + * the same \c vaRenderPicture() as this buffer: + * - a #VAEncPackedHeaderParameterBuffer with type set to + * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed + * header data. + * + */ +typedef struct _VAEncPictureParameterBufferMPEG2 { + /** \brief Forward reference picture */ + VASurfaceID forward_reference_picture; + /** \brief Backward reference picture */ + VASurfaceID backward_reference_picture; + /** \brief Reconstructed(decoded) picture */ + VASurfaceID reconstructed_picture; + /** + * \brief Output encoded bitstream. + * + * \ref coded_buf has type #VAEncCodedBufferType. It should be + * large enough to hold the compressed NAL slice and possibly SPS + * and PPS NAL units. + */ + VABufferID coded_buf; + /** + * \brief Flag to indicate the picture is the last one or not. + * + * This fields holds 0 if the picture to be encoded is not + * the last one in the stream. Otherwise, it + * is \ref MPEG2_LAST_PICTURE_EOSTREAM. + */ + unsigned char last_picture; + /** \brief Picture type */ + VAEncPictureType picture_type; + /** \brief Same as the element in picture_header() */ + unsigned int temporal_reference; + /** \brief Same as the element in picture_header() */ + unsigned int vbv_delay; + /** \brief Same as the element in Picture coding extension */ + unsigned char f_code[2][2]; + union { + struct { + /** \brief Same as the element in Picture coding extension */ + unsigned int intra_dc_precision : 2; + /** \brief Same as the element in Picture coding extension */ + unsigned int picture_structure : 2; + /** \brief Same as the element in Picture coding extension */ + unsigned int top_field_first : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int frame_pred_frame_dct : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int concealment_motion_vectors : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int q_scale_type : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int intra_vlc_format : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int alternate_scan : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int repeat_first_field : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int progressive_frame : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int composite_display_flag : 1; + } bits; + unsigned int value; + } picture_coding_extension; + + /* \brief Parameters for composite display + * + * Valid only when omposite_display_flag is 1 + */ + union { + struct { + /** \brief Same as the element in Picture coding extension */ + unsigned int v_axis : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int field_sequence : 3; + /** \brief Same as the element in Picture coding extension */ + unsigned int sub_carrier : 1; + /** \brief Same as the element in Picture coding extension */ + unsigned int burst_amplitude : 7; + /** \brief Same as the element in Picture coding extension */ + unsigned int sub_carrier_phase : 8; + } bits; + unsigned int value; + } composite_display; +} VAEncPictureParameterBufferMPEG2; + +/** + * \brief Slice parameter for MPEG-2 encoding + * + */ +typedef struct _VAEncSliceParameterBufferMPEG2 { + /** \brief Starting MB address for this slice. */ + unsigned int macroblock_address; + /** \brief Number of macroblocks in this slice. */ + unsigned int num_macroblocks; + /** \brief Same as the element in slice() */ + int quantiser_scale_code; + /** \brief Flag to indicate intra slice */ + int is_intra_slice; +} VAEncSliceParameterBufferMPEG2; + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_ENC_MPEG2_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_vp8.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_vp8.h new file mode 100644 index 000000000..d294042fa --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_enc_vp8.h @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc_vp8.h + * \brief VP8 encoding API + * + * This file contains the \ref api_enc_vp8 "VP8 encoding API". + */ + +#ifndef VA_ENC_VP8_H +#define VA_ENC_VP8_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_enc_vp8 VP8 encoding API + * + * @{ + */ + +/** + * \brief VP8 Encoding Sequence Parameter Buffer Structure + * + * This structure conveys sequence level parameters. + * + */ +typedef struct _VAEncSequenceParameterBufferVP8 +{ + /* frame width in pixels */ + unsigned int frame_width; + /* frame height in pixels */ + unsigned int frame_height; + /* horizontal scale */ + unsigned int frame_width_scale; + /* vertical scale */ + unsigned int frame_height_scale; + + /* whether to enable error resilience features */ + unsigned int error_resilient; + /* auto keyframe placement, non-zero means enable auto keyframe placement */ + unsigned int kf_auto; + /* keyframe minimum interval */ + unsigned int kf_min_dist; + /* keyframe maximum interval */ + unsigned int kf_max_dist; + + + /* RC related fields. RC modes are set with VAConfigAttribRateControl */ + /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */ + + /** + * Initial bitrate set for this sequence in CBR or VBR modes. + * + * This field represents the initial bitrate value for this + * sequence if CBR or VBR mode is used, i.e. if the encoder + * pipeline was created with a #VAConfigAttribRateControl + * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. + * + * The bitrate can be modified later on through + * #VAEncMiscParameterRateControl buffers. + */ + unsigned int bits_per_second; + /* Period between I frames. */ + unsigned int intra_period; + + /* reference and reconstructed frame buffers + * Used for driver auto reference management when configured through + * VAConfigAttribEncAutoReference. + */ + VASurfaceID reference_frames[4]; + +} VAEncSequenceParameterBufferVP8; + + +/** + * \brief VP8 Encoding Picture Parameter Buffer Structure + * + * This structure conveys picture level parameters. + * + */ +typedef struct _VAEncPictureParameterBufferVP8 +{ + /* surface to store reconstructed frame */ + VASurfaceID reconstructed_frame; + + /* + * surfaces to store reference frames in non auto reference mode + * VA_INVALID_SURFACE can be used to denote an invalid reference frame. + */ + VASurfaceID ref_last_frame; + VASurfaceID ref_gf_frame; + VASurfaceID ref_arf_frame; + + /* buffer to store coded data */ + VABufferID coded_buf; + + union { + struct { + /* force this frame to be a keyframe */ + unsigned int force_kf : 1; + /* don't reference the last frame */ + unsigned int no_ref_last : 1; + /* don't reference the golden frame */ + unsigned int no_ref_gf : 1; + /* don't reference the alternate reference frame */ + unsigned int no_ref_arf : 1; + unsigned int reserved : 28; + } bits; + unsigned int value; + } ref_flags; + + union { + struct { + /* version */ + unsigned int frame_type : 1; + unsigned int version : 3; + /* show_frame */ + unsigned int show_frame : 1; + /* color_space */ + unsigned int color_space : 1; + /* 0: bicubic, 1: bilinear, other: none */ + unsigned int recon_filter_type : 2; + /* 0: no loop fitler, 1: simple loop filter */ + unsigned int loop_filter_type : 2; + /* 0: disabled, 1: normal, 2: simple */ + unsigned int auto_partitions : 1; + /* same as log2_nbr_of_dct_partitions in frame header syntax */ + unsigned int num_token_partitions : 2; + + /** + * The following fields correspond to the same VP8 syntax elements + * in the frame header. + */ + /** + * 0: clamping of reconstruction pixels is disabled, + * 1: clamping enabled. + */ + unsigned int clamping_type : 1; + /* indicate segmentation is enabled for the current frame. */ + unsigned int segmentation_enabled : 1; + /** + * Determines if the MB segmentation map is updated in the current + * frame. + */ + unsigned int update_mb_segmentation_map : 1; + /** + * Indicates if the segment feature data is updated in the current + * frame. + */ + unsigned int update_segment_feature_data : 1; + /** + * indicates if the MB level loop filter adjustment is enabled for + * the current frame (0 off, 1 on). + */ + unsigned int loop_filter_adj_enable : 1; + /** + * Determines whether updated token probabilities are used only for + * this frame or until further update. + * It may be used by application to enable error resilient mode. + * In this mode probability updates are allowed only at Key Frames. + */ + unsigned int refresh_entropy_probs : 1; + /** + * Determines if the current decoded frame refreshes the golden frame. + */ + unsigned int refresh_golden_frame : 1; + /** + * Determines if the current decoded frame refreshes the alternate + * reference frame. + */ + unsigned int refresh_alternate_frame : 1; + /** + * Determines if the current decoded frame refreshes the last frame + * reference buffer. + */ + unsigned int refresh_last : 1; + /** + * Determines if the golden reference is replaced by another reference. + */ + unsigned int copy_buffer_to_golden : 2; + /** + * Determines if the alternate reference is replaced by another reference. + */ + unsigned int copy_buffer_to_alternate : 2; + /** + * Controls the sign of motion vectors when the golden frame is referenced. + */ + unsigned int sign_bias_golden : 1; + /** + * Controls the sign of motion vectors when the alternate frame is + * referenced. + */ + unsigned int sign_bias_alternate : 1; + /** + * Enables or disables the skipping of macroblocks containing no + * non-zero coefficients. + */ + unsigned int mb_no_coeff_skip : 1; + /** + * Enforces unconditional per-MB loop filter delta update setting frame + * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4], + * and all ref_frame_delta_update_flag[4] to 1. + * Since loop filter deltas are not automatically refreshed to default + * values at key frames, dropped frame with delta update may prevent + * correct decoding from the next key frame. + * Encoder application is advised to set this flag to 1 at key frames. + */ + unsigned int forced_lf_adjustment : 1; + unsigned int reserved : 2; + } bits; + unsigned int value; + } pic_flags; + + /** + * Contains a list of 4 loop filter level values (updated value if applicable) + * controlling the deblocking filter strength. Each entry represents a segment. + * When segmentation is disabled, use entry 0. + * When loop_filter_level is 0, loop filter shall be disabled. + */ + char loop_filter_level[4]; + + /** + * Contains a list of 4 delta values for reference frame based MB-level + * loop filter adjustment. + * If no update, then set to 0. + */ + char ref_lf_delta[4]; + + /** + * Contains a list of 4 delta values for coding mode based MB-level loop + * filter adjustment. + * If no update, then set to 0. + */ + char mode_lf_delta[4]; + + /** + * Controls the deblocking filter sensitivity. + * Corresponds to the same VP8 syntax element in frame header. + */ + unsigned char sharpness_level; + + /** + * Application supplied maximum clamp value for Qindex used in quantization. + * Qindex will not be allowed to exceed this value. + * It has a valid range [0..127] inclusive. + */ + unsigned char clamp_qindex_high; + + /** + * Application supplied minimum clamp value for Qindex used in quantization. + * Qindex will not be allowed to be lower than this value. + * It has a valid range [0..127] inclusive. + * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed, + * otherwise they are ignored. + */ + unsigned char clamp_qindex_low; + +} VAEncPictureParameterBufferVP8; + + +/** + * \brief VP8 MB Segmentation ID Buffer + * + * application provides buffer containing the initial segmentation id for each + * MB, in raster scan order. Rate control may reassign it. + * For an 640x480 video, the buffer has 1200 entries. + * the value of each entry should be in the range [0..3], inclusive. + * If segmentation is not enabled, application does not need to provide it. + */ +typedef struct _VAEncMBMapBufferVP8 +{ + /** + * number of MBs in the frame. + * It is also the number of entries of mb_segment_id[]; + */ + unsigned int num_mbs; + /** + * per MB Segmentation ID Buffer + */ + unsigned char *mb_segment_id; +} VAEncMBMapBufferVP8; + + +/** + * \brief VP8 Quantization Matrix Buffer Structure + * + * Contains quantization index for yac(0-3) for each segment and quantization + * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied + * to all segments. When segmentation is disabled, only quantization_index[0] + * will be used. This structure is sent once per frame. + */ +typedef struct _VAQMatrixBufferVP8 +{ + unsigned short quantization_index[4]; + short quantization_index_delta[5]; +} VAQMatrixBufferVP8; + + + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_ENC_VP8_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.c new file mode 100644 index 000000000..5db2e22a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.c @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va.h" +#include "va_backend.h" +#include "va_trace.h" +#include "va_fool.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Do dummy decode/encode, ignore the input data + * In order to debug memory leak or low performance issues, we need to isolate driver problems + * We export env "VA_FOOL", with which, we can do fake decode/encode: + * + * LIBVA_FOOL_DECODE: + * . if set, decode does nothing + * LIBVA_FOOL_ENCODE=: + * . if set, encode does nothing, but fill in the coded buffer from the content of files with + * name framename.0,framename.1,..., framename.N, framename.0,..., framename.N,...repeatly + * Use file name to determine h264 or vp8 + * LIBVA_FOOL_JPEG=:fill the content of filename to codedbuf for jpeg encoding + * LIBVA_FOOL_POSTP: + * . if set, do nothing for vaPutSurface + */ + + +/* global settings */ +int fool_codec = 0; +int fool_postp = 0; + +#define FOOL_BUFID_MAGIC 0x12345600 +#define FOOL_BUFID_MASK 0xffffff00 + +struct fool_context { + int enabled; /* fool_codec is global, and it is for concurent encode/decode */ + char *fn_enc;/* file pattern with codedbuf content for encode */ + char *segbuf_enc; /* the segment buffer of coded buffer, load frome fn_enc */ + int file_count; + + char *fn_jpg;/* file name of JPEG fool with codedbuf content */ + char *segbuf_jpg; /* the segment buffer of coded buffer, load frome fn_jpg */ + + VAEntrypoint entrypoint; /* current entrypoint */ + + /* all buffers with same type share one malloc-ed memory + * bufferID = (buffer numbers with the same type << 8) || type + * the malloc-ed memory can be find by fool_buf[bufferID & 0xff] + * the size is ignored here + */ + char *fool_buf[VABufferTypeMax]; /* memory of fool buffers */ + unsigned int fool_buf_size[VABufferTypeMax]; /* size of memory of fool buffers */ + unsigned int fool_buf_element[VABufferTypeMax]; /* element count of created buffers */ + unsigned int fool_buf_count[VABufferTypeMax]; /* count of created buffers */ + VAContextID context; +}; + +#define FOOL_CTX(dpy) ((struct fool_context *)((VADisplayContextP)dpy)->vafool) + +#define DPY2FOOLCTX(dpy) \ + struct fool_context *fool_ctx = FOOL_CTX(dpy); \ + if (fool_ctx == NULL) \ + return 0; /* no fool for the context */ \ + +#define DPY2FOOLCTX_CHK(dpy) \ + struct fool_context *fool_ctx = FOOL_CTX(dpy); \ + if ((fool_ctx == NULL) || (fool_ctx->enabled == 0)) \ + return 0; /* no fool for the context */ \ + +/* Prototype declarations (functions defined in va.c) */ + +void va_errorMessage(const char *msg, ...); +void va_infoMessage(const char *msg, ...); + +int va_parseConfig(char *env, char *env_value); + +void va_FoolInit(VADisplay dpy) +{ + char env_value[1024]; + + struct fool_context *fool_ctx = calloc(sizeof(struct fool_context), 1); + + if (fool_ctx == NULL) + return; + + if (va_parseConfig("LIBVA_FOOL_POSTP", NULL) == 0) { + fool_postp = 1; + va_infoMessage("LIBVA_FOOL_POSTP is on, dummy vaPutSurface\n"); + } + + if (va_parseConfig("LIBVA_FOOL_DECODE", NULL) == 0) { + fool_codec |= VA_FOOL_FLAG_DECODE; + va_infoMessage("LIBVA_FOOL_DECODE is on, dummy decode\n"); + } + if (va_parseConfig("LIBVA_FOOL_ENCODE", &env_value[0]) == 0) { + fool_codec |= VA_FOOL_FLAG_ENCODE; + fool_ctx->fn_enc = strdup(env_value); + va_infoMessage("LIBVA_FOOL_ENCODE is on, load encode data from file with patten %s\n", + fool_ctx->fn_enc); + } + if (va_parseConfig("LIBVA_FOOL_JPEG", &env_value[0]) == 0) { + fool_codec |= VA_FOOL_FLAG_JPEG; + fool_ctx->fn_jpg = strdup(env_value); + va_infoMessage("LIBVA_FOOL_JPEG is on, load encode data from file with patten %s\n", + fool_ctx->fn_jpg); + } + + ((VADisplayContextP)dpy)->vafool = fool_ctx; +} + + +int va_FoolEnd(VADisplay dpy) +{ + int i; + DPY2FOOLCTX(dpy); + + for (i = 0; i < VABufferTypeMax; i++) {/* free memory */ + if (fool_ctx->fool_buf[i]) + free(fool_ctx->fool_buf[i]); + } + if (fool_ctx->segbuf_enc) + free(fool_ctx->segbuf_enc); + if (fool_ctx->segbuf_jpg) + free(fool_ctx->segbuf_jpg); + if (fool_ctx->fn_enc) + free(fool_ctx->fn_enc); + if (fool_ctx->fn_jpg) + free(fool_ctx->fn_jpg); + + free(fool_ctx); + ((VADisplayContextP)dpy)->vafool = NULL; + + return 0; +} + +int va_FoolCreateConfig( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +) +{ + DPY2FOOLCTX(dpy); + + fool_ctx->entrypoint = entrypoint; + + /* + * check fool_codec to align with current context + * e.g. fool_codec = decode then for encode, the + * vaBegin/vaRender/vaEnd also run into fool path + * which is not desired + */ + if (((fool_codec & VA_FOOL_FLAG_DECODE) && (entrypoint == VAEntrypointVLD)) || + ((fool_codec & VA_FOOL_FLAG_JPEG) && (entrypoint == VAEntrypointEncPicture))) + fool_ctx->enabled = 1; + else if ((fool_codec & VA_FOOL_FLAG_ENCODE) && (entrypoint == VAEntrypointEncSlice)) { + /* H264 is desired */ + if (((profile == VAProfileH264Baseline || + profile == VAProfileH264Main || + profile == VAProfileH264High || + profile == VAProfileH264ConstrainedBaseline)) && + strstr(fool_ctx->fn_enc, "h264")) + fool_ctx->enabled = 1; + + /* vp8 is desired */ + if ((profile == VAProfileVP8Version0_3) && + strstr(fool_ctx->fn_enc, "vp8")) + fool_ctx->enabled = 1; + } + if (fool_ctx->enabled) + va_infoMessage("FOOL is enabled for this context\n"); + else + va_infoMessage("FOOL is not enabled for this context\n"); + + + return 0; /* continue */ +} + + +VAStatus va_FoolCreateBuffer( + VADisplay dpy, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +) +{ + unsigned int new_size = size * num_elements; + unsigned int old_size; + DPY2FOOLCTX_CHK(dpy); + + old_size = fool_ctx->fool_buf_size[type] * fool_ctx->fool_buf_element[type]; + + if (old_size < new_size) + fool_ctx->fool_buf[type] = realloc(fool_ctx->fool_buf[type], new_size); + + fool_ctx->fool_buf_size[type] = size; + fool_ctx->fool_buf_element[type] = num_elements; + fool_ctx->fool_buf_count[type]++; + /* because we ignore the vaRenderPicture, + * all buffers with same type share same real memory + * bufferID = (magic number) | type + */ + *buf_id = FOOL_BUFID_MAGIC | type; + + return 1; /* don't call into driver */ +} + +VAStatus va_FoolBufferInfo( + VADisplay dpy, + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ +) +{ + unsigned int magic; + + DPY2FOOLCTX_CHK(dpy); + + magic = buf_id & FOOL_BUFID_MASK; + if (magic != FOOL_BUFID_MAGIC) + return 0; /* could be VAImageBufferType from vaDeriveImage */ + + *type = buf_id & 0xff; + *size = fool_ctx->fool_buf_size[*type]; + *num_elements = fool_ctx->fool_buf_element[*type];; + + return 1; /* fool is valid */ +} + +static int va_FoolFillCodedBufEnc(struct fool_context *fool_ctx) +{ + char file_name[1024]; + struct stat file_stat = {0}; + VACodedBufferSegment *codedbuf; + int i, fd = -1; + + /* try file_name.file_count, if fail, try file_name.file_count-- */ + for (i=0; i<=1; i++) { + snprintf(file_name, 1024, "%s.%d", + fool_ctx->fn_enc, + fool_ctx->file_count); + + if ((fd = open(file_name, O_RDONLY)) != -1) { + fstat(fd, &file_stat); + fool_ctx->file_count++; /* open next file */ + break; + } else /* fall back to the first file file */ + fool_ctx->file_count = 0; + } + if (fd != -1) { + fool_ctx->segbuf_enc = realloc(fool_ctx->segbuf_enc, file_stat.st_size); + read(fd, fool_ctx->segbuf_enc, file_stat.st_size); + close(fd); + } else + va_errorMessage("Open file %s failed:%s\n", file_name, strerror(errno)); + + codedbuf = (VACodedBufferSegment *)fool_ctx->fool_buf[VAEncCodedBufferType]; + codedbuf->size = file_stat.st_size; + codedbuf->bit_offset = 0; + codedbuf->status = 0; + codedbuf->reserved = 0; + codedbuf->buf = fool_ctx->segbuf_enc; + codedbuf->next = NULL; + + return 0; +} + +static int va_FoolFillCodedBufJPG(struct fool_context *fool_ctx) +{ + struct stat file_stat = {0}; + VACodedBufferSegment *codedbuf; + int fd = -1; + + if ((fd = open(fool_ctx->fn_jpg, O_RDONLY)) != -1) { + fstat(fd, &file_stat); + fool_ctx->segbuf_jpg = realloc(fool_ctx->segbuf_jpg, file_stat.st_size); + read(fd, fool_ctx->segbuf_jpg, file_stat.st_size); + close(fd); + } else + va_errorMessage("Open file %s failed:%s\n", fool_ctx->fn_jpg, strerror(errno)); + + codedbuf = (VACodedBufferSegment *)fool_ctx->fool_buf[VAEncCodedBufferType]; + codedbuf->size = file_stat.st_size; + codedbuf->bit_offset = 0; + codedbuf->status = 0; + codedbuf->reserved = 0; + codedbuf->buf = fool_ctx->segbuf_jpg; + codedbuf->next = NULL; + + return 0; +} + + +static int va_FoolFillCodedBuf(struct fool_context *fool_ctx) +{ + if (fool_ctx->entrypoint == VAEntrypointEncSlice) + va_FoolFillCodedBufEnc(fool_ctx); + else if (fool_ctx->entrypoint == VAEntrypointEncPicture) + va_FoolFillCodedBufJPG(fool_ctx); + + return 0; +} + + +VAStatus va_FoolMapBuffer( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +) +{ + unsigned int magic, buftype; + DPY2FOOLCTX_CHK(dpy); + + magic = buf_id & FOOL_BUFID_MASK; + if (magic != FOOL_BUFID_MAGIC) + return 0; /* could be VAImageBufferType from vaDeriveImage */ + + buftype = buf_id & 0xff; + *pbuf = fool_ctx->fool_buf[buftype]; + + /* it is coded buffer, fill coded segment from file */ + if (*pbuf && (buftype == VAEncCodedBufferType)) + va_FoolFillCodedBuf(fool_ctx); + + return 1; /* fool is valid */ +} + +VAStatus va_FoolCheckContinuity(VADisplay dpy) +{ + DPY2FOOLCTX_CHK(dpy); + + return 1; /* fool is valid */ +} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.h new file mode 100644 index 000000000..6f4f917ab --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_fool.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef VA_FOOL_H +#define VA_FOOL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int fool_codec; +extern int fool_postp; + +#define VA_FOOL_FLAG_DECODE 0x1 +#define VA_FOOL_FLAG_ENCODE 0x2 +#define VA_FOOL_FLAG_JPEG 0x4 + +#define VA_FOOL_FUNC(fool_func,...) \ + if (fool_codec) { \ + if (fool_func(__VA_ARGS__)) \ + return VA_STATUS_SUCCESS; \ + } + +void va_FoolInit(VADisplay dpy); +int va_FoolEnd(VADisplay dpy); + +int va_FoolCreateConfig( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +); + + +VAStatus va_FoolCreateBuffer( + VADisplay dpy, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +); + +VAStatus va_FoolMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +); + +VAStatus va_FoolBufferInfo ( + VADisplay dpy, + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ +); + +VAStatus va_FoolCheckContinuity(VADisplay dpy); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.c new file mode 100644 index 000000000..d139ab568 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va.h" +#include "va_backend.h" +#include "va_backend_tpi.h" + +#include +#include +#include +#include +#include +#include + +#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) +#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } + + +/* + * Create surfaces with special inputs/requirements + */ +VAStatus vaCreateSurfacesWithAttribute ( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces, /* out */ + VASurfaceAttributeTPI *attribute_tpi +) +{ + VADriverContextP ctx; + struct VADriverVTableTPI *tpi; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + tpi = (struct VADriverVTableTPI *)ctx->vtable_tpi; + if (tpi && tpi->vaCreateSurfacesWithAttribute) { + return tpi->vaCreateSurfacesWithAttribute( ctx, width, height, format, num_surfaces, surfaces, attribute_tpi); + } else + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + + +VAStatus vaPutSurfaceBuf ( + VADisplay dpy, + VASurfaceID surface, + unsigned char* data, + int* data_len, + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +) +{ + VADriverContextP ctx; + struct VADriverVTableTPI *tpi; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; + if (tpi && tpi->vaPutSurfaceBuf) { + return tpi->vaPutSurfaceBuf( ctx, surface, data, data_len, srcx, srcy, srcw, srch, + destx, desty, destw, desth, cliprects, number_cliprects, flags ); + } else + return VA_STATUS_ERROR_UNIMPLEMENTED; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.h new file mode 100644 index 000000000..d4a9d0633 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_tpi.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef _VA_TPI_H_ +#define _VA_TPI_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum { + VAExternalMemoryNULL, /* it is not external buffer, but requires the implementation allocates + * the surface with the input attribute + */ + VAExternalMemoryV4L2Buffer, + VAExternalMemoryCIFrame, /* the memory is from camera frames and buffers points the frame ID list */ + VAExternalMemoryUserPointer, /* the memory is malloc-ed and buffers points to the buffers */ + VAExternalMemoryKernelDRMBufffer, /* the memory is from kernel DRM buffers and buffers points the + * DRM buffer handle list + */ + VAExternalMemoryAndroidGrallocBuffer, /* the memory is from Android Gralloc memory, and buffers points + * the gralloc native_handle_t list + */ +} VASurfaceMemoryType; + +typedef struct _VASurfaceAttributeTPI { + VASurfaceMemoryType type; + unsigned int width; + unsigned int height; + unsigned int size; + unsigned int pixel_format; /* buffer format */ + unsigned int tiling; /* the memory is tiling or not */ + unsigned int luma_stride; /* luma stride, could be width aligned with a special value */ + unsigned int chroma_u_stride; /* chroma stride */ + unsigned int chroma_v_stride; + unsigned int luma_offset; /* could be 0 */ + unsigned int chroma_u_offset; /* U offset from the beginning of the memory */ + unsigned int chroma_v_offset; /* V offset from the beginning of the memory */ + unsigned int count; /* buffer count for surface creation */ + unsigned int *buffers; /* buffer handles or user pointers */ + unsigned int reserved[4]; /* used to pass additional information, like + * Android native window pointer + */ +} VASurfaceAttributeTPI; + + +VAStatus vaPutSurfaceBuf ( + VADisplay dpy, + VASurfaceID surface, + unsigned char* data, + int* data_len, + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +); + + +VAStatus vaCreateSurfacesWithAttribute ( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces, /* out */ + VASurfaceAttributeTPI *attribute_tpi +); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_trace.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_trace.c new file mode 100644 index 000000000..94b841050 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_trace.c @@ -0,0 +1,4122 @@ + +/* + * Copyright (c) 2009-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va.h" +#include "va_enc_h264.h" +#include "va_backend.h" +#include "va_trace.h" +#include "va_enc_h264.h" +#include "va_enc_jpeg.h" +#include "va_enc_vp8.h" +#include "va_dec_jpeg.h" +#include "va_dec_vp8.h" +#include "va_dec_vp9.h" +#include "va_dec_hevc.h" +#include "va_vpp.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Env. to debug some issue, e.g. the decode/encode issue in a video conference scenerio: + * .LIBVA_TRACE=log_file: general VA parameters saved into log_file + * .LIBVA_TRACE_BUFDATA: dump all VA data buffer into log_file + * .LIBVA_TRACE_CODEDBUF=coded_clip_file: save the coded clip into file coded_clip_file + * .LIBVA_TRACE_SURFACE=yuv_file: save surface YUV into file yuv_file. Use file name to determine + * decode/encode or jpeg surfaces + * .LIBVA_TRACE_SURFACE_GEOMETRY=WIDTHxHEIGHT+XOFF+YOFF: only save part of surface context into file + * due to storage bandwidth limitation + */ + +/* global settings */ + +/* LIBVA_TRACE */ +int trace_flag = 0; + +/* per context settings */ +struct trace_context { + /* LIBVA_TRACE */ + FILE *trace_fp_log; /* save the log into a file */ + char *trace_log_fn; /* file name */ + + /* LIBVA_TRACE_CODEDBUF */ + FILE *trace_fp_codedbuf; /* save the encode result into a file */ + char *trace_codedbuf_fn; /* file name */ + + /* LIBVA_TRACE_SURFACE */ + FILE *trace_fp_surface; /* save the surface YUV into a file */ + char *trace_surface_fn; /* file name */ + + VAContextID trace_context; /* current context */ + + VASurfaceID trace_rendertarget; /* current render target */ + VAProfile trace_profile; /* current profile for buffers */ + VAEntrypoint trace_entrypoint; /* current entrypoint */ + + unsigned int trace_frame_no; /* current frame NO */ + unsigned int trace_slice_no; /* current slice NO */ + unsigned int trace_slice_size; /* current slice buffer size */ + + unsigned int trace_surface_width; /* surface dumping geometry */ + unsigned int trace_surface_height; + unsigned int trace_surface_xoff; + unsigned int trace_surface_yoff; + + unsigned int trace_frame_width; /* current frame width */ + unsigned int trace_frame_height; /* current frame height */ + + unsigned int pts; /* IVF header information */ +}; + +#define TRACE_CTX(dpy) ((struct trace_context *)((VADisplayContextP)dpy)->vatrace) + +#define DPY2TRACECTX(dpy) \ + struct trace_context *trace_ctx = TRACE_CTX(dpy); \ + \ + if (trace_ctx == NULL) \ + return; \ + +#define TRACE_FUNCNAME(idx) va_TraceMsg(trace_ctx, "==========%s\n", __func__); + +/* Prototype declarations (functions defined in va.c) */ + +void va_errorMessage(const char *msg, ...); +void va_infoMessage(const char *msg, ...); + +int va_parseConfig(char *env, char *env_value); + +VAStatus vaBufferInfo( + VADisplay dpy, + VAContextID context, /* in */ + VABufferID buf_id, /* in */ + VABufferType *type, /* out */ + unsigned int *size, /* out */ + unsigned int *num_elements /* out */ + ); + +VAStatus vaLockSurface(VADisplay dpy, + VASurfaceID surface, + unsigned int *fourcc, /* following are output argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + unsigned int *buffer_name, + void **buffer + ); + +VAStatus vaUnlockSurface(VADisplay dpy, + VASurfaceID surface + ); + +#define FILE_NAME_SUFFIX(env_value) \ +do { \ + int tmp = strnlen(env_value, sizeof(env_value)); \ + int left = sizeof(env_value) - tmp; \ + \ + snprintf(env_value+tmp, \ + left, \ + ".%04d.%08lx", \ + suffix, \ + (unsigned long)trace_ctx); \ +} while (0) + +void va_TraceInit(VADisplay dpy) +{ + char env_value[1024]; + unsigned short suffix = 0xffff & ((unsigned int)time(NULL)); + int trace_index = 0; + FILE *tmp; + struct trace_context *trace_ctx = calloc(sizeof(struct trace_context), 1); + + if (trace_ctx == NULL) + return; + + if (va_parseConfig("LIBVA_TRACE", &env_value[0]) == 0) { + FILE_NAME_SUFFIX(env_value); + trace_ctx->trace_log_fn = strdup(env_value); + + tmp = fopen(env_value, "w"); + if (tmp) { + trace_ctx->trace_fp_log = tmp; + va_infoMessage("LIBVA_TRACE is on, save log into %s\n", trace_ctx->trace_log_fn); + trace_flag = VA_TRACE_FLAG_LOG; + } else + va_errorMessage("Open file %s failed (%s)\n", env_value, strerror(errno)); + } + + /* may re-get the global settings for multiple context */ + if ((trace_flag & VA_TRACE_FLAG_LOG) && (va_parseConfig("LIBVA_TRACE_BUFDATA", NULL) == 0)) { + trace_flag |= VA_TRACE_FLAG_BUFDATA; + va_infoMessage("LIBVA_TRACE_BUFDATA is on, dump buffer into log file\n"); + } + + /* per-context setting */ + if (va_parseConfig("LIBVA_TRACE_CODEDBUF", &env_value[0]) == 0) { + FILE_NAME_SUFFIX(env_value); + trace_ctx->trace_codedbuf_fn = strdup(env_value); + va_infoMessage("LIBVA_TRACE_CODEDBUF is on, save codedbuf into log file %s\n", + trace_ctx->trace_codedbuf_fn); + trace_flag |= VA_TRACE_FLAG_CODEDBUF; + } + + if (va_parseConfig("LIBVA_TRACE_SURFACE", &env_value[0]) == 0) { + FILE_NAME_SUFFIX(env_value); + trace_ctx->trace_surface_fn = strdup(env_value); + + va_infoMessage("LIBVA_TRACE_SURFACE is on, save surface into %s\n", + trace_ctx->trace_surface_fn); + + /* for surface data dump, it is time-consume, and may + * cause some side-effect, so only trace the needed surfaces + * to trace encode surface, set the trace file name to sth like *enc* + * to trace decode surface, set the trace file name to sth like *dec* + * if no dec/enc in file name, set both + */ + if (strstr(env_value, "dec")) + trace_flag |= VA_TRACE_FLAG_SURFACE_DECODE; + if (strstr(env_value, "enc")) + trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE; + if (strstr(env_value, "jpeg") || strstr(env_value, "jpg")) + trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG; + + if (va_parseConfig("LIBVA_TRACE_SURFACE_GEOMETRY", &env_value[0]) == 0) { + char *p = env_value, *q; + + trace_ctx->trace_surface_width = strtod(p, &q); + p = q+1; /* skip "x" */ + trace_ctx->trace_surface_height = strtod(p, &q); + p = q+1; /* skip "+" */ + trace_ctx->trace_surface_xoff = strtod(p, &q); + p = q+1; /* skip "+" */ + trace_ctx->trace_surface_yoff = strtod(p, &q); + + va_infoMessage("LIBVA_TRACE_SURFACE_GEOMETRY is on, only dump surface %dx%d+%d+%d content\n", + trace_ctx->trace_surface_width, + trace_ctx->trace_surface_height, + trace_ctx->trace_surface_xoff, + trace_ctx->trace_surface_yoff); + } + } + + ((VADisplayContextP)dpy)->vatrace = trace_ctx; +} + + +void va_TraceEnd(VADisplay dpy) +{ + DPY2TRACECTX(dpy); + + if (trace_ctx->trace_fp_log) + fclose(trace_ctx->trace_fp_log); + + if (trace_ctx->trace_fp_codedbuf) + fclose(trace_ctx->trace_fp_codedbuf); + + if (trace_ctx->trace_fp_surface) + fclose(trace_ctx->trace_fp_surface); + + if (trace_ctx->trace_log_fn) + free(trace_ctx->trace_log_fn); + + if (trace_ctx->trace_codedbuf_fn) + free(trace_ctx->trace_codedbuf_fn); + + if (trace_ctx->trace_surface_fn) + free(trace_ctx->trace_surface_fn); + + free(trace_ctx); + ((VADisplayContextP)dpy)->vatrace = NULL; +} + +static void va_TraceMsg(struct trace_context *trace_ctx, const char *msg, ...) +{ + va_list args; + + if (!(trace_flag & VA_TRACE_FLAG_LOG)) + return; + + if (msg) { + struct timeval tv; + + if (gettimeofday(&tv, NULL) == 0) + fprintf(trace_ctx->trace_fp_log, "[%04d.%06d] ", + (unsigned int)tv.tv_sec & 0xffff, (unsigned int)tv.tv_usec); + va_start(args, msg); + vfprintf(trace_ctx->trace_fp_log, msg, args); + va_end(args); + } else + fflush(trace_ctx->trace_fp_log); +} + + +static void va_TraceSurface(VADisplay dpy) +{ + unsigned int i, j; + unsigned int fourcc; /* following are output argument */ + unsigned int luma_stride; + unsigned int chroma_u_stride; + unsigned int chroma_v_stride; + unsigned int luma_offset; + unsigned int chroma_u_offset; + unsigned int chroma_v_offset; + unsigned int buffer_name; + void *buffer = NULL; + unsigned char *Y_data, *UV_data, *tmp; + VAStatus va_status; + unsigned char check_sum = 0; + DPY2TRACECTX(dpy); + + if (!trace_ctx->trace_fp_surface) + return; + + va_TraceMsg(trace_ctx, "==========dump surface data in file %s\n", trace_ctx->trace_surface_fn); + + va_TraceMsg(trace_ctx, NULL); + + va_status = vaLockSurface( + dpy, + trace_ctx->trace_rendertarget, + &fourcc, + &luma_stride, &chroma_u_stride, &chroma_v_stride, + &luma_offset, &chroma_u_offset, &chroma_v_offset, + &buffer_name, &buffer); + + if (va_status != VA_STATUS_SUCCESS) { + va_TraceMsg(trace_ctx, "Error:vaLockSurface failed\n"); + return; + } + + va_TraceMsg(trace_ctx, "\tfourcc = 0x%08x\n", fourcc); + va_TraceMsg(trace_ctx, "\twidth = %d\n", trace_ctx->trace_frame_width); + va_TraceMsg(trace_ctx, "\theight = %d\n", trace_ctx->trace_frame_height); + va_TraceMsg(trace_ctx, "\tluma_stride = %d\n", luma_stride); + va_TraceMsg(trace_ctx, "\tchroma_u_stride = %d\n", chroma_u_stride); + va_TraceMsg(trace_ctx, "\tchroma_v_stride = %d\n", chroma_v_stride); + va_TraceMsg(trace_ctx, "\tluma_offset = %d\n", luma_offset); + va_TraceMsg(trace_ctx, "\tchroma_u_offset = %d\n", chroma_u_offset); + va_TraceMsg(trace_ctx, "\tchroma_v_offset = %d\n", chroma_v_offset); + + if (buffer == NULL) { + va_TraceMsg(trace_ctx, "Error:vaLockSurface return NULL buffer\n"); + va_TraceMsg(trace_ctx, NULL); + + vaUnlockSurface(dpy, trace_ctx->trace_rendertarget); + return; + } + va_TraceMsg(trace_ctx, "\tbuffer location = 0x%08x\n", buffer); + va_TraceMsg(trace_ctx, NULL); + + Y_data = (unsigned char*)buffer; + UV_data = (unsigned char*)buffer + chroma_u_offset; + + tmp = Y_data + luma_stride * trace_ctx->trace_surface_yoff; + for (i=0; itrace_surface_height; i++) { + fwrite(tmp + trace_ctx->trace_surface_xoff, + trace_ctx->trace_surface_width, + 1, trace_ctx->trace_fp_surface); + + tmp += luma_stride; + } + tmp = UV_data + chroma_u_stride * trace_ctx->trace_surface_yoff / 2; + if (fourcc == VA_FOURCC_NV12) { + for (i=0; itrace_surface_height/2; i++) { + fwrite(tmp + trace_ctx->trace_surface_xoff, + trace_ctx->trace_surface_width, + 1, trace_ctx->trace_fp_surface); + + tmp += chroma_u_stride; + } + } + + vaUnlockSurface(dpy, trace_ctx->trace_rendertarget); + + va_TraceMsg(trace_ctx, NULL); +} + + +void va_TraceInitialize ( + VADisplay dpy, + int *major_version, /* out */ + int *minor_version /* out */ +) +{ + DPY2TRACECTX(dpy); + TRACE_FUNCNAME(idx); +} + +void va_TraceTerminate ( + VADisplay dpy +) +{ + DPY2TRACECTX(dpy); + TRACE_FUNCNAME(idx); +} + + +void va_TraceCreateConfig( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +) +{ + int i; + int encode, decode, jpeg; + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\tprofile = %d\n", profile); + va_TraceMsg(trace_ctx, "\tentrypoint = %d\n", entrypoint); + va_TraceMsg(trace_ctx, "\tnum_attribs = %d\n", num_attribs); + if (attrib_list) { + for (i = 0; i < num_attribs; i++) { + va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type); + va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value); + } + } + va_TraceMsg(trace_ctx, NULL); + + trace_ctx->trace_profile = profile; + trace_ctx->trace_entrypoint = entrypoint; + + /* avoid to create so many empty files */ + encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice); + decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD); + jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture); + if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) || + (decode && (trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) || + (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) { + FILE *tmp = fopen(trace_ctx->trace_surface_fn, "w"); + + if (tmp) + trace_ctx->trace_fp_surface = tmp; + else { + va_errorMessage("Open file %s failed (%s)\n", + trace_ctx->trace_surface_fn, + strerror(errno)); + trace_ctx->trace_fp_surface = NULL; + trace_flag &= ~(VA_TRACE_FLAG_SURFACE); + } + } + + if (encode && (trace_flag & VA_TRACE_FLAG_CODEDBUF)) { + FILE *tmp = fopen(trace_ctx->trace_codedbuf_fn, "w"); + + if (tmp) + trace_ctx->trace_fp_codedbuf = tmp; + else { + va_errorMessage("Open file %s failed (%s)\n", + trace_ctx->trace_codedbuf_fn, + strerror(errno)); + trace_ctx->trace_fp_codedbuf = NULL; + trace_flag &= ~VA_TRACE_FLAG_CODEDBUF; + } + } +} + +static void va_TraceSurfaceAttributes( + struct trace_context *trace_ctx, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +) +{ + int i, num; + VASurfaceAttrib *p; + + if (!attrib_list || !num_attribs) + return; + + p = attrib_list; + num = *num_attribs; + if (num > VASurfaceAttribCount) + num = VASurfaceAttribCount; + + for (i=0; ivalue.type; + + va_TraceMsg(trace_ctx, "\tattrib_list[%i] =\n", i); + + va_TraceMsg(trace_ctx, "\t\ttype = %d\n", p->type); + va_TraceMsg(trace_ctx, "\t\tflags = %d\n", p->flags); + va_TraceMsg(trace_ctx, "\t\tvalue.type = %d\n", type); + switch (type) { + case VAGenericValueTypeInteger: + va_TraceMsg(trace_ctx, "\t\tvalue.value.i = 0x%08x\n", p->value.value.i); + break; + case VAGenericValueTypeFloat: + va_TraceMsg(trace_ctx, "\t\tvalue.value.f = %f\n", p->value.value.f); + break; + case VAGenericValueTypePointer: + va_TraceMsg(trace_ctx, "\t\tvalue.value.p = %p\n", p->value.value.p); + if ((p->type == VASurfaceAttribExternalBufferDescriptor) && p->value.value.p) { + VASurfaceAttribExternalBuffers *tmp = (VASurfaceAttribExternalBuffers *) p->value.value.p; + int j; + + va_TraceMsg(trace_ctx, "\t\t--VASurfaceAttribExternalBufferDescriptor\n"); + va_TraceMsg(trace_ctx, "\t\t pixel_format=0x%08x\n", tmp->pixel_format); + va_TraceMsg(trace_ctx, "\t\t width=%d\n", tmp->width); + va_TraceMsg(trace_ctx, "\t\t height=%d\n", tmp->height); + va_TraceMsg(trace_ctx, "\t\t data_size=%d\n", tmp->data_size); + va_TraceMsg(trace_ctx, "\t\t num_planes=%d\n", tmp->num_planes); + va_TraceMsg(trace_ctx, "\t\t pitches[4]=%d %d %d %d\n", + tmp->pitches[0], tmp->pitches[1], tmp->pitches[2], tmp->pitches[3]); + va_TraceMsg(trace_ctx, "\t\t offsets[4]=%d %d %d %d\n", + tmp->offsets[0], tmp->offsets[1], tmp->offsets[2], tmp->offsets[3]); + va_TraceMsg(trace_ctx, "\t\t flags=0x%08x\n", tmp->flags); + va_TraceMsg(trace_ctx, "\t\t num_buffers=0x%08x\n", tmp->num_buffers); + va_TraceMsg(trace_ctx, "\t\t buffers=%p\n", tmp->buffers); + for (j = 0; j < tmp->num_buffers; j++) { + va_TraceMsg(trace_ctx, "\t\t\tbuffers[%d]=%p\n", j, tmp->buffers[j]); + } + } + break; + case VAGenericValueTypeFunc: + va_TraceMsg(trace_ctx, "\t\tvalue.value.fn = %p\n", p->value.value.fn); + break; + default: + break; + } + + p++; + } +} + +void va_TraceCreateSurfaces( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces, /* out */ + VASurfaceAttrib *attrib_list, + unsigned int num_attribs +) +{ + int i; + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\twidth = %d\n", width); + va_TraceMsg(trace_ctx, "\theight = %d\n", height); + va_TraceMsg(trace_ctx, "\tformat = %d\n", format); + va_TraceMsg(trace_ctx, "\tnum_surfaces = %d\n", num_surfaces); + + if (surfaces) { + for (i = 0; i < num_surfaces; i++) + va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]); + } + + va_TraceSurfaceAttributes(trace_ctx, attrib_list, &num_attribs); + + va_TraceMsg(trace_ctx, NULL); +} + + +void va_TraceDestroySurfaces( + VADisplay dpy, + VASurfaceID *surface_list, + int num_surfaces +) +{ + int i; + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + if (surface_list) { + for (i = 0; i < num_surfaces; i++) + va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surface_list[i]); + } + + va_TraceMsg(trace_ctx, NULL); +} + + +void va_TraceCreateContext( + VADisplay dpy, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ +) +{ + int i; + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config_id); + va_TraceMsg(trace_ctx, "\twidth = %d\n", picture_width); + va_TraceMsg(trace_ctx, "\theight = %d\n", picture_height); + va_TraceMsg(trace_ctx, "\tflag = 0x%08x\n", flag); + va_TraceMsg(trace_ctx, "\tnum_render_targets = %d\n", num_render_targets); + if (render_targets) { + for (i=0; itrace_context = *context; + } else + trace_ctx->trace_context = VA_INVALID_ID; + + trace_ctx->trace_frame_no = 0; + trace_ctx->trace_slice_no = 0; + + trace_ctx->trace_frame_width = picture_width; + trace_ctx->trace_frame_height = picture_height; + + if (trace_ctx->trace_surface_width == 0) + trace_ctx->trace_surface_width = picture_width; + if (trace_ctx->trace_surface_height == 0) + trace_ctx->trace_surface_height = picture_height; +} + + +static char * buffer_type_to_string(int type) +{ + switch (type) { + case VAPictureParameterBufferType: return "VAPictureParameterBufferType"; + case VAIQMatrixBufferType: return "VAIQMatrixBufferType"; + case VABitPlaneBufferType: return "VABitPlaneBufferType"; + case VASliceGroupMapBufferType: return "VASliceGroupMapBufferType"; + case VASliceParameterBufferType: return "VASliceParameterBufferType"; + case VASliceDataBufferType: return "VASliceDataBufferType"; + case VAProtectedSliceDataBufferType: return "VAProtectedSliceDataBufferType"; + case VAMacroblockParameterBufferType: return "VAMacroblockParameterBufferType"; + case VAResidualDataBufferType: return "VAResidualDataBufferType"; + case VADeblockingParameterBufferType: return "VADeblockingParameterBufferType"; + case VAImageBufferType: return "VAImageBufferType"; + case VAQMatrixBufferType: return "VAQMatrixBufferType"; + case VAHuffmanTableBufferType: return "VAHuffmanTableBufferType"; +/* Following are encode buffer types */ + case VAEncCodedBufferType: return "VAEncCodedBufferType"; + case VAEncSequenceParameterBufferType: return "VAEncSequenceParameterBufferType"; + case VAEncPictureParameterBufferType: return "VAEncPictureParameterBufferType"; + case VAEncSliceParameterBufferType: return "VAEncSliceParameterBufferType"; + case VAEncPackedHeaderParameterBufferType: return "VAEncPackedHeaderParameterBufferType"; + case VAEncPackedHeaderDataBufferType: return "VAEncPackedHeaderDataBufferType"; + case VAEncMiscParameterBufferType: return "VAEncMiscParameterBufferType"; + case VAEncMacroblockParameterBufferType: return "VAEncMacroblockParameterBufferType"; + case VAProcPipelineParameterBufferType: return "VAProcPipelineParameterBufferType"; + case VAProcFilterParameterBufferType: return "VAProcFilterParameterBufferType"; + default: return "UnknowBuffer"; + } +} + +void va_TraceCreateBuffer ( + VADisplay dpy, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +) +{ + DPY2TRACECTX(dpy); + + /* only trace CodedBuffer */ + if (type != VAEncCodedBufferType) + return; + + TRACE_FUNCNAME(idx); + va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type)); + if (buf_id) + va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", *buf_id); + va_TraceMsg(trace_ctx, "\tsize=%u\n", size); + va_TraceMsg(trace_ctx, "\tnum_elements=%u\n", num_elements); + + va_TraceMsg(trace_ctx, NULL); +} + +void va_TraceDestroyBuffer ( + VADisplay dpy, + VABufferID buf_id /* in */ +) +{ + VABufferType type; + unsigned int size; + unsigned int num_elements; + + VACodedBufferSegment *buf_list; + int i = 0; + + DPY2TRACECTX(dpy); + + vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements); + + /* only trace CodedBuffer */ + if (type != VAEncCodedBufferType) + return; + + TRACE_FUNCNAME(idx); + va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type)); + va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id); + va_TraceMsg(trace_ctx, "\tsize=%u\n", size); + va_TraceMsg(trace_ctx, "\tnum_elements=%u\n", num_elements); + + va_TraceMsg(trace_ctx, NULL); +} + + +static void mem_put_le16(char *mem, unsigned int val) +{ + mem[0] = val; + mem[1] = val>>8; +} + +static void mem_put_le32(char *mem, unsigned int val) +{ + mem[0] = val; + mem[1] = val>>8; + mem[2] = val>>16; + mem[3] = val>>24; +} + +static void va_TraceCodedBufferIVFHeader(struct trace_context *trace_ctx, void **pbuf) +{ + VACodedBufferSegment *buf_list; + unsigned int frame_length = 0; + char header[32]; + + buf_list = (VACodedBufferSegment *)(*pbuf); + + if (ftell(trace_ctx->trace_fp_codedbuf) == 0) { /* write ivf header */ + header[0] = 'D'; + header[1] = 'K'; + header[2] = 'I'; + header[3] = 'F'; + mem_put_le16(header+4, 0); /* version */ + mem_put_le16(header+6, 32); /* headersize */ + mem_put_le32(header+8, 0x30385056); /* headersize */ + /* write width and height of the first rc_param to IVF file header */ + mem_put_le16(header+12, trace_ctx->trace_frame_width); /* width */ + mem_put_le16(header+14, trace_ctx->trace_frame_height); /* height */ + mem_put_le32(header+16, 30); /* rate */ + mem_put_le32(header+20, 1); /* scale */ + mem_put_le32(header+24, 0xffffffff); /* length */ + mem_put_le32(header+28, 0); /* unused */ + fwrite(header, 1, 32, trace_ctx->trace_fp_codedbuf); + } + + /* write frame header */ + while (buf_list != NULL) { + frame_length += buf_list->size; + buf_list = (VACodedBufferSegment *) buf_list->next; + } + mem_put_le32(header, frame_length); + mem_put_le32(header+4, trace_ctx->pts&0xFFFFFFFF); + mem_put_le32(header+8, 0); + fwrite(header, 1, 12, trace_ctx->trace_fp_codedbuf); + trace_ctx->pts++; +} + +void va_TraceMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +) +{ + VABufferType type; + unsigned int size; + unsigned int num_elements; + + VACodedBufferSegment *buf_list; + int i = 0; + + DPY2TRACECTX(dpy); + + vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements); + + /* only trace CodedBuffer */ + if (type != VAEncCodedBufferType) + return; + + TRACE_FUNCNAME(idx); + va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id); + va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type)); + if ((pbuf == NULL) || (*pbuf == NULL)) + return; + + if (trace_ctx->trace_profile == VAProfileVP8Version0_3) { + va_TraceMsg(trace_ctx, "\tAdd IVF header information\n"); + va_TraceCodedBufferIVFHeader(trace_ctx, pbuf); + } + + buf_list = (VACodedBufferSegment *)(*pbuf); + while (buf_list != NULL) { + va_TraceMsg(trace_ctx, "\tCodedbuf[%d] =\n", i++); + + va_TraceMsg(trace_ctx, "\t size = %u\n", buf_list->size); + va_TraceMsg(trace_ctx, "\t bit_offset = %u\n", buf_list->bit_offset); + va_TraceMsg(trace_ctx, "\t status = 0x%08x\n", buf_list->status); + va_TraceMsg(trace_ctx, "\t reserved = 0x%08x\n", buf_list->reserved); + va_TraceMsg(trace_ctx, "\t buf = 0x%08x\n", buf_list->buf); + + if (trace_ctx->trace_fp_codedbuf) { + va_TraceMsg(trace_ctx, "\tDump the content to file\n"); + fwrite(buf_list->buf, buf_list->size, 1, trace_ctx->trace_fp_codedbuf); + } + + buf_list = buf_list->next; + } + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVABuffers( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + unsigned int i; + unsigned char *p = pbuf; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "--%s\n", buffer_type_to_string(type)); + + if ((trace_flag & VA_TRACE_FLAG_BUFDATA) && trace_ctx->trace_fp_log) { + for (i=0; itrace_fp_log, "\t\t0x%04x:", i); + else if ((i%16) == 0) + fprintf(trace_ctx->trace_fp_log, "\n\t\t0x%04x:", i); + + fprintf(trace_ctx->trace_fp_log, " %02x", value); + } + fprintf(trace_ctx->trace_fp_log, "\n"); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAPictureParameterBufferMPEG2( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAPictureParameterBufferMPEG2 *p=(VAPictureParameterBufferMPEG2 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx,"VAPictureParameterBufferMPEG2\n"); + + va_TraceMsg(trace_ctx,"\thorizontal size= %d\n", p->horizontal_size); + va_TraceMsg(trace_ctx,"\tvertical size= %d\n", p->vertical_size); + va_TraceMsg(trace_ctx,"\tforward reference picture= %d\n", p->forward_reference_picture); + va_TraceMsg(trace_ctx,"\tbackward reference picture= %d\n", p->backward_reference_picture); + va_TraceMsg(trace_ctx,"\tpicture coding type= %d\n", p->picture_coding_type); + va_TraceMsg(trace_ctx,"\tf mode= %d\n", p->f_code); + + va_TraceMsg(trace_ctx,"\tpicture coding extension = %d\n", p->picture_coding_extension.value); + va_TraceMsg(trace_ctx,"\tintra_dc_precision= %d\n", p->picture_coding_extension.bits.intra_dc_precision); + va_TraceMsg(trace_ctx,"\tpicture_structure= %d\n", p->picture_coding_extension.bits.picture_structure); + va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->picture_coding_extension.bits.top_field_first); + va_TraceMsg(trace_ctx,"\tframe_pred_frame_dct= %d\n", p->picture_coding_extension.bits.frame_pred_frame_dct); + va_TraceMsg(trace_ctx,"\tconcealment_motion_vectors= %d\n", p->picture_coding_extension.bits.concealment_motion_vectors); + va_TraceMsg(trace_ctx,"\tq_scale_type= %d\n", p->picture_coding_extension.bits.q_scale_type); + va_TraceMsg(trace_ctx,"\tintra_vlc_format= %d\n", p->picture_coding_extension.bits.intra_vlc_format); + va_TraceMsg(trace_ctx,"\talternate_scan= %d\n", p->picture_coding_extension.bits.alternate_scan); + va_TraceMsg(trace_ctx,"\trepeat_first_field= %d\n", p->picture_coding_extension.bits.repeat_first_field); + va_TraceMsg(trace_ctx,"\tprogressive_frame= %d\n", p->picture_coding_extension.bits.progressive_frame); + va_TraceMsg(trace_ctx,"\tis_first_field= %d\n", p->picture_coding_extension.bits.is_first_field); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAIQMatrixBufferMPEG2( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAIQMatrixBufferMPEG2 *p=(VAIQMatrixBufferMPEG2 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG2\n"); + + va_TraceMsg(trace_ctx,"\tload_intra_quantiser_matrix = %d\n", p->load_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tload_non_intra_quantiser_matrix = %d\n", p->load_non_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tload_chroma_intra_quantiser_matrix = %d\n", p->load_chroma_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tload_chroma_non_intra_quantiser_matrix = %d\n", p->load_chroma_non_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tintra_quantiser_matrix = %d\n", p->intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tnon_intra_quantiser_matrix = %d\n", p->non_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tchroma_intra_quantiser_matrix = %d\n", p->chroma_intra_quantiser_matrix); + va_TraceMsg(trace_ctx,"\tchroma_non_intra_quantiser_matrix = %d\n", p->chroma_non_intra_quantiser_matrix); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVASliceParameterBufferMPEG2( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VASliceParameterBufferMPEG2 *p=(VASliceParameterBufferMPEG2 *)data; + + DPY2TRACECTX(dpy); + + trace_ctx->trace_slice_no++; + + trace_ctx->trace_slice_size = p->slice_data_size; + + va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG2\n"); + + va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag); + va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset); + va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %d\n", p->slice_horizontal_position); + va_TraceMsg(trace_ctx,"\tslice_vertical_position = %d\n", p->slice_vertical_position); + va_TraceMsg(trace_ctx,"\tquantiser_scale_code = %d\n", p->quantiser_scale_code); + va_TraceMsg(trace_ctx,"\tintra_slice_flag = %d\n", p->intra_slice_flag); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAPictureParameterBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAPictureParameterBufferJPEGBaseline *p=(VAPictureParameterBufferJPEGBaseline *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx,"*VAPictureParameterBufferJPEG\n"); + va_TraceMsg(trace_ctx,"\tpicture_width = %u\n", p->picture_width); + va_TraceMsg(trace_ctx,"\tpicture_height = %u\n", p->picture_height); + va_TraceMsg(trace_ctx,"\tcomponents = \n"); + for (i = 0; i < p->num_components && i < 255; ++i) { + va_TraceMsg(trace_ctx,"\t\t[%d] component_id = %u\n", i, p->components[i].component_id); + va_TraceMsg(trace_ctx,"\t\t[%d] h_sampling_factor = %u\n", i, p->components[i].h_sampling_factor); + va_TraceMsg(trace_ctx,"\t\t[%d] v_sampling_factor = %u\n", i, p->components[i].v_sampling_factor); + va_TraceMsg(trace_ctx,"\t\t[%d] quantiser_table_selector = %u\n", i, p->components[i].quantiser_table_selector); + } +} + +static void va_TraceVAIQMatrixBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i, j; + static char tmp[1024]; + VAIQMatrixBufferJPEGBaseline *p=(VAIQMatrixBufferJPEGBaseline *)data; + DPY2TRACECTX(dpy); + va_TraceMsg(trace_ctx,"*VAIQMatrixParameterBufferJPEG\n"); + va_TraceMsg(trace_ctx,"\tload_quantiser_table =\n"); + for (i = 0; i < 4; ++i) { + va_TraceMsg(trace_ctx,"\t\t[%d] = %u\n", i, p->load_quantiser_table[i]); + } + va_TraceMsg(trace_ctx,"\tquantiser_table =\n"); + for (i = 0; i < 4; ++i) { + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 64; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->quantiser_table[i][j]); + } + va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp); + } +} + +static void va_TraceVASliceParameterBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VASliceParameterBufferJPEGBaseline *p=(VASliceParameterBufferJPEGBaseline *)data; + DPY2TRACECTX(dpy); + va_TraceMsg(trace_ctx,"*VASliceParameterBufferJPEG\n"); + va_TraceMsg(trace_ctx,"\tslice_data_size = %u\n", p->slice_data_size); + va_TraceMsg(trace_ctx,"\tslice_data_offset = %u\n", p->slice_data_offset); + va_TraceMsg(trace_ctx,"\tslice_data_flag = %u\n", p->slice_data_flag); + va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %u\n", p->slice_horizontal_position); + va_TraceMsg(trace_ctx,"\tslice_vertical_position = %u\n", p->slice_vertical_position); + va_TraceMsg(trace_ctx,"\tcomponents = \n"); + for (i = 0; i < p->num_components && i < 4; ++i) { + va_TraceMsg(trace_ctx,"\t\t[%d] component_selector = %u\n", i, p->components[i].component_selector); + va_TraceMsg(trace_ctx,"\t\t[%d] dc_table_selector = %u\n", i, p->components[i].dc_table_selector); + va_TraceMsg(trace_ctx,"\t\t[%d] ac_table_selector = %u\n", i, p->components[i].ac_table_selector); + } + va_TraceMsg(trace_ctx,"\trestart_interval = %u\n", p->restart_interval); + va_TraceMsg(trace_ctx,"\tnum_mcus = %u\n", p->num_mcus); +} + +static void va_TraceVAHuffmanTableBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i, j; + static char tmp[1024]; + VAHuffmanTableBufferJPEGBaseline *p=(VAHuffmanTableBufferJPEGBaseline *)data; + DPY2TRACECTX(dpy); + va_TraceMsg(trace_ctx,"*VAHuffmanTableBufferJPEG\n"); + + for (i = 0; i < 2; ++i) { + va_TraceMsg(trace_ctx,"\tload_huffman_table[%d] =%u\n", i, p->load_huffman_table[0]); + va_TraceMsg(trace_ctx,"\thuffman_table[%d] =\n", i); + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 16; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_dc_codes[j]); + } + va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp); + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 12; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].dc_values[j]); + } + va_TraceMsg(trace_ctx,"\t\tdc_values =%s\n", tmp); + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 16; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_ac_codes[j]); + } + va_TraceMsg(trace_ctx,"\t\tnum_ac_codes =%s\n", tmp); + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 162; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].ac_values[j]); + } + va_TraceMsg(trace_ctx,"\t\tac_values =%s\n", tmp); + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 2; ++j) { + sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].pad[j]); + } + va_TraceMsg(trace_ctx,"\t\tpad =%s\n", tmp); + } +} + +static void va_TraceVAPictureParameterBufferMPEG4( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAPictureParameterBufferMPEG4 *p=(VAPictureParameterBufferMPEG4 *)data; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx,"*VAPictureParameterBufferMPEG4\n"); + va_TraceMsg(trace_ctx,"\tvop_width = %d\n", p->vop_width); + va_TraceMsg(trace_ctx,"\tvop_height = %d\n", p->vop_height); + va_TraceMsg(trace_ctx,"\tforward_reference_picture = %d\n", p->forward_reference_picture); + va_TraceMsg(trace_ctx,"\tbackward_reference_picture = %d\n", p->backward_reference_picture); + va_TraceMsg(trace_ctx,"\tvol_fields value = %d\n", p->vol_fields.value); + va_TraceMsg(trace_ctx,"\tshort_video_header= %d\n", p->vol_fields.bits.short_video_header); + va_TraceMsg(trace_ctx,"\tchroma_format= %d\n", p->vol_fields.bits.chroma_format); + va_TraceMsg(trace_ctx,"\tinterlaced= %d\n", p->vol_fields.bits.interlaced); + va_TraceMsg(trace_ctx,"\tobmc_disable= %d\n", p->vol_fields.bits.obmc_disable); + va_TraceMsg(trace_ctx,"\tsprite_enable= %d\n", p->vol_fields.bits.sprite_enable); + va_TraceMsg(trace_ctx,"\tsprite_warping_accuracy= %d\n", p->vol_fields.bits.sprite_warping_accuracy); + va_TraceMsg(trace_ctx,"\tquant_type= %d\n", p->vol_fields.bits.quant_type); + va_TraceMsg(trace_ctx,"\tquarter_sample= %d\n", p->vol_fields.bits.quarter_sample); + va_TraceMsg(trace_ctx,"\tdata_partitioned= %d\n", p->vol_fields.bits.data_partitioned); + va_TraceMsg(trace_ctx,"\treversible_vlc= %d\n", p->vol_fields.bits.reversible_vlc); + va_TraceMsg(trace_ctx,"\tresync_marker_disable= %d\n", p->vol_fields.bits.resync_marker_disable); + va_TraceMsg(trace_ctx,"\tno_of_sprite_warping_points = %d\n", p->no_of_sprite_warping_points); + va_TraceMsg(trace_ctx,"\tsprite_trajectory_du ="); + for(i=0;i<3;i++) + va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_du[i]); + + va_TraceMsg(trace_ctx,"\n"); + va_TraceMsg(trace_ctx,"\tsprite_trajectory_dv ="); + for(i=0;i<3;i++) + va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_dv[i]); + va_TraceMsg(trace_ctx,"\n"); + va_TraceMsg(trace_ctx,"\tvop_fields value = %d\n", p->vop_fields.value); + va_TraceMsg(trace_ctx,"\tvop_coding_type= %d\n", p->vop_fields.bits.vop_coding_type); + va_TraceMsg(trace_ctx,"\tbackward_reference_vop_coding_type= %d\n", p->vop_fields.bits.backward_reference_vop_coding_type); + va_TraceMsg(trace_ctx,"\tvop_rounding_type= %d\n", p->vop_fields.bits.vop_rounding_type); + va_TraceMsg(trace_ctx,"\tintra_dc_vlc_thr= %d\n", p->vop_fields.bits.intra_dc_vlc_thr); + va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->vop_fields.bits.top_field_first); + va_TraceMsg(trace_ctx,"\talternate_vertical_scan_flag= %d\n", p->vop_fields.bits.alternate_vertical_scan_flag); + va_TraceMsg(trace_ctx,"\tvop_fcode_forward = %d\n", p->vop_fcode_forward); + va_TraceMsg(trace_ctx,"\tvop_fcode_backward = %d\n", p->vop_fcode_backward); + va_TraceMsg(trace_ctx,"\tnum_gobs_in_vop = %d\n", p->num_gobs_in_vop); + va_TraceMsg(trace_ctx,"\tnum_macroblocks_in_gob = %d\n", p->num_macroblocks_in_gob); + va_TraceMsg(trace_ctx,"\tTRB = %d\n", p->TRB); + va_TraceMsg(trace_ctx,"\tTRD = %d\n", p->TRD); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAIQMatrixBufferMPEG4( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAIQMatrixBufferMPEG4 *p=(VAIQMatrixBufferMPEG4 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG4\n"); + + va_TraceMsg(trace_ctx,"\tload_intra_quant_mat = %d\n", p->load_intra_quant_mat); + va_TraceMsg(trace_ctx,"\tload_non_intra_quant_mat = %d\n", p->load_non_intra_quant_mat); + va_TraceMsg(trace_ctx,"\tintra_quant_mat =\n"); + for(i=0;i<64;i++) + va_TraceMsg(trace_ctx,"\t\t%d\n", p->intra_quant_mat[i]); + + va_TraceMsg(trace_ctx,"\tnon_intra_quant_mat =\n"); + for(i=0;i<64;i++) + va_TraceMsg(trace_ctx,"\t\t%d\n", p->non_intra_quant_mat[i]); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncSequenceParameterBufferMPEG4( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSequenceParameterBufferMPEG4 *p = (VAEncSequenceParameterBufferMPEG4 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferMPEG4\n"); + + va_TraceMsg(trace_ctx, "\tprofile_and_level_indication = %d\n", p->profile_and_level_indication); + va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period); + va_TraceMsg(trace_ctx, "\tvideo_object_layer_width = %d\n", p->video_object_layer_width); + va_TraceMsg(trace_ctx, "\tvideo_object_layer_height = %d\n", p->video_object_layer_height); + va_TraceMsg(trace_ctx, "\tvop_time_increment_resolution = %d\n", p->vop_time_increment_resolution); + va_TraceMsg(trace_ctx, "\tfixed_vop_rate = %d\n", p->fixed_vop_rate); + va_TraceMsg(trace_ctx, "\tfixed_vop_time_increment = %d\n", p->fixed_vop_time_increment); + va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate); + va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp); + va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncPictureParameterBufferMPEG4( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPictureParameterBufferMPEG4 *p = (VAEncPictureParameterBufferMPEG4 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferMPEG4\n"); + va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture); + va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture); + va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf); + va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width); + va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height); + va_TraceMsg(trace_ctx, "\tmodulo_time_base = %d\n", p->modulo_time_base); + va_TraceMsg(trace_ctx, "\tvop_time_increment = %d\n", p->vop_time_increment); + va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_type); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVASliceParameterBufferMPEG4( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VASliceParameterBufferMPEG4 *p=(VASliceParameterBufferMPEG4 *)data; + + DPY2TRACECTX(dpy); + + trace_ctx->trace_slice_no++; + + trace_ctx->trace_slice_size = p->slice_data_size; + + va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG4\n"); + + va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag); + va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset); + va_TraceMsg(trace_ctx,"\tmacroblock_number = %d\n", p->macroblock_number); + va_TraceMsg(trace_ctx,"\tquant_scale = %d\n", p->quant_scale); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static inline void va_TraceFlagIfNotZero( + struct trace_context *trace_ctx, + const char *name, /* in */ + unsigned int flag /* in */ +) +{ + if (flag != 0) { + va_TraceMsg(trace_ctx, "%s = %x\n", name, flag); + } +} + + +static void va_TraceVAPictureParameterBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAPictureParameterBufferHEVC *p = (VAPictureParameterBufferHEVC*)data; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "VAPictureParameterBufferHEVC\n"); + + va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id); + va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.pic_order_cnt); + va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags); + + va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n"); + for (i = 0; i < 15; i++) + { + if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) && + ((p->ReferenceFrames[i].flags & VA_PICTURE_HEVC_INVALID) == 0)) { + va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x\n", + p->ReferenceFrames[i].picture_id, + p->ReferenceFrames[i].pic_order_cnt, + p->ReferenceFrames[i].flags); + } else + va_TraceMsg(trace_ctx, "\t\tinv-inv-inv-inv-inv\n"); + } + va_TraceMsg(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples); + va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples); + va_TraceMsg(trace_ctx, "\tpic_fields = %d\n", p->pic_fields.value); + + va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->pic_fields.bits.chroma_format_idc); + va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->pic_fields.bits.separate_colour_plane_flag); + va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->pic_fields.bits.pcm_enabled_flag); + va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->pic_fields.bits.scaling_list_enabled_flag); + va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag); + va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->pic_fields.bits.amp_enabled_flag); + va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->pic_fields.bits.strong_intra_smoothing_enabled_flag); + va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag); + va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag); + va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag); + va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag); + va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag); + va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag); + va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag); + va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag); + va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag); + va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag); + va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->pic_fields.bits.pcm_loop_filter_disabled_flag); + va_TraceMsg(trace_ctx, "\tNoPicReorderingFlag = %d\n", p->pic_fields.bits.NoPicReorderingFlag); + va_TraceMsg(trace_ctx, "\tNoBiPredFlag = %d\n", p->pic_fields.bits.NoBiPredFlag); + va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->pic_fields.bits.ReservedBits); + + va_TraceMsg(trace_ctx, "\tsps_max_dec_pic_buffering_minus1 = %d\n", p->sps_max_dec_pic_buffering_minus1); + va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8); + va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8); + va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1); + va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1); + va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3); + va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size); + va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2); + va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size); + va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3); + va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_pcm_luma_coding_block_size = %d\n", p->log2_diff_max_min_pcm_luma_coding_block_size); + va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra); + va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter); + va_TraceMsg(trace_ctx, "\tinit_qp_minus26 = %d\n", p->init_qp_minus26); + va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth); + va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset); + va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset); + va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2); + va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1); + va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1); + + va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[19]=\n"); + for (i = 0; i < 19; i++) { + va_TraceMsg(trace_ctx, "\t%d", p->column_width_minus1[i]); + if ((i + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + va_TraceMsg(trace_ctx, "\n"); + va_TraceMsg(trace_ctx, "\trow_height_minus1[21]=\n"); + for (i = 0; i < 21; i++) { + va_TraceMsg(trace_ctx, "\t%d", p->row_height_minus1[i]); + if ((i + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + va_TraceMsg(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tslice_parsing_fields = %d\n", p->slice_parsing_fields.value); + va_TraceMsg(trace_ctx, "\tlists_modification_present_flag = %d\n", p->slice_parsing_fields.bits.lists_modification_present_flag); + va_TraceMsg(trace_ctx, "\tlong_term_ref_pics_present_flag = %d\n", p->slice_parsing_fields.bits.long_term_ref_pics_present_flag); + va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->slice_parsing_fields.bits.sps_temporal_mvp_enabled_flag); + va_TraceMsg(trace_ctx, "\tcabac_init_present_flag = %d\n", p->slice_parsing_fields.bits.cabac_init_present_flag); + va_TraceMsg(trace_ctx, "\toutput_flag_present_flag = %d\n", p->slice_parsing_fields.bits.output_flag_present_flag); + va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->slice_parsing_fields.bits.dependent_slice_segments_enabled_flag); + va_TraceMsg(trace_ctx, "\tpps_slice_chroma_qp_offsets_present_flag = %d\n", p->slice_parsing_fields.bits.pps_slice_chroma_qp_offsets_present_flag); + va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->slice_parsing_fields.bits.sample_adaptive_offset_enabled_flag); + va_TraceMsg(trace_ctx, "\tdeblocking_filter_override_enabled_flag = %d\n", p->slice_parsing_fields.bits.deblocking_filter_override_enabled_flag); + va_TraceMsg(trace_ctx, "\tpps_disable_deblocking_filter_flag = %d\n", p->slice_parsing_fields.bits.pps_disable_deblocking_filter_flag); + va_TraceMsg(trace_ctx, "\tslice_segment_header_extension_present_flag = %d\n", p->slice_parsing_fields.bits.slice_segment_header_extension_present_flag); + va_TraceMsg(trace_ctx, "\tRapPicFlag = %d\n", p->slice_parsing_fields.bits.RapPicFlag); + va_TraceMsg(trace_ctx, "\tIdrPicFlag = %d\n", p->slice_parsing_fields.bits.IdrPicFlag); + va_TraceMsg(trace_ctx, "\tIntraPicFlag = %d\n", p->slice_parsing_fields.bits.IntraPicFlag); + va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->slice_parsing_fields.bits.ReservedBits); + + va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->log2_max_pic_order_cnt_lsb_minus4); + va_TraceMsg(trace_ctx, "\tnum_short_term_ref_pic_sets = %d\n", p->num_short_term_ref_pic_sets); + va_TraceMsg(trace_ctx, "\tnum_long_term_ref_pic_sps = %d\n", p->num_long_term_ref_pic_sps); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1); + va_TraceMsg(trace_ctx, "\tpps_beta_offset_div2 = %d\n", p->pps_beta_offset_div2); + va_TraceMsg(trace_ctx, "\tpps_tc_offset_div2 = %d\n", p->pps_tc_offset_div2); + va_TraceMsg(trace_ctx, "\tnum_extra_slice_header_bits = %d\n", p->num_extra_slice_header_bits); + va_TraceMsg(trace_ctx, "\tst_rps_bits = %d\n", p->st_rps_bits); + + return; +} + +static void va_TraceVASliceParameterBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i,j; + VASliceParameterBufferHEVC* p = (VASliceParameterBufferHEVC*)data; + + DPY2TRACECTX(dpy); + + trace_ctx->trace_slice_no++; + trace_ctx->trace_slice_size = p->slice_data_size; + + va_TraceMsg(trace_ctx, "VASliceParameterBufferHEVC\n"); + va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag); + va_TraceMsg(trace_ctx, "\tslice_data_byte_offset = %d\n", p->slice_data_byte_offset); + va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address); + + va_TraceMsg(trace_ctx, "\tRefPicList[2][15]=\n"); + for (i = 0; i < 2; i++) { + for (j = 0; j < 15; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->RefPicList[i][j]); + if ((i*8 + j + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + } + va_TraceMsg(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tLongSliceFlags.value = %d\n", p->LongSliceFlags.value); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.LastSliceOfPic = %d\n", p->LongSliceFlags.fields.LastSliceOfPic); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.dependent_slice_segment_flag = %d\n", p->LongSliceFlags.fields.dependent_slice_segment_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_type = %d\n", p->LongSliceFlags.fields.slice_type); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.color_plane_id = %d\n", p->LongSliceFlags.fields.color_plane_id); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_luma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_luma_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_chroma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_chroma_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.mvd_l1_zero_flag = %d\n", p->LongSliceFlags.fields.mvd_l1_zero_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.cabac_init_flag = %d\n", p->LongSliceFlags.fields.cabac_init_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_temporal_mvp_enabled_flag = %d\n", p->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_deblocking_filter_disabled_flag = %d\n", p->LongSliceFlags.fields.slice_deblocking_filter_disabled_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.collocated_from_l0_flag = %d\n", p->LongSliceFlags.fields.collocated_from_l0_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_loop_filter_across_slices_enabled_flag = %d\n", p->LongSliceFlags.fields.slice_loop_filter_across_slices_enabled_flag); + va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.reserved = %d\n", p->LongSliceFlags.fields.reserved); + + va_TraceMsg(trace_ctx, "\tcollocated_ref_idx = %d\n", p->collocated_ref_idx); + + va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta); + va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2); + va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2); + va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom); + + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1); + for (i = 0; i <= p->num_ref_idx_l0_active_minus1; i++) { + va_TraceMsg(trace_ctx, "\t%d ", p->delta_luma_weight_l0[i]); + va_TraceMsg(trace_ctx, "\t%d ", p->luma_offset_l0[i]); + va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l0[i][0]); + va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l0[i][1]); + va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL0[i][0]); + va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL0[i][1]); + va_TraceMsg(trace_ctx, "\n"); + } + + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1); + for (i = 0; i <= p->num_ref_idx_l1_active_minus1; i++) { + va_TraceMsg(trace_ctx, "\t%d ", p->delta_luma_weight_l1[i]); + va_TraceMsg(trace_ctx, "\t%d ", p->luma_offset_l1[i]); + va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l1[i][0]); + va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l1[i][1]); + va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL1[i][0]); + va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL1[i][1]); + va_TraceMsg(trace_ctx, "\n"); + } + + va_TraceMsg(trace_ctx, "\tfive_minus_max_num_merge_cand = %d\n", p->five_minus_max_num_merge_cand); + + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVAIQMatrixBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data +) +{ + int i, j; + VAIQMatrixBufferHEVC* p = (VAIQMatrixBufferHEVC* )data; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "VAIQMatrixBufferHEVC\n"); + + va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n"); + for (i = 0; i < 6; i++) { + for (j = 0; j < 16; j++) { + va_TraceMsg(trace_ctx, "\t%d\t", p->ScalingList4x4[i][j]); + if ((j + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + } + + va_TraceMsg(trace_ctx, "\tScalingList8x8[6][64]=\n"); + for (i = 0; i < 6; i++) { + for (j = 0; j < 64; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->ScalingList8x8[i][j]); + if ((j + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + } + + va_TraceMsg(trace_ctx, "\tScalingList16x16[6][64]=\n"); + for (i = 0; i < 6; i++) { + for (j = 0; j < 64; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->ScalingList16x16[i][j]); + if ((j + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + } + + va_TraceMsg(trace_ctx, "\tScalingList32x32[2][64]=\n"); + for (i = 0; i < 2; i++) { + for (j = 0; j < 64; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->ScalingList32x32[i][j]); + if ((j + 1) % 8 == 0) + va_TraceMsg(trace_ctx, "\n"); + } + } + + va_TraceMsg(trace_ctx, "\tScalingListDC16x16[6]=\n"); + for (j = 0; j < 6; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->ScalingListDC16x16[j]); + } + va_TraceMsg(trace_ctx, "\tScalingListDC32x32[2]=\n"); + for (j = 0; j < 2; j++) { + va_TraceMsg(trace_ctx, "\t%d", p->ScalingListDC32x32[j]); + } + + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVAEncSequenceParameterBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSequenceParameterBufferHEVC *p = (VAEncSequenceParameterBufferHEVC *)data; + + DPY2TRACECTX(dpy); + + if(!p) + return; + + va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferHEVC\n"); + + va_TraceMsg(trace_ctx, "\tgeneral_profile_idc = %d\n", p->general_profile_idc); + va_TraceMsg(trace_ctx, "\tgeneral_level_idc = %d\n", p->general_level_idc); + va_TraceMsg(trace_ctx, "\tgeneral_tier_flag = %d\n", p->general_tier_flag); + va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period); + va_TraceMsg(trace_ctx, "\tintra_idr_period = %d\n", p->intra_idr_period); + va_TraceMsg(trace_ctx, "\tip_period = %d\n", p->ip_period); + va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples); + va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples); + va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc); + va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->seq_fields.bits.separate_colour_plane_flag); + va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->seq_fields.bits.bit_depth_luma_minus8); + va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->seq_fields.bits.bit_depth_chroma_minus8); + va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->seq_fields.bits.scaling_list_enabled_flag); + va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->seq_fields.bits.strong_intra_smoothing_enabled_flag); + va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->seq_fields.bits.amp_enabled_flag); + va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->seq_fields.bits.sample_adaptive_offset_enabled_flag); + va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->seq_fields.bits.pcm_enabled_flag); + va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->seq_fields.bits.pcm_loop_filter_disabled_flag); + va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->seq_fields.bits.sps_temporal_mvp_enabled_flag); + va_TraceMsg(trace_ctx, "\treserved_bits = %d\n", p->seq_fields.bits.reserved_bits); + va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3); + va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size); + va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2); + va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size); + va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter); + va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra); + va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1); + va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1); + va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3); + va_TraceMsg(trace_ctx, "\tlog2_max_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_max_pcm_luma_coding_block_size_minus3); + va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag); + va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag); + va_TraceMsg(trace_ctx, "\tneutral_chroma_indication_flag = %d\n", p->vui_fields.bits.neutral_chroma_indication_flag); + va_TraceMsg(trace_ctx, "\tfield_seq_flag = %d\n", p->vui_fields.bits.field_seq_flag); + va_TraceMsg(trace_ctx, "\tvui_timing_info_present_flag = %d\n", p->vui_fields.bits.vui_timing_info_present_flag); + va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag); + va_TraceMsg(trace_ctx, "\ttiles_fixed_structure_flag = %d\n", p->vui_fields.bits.tiles_fixed_structure_flag); + va_TraceMsg(trace_ctx, "\tmotion_vectors_over_pic_boundaries_flag = %d\n", p->vui_fields.bits.motion_vectors_over_pic_boundaries_flag); + va_TraceMsg(trace_ctx, "\trestricted_ref_pic_lists_flag = %d\n", p->vui_fields.bits.restricted_ref_pic_lists_flag); + va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal); + va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical); + va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc); + va_TraceMsg(trace_ctx, "\tsar_width = %d\n", p->sar_width); + va_TraceMsg(trace_ctx, "\tsar_height = %d\n", p->sar_height); + va_TraceMsg(trace_ctx, "\tvui_num_units_in_tick = %d\n", p->vui_num_units_in_tick); + va_TraceMsg(trace_ctx, "\tvui_time_scale = %d\n", p->vui_time_scale); + va_TraceMsg(trace_ctx, "\tmin_spatial_segmentation_idc = %d\n", p->min_spatial_segmentation_idc); + va_TraceMsg(trace_ctx, "\tmax_bytes_per_pic_denom = %d\n", p->max_bytes_per_pic_denom); + va_TraceMsg(trace_ctx, "\tmax_bits_per_min_cu_denom = %d\n", p->max_bits_per_min_cu_denom); + + return; +} + +static void va_TraceVAEncPictureParameterBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAEncPictureParameterBufferHEVC *p = (VAEncPictureParameterBufferHEVC *)data; + + DPY2TRACECTX(dpy); + + if(!p) + return; + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferHEVC\n"); + + va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.picture_id = %d\n", p->decoded_curr_pic.picture_id); + va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.pic_order_cnt = %d\n", p->decoded_curr_pic.pic_order_cnt); + va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.flags = %d\n", p->decoded_curr_pic.flags); + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\treference_frames[%d].picture_id = %d\n", i, p->reference_frames[i].picture_id); + va_TraceMsg(trace_ctx, "\treference_frames[%d].pic_order_cnt = %d\n", i, p->reference_frames[i].pic_order_cnt); + va_TraceMsg(trace_ctx, "\treference_frames[%d].flags = %d\n", i, p->reference_frames[i].flags); + } + + va_TraceMsg(trace_ctx, "\tcoded_buf = %d\n", p->coded_buf); + va_TraceMsg(trace_ctx, "\tcollocated_ref_pic_index = %d\n", p->collocated_ref_pic_index); + va_TraceMsg(trace_ctx, "\tlast_picture = %d\n", p->last_picture); + va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp); + va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth); + va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset); + va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset); + va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1); + va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1); + + for(i = 0; i < 19; i ++) + { + va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[%d] = %d\n", i, p->column_width_minus1[i]); + } + + for(i = 0; i < 21; i ++) + { + va_TraceMsg(trace_ctx, "\trow_height_minus1[%d] = %d\n", i, p->row_height_minus1[i]); + } + + va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2); + va_TraceMsg(trace_ctx, "\tctu_max_bitsize_allowed = %d\n", p->ctu_max_bitsize_allowed); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1); + va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id); + va_TraceMsg(trace_ctx, "\tnal_unit_type = %d\n", p->nal_unit_type); + va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag); + va_TraceMsg(trace_ctx, "\tcoding_type = %d\n", p->pic_fields.bits.coding_type); + va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag); + va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->pic_fields.bits.dependent_slice_segments_enabled_flag); + va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag); + va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag); + va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag); + va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag); + va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag); + va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag); + va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag); + va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag); + va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag); + va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag); + va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag); + va_TraceMsg(trace_ctx, "\tscaling_list_data_present_flag = %d\n", p->pic_fields.bits.scaling_list_data_present_flag); + va_TraceMsg(trace_ctx, "\tscreen_content_flag = %d\n", p->pic_fields.bits.screen_content_flag); + va_TraceMsg(trace_ctx, "\tenable_gpu_weighted_prediction = %d\n", p->pic_fields.bits.enable_gpu_weighted_prediction); + va_TraceMsg(trace_ctx, "\tno_output_of_prior_pics_flag = %d\n", p->pic_fields.bits.no_output_of_prior_pics_flag); + va_TraceMsg(trace_ctx, "\treserved = %d\n", p->pic_fields.bits.reserved); + + return; +} + +static void va_TraceVAEncSliceParameterBufferHEVC( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAEncSliceParameterBufferHEVC *p = (VAEncSliceParameterBufferHEVC *)data; + + DPY2TRACECTX(dpy); + + if(!p) + return; + + va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferHEVC\n"); + + va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address); + va_TraceMsg(trace_ctx, "\tnum_ctu_in_slice = %d\n", p->num_ctu_in_slice); + va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type); + va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1); + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].picture_id = %d\n", i, p->ref_pic_list0[i].picture_id); + va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].pic_order_cnt = %d\n", i, p->ref_pic_list0[i].pic_order_cnt); + va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].flags = %d\n", i, p->ref_pic_list0[i].flags); + va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].picture_id = %d\n", i, p->ref_pic_list1[i].picture_id); + va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].pic_order_cnt = %d\n", i, p->ref_pic_list1[i].pic_order_cnt); + va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].flags = %d\n", i, p->ref_pic_list1[i].flags); + } + + va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom); + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l0[%d] = %d\n", i, p->delta_luma_weight_l0[i]); + va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l1[%d] = %d\n", i, p->delta_luma_weight_l1[i]); + } + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\tluma_offset_l0[%d] = %d\n", i, p->luma_offset_l0[i]); + va_TraceMsg(trace_ctx, "\tluma_offset_l1[%d] = %d\n", i, p->luma_offset_l1[i]); + } + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][0] = %d\n", i, p->delta_chroma_weight_l0[i][0]); + va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][1] = %d\n", i, p->delta_chroma_weight_l0[i][1]); + va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][0] = %d\n", i, p->delta_chroma_weight_l1[i][0]); + va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][1] = %d\n", i, p->delta_chroma_weight_l1[i][1]); + } + + for(i = 0; i < 15; i ++) + { + va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][0] = %d\n", i, p->chroma_offset_l0[i][0]); + va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][1] = %d\n", i, p->chroma_offset_l0[i][1]); + va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][0] = %d\n", i, p->chroma_offset_l1[i][0]); + va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][1] = %d\n", i, p->chroma_offset_l1[i][1]); + } + + va_TraceMsg(trace_ctx, "\tmax_num_merge_cand = %d\n", p->max_num_merge_cand); + va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta); + va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2); + va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2); + va_TraceMsg(trace_ctx, "\tlast_slice_of_pic_flag = %d\n", p->slice_fields.bits.last_slice_of_pic_flag); + va_TraceMsg(trace_ctx, "\tdependent_slice_segment_flag = %d\n", p->slice_fields.bits.dependent_slice_segment_flag); + va_TraceMsg(trace_ctx, "\tcolour_plane_id = %d\n", p->slice_fields.bits.colour_plane_id); + va_TraceMsg(trace_ctx, "\tslice_temporal_mvp_enabled_flag = %d\n", p->slice_fields.bits.slice_temporal_mvp_enabled_flag); + va_TraceMsg(trace_ctx, "\tslice_sao_luma_flag = %d\n", p->slice_fields.bits.slice_sao_luma_flag); + va_TraceMsg(trace_ctx, "\tslice_sao_chroma_flag = %d\n", p->slice_fields.bits.slice_sao_chroma_flag); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->slice_fields.bits.num_ref_idx_active_override_flag); + va_TraceMsg(trace_ctx, "\tmvd_l1_zero_flag = %d\n", p->slice_fields.bits.mvd_l1_zero_flag); + va_TraceMsg(trace_ctx, "\tcabac_init_flag = %d\n", p->slice_fields.bits.cabac_init_flag); + va_TraceMsg(trace_ctx, "\tslice_deblocking_filter_disabled_flag = %d\n", p->slice_fields.bits.slice_deblocking_filter_disabled_flag); + va_TraceMsg(trace_ctx, "\tslice_loop_filter_across_slices_enabled_flag = %d\n", p->slice_fields.bits.slice_loop_filter_across_slices_enabled_flag); + va_TraceMsg(trace_ctx, "\tcollocated_from_l0_flag = %d\n", p->slice_fields.bits.collocated_from_l0_flag); + + return; +} + +static void va_TraceVAPictureParameterBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VAPictureParameterBufferH264 *p = (VAPictureParameterBufferH264*)data; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferH264\n"); + + va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id); + va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %u\n", p->CurrPic.frame_idx); + va_TraceMsg(trace_ctx, "\tCurrPic.flags = 0x%08x\n", p->CurrPic.flags); + va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt); + va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt); + + va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n"); + for (i = 0; i < 16; i++) + { + if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) && + ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) { + va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08u-0x%08x\n", + p->ReferenceFrames[i].TopFieldOrderCnt, + p->ReferenceFrames[i].BottomFieldOrderCnt, + p->ReferenceFrames[i].picture_id, + p->ReferenceFrames[i].frame_idx, + p->ReferenceFrames[i].flags); + } else + break; + } + va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs_minus1 = %d\n", p->picture_width_in_mbs_minus1); + va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs_minus1 = %d\n", p->picture_height_in_mbs_minus1); + va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8); + va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8); + va_TraceMsg(trace_ctx, "\tnum_ref_frames = %d\n", p->num_ref_frames); + va_TraceMsg(trace_ctx, "\tseq fields = %d\n", p->seq_fields.value); + va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc); + va_TraceMsg(trace_ctx, "\tresidual_colour_transform_flag = %d\n", p->seq_fields.bits.residual_colour_transform_flag); + va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag); + va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag); + va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag); + va_TraceMsg(trace_ctx, "\tMinLumaBiPredSize8x8 = %d\n", p->seq_fields.bits.MinLumaBiPredSize8x8); + va_TraceMsg(trace_ctx, "\tnum_slice_groups_minus1 = %d\n", p->num_slice_groups_minus1); + va_TraceMsg(trace_ctx, "\tslice_group_map_type = %d\n", p->slice_group_map_type); + va_TraceMsg(trace_ctx, "\tslice_group_change_rate_minus1 = %d\n", p->slice_group_change_rate_minus1); + va_TraceMsg(trace_ctx, "\tpic_init_qp_minus26 = %d\n", p->pic_init_qp_minus26); + va_TraceMsg(trace_ctx, "\tpic_init_qs_minus26 = %d\n", p->pic_init_qs_minus26); + va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset); + va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset); + va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value); + va_TraceFlagIfNotZero(trace_ctx, "\t\tentropy_coding_mode_flag", p->pic_fields.bits.entropy_coding_mode_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_pred_flag", p->pic_fields.bits.weighted_pred_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_bipred_idc", p->pic_fields.bits.weighted_bipred_idc); + va_TraceFlagIfNotZero(trace_ctx, "\t\ttransform_8x8_mode_flag", p->pic_fields.bits.transform_8x8_mode_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tfield_pic_flag", p->pic_fields.bits.field_pic_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tconstrained_intra_pred_flag", p->pic_fields.bits.constrained_intra_pred_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tpic_order_present_flag", p->pic_fields.bits.pic_order_present_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tdeblocking_filter_control_present_flag", p->pic_fields.bits.deblocking_filter_control_present_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\tredundant_pic_cnt_present_flag", p->pic_fields.bits.redundant_pic_cnt_present_flag); + va_TraceFlagIfNotZero(trace_ctx, "\t\treference_pic_flag", p->pic_fields.bits.reference_pic_flag); + va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVASliceParameterBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + int i; + VASliceParameterBufferH264* p = (VASliceParameterBufferH264*)data; + DPY2TRACECTX(dpy); + + trace_ctx->trace_slice_no++; + trace_ctx->trace_slice_size = p->slice_data_size; + + va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferH264\n"); + va_TraceMsg(trace_ctx, "\tslice_data_size = %u\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %u\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = 0x%08x\n", p->slice_data_flag); + va_TraceMsg(trace_ctx, "\tslice_data_bit_offset = %d\n", p->slice_data_bit_offset); + va_TraceMsg(trace_ctx, "\tfirst_mb_in_slice = %d\n", p->first_mb_in_slice); + va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type); + va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1); + va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc); + va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta); + va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc); + va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2); + va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2); + + va_TraceMsg(trace_ctx, "\tRefPicList0 =\n"); + for (i = 0; i < 32; i++) { + if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) && + ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0)) + va_TraceMsg(trace_ctx, "%08d-%08d-0x%08x-%08d-0x%08x\n", p->RefPicList0[i].TopFieldOrderCnt, p->RefPicList0[i].BottomFieldOrderCnt, p->RefPicList0[i].picture_id, p->RefPicList0[i].frame_idx, p->RefPicList0[i].flags); + else + break; + } + va_TraceMsg(trace_ctx, "\tRefPicList1 =\n"); + for (i = 0; i < 32; i++) { + if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) && + ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0)) + va_TraceMsg(trace_ctx, "%08d-%08d-0x%08x-%08d-0x%08x\n", p->RefPicList1[i].TopFieldOrderCnt, p->RefPicList1[i].BottomFieldOrderCnt, p->RefPicList1[i].picture_id, p->RefPicList1[i].frame_idx, p->RefPicList1[i].flags); + else + break; + } + + va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag); + + for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\n", + p->luma_weight_l0[i], + p->luma_offset_l0[i]); + } + + + va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag); + + for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n", + p->chroma_weight_l0[i][0], + p->chroma_offset_l0[i][0], + p->chroma_weight_l0[i][1], + p->chroma_offset_l0[i][1]); + } + + + va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag); + + for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\n", + p->luma_weight_l1[i], + p->luma_offset_l1[i]); + } + + + va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag); + + for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n", + p->chroma_weight_l1[i][0], + p->chroma_offset_l1[i][0], + p->chroma_weight_l1[i][1], + p->chroma_offset_l1[i][1]); + + } + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVAIQMatrixBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data +) +{ + int i, j; + VAIQMatrixBufferH264* p = (VAIQMatrixBufferH264* )data; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferH264\n"); + + va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n"); + for (i = 0; i < 6; i++) { + for (j = 0; j < 16; j++) { + if (trace_ctx->trace_fp_log) { + fprintf(trace_ctx->trace_fp_log, "\t%d", p->ScalingList4x4[i][j]); + if ((j + 1) % 8 == 0) + fprintf(trace_ctx->trace_fp_log, "\n"); + } + } + } + + va_TraceMsg(trace_ctx, "\tScalingList8x8[2][64]=\n"); + for (i = 0; i < 2; i++) { + for (j = 0; j < 64; j++) { + if (trace_ctx->trace_fp_log) { + fprintf(trace_ctx->trace_fp_log,"\t%d", p->ScalingList8x8[i][j]); + if ((j + 1) % 8 == 0) + fprintf(trace_ctx->trace_fp_log, "\n"); + } + } + } + + va_TraceMsg(trace_ctx, NULL); +} + + + +static void va_TraceVAEncSequenceParameterBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSequenceParameterBufferH264 *p = (VAEncSequenceParameterBufferH264 *)data; + DPY2TRACECTX(dpy); + unsigned int i; + + va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH264\n"); + + va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id); + va_TraceMsg(trace_ctx, "\tlevel_idc = %d\n", p->level_idc); + va_TraceMsg(trace_ctx, "\tintra_period = %u\n", p->intra_period); + va_TraceMsg(trace_ctx, "\tintra_idr_period = %u\n", p->intra_idr_period); + va_TraceMsg(trace_ctx, "\tip_period = %u\n", p->ip_period); + va_TraceMsg(trace_ctx, "\tbits_per_second = %u\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\tmax_num_ref_frames = %u\n", p->max_num_ref_frames); + va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs = %d\n", p->picture_width_in_mbs); + va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs = %d\n", p->picture_height_in_mbs); + va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc); + va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag); + va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag); + va_TraceMsg(trace_ctx, "\tseq_scaling_matrix_present_flag = %d\n", p->seq_fields.bits.seq_scaling_matrix_present_flag); + va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag); + va_TraceMsg(trace_ctx, "\tlog2_max_frame_num_minus4 = %d\n", p->seq_fields.bits.log2_max_frame_num_minus4); + va_TraceMsg(trace_ctx, "\tpic_order_cnt_type = %d\n", p->seq_fields.bits.pic_order_cnt_type); + va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4); + va_TraceMsg(trace_ctx, "\tdelta_pic_order_always_zero_flag = %d\n", p->seq_fields.bits.delta_pic_order_always_zero_flag); + va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8); + va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8); + va_TraceMsg(trace_ctx, "\tnum_ref_frames_in_pic_order_cnt_cycle = %d\n", p->num_ref_frames_in_pic_order_cnt_cycle); + va_TraceMsg(trace_ctx, "\toffset_for_non_ref_pic = %d\n", p->offset_for_non_ref_pic); + va_TraceMsg(trace_ctx, "\toffset_for_top_to_bottom_field = %d\n", p->offset_for_top_to_bottom_field); + for(i = 0; (i < p->max_num_ref_frames) && (i < 32); ++i) + va_TraceMsg(trace_ctx, "\toffset_for_ref_frame[%d] = %d\n", i, p->offset_for_ref_frame[i]); + va_TraceMsg(trace_ctx, "\tframe_cropping_flag = %d\n", p->frame_cropping_flag); + va_TraceMsg(trace_ctx, "\tframe_crop_left_offset = %u\n", p->frame_crop_left_offset); + va_TraceMsg(trace_ctx, "\tframe_crop_right_offset = %u\n", p->frame_crop_right_offset); + va_TraceMsg(trace_ctx, "\tframe_crop_top_offset = %u\n", p->frame_crop_top_offset); + va_TraceMsg(trace_ctx, "\tframe_crop_bottom_offset = %u\n", p->frame_crop_bottom_offset); + va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag); + va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag); + va_TraceMsg(trace_ctx, "\ttiming_info_present_flag = %d\n", p->vui_fields.bits.timing_info_present_flag); + va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag); + va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal); + va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical); + va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc); + va_TraceMsg(trace_ctx, "\tsar_width = %u\n", p->sar_width); + va_TraceMsg(trace_ctx, "\tsar_height = %u\n", p->sar_height); + va_TraceMsg(trace_ctx, "\tnum_units_in_tick = %u\n", p->num_units_in_tick); + va_TraceMsg(trace_ctx, "\ttime_scale = %u\n", p->time_scale); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAEncPictureParameterBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPictureParameterBufferH264 *p = (VAEncPictureParameterBufferH264 *)data; + DPY2TRACECTX(dpy); + int i; + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH264\n"); + + va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id); + va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %u\n", p->CurrPic.frame_idx); + va_TraceMsg(trace_ctx, "\tCurrPic.flags = 0x%08x\n", p->CurrPic.flags); + va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt); + va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt); + va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n"); + for (i = 0; i < 16; i++) + { + if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) && + ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) { + va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08u-0x%08x\n", + p->ReferenceFrames[i].TopFieldOrderCnt, + p->ReferenceFrames[i].BottomFieldOrderCnt, + p->ReferenceFrames[i].picture_id, + p->ReferenceFrames[i].frame_idx, + p->ReferenceFrames[i].flags + ); + } else + break; + } + va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf); + va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id); + va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id); + va_TraceMsg(trace_ctx, "\tlast_picture = 0x%08x\n", p->last_picture); + va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num); + va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1); + va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset); + va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset); + va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value); + va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag); + va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag); + va_TraceMsg(trace_ctx, "\tentropy_coding_mode_flag = %d\n", p->pic_fields.bits.entropy_coding_mode_flag); + va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag); + va_TraceMsg(trace_ctx, "\tweighted_bipred_idc = %d\n", p->pic_fields.bits.weighted_bipred_idc); + va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag); + va_TraceMsg(trace_ctx, "\ttransform_8x8_mode_flag = %d\n", p->pic_fields.bits.transform_8x8_mode_flag); + va_TraceMsg(trace_ctx, "\tdeblocking_filter_control_present_flag = %d\n", p->pic_fields.bits.deblocking_filter_control_present_flag); + va_TraceMsg(trace_ctx, "\tredundant_pic_cnt_present_flag = %d\n", p->pic_fields.bits.redundant_pic_cnt_present_flag); + va_TraceMsg(trace_ctx, "\tpic_order_present_flag = %d\n", p->pic_fields.bits.pic_order_present_flag); + va_TraceMsg(trace_ctx, "\tpic_scaling_matrix_present_flag = %d\n", p->pic_fields.bits.pic_scaling_matrix_present_flag); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncSliceParameterBuffer( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBuffer\n"); + + va_TraceMsg(trace_ctx, "\tstart_row_number = %d\n", p->start_row_number); + va_TraceMsg(trace_ctx, "\tslice_height = %d\n", p->slice_height); + va_TraceMsg(trace_ctx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_intra); + va_TraceMsg(trace_ctx, "\tslice_flags.disable_deblocking_filter_idc = %d\n", p->slice_flags.bits.disable_deblocking_filter_idc); + va_TraceMsg(trace_ctx, "\tslice_flags.uses_long_term_ref = %d\n", p->slice_flags.bits.uses_long_term_ref); + va_TraceMsg(trace_ctx, "\tslice_flags.is_long_term_ref = %d\n", p->slice_flags.bits.is_long_term_ref); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncSliceParameterBufferH264( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSliceParameterBufferH264* p = (VAEncSliceParameterBufferH264*)data; + DPY2TRACECTX(dpy); + int i; + + if (!p) + return; + + va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferH264\n"); + va_TraceMsg(trace_ctx, "\tmacroblock_address = %u\n", p->macroblock_address); + va_TraceMsg(trace_ctx, "\tnum_macroblocks = %u\n", p->num_macroblocks); + va_TraceMsg(trace_ctx, "\tmacroblock_info = %08x\n", p->macroblock_info); + va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type); + va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id); + va_TraceMsg(trace_ctx, "\tidr_pic_id = %d\n", p->idr_pic_id); + va_TraceMsg(trace_ctx, "\tpic_order_cnt_lsb = %d\n", p->pic_order_cnt_lsb); + va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt_bottom = %d\n", p->delta_pic_order_cnt_bottom); + va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[0] = %d\n", p->delta_pic_order_cnt[0]); + va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[1] = %d\n", p->delta_pic_order_cnt[1]); + va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->num_ref_idx_active_override_flag); + va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1); + va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2); + + va_TraceMsg(trace_ctx, "\tRefPicList0 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n"); + + + + for (i = 0; i < 32; i++) { + if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) && + ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0)) + va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n", + p->RefPicList0[i].TopFieldOrderCnt, + p->RefPicList0[i].BottomFieldOrderCnt, + p->RefPicList0[i].picture_id, + p->RefPicList0[i].frame_idx, + p->RefPicList0[i].flags); + else + break; + } + + va_TraceMsg(trace_ctx, "\tRefPicList1 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n"); + for (i = 0; i < 32; i++) { + if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) && + ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0)) + va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08d\n", + p->RefPicList1[i].TopFieldOrderCnt, + p->RefPicList1[i].BottomFieldOrderCnt, + p->RefPicList1[i].picture_id, + p->RefPicList1[i].frame_idx, + p->RefPicList1[i].flags + ); + else + break; + } + + va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom); + va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag); + if (p->luma_weight_l0_flag) { + for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\n", + p->luma_weight_l0[i], + p->luma_offset_l0[i]); + } + } + + va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag); + if (p->chroma_weight_l0_flag) { + for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n", + p->chroma_weight_l0[i][0], + p->chroma_offset_l0[i][0], + p->chroma_weight_l0[i][1], + p->chroma_offset_l0[i][1]); + } + } + + va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag); + if (p->luma_weight_l1_flag) { + for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t\t%d\n", + p->luma_weight_l1[i], + p->luma_offset_l1[i]); + } + } + + va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag); + if (p->chroma_weight_l1_flag && p->num_ref_idx_l1_active_minus1 < 32) { + for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) { + va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n", + p->chroma_weight_l1[i][0], + p->chroma_offset_l1[i][0], + p->chroma_weight_l1[i][1], + p->chroma_offset_l1[i][1]); + } + } + va_TraceMsg(trace_ctx, NULL); + + va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc); + va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta); + va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc); + va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2); + va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAEncPackedHeaderParameterBufferType( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPackedHeaderParameterBuffer* p = (VAEncPackedHeaderParameterBuffer*)data; + DPY2TRACECTX(dpy); + int i; + + if (!p) + return; + va_TraceMsg(trace_ctx, "\t--VAEncPackedHeaderParameterBuffer\n"); + va_TraceMsg(trace_ctx, "\ttype = 0x%08x\n", p->type); + va_TraceMsg(trace_ctx, "\tbit_length = %d\n", p->bit_length); + va_TraceMsg(trace_ctx, "\thas_emulation_bytes = %d\n", p->has_emulation_bytes); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncMiscParameterBuffer( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data; + DPY2TRACECTX(dpy); + + switch (tmp->type) { + case VAEncMiscParameterTypeFrameRate: + { + VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->data; + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterFrameRate\n"); + va_TraceMsg(trace_ctx, "\tframerate = %d\n", p->framerate); + + break; + } + case VAEncMiscParameterTypeRateControl: + { + VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterRateControl\n"); + va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\ttarget_percentage = %d\n", p->target_percentage); + va_TraceMsg(trace_ctx, "\twindow_size = %d\n", p->window_size); + va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp); + va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp); + va_TraceMsg(trace_ctx, "\tbasic_unit_size = %d\n", p->basic_unit_size); + va_TraceMsg(trace_ctx, "\trc_flags.reset = %d \n", p->rc_flags.bits.reset); + va_TraceMsg(trace_ctx, "\trc_flags.disable_frame_skip = %d\n", p->rc_flags.bits.disable_frame_skip); + va_TraceMsg(trace_ctx, "\trc_flags.disable_bit_stuffing = %d\n", p->rc_flags.bits.disable_bit_stuffing); + break; + } + case VAEncMiscParameterTypeMaxSliceSize: + { + VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxSliceSize\n"); + va_TraceMsg(trace_ctx, "\tmax_slice_size = %d\n", p->max_slice_size); + break; + } + case VAEncMiscParameterTypeAIR: + { + VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterAIR\n"); + va_TraceMsg(trace_ctx, "\tair_num_mbs = %d\n", p->air_num_mbs); + va_TraceMsg(trace_ctx, "\tair_threshold = %d\n", p->air_threshold); + va_TraceMsg(trace_ctx, "\tair_auto = %d\n", p->air_auto); + break; + } + case VAEncMiscParameterTypeHRD: + { + VAEncMiscParameterHRD *p = (VAEncMiscParameterHRD *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterHRD\n"); + va_TraceMsg(trace_ctx, "\tinitial_buffer_fullness = %d\n", p->initial_buffer_fullness); + va_TraceMsg(trace_ctx, "\tbuffer_size = %d\n", p->buffer_size); + break; + } + case VAEncMiscParameterTypeMaxFrameSize: + { + VAEncMiscParameterBufferMaxFrameSize *p = (VAEncMiscParameterBufferMaxFrameSize *)tmp->data; + + va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxFrameSize\n"); + va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size); + break; + } + default: + va_TraceMsg(trace_ctx, "Unknown VAEncMiscParameterBuffer(type = %d):\n", tmp->type); + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, data); + break; + } + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAPictureParameterBufferVC1( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data +) +{ + VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVC1\n"); + + va_TraceMsg(trace_ctx, "\tforward_reference_picture = 0x%08x\n", p->forward_reference_picture); + va_TraceMsg(trace_ctx, "\tbackward_reference_picture = 0x%08x\n", p->backward_reference_picture); + va_TraceMsg(trace_ctx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_picture); + + va_TraceMsg(trace_ctx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown); + va_TraceMsg(trace_ctx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace); + va_TraceMsg(trace_ctx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag); + va_TraceMsg(trace_ctx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag); + va_TraceMsg(trace_ctx, "\tpsf = %d\n", p->sequence_fields.bits.psf); + va_TraceMsg(trace_ctx, "\tmultires = %d\n", p->sequence_fields.bits.multires); + va_TraceMsg(trace_ctx, "\toverlap = %d\n", p->sequence_fields.bits.overlap); + va_TraceMsg(trace_ctx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker); + va_TraceMsg(trace_ctx, "\trangered = %d\n", p->sequence_fields.bits.rangered); + va_TraceMsg(trace_ctx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_frames); + va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->sequence_fields.bits.profile); + va_TraceMsg(trace_ctx, "\tcoded_width = %d\n", p->coded_width); + va_TraceMsg(trace_ctx, "\tcoded_height = %d\n", p->coded_height); + va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry); + va_TraceMsg(trace_ctx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_link); + va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry); + va_TraceMsg(trace_ctx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_flag); + va_TraceMsg(trace_ctx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter); + va_TraceMsg(trace_ctx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap_flag); + va_TraceMsg(trace_ctx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag); + va_TraceMsg(trace_ctx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields.bits.luma_flag); + va_TraceMsg(trace_ctx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits.luma); + va_TraceMsg(trace_ctx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fields.bits.chroma_flag); + va_TraceMsg(trace_ctx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bits.chroma); + va_TraceMsg(trace_ctx, "\tb_picture_fraction = %d\n", p->b_picture_fraction); + va_TraceMsg(trace_ctx, "\tcbp_table = %d\n", p->cbp_table); + va_TraceMsg(trace_ctx, "\tmb_mode_table = %d\n", p->mb_mode_table); + va_TraceMsg(trace_ctx, "\trange_reduction_frame = %d\n", p->range_reduction_frame); + va_TraceMsg(trace_ctx, "\trounding_control = %d\n", p->rounding_control); + va_TraceMsg(trace_ctx, "\tpost_processing = %d\n", p->post_processing); + va_TraceMsg(trace_ctx, "\tpicture_resolution_index = %d\n", p->picture_resolution_index); + va_TraceMsg(trace_ctx, "\tluma_scale = %d\n", p->luma_scale); + va_TraceMsg(trace_ctx, "\tluma_shift = %d\n", p->luma_shift); + va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_type); + va_TraceMsg(trace_ctx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_coding_mode); + va_TraceMsg(trace_ctx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_field_first); + va_TraceMsg(trace_ctx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_field); + va_TraceMsg(trace_ctx, "\tintensity_compensation = %d\n", p->picture_fields.bits.intensity_compensation); + va_TraceMsg(trace_ctx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb); + va_TraceMsg(trace_ctx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb); + va_TraceMsg(trace_ctx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb); + va_TraceMsg(trace_ctx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx); + va_TraceMsg(trace_ctx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb); + va_TraceMsg(trace_ctx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred); + va_TraceMsg(trace_ctx, "\toverflags = %d\n", p->raw_coding.flags.overflags); + va_TraceMsg(trace_ctx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_type_mb); + va_TraceMsg(trace_ctx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direct_mb); + va_TraceMsg(trace_ctx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb); + va_TraceMsg(trace_ctx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_tx); + va_TraceMsg(trace_ctx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forward_mb); + va_TraceMsg(trace_ctx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred); + va_TraceMsg(trace_ctx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overflags); + va_TraceMsg(trace_ctx, "\treference_distance_flag = %d\n", p->reference_fields.bits.reference_distance_flag); + va_TraceMsg(trace_ctx, "\treference_distance = %d\n", p->reference_fields.bits.reference_distance); + va_TraceMsg(trace_ctx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits.num_reference_pictures); + va_TraceMsg(trace_ctx, "\treference_field_pic_indicator = %d\n", p->reference_fields.bits.reference_field_pic_indicator); + va_TraceMsg(trace_ctx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode); + va_TraceMsg(trace_ctx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2); + va_TraceMsg(trace_ctx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table); + va_TraceMsg(trace_ctx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.two_mv_block_pattern_table); + va_TraceMsg(trace_ctx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch); + va_TraceMsg(trace_ctx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.four_mv_block_pattern_table); + va_TraceMsg(trace_ctx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_flag); + va_TraceMsg(trace_ctx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv_range); + va_TraceMsg(trace_ctx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dmv_flag); + va_TraceMsg(trace_ctx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_dmv_range); + va_TraceMsg(trace_ctx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant); + va_TraceMsg(trace_ctx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantizer); + va_TraceMsg(trace_ctx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp); + va_TraceMsg(trace_ctx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_scale); + va_TraceMsg(trace_ctx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_type); + va_TraceMsg(trace_ctx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame); + va_TraceMsg(trace_ctx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_profile); + va_TraceMsg(trace_ctx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_edge); + va_TraceMsg(trace_ctx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_edge); + va_TraceMsg(trace_ctx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq_binary_level); + va_TraceMsg(trace_ctx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits.alt_pic_quantizer); + va_TraceMsg(trace_ctx, "\tvariable_sized_transform_flag = %d\n", p->transform_fields.bits.variable_sized_transform_flag); + va_TraceMsg(trace_ctx, "\tmb_level_transform_type_flag = %d\n", p->transform_fields.bits.mb_level_transform_type_flag); + va_TraceMsg(trace_ctx, "\tframe_level_transform_type = %d\n", p->transform_fields.bits.frame_level_transform_type); + va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx1); + va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx2); + va_TraceMsg(trace_ctx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bits.intra_transform_dc_table); + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVASliceParameterBufferVC1( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void* data +) +{ + VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data; + DPY2TRACECTX(dpy); + + trace_ctx->trace_slice_no++; + trace_ctx->trace_slice_size = p->slice_data_size; + + va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVC1\n"); + va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag); + va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset); + va_TraceMsg(trace_ctx, "\tslice_vertical_position = %d\n", p->slice_vertical_position); + va_TraceMsg(trace_ctx, NULL); +} + +static void va_TraceVAPictureParameterBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + char tmp[1024]; + VAPictureParameterBufferVP8 *p = (VAPictureParameterBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i,j; + + va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP8\n"); + + va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width); + va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height); + va_TraceMsg(trace_ctx, "\tlast_ref_frame = %x\n", p->last_ref_frame); + va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %x\n", p->golden_ref_frame); + va_TraceMsg(trace_ctx, "\talt_ref_frame = %x\n", p->alt_ref_frame); + va_TraceMsg(trace_ctx, "\tout_of_loop_frame = %x\n", p->out_of_loop_frame); + + va_TraceMsg(trace_ctx, "\tkey_frame = %d\n", p->pic_fields.bits.key_frame); + va_TraceMsg(trace_ctx, "\tversion = %d\n", p->pic_fields.bits.version); + va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled); + va_TraceMsg(trace_ctx, "\tupdate_mb_segmentation_map = %d\n", p->pic_fields.bits.update_mb_segmentation_map); + va_TraceMsg(trace_ctx, "\tupdate_segment_feature_data = %d\n", p->pic_fields.bits.update_segment_feature_data); + va_TraceMsg(trace_ctx, "\tfilter_type = %d\n", p->pic_fields.bits.filter_type); + va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->pic_fields.bits.sharpness_level); + va_TraceMsg(trace_ctx, "\tloop_filter_adj_enable = %d\n", p->pic_fields.bits.loop_filter_adj_enable); + va_TraceMsg(trace_ctx, "\tmode_ref_lf_delta_update = %d\n", p->pic_fields.bits.mode_ref_lf_delta_update); + va_TraceMsg(trace_ctx, "\tsign_bias_golden = %d\n", p->pic_fields.bits.sign_bias_golden); + va_TraceMsg(trace_ctx, "\tsign_bias_alternate = %d\n", p->pic_fields.bits.sign_bias_alternate); + va_TraceMsg(trace_ctx, "\tmb_no_coeff_skip = %d\n", p->pic_fields.bits.mb_no_coeff_skip); + va_TraceMsg(trace_ctx, "\tloop_filter_disable = %d\n", p->pic_fields.bits.loop_filter_disable); + + va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs: 0x%2x, 0x%2x, 0x%2x\n", + p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], p->mb_segment_tree_probs[2]); + + va_TraceMsg(trace_ctx, "\tloop_filter_level: %d, %d, %d, %d\n", + p->loop_filter_level[0], p->loop_filter_level[1], p->loop_filter_level[2], p->loop_filter_level[3]); + + va_TraceMsg(trace_ctx, "\tloop_filter_deltas_ref_frame: %d, %d, %d, %d\n", + p->loop_filter_deltas_ref_frame[0], p->loop_filter_deltas_ref_frame[1], p->loop_filter_deltas_ref_frame[2], p->loop_filter_deltas_ref_frame[3]); + + va_TraceMsg(trace_ctx, "\tloop_filter_deltas_mode: %d, %d, %d, %d\n", + p->loop_filter_deltas_mode[0], p->loop_filter_deltas_mode[1], p->loop_filter_deltas_mode[2], p->loop_filter_deltas_mode[3]); + + va_TraceMsg(trace_ctx, "\tprob_skip_false = %2x\n", p->prob_skip_false); + va_TraceMsg(trace_ctx, "\tprob_intra = %2x\n", p->prob_intra); + va_TraceMsg(trace_ctx, "\tprob_last = %2x\n", p->prob_last); + va_TraceMsg(trace_ctx, "\tprob_gf = %2x\n", p->prob_gf); + + va_TraceMsg(trace_ctx, "\ty_mode_probs: 0x%2x, 0x%2x, 0x%2x, 0x%2x\n", + p->y_mode_probs[0], p->y_mode_probs[1], p->y_mode_probs[2], p->y_mode_probs[3]); + + va_TraceMsg(trace_ctx, "\tuv_mode_probs: 0x%2x, 0x%2x, 0x%2x\n", + p->uv_mode_probs[0], p->uv_mode_probs[1], p->uv_mode_probs[2]); + + va_TraceMsg(trace_ctx, "\tmv_probs[2][19]:\n"); + for(i = 0; i<2; ++i) { + memset(tmp, 0, sizeof tmp); + for (j=0; j<19; j++) + sprintf(tmp + strlen(tmp), "%2x ", p->mv_probs[i][j]); + va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp); + } + + va_TraceMsg(trace_ctx, "\tbool_coder_ctx: range = %02x, value = %02x, count = %d\n", + p->bool_coder_ctx.range, p->bool_coder_ctx.value, p->bool_coder_ctx.count); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVASliceParameterBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VASliceParameterBufferVP8 *p = (VASliceParameterBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i; + + va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP8\n"); + + va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag); + va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset); + va_TraceMsg(trace_ctx, "\tnum_of_partitions = %d\n", p->num_of_partitions); + + for(i = 0; i<9; ++i) + va_TraceMsg(trace_ctx, "\tpartition_size[%d] = %d\n", i, p->partition_size[i]); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAIQMatrixBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + char tmp[1024]; + VAIQMatrixBufferVP8 *p = (VAIQMatrixBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i,j; + + va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferVP8\n"); + + va_TraceMsg(trace_ctx, "\tquantization_index[4][6]=\n"); + for (i = 0; i < 4; i++) { + memset(tmp, 0, sizeof tmp); + for (j = 0; j < 6; j++) + sprintf(tmp + strlen(tmp), "%4x, ", p->quantization_index[i][j]); + va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} +static void va_TraceVAProbabilityBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + char tmp[1024]; + VAProbabilityDataBufferVP8 *p = (VAProbabilityDataBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i,j,k,l; + + va_TraceMsg(trace_ctx, "\t--VAProbabilityDataBufferVP8\n"); + + for (i = 0; i < 4; i++) + for (j = 0; j < 8; j++) { + memset(tmp, 0, sizeof tmp); + for (k=0; k<3; k++) + for (l=0; l<11; l++) + sprintf(tmp + strlen(tmp), "%2x, ", p->dct_coeff_probs[i][j][k][l]); + va_TraceMsg(trace_ctx,"\t\t[%d, %d] = %s\n", i, j, tmp); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncSequenceParameterBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSequenceParameterBufferVP8 *p = (VAEncSequenceParameterBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i; + + va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP8\n"); + + va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\terror_resilient = %d\n", p->error_resilient); + va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height); + va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width); + va_TraceMsg(trace_ctx, "\tframe_height_scale = %d\n", p->frame_height_scale); + va_TraceMsg(trace_ctx, "\tframe_width_scale = %d\n", p->frame_width_scale); + va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto); + va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist); + va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist); + va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period); + + for(i = 0; i<4; ++i) + va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAPictureParameterBufferVP9( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VADecPictureParameterBufferVP9 *p = (VADecPictureParameterBufferVP9 *)data; + DPY2TRACECTX(dpy); + int i,j; + + va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP9\n"); + + va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width); + va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height); + va_TraceMsg(trace_ctx, "\treference_frames[8] =\n"); + for (i = 0; i < 8; i++) { + va_TraceMsg(trace_ctx, "\t\t0x%x\n", p->reference_frames[i]); + } + va_TraceMsg(trace_ctx, "\tsubsampling_x = %d\n", p->pic_fields.bits.subsampling_x); + va_TraceMsg(trace_ctx, "\tsubsampling_y = %d\n", p->pic_fields.bits.subsampling_y); + va_TraceMsg(trace_ctx, "\tframe_type = %d\n", p->pic_fields.bits.frame_type); + va_TraceMsg(trace_ctx, "\tshow_frame = %d\n", p->pic_fields.bits.show_frame); + va_TraceMsg(trace_ctx, "\terror_resilient_mode = %d\n", p->pic_fields.bits.error_resilient_mode); + va_TraceMsg(trace_ctx, "\tintra_only = %d\n", p->pic_fields.bits.intra_only); + va_TraceMsg(trace_ctx, "\tallow_high_precision_mv = %d\n", p->pic_fields.bits.allow_high_precision_mv); + va_TraceMsg(trace_ctx, "\tmcomp_filter_type = %d\n", p->pic_fields.bits.mcomp_filter_type); + va_TraceMsg(trace_ctx, "\tframe_parallel_decoding_mode = %d\n", p->pic_fields.bits.frame_parallel_decoding_mode); + va_TraceMsg(trace_ctx, "\treset_frame_context = %d\n", p->pic_fields.bits.reset_frame_context); + va_TraceMsg(trace_ctx, "\trefresh_frame_context = %d\n", p->pic_fields.bits.refresh_frame_context); + va_TraceMsg(trace_ctx, "\tframe_context_idx = %d\n", p->pic_fields.bits.frame_context_idx); + va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled); + va_TraceMsg(trace_ctx, "\tsegmentation_temporal_update = %d\n", p->pic_fields.bits.segmentation_temporal_update); + va_TraceMsg(trace_ctx, "\tsegmentation_update_map = %d\n", p->pic_fields.bits.segmentation_update_map); + va_TraceMsg(trace_ctx, "\tlast_ref_frame = %d\n", p->pic_fields.bits.last_ref_frame); + va_TraceMsg(trace_ctx, "\tlast_ref_frame_sign_bias = %d\n", p->pic_fields.bits.last_ref_frame_sign_bias); + va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %d\n", p->pic_fields.bits.golden_ref_frame); + va_TraceMsg(trace_ctx, "\tgolden_ref_frame_sign_bias = %d\n", p->pic_fields.bits.golden_ref_frame_sign_bias); + va_TraceMsg(trace_ctx, "\talt_ref_frame = %d\n", p->pic_fields.bits.alt_ref_frame); + va_TraceMsg(trace_ctx, "\talt_ref_frame_sign_bias = %d\n", p->pic_fields.bits.alt_ref_frame_sign_bias); + va_TraceMsg(trace_ctx, "\tlossless_flag = %d\n", p->pic_fields.bits.lossless_flag); + + va_TraceMsg(trace_ctx, "\tfilter_level = %d\n", p->filter_level); + va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level); + va_TraceMsg(trace_ctx, "\tlog2_tile_rows = %d\n", p->log2_tile_rows); + va_TraceMsg(trace_ctx, "\tlog2_tile_columns = %d\n", p->log2_tile_columns); + va_TraceMsg(trace_ctx, "\tframe_header_length_in_bytes = %d\n", p->frame_header_length_in_bytes); + va_TraceMsg(trace_ctx, "\tfirst_partition_size = %d\n", p->first_partition_size); + + va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs[7]: [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x]\n", + p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], + p->mb_segment_tree_probs[2], p->mb_segment_tree_probs[3], + p->mb_segment_tree_probs[4], p->mb_segment_tree_probs[5], + p->mb_segment_tree_probs[6]); + + va_TraceMsg(trace_ctx, "\tsegment_pred_probs[3]: [0x%02x, 0x%02x, 0x%02x]\n", p->segment_pred_probs[0], p->segment_pred_probs[1], p->segment_pred_probs[2]); + + va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->profile); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncPictureParameterBufferVP8( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPictureParameterBufferVP8 *p = (VAEncPictureParameterBufferVP8 *)data; + DPY2TRACECTX(dpy); + int i; + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP8\n"); + va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame); + va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", p->ref_last_frame); + va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", p->ref_gf_frame); + va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", p->ref_arf_frame); + va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf); + + va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf); + va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", p->ref_flags.bits.no_ref_last); + va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", p->ref_flags.bits.no_ref_gf); + va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", p->ref_flags.bits.no_ref_arf); + va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = 0x%08x\n", p->ref_flags.bits.reserved); + + va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", p->pic_flags.bits.version); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", p->pic_flags.bits.color_space); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", p->pic_flags.bits.recon_filter_type); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", p->pic_flags.bits.loop_filter_type); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", p->pic_flags.bits.auto_partitions); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", p->pic_flags.bits.num_token_partitions); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", p->pic_flags.bits.clamping_type); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", p->pic_flags.bits.update_mb_segmentation_map); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", p->pic_flags.bits.update_segment_feature_data); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", p->pic_flags.bits.loop_filter_adj_enable); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", p->pic_flags.bits.refresh_entropy_probs); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", p->pic_flags.bits.refresh_golden_frame); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", p->pic_flags.bits.refresh_alternate_frame); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", p->pic_flags.bits.refresh_last); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", p->pic_flags.bits.copy_buffer_to_golden); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", p->pic_flags.bits.copy_buffer_to_alternate); + + va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", p->pic_flags.bits.sign_bias_golden); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", p->pic_flags.bits.sign_bias_alternate); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", p->pic_flags.bits.mb_no_coeff_skip); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", p->pic_flags.bits.forced_lf_adjustment); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved); + + for(i=0;i<4;i++) + va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", i, p->loop_filter_level[i]); + for(i=0;i<4;i++) + va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]); + for(i=0;i<4;i++) + va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]); + + va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level); + va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high); + va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVASliceParameterBufferVP9( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + + VASliceParameterBufferVP9 *p = (VASliceParameterBufferVP9 *)data; + DPY2TRACECTX(dpy); + int i, j; + + va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP9\n"); + + va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag); + + for (i = 0; i < 8; i++) { + VASegmentParameterVP9* seg = p->seg_param + i; + va_TraceMsg(trace_ctx, "\tseg_param[%d] = \n", i); + va_TraceMsg(trace_ctx, "\t\tsegment_reference_enabled = %d\n", seg->segment_flags.fields.segment_reference_enabled); + va_TraceMsg(trace_ctx, "\t\tsegment_reference = %d\n", seg->segment_flags.fields.segment_reference); + va_TraceMsg(trace_ctx, "\t\tsegment_reference_skipped = %d\n", seg->segment_flags.fields.segment_reference_skipped); + va_TraceMsg(trace_ctx, "\t\tfilter_level[4][2] = \n"); + for (j = 0; j < 4; j++) { + va_TraceMsg(trace_ctx, "\t\t\t[%3d, %3d]\n", seg->filter_level[j][0], seg->filter_level[j][1]); + } + va_TraceMsg(trace_ctx, "\t\tluma_ac_quant_scale = %d\n", seg->luma_ac_quant_scale); + va_TraceMsg(trace_ctx, "\t\tluma_dc_quant_scale = %d\n", seg->luma_dc_quant_scale); + va_TraceMsg(trace_ctx, "\t\tchroma_ac_quant_scale = %d\n", seg->chroma_ac_quant_scale); + va_TraceMsg(trace_ctx, "\t\tchroma_dc_quant_scale = %d\n", seg->chroma_dc_quant_scale); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +void va_TraceBeginPicture( + VADisplay dpy, + VAContextID context, + VASurfaceID render_target +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context); + va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target); + va_TraceMsg(trace_ctx, "\tframe_count = #%d\n", trace_ctx->trace_frame_no); + va_TraceMsg(trace_ctx, NULL); + + trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */ + + trace_ctx->trace_frame_no++; + trace_ctx->trace_slice_no = 0; +} + +static void va_TraceMPEG2Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VABitPlaneBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceGroupMapBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAResidualDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VADeblockingParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + break; + case VAEncPictureParameterBufferType: + break; + case VAEncSliceParameterBufferType: + break; + default: + break; + } +} + +static void va_TraceVAEncSequenceParameterBufferH263( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n"); + + va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period); + va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second); + va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate); + va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp); + va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp); + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAEncPictureParameterBufferH263( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n"); + va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture); + va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture); + va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf); + va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width); + va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height); + va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type); + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncPictureParameterBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data; + int i; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n"); + va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture); + va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf); + va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width); + va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved); + va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential); + va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth); + va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan); + va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components); + for (i=0; inum_components; i++) + va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]); + + if (p->quality > 0) + va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality); + else + va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n", + p->quantiser_table_selector[0], + p->quantiser_table_selector[1], + p->quantiser_table_selector[2], + p->quantiser_table_selector[3]); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + +static void va_TraceVAEncQMatrixBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data; + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n"); + va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_matrix); + if (p->load_lum_quantiser_matrix) { + int i; + for (i = 0; i < 64; i++) { + if ((i % 8) == 0) + va_TraceMsg(trace_ctx, "\n\t"); + va_TraceMsg(trace_ctx, "\t0x%02x", p->lum_quantiser_matrix[i]); + } + va_TraceMsg(trace_ctx, "\n"); + } + va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_quantiser_matrix); + if (p->load_chroma_quantiser_matrix) { + int i; + for (i = 0; i < 64; i++) { + if ((i % 8) == 0) + va_TraceMsg(trace_ctx, "\n\t"); + va_TraceMsg(trace_ctx, "\t0x%02x", p->chroma_quantiser_matrix[i]); + } + va_TraceMsg(trace_ctx, "\n"); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceVAEncSliceParameterBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data; + int i; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferJPEG\n"); + va_TraceMsg(trace_ctx, "\trestart_interval = 0x%04x\n", p->restart_interval); + va_TraceMsg(trace_ctx, "\tnum_components = 0x%08x\n", p->num_components); + for (i=0; i<4; i++) { + va_TraceMsg(trace_ctx, "\tcomponents[%i] =\n "); + va_TraceMsg(trace_ctx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector); + va_TraceMsg(trace_ctx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector); + va_TraceMsg(trace_ctx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector); + } + + va_TraceMsg(trace_ctx, NULL); + + return; +} + + +static void va_TraceH263Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + switch (type) { + case VAPictureParameterBufferType:/* print MPEG4 buffer */ + va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType:/* print MPEG4 buffer */ + va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VABitPlaneBufferType:/* print MPEG4 buffer */ + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceGroupMapBufferType: + break; + case VASliceParameterBufferType:/* print MPEG4 buffer */ + va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAResidualDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VADeblockingParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPackedHeaderParameterBufferType: + va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + + +static void va_TraceJPEGBuf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + switch (type) { + case VABitPlaneBufferType: + case VASliceGroupMapBufferType: + case VASliceDataBufferType: + case VAMacroblockParameterBufferType: + case VAResidualDataBufferType: + case VADeblockingParameterBufferType: + case VAImageBufferType: + case VAProtectedSliceDataBufferType: + case VAEncCodedBufferType: + case VAEncSequenceParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + va_TraceVAEncSliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAHuffmanTableBufferType: + va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAQMatrixBufferType: + va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceMPEG4Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VABitPlaneBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceGroupMapBufferType: + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAResidualDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VADeblockingParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceHEVCBuf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSequenceParameterBufferType: + va_TraceVAEncSequenceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + va_TraceVAEncSliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncMiscParameterBufferType: + va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceH264Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VABitPlaneBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceGroupMapBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAResidualDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VADeblockingParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + if (size == sizeof(VAEncSliceParameterBuffer)) + va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + else + va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPackedHeaderParameterBufferType: + va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf); + break; + + case VAEncMiscParameterBufferType: + va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceVP8Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAQMatrixBufferType: + break; + case VABitPlaneBufferType: + break; + case VASliceGroupMapBufferType: + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + break; + case VAProbabilityBufferType: + va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + break; + case VAResidualDataBufferType: + break; + case VADeblockingParameterBufferType: + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + break; + case VAEncPackedHeaderParameterBufferType: + break; + case VAEncMiscParameterBufferType: + va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceVP9Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void va_TraceVC1Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAIQMatrixBufferType: + break; + case VABitPlaneBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceGroupMapBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf); + break; + case VAMacroblockParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAResidualDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VADeblockingParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAImageBufferType: + break; + case VAProtectedSliceDataBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncCodedBufferType: + break; + case VAEncSequenceParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncPictureParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VAEncSliceParameterBufferType: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +static void +va_TraceProcFilterParameterBufferDeinterlacing( + VADisplay dpy, + VAContextID context, + VAProcFilterParameterBufferBase *base +) +{ + VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t type = %d\n", deint->type); + va_TraceMsg(trace_ctx, "\t algorithm = %d\n", deint->algorithm); + va_TraceMsg(trace_ctx, "\t flags = %d\n", deint->flags); +} + +static void +va_TraceProcFilterParameterBufferColorBalance( + VADisplay dpy, + VAContextID context, + VAProcFilterParameterBufferBase *base +) +{ + VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t type = %d\n", color_balance->type); + va_TraceMsg(trace_ctx, "\t attrib = %d\n", color_balance->attrib); + va_TraceMsg(trace_ctx, "\t value = %f\n", color_balance->value); +} + +static void +va_TraceProcFilterParameterBufferBase( + VADisplay dpy, + VAContextID context, + VAProcFilterParameterBufferBase *base +) +{ + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t type = %d\n", base->type); +} + +static void +va_TraceProcFilterParameterBuffer( + VADisplay dpy, + VAContextID context, + VABufferID *filters, + unsigned int num_filters +) +{ + VABufferType type; + unsigned int size; + unsigned int num_elements; + VAProcFilterParameterBufferBase *base_filter = NULL; + int i; + + DPY2TRACECTX(dpy); + + if (num_filters == 0 || filters == NULL) { + va_TraceMsg(trace_ctx, "\t num_filters = %d\n", num_filters); + va_TraceMsg(trace_ctx, "\t filters = %p\n", filters); + return; + } + + va_TraceMsg(trace_ctx, "\t num_filters = %d\n", num_filters); + + /* get buffer type information */ + for (i = 0; i < num_filters; i++) { + vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements); + + if (type != VAProcFilterParameterBufferType) { + va_TraceMsg(trace_ctx, "\t filters[%d] = 0x%08x (INVALID)\n", i, filters[i]); + return; + } else { + va_TraceMsg(trace_ctx, "\t filters[%d] = 0x%08x\n", i, filters[i]); + } + + base_filter = NULL; + vaMapBuffer(dpy, filters[i], (void **)&base_filter); + + if (base_filter == NULL) { + vaUnmapBuffer(dpy, filters[i]); + return; + } + + switch (base_filter->type) { + case VAProcFilterDeinterlacing: + va_TraceProcFilterParameterBufferDeinterlacing(dpy, + context, + base_filter); + break; + case VAProcFilterColorBalance: + va_TraceProcFilterParameterBufferColorBalance(dpy, + context, + base_filter); + break; + default: + va_TraceProcFilterParameterBufferBase(dpy, + context, + base_filter); + break; + } + + vaUnmapBuffer(dpy, filters[i]); + } +} + +static void +va_TraceVAProcPipelineParameterBuffer( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data +) +{ + VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data; + int i; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n"); + + va_TraceMsg(trace_ctx, "\t surface = 0x%08x\n", p->surface); + + if (p->surface_region) { + va_TraceMsg(trace_ctx, "\t surface_region\n"); + va_TraceMsg(trace_ctx, "\t x = %d\n", p->surface_region->x); + va_TraceMsg(trace_ctx, "\t y = %d\n", p->surface_region->y); + va_TraceMsg(trace_ctx, "\t width = %d\n", p->surface_region->width); + va_TraceMsg(trace_ctx, "\t height = %d\n", p->surface_region->height); + } else { + va_TraceMsg(trace_ctx, "\t surface_region = (NULL)\n"); + } + + va_TraceMsg(trace_ctx, "\t surface_color_standard = %d\n", p->surface_color_standard); + + if (p->output_region) { + va_TraceMsg(trace_ctx, "\t output_region\n"); + va_TraceMsg(trace_ctx, "\t x = %d\n", p->output_region->x); + va_TraceMsg(trace_ctx, "\t y = %d\n", p->output_region->y); + va_TraceMsg(trace_ctx, "\t width = %d\n", p->output_region->width); + va_TraceMsg(trace_ctx, "\t height = %d\n", p->output_region->height); + } else { + va_TraceMsg(trace_ctx, "\t output_region = (NULL)\n"); + } + + va_TraceMsg(trace_ctx, "\t output_background_color = 0x%08x\n", p->output_background_color); + va_TraceMsg(trace_ctx, "\t output_color_standard = %d\n", p->output_color_standard); + va_TraceMsg(trace_ctx, "\t pipeline_flags = 0x%08x\n", p->pipeline_flags); + va_TraceMsg(trace_ctx, "\t filter_flags = 0x%08x\n", p->filter_flags); + + va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters); + + va_TraceMsg(trace_ctx, "\t num_forward_references = 0x%08x\n", p->num_forward_references); + + if (p->num_forward_references) { + va_TraceMsg(trace_ctx, "\t forward_references\n"); + + if (p->forward_references) { + /* only dump the first 5 forward references */ + for (i = 0; i < p->num_forward_references && i < 5; i++) { + va_TraceMsg(trace_ctx, "\t forward_references[%d] = 0x%08x\n", i, p->forward_references[i]); + } + } else { + for (i = 0; i < p->num_forward_references && i < 5; i++) { + va_TraceMsg(trace_ctx, "\t forward_references[%d] = (NULL)\n", i); + } + } + } + + va_TraceMsg(trace_ctx, "\t num_backward_references = 0x%08x\n", p->num_backward_references); + + if (p->num_backward_references) { + va_TraceMsg(trace_ctx, "\t backward_references\n"); + + if (p->backward_references) { + /* only dump the first 5 backward references */ + for (i = 0; i < p->num_backward_references && i < 5; i++) { + va_TraceMsg(trace_ctx, "\t backward_references[%d] = 0x%08x\n", i, p->backward_references[i]); + } + } else { + for (i = 0; i < p->num_backward_references && i < 5; i++) { + va_TraceMsg(trace_ctx, "\t backward_references[%d] = (NULL)\n", i); + } + } + } + + /* FIXME: add other info later */ + + va_TraceMsg(trace_ctx, NULL); +} + +static void +va_TraceNoneBuf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy); + + switch (type) { + case VAProcPipelineParameterBufferType: + va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} + +void va_TraceRenderPicture( + VADisplay dpy, + VAContextID context, + VABufferID *buffers, + int num_buffers +) +{ + VABufferType type; + unsigned int size; + unsigned int num_elements; + int i; + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context); + va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers); + if (buffers == NULL) + return; + + for (i = 0; i < num_buffers; i++) { + unsigned char *pbuf = NULL; + unsigned int j; + + /* get buffer type information */ + vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements); + + va_TraceMsg(trace_ctx, "\t---------------------------\n"); + va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]); + va_TraceMsg(trace_ctx, "\t type = %s\n", buffer_type_to_string(type)); + va_TraceMsg(trace_ctx, "\t size = %d\n", size); + va_TraceMsg(trace_ctx, "\t num_elements = %d\n", num_elements); + + vaMapBuffer(dpy, buffers[i], (void **)&pbuf); + if (pbuf == NULL) + continue; + + switch (trace_ctx->trace_profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + for (j=0; jtrace_rendertarget); + + /* avoid to create so many empty files */ + encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice); + decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD); + jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture); + + /* trace encode source surface, can do it before HW completes rendering */ + if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))|| + (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) + va_TraceSurface(dpy); + + /* trace decoded surface, do it after HW completes rendering */ + if (decode && ((trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) { + vaSyncSurface(dpy, trace_ctx->trace_rendertarget); + va_TraceSurface(dpy); + } + + va_TraceMsg(trace_ctx, NULL); +} + + +void va_TraceSyncSurface( + VADisplay dpy, + VASurfaceID render_target +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target); + va_TraceMsg(trace_ctx, NULL); +} + +void va_TraceQuerySurfaceAttributes( + VADisplay dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config); + va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs); + + va_TraceMsg(trace_ctx, NULL); + +} + + +void va_TraceQuerySurfaceStatus( + VADisplay dpy, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target); + if (status) + va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status); + va_TraceMsg(trace_ctx, NULL); +} + + +void va_TraceQuerySurfaceError( + VADisplay dpy, + VASurfaceID surface, + VAStatus error_status, + void **error_info /*out*/ +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface); + va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status); + if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) { + VASurfaceDecodeMBErrors *p = *error_info; + while (p && (p->status != -1)) { + va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status); + va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb); + va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb); + p++; /* next error record */ + } + } + va_TraceMsg(trace_ctx, NULL); +} + +void va_TraceMaxNumDisplayAttributes ( + VADisplay dpy, + int number +) +{ + DPY2TRACECTX(dpy); + + TRACE_FUNCNAME(idx); + + va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number); + va_TraceMsg(trace_ctx, NULL); +} + +void va_TraceQueryDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ +) +{ + int i; + + DPY2TRACECTX(dpy); + + if (attr_list == NULL || num_attributes == NULL) + return; + + va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes); + + for (i=0; i<*num_attributes; i++) { + va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n"); + va_TraceMsg(trace_ctx, "\t typ = 0x%08x\n", attr_list[i].type); + va_TraceMsg(trace_ctx, "\t min_value = %d\n", attr_list[i].min_value); + va_TraceMsg(trace_ctx, "\t max_value = %d\n", attr_list[i].max_value); + va_TraceMsg(trace_ctx, "\t value = %d\n", attr_list[i].value); + va_TraceMsg(trace_ctx, "\t flags = %d\n", attr_list[i].flags); + } + va_TraceMsg(trace_ctx, NULL); +} + + +static void va_TraceDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, + int num_attributes +) +{ + int i; + + DPY2TRACECTX(dpy); + + va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", num_attributes); + if (attr_list == NULL) + return; + + for (i=0; i (major) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) + +#endif /* VA_VERSION_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_version.h.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_version.h.in new file mode 100644 index 000000000..0cc5ea7c1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_version.h.in @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_VERSION_H +#define VA_VERSION_H + +/** + * VA_MAJOR_VERSION: + * + * The major version of VA-API (1, if %VA_VERSION is 1.2.3) + */ +#define VA_MAJOR_VERSION @VA_API_MAJOR_VERSION@ + +/** + * VA_MINOR_VERSION: + * + * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) + */ +#define VA_MINOR_VERSION @VA_API_MINOR_VERSION@ + +/** + * VA_MICRO_VERSION: + * + * The micro version of VA-API (3, if %VA_VERSION is 1.2.3) + */ +#define VA_MICRO_VERSION @VA_API_MICRO_VERSION@ + +/** + * VA_VERSION: + * + * The full version of VA-API, like 1.2.3 + */ +#define VA_VERSION @VA_API_VERSION@ + +/** + * VA_VERSION_S: + * + * The full version of VA-API, in string form (suited for string + * concatenation) + */ +#define VA_VERSION_S "@VA_API_VERSION@" + +/** + * VA_VERSION_HEX: + * + * Numerically encoded version of VA-API, like 0x010203 + */ +#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ + (VA_MINOR_VERSION << 16) | \ + (VA_MICRO_VERSION << 8)) + +/** + * VA_CHECK_VERSION: + * @major: major version, like 1 in 1.2.3 + * @minor: minor version, like 2 in 1.2.3 + * @micro: micro version, like 3 in 1.2.3 + * + * Evaluates to %TRUE if the version of VA-API is greater than + * @major, @minor and @micro + */ +#define VA_CHECK_VERSION(major,minor,micro) \ + (VA_MAJOR_VERSION > (major) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) + +#endif /* VA_VERSION_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_vpp.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_vpp.h new file mode 100644 index 000000000..8ac092394 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_vpp.h @@ -0,0 +1,750 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_vpp.h + * \brief The video processing API + * + * This file contains the \ref api_vpp "Video processing API". + */ + +#ifndef VA_VPP_H +#define VA_VPP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_vpp Video processing API + * + * @{ + * + * The video processing API uses the same paradigm as for decoding: + * - Query for supported filters; + * - Set up a video processing pipeline; + * - Send video processing parameters through VA buffers. + * + * \section api_vpp_caps Query for supported filters + * + * Checking whether video processing is supported can be performed + * with vaQueryConfigEntrypoints() and the profile argument set to + * #VAProfileNone. If video processing is supported, then the list of + * returned entry-points will include #VAEntrypointVideoProc. + * + * \code + * VAEntrypoint *entrypoints; + * int i, num_entrypoints, supportsVideoProcessing = 0; + * + * num_entrypoints = vaMaxNumEntrypoints(); + * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); + * vaQueryConfigEntrypoints(va_dpy, VAProfileNone, + * entrypoints, &num_entrypoints); + * + * for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) { + * if (entrypoints[i] == VAEntrypointVideoProc) + * supportsVideoProcessing = 1; + * } + * \endcode + * + * Then, the vaQueryVideoProcFilters() function is used to query the + * list of video processing filters. + * + * \code + * VAProcFilterType filters[VAProcFilterCount]; + * unsigned int num_filters = VAProcFilterCount; + * + * // num_filters shall be initialized to the length of the array + * vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters); + * \endcode + * + * Finally, individual filter capabilities can be checked with + * vaQueryVideoProcFilterCaps(). + * + * \code + * VAProcFilterCap denoise_caps; + * unsigned int num_denoise_caps = 1; + * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, + * VAProcFilterNoiseReduction, + * &denoise_caps, &num_denoise_caps + * ); + * + * VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount]; + * unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount; + * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, + * VAProcFilterDeinterlacing, + * &deinterlacing_caps, &num_deinterlacing_caps + * ); + * \endcode + * + * \section api_vpp_setup Set up a video processing pipeline + * + * A video processing pipeline buffer is created for each source + * surface we want to process. However, buffers holding filter + * parameters can be created once and for all. Rationale is to avoid + * multiple creation/destruction chains of filter buffers and also + * because filter parameters generally won't change frame after + * frame. e.g. this makes it possible to implement a checkerboard of + * videos where the same filters are applied to each video source. + * + * The general control flow is demonstrated by the following pseudo-code: + * \code + * // Create filters + * VABufferID denoise_filter, deint_filter; + * VABufferID filter_bufs[VAProcFilterCount]; + * unsigned int num_filter_bufs; + * + * for (i = 0; i < num_filters; i++) { + * switch (filters[i]) { + * case VAProcFilterNoiseReduction: { // Noise reduction filter + * VAProcFilterParameterBuffer denoise; + * denoise.type = VAProcFilterNoiseReduction; + * denoise.value = 0.5; + * vaCreateBuffer(va_dpy, vpp_ctx, + * VAProcFilterParameterBufferType, sizeof(denoise), 1, + * &denoise, &denoise_filter + * ); + * filter_bufs[num_filter_bufs++] = denoise_filter; + * break; + * } + * + * case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing + * for (j = 0; j < num_deinterlacing_caps; j++) { + * VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j]; + * if (cap->type != VAProcDeinterlacingMotionAdaptive) + * continue; + * + * VAProcFilterParameterBufferDeinterlacing deint; + * deint.type = VAProcFilterDeinterlacing; + * deint.algorithm = VAProcDeinterlacingMotionAdaptive; + * vaCreateBuffer(va_dpy, vpp_ctx, + * VAProcFilterParameterBufferType, sizeof(deint), 1, + * &deint, &deint_filter + * ); + * filter_bufs[num_filter_bufs++] = deint_filter; + * } + * } + * } + * \endcode + * + * Once the video processing pipeline is set up, the caller shall check the + * implied capabilities and requirements with vaQueryVideoProcPipelineCaps(). + * This function can be used to validate the number of reference frames are + * needed by the specified deinterlacing algorithm, the supported color + * primaries, etc. + * \code + * // Create filters + * VAProcPipelineCaps pipeline_caps; + * VASurfaceID *forward_references; + * unsigned int num_forward_references; + * VASurfaceID *backward_references; + * unsigned int num_backward_references; + * VAProcColorStandardType in_color_standards[VAProcColorStandardCount]; + * VAProcColorStandardType out_color_standards[VAProcColorStandardCount]; + * + * pipeline_caps.input_color_standards = NULL; + * pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards); + * pipeline_caps.output_color_standards = NULL; + * pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards); + * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, + * filter_bufs, num_filter_bufs, + * &pipeline_caps + * ); + * + * num_forward_references = pipeline_caps.num_forward_references; + * forward_references = + * malloc(num__forward_references * sizeof(VASurfaceID)); + * num_backward_references = pipeline_caps.num_backward_references; + * backward_references = + * malloc(num_backward_references * sizeof(VASurfaceID)); + * \endcode + * + * \section api_vpp_submit Send video processing parameters through VA buffers + * + * Video processing pipeline parameters are submitted for each source + * surface to process. Video filter parameters can also change, per-surface. + * e.g. the list of reference frames used for deinterlacing. + * + * \code + * foreach (iteration) { + * vaBeginPicture(va_dpy, vpp_ctx, vpp_surface); + * foreach (surface) { + * VARectangle output_region; + * VABufferID pipeline_buf; + * VAProcPipelineParameterBuffer *pipeline_param; + * + * vaCreateBuffer(va_dpy, vpp_ctx, + * VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1, + * NULL, &pipeline_buf + * ); + * + * // Setup output region for this surface + * // e.g. upper left corner for the first surface + * output_region.x = BORDER; + * output_region.y = BORDER; + * output_region.width = + * (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces; + * output_region.height = + * (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces; + * + * vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param); + * pipeline_param->surface = surface; + * pipeline_param->surface_region = NULL; + * pipeline_param->output_region = &output_region; + * pipeline_param->output_background_color = 0; + * if (first surface to render) + * pipeline_param->output_background_color = 0xff000000; // black + * pipeline_param->filter_flags = VA_FILTER_SCALING_HQ; + * pipeline_param->filters = filter_bufs; + * pipeline_param->num_filters = num_filter_bufs; + * vaUnmapBuffer(va_dpy, pipeline_buf); + * + * // Update reference frames for deinterlacing, if necessary + * pipeline_param->forward_references = forward_references; + * pipeline_param->num_forward_references = num_forward_references_used; + * pipeline_param->backward_references = backward_references; + * pipeline_param->num_backward_references = num_bacward_references_used; + * + * // Apply filters + * vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1); + * } + * vaEndPicture(va_dpy, vpp_ctx); + * } + * \endcode + */ + +/** \brief Video filter types. */ +typedef enum _VAProcFilterType { + VAProcFilterNone = 0, + /** \brief Noise reduction filter. */ + VAProcFilterNoiseReduction, + /** \brief Deinterlacing filter. */ + VAProcFilterDeinterlacing, + /** \brief Sharpening filter. */ + VAProcFilterSharpening, + /** \brief Color balance parameters. */ + VAProcFilterColorBalance, + /** \brief Skin Tone Enhancement. */ + VAProcFilterSkinToneEnhancement, + VAProcFilterCount +} VAProcFilterType; + +/** \brief Deinterlacing types. */ +typedef enum _VAProcDeinterlacingType { + VAProcDeinterlacingNone = 0, + /** \brief Bob deinterlacing algorithm. */ + VAProcDeinterlacingBob, + /** \brief Weave deinterlacing algorithm. */ + VAProcDeinterlacingWeave, + /** \brief Motion adaptive deinterlacing algorithm. */ + VAProcDeinterlacingMotionAdaptive, + /** \brief Motion compensated deinterlacing algorithm. */ + VAProcDeinterlacingMotionCompensated, + /** \brief Number of deinterlacing algorithms. */ + VAProcDeinterlacingCount +} VAProcDeinterlacingType; + +/** \brief Color balance types. */ +typedef enum _VAProcColorBalanceType { + VAProcColorBalanceNone = 0, + /** \brief Hue. */ + VAProcColorBalanceHue, + /** \brief Saturation. */ + VAProcColorBalanceSaturation, + /** \brief Brightness. */ + VAProcColorBalanceBrightness, + /** \brief Contrast. */ + VAProcColorBalanceContrast, + /** \brief Automatically adjusted saturation. */ + VAProcColorBalanceAutoSaturation, + /** \brief Automatically adjusted brightness. */ + VAProcColorBalanceAutoBrightness, + /** \brief Automatically adjusted contrast. */ + VAProcColorBalanceAutoContrast, + /** \brief Number of color balance attributes. */ + VAProcColorBalanceCount +} VAProcColorBalanceType; + +/** \brief Color standard types. */ +typedef enum _VAProcColorStandardType { + VAProcColorStandardNone = 0, + /** \brief ITU-R BT.601. */ + VAProcColorStandardBT601, + /** \brief ITU-R BT.709. */ + VAProcColorStandardBT709, + /** \brief ITU-R BT.470-2 System M. */ + VAProcColorStandardBT470M, + /** \brief ITU-R BT.470-2 System B, G. */ + VAProcColorStandardBT470BG, + /** \brief SMPTE-170M. */ + VAProcColorStandardSMPTE170M, + /** \brief SMPTE-240M. */ + VAProcColorStandardSMPTE240M, + /** \brief Generic film. */ + VAProcColorStandardGenericFilm, + /** \brief Number of color standards. */ + VAProcColorStandardCount +} VAProcColorStandardType; + +/** @name Video pipeline flags */ +/**@{*/ +/** \brief Specifies whether to apply subpictures when processing a surface. */ +#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001 +/** + * \brief Specifies whether to apply power or performance + * optimizations to a pipeline. + * + * When processing several surfaces, it may be necessary to prioritize + * more certain pipelines than others. This flag is only a hint to the + * video processor so that it can omit certain filters to save power + * for example. Typically, this flag could be used with video surfaces + * decoded from a secondary bitstream. + */ +#define VA_PROC_PIPELINE_FAST 0x00000002 +/**@}*/ + +/** @name Video filter flags */ +/**@{*/ +/** \brief Specifies whether the filter shall be present in the pipeline. */ +#define VA_PROC_FILTER_MANDATORY 0x00000001 +/**@}*/ + +/** @name Pipeline end flags */ +/**@{*/ +/** \brief Specifies the pipeline is the last. */ +#define VA_PIPELINE_FLAG_END 0x00000004 +/**@}*/ + +/** \brief Video processing pipeline capabilities. */ +typedef struct _VAProcPipelineCaps { + /** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */ + unsigned int pipeline_flags; + /** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */ + unsigned int filter_flags; + /** \brief Number of forward reference frames that are needed. */ + unsigned int num_forward_references; + /** \brief Number of backward reference frames that are needed. */ + unsigned int num_backward_references; + /** \brief List of color standards supported on input. */ + VAProcColorStandardType *input_color_standards; + /** \brief Number of elements in \ref input_color_standards array. */ + unsigned int num_input_color_standards; + /** \brief List of color standards supported on output. */ + VAProcColorStandardType *output_color_standards; + /** \brief Number of elements in \ref output_color_standards array. */ + unsigned int num_output_color_standards; +} VAProcPipelineCaps; + +/** \brief Specification of values supported by the filter. */ +typedef struct _VAProcFilterValueRange { + /** \brief Minimum value supported, inclusive. */ + float min_value; + /** \brief Maximum value supported, inclusive. */ + float max_value; + /** \brief Default value. */ + float default_value; + /** \brief Step value that alters the filter behaviour in a sensible way. */ + float step; +} VAProcFilterValueRange; + +/** + * \brief Video processing pipeline configuration. + * + * This buffer defines a video processing pipeline. As for any buffer + * passed to \c vaRenderPicture(), this is a one-time usage model. + * However, the actual filters to be applied are provided in the + * \c filters field, so they can be re-used in other processing + * pipelines. + * + * The target surface is specified by the \c render_target argument of + * \c vaBeginPicture(). The general usage model is described as follows: + * - \c vaBeginPicture(): specify the target surface that receives the + * processed output; + * - \c vaRenderPicture(): specify a surface to be processed and composed + * into the \c render_target. Use as many \c vaRenderPicture() calls as + * necessary surfaces to compose ; + * - \c vaEndPicture(): tell the driver to start processing the surfaces + * with the requested filters. + * + * If a filter (e.g. noise reduction) needs to be applied with different + * values for multiple surfaces, the application needs to create as many + * filter parameter buffers as necessary. i.e. the filter parameters shall + * not change between two calls to \c vaRenderPicture(). + * + * For composition usage models, the first surface to process will generally + * use an opaque background color, i.e. \c output_background_color set with + * the most significant byte set to \c 0xff. For instance, \c 0xff000000 for + * a black background. Then, subsequent surfaces would use a transparent + * background color. + */ +typedef struct _VAProcPipelineParameterBuffer { + /** + * \brief Source surface ID. + * + * ID of the source surface to process. If subpictures are associated + * with the video surfaces then they shall be rendered to the target + * surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set. + */ + VASurfaceID surface; + /** + * \brief Region within the source surface to be processed. + * + * Pointer to a #VARectangle defining the region within the source + * surface to be processed. If NULL, \c surface_region implies the + * whole surface. + */ + const VARectangle *surface_region; + /** + * \brief Requested input color primaries. + * + * Color primaries are implicitly converted throughout the processing + * pipeline. The video processor chooses the best moment to apply + * this conversion. The set of supported color primaries primaries + * for input shall be queried with vaQueryVideoProcPipelineCaps(). + */ + VAProcColorStandardType surface_color_standard; + /** + * \brief Region within the output surface. + * + * Pointer to a #VARectangle defining the region within the output + * surface that receives the processed pixels. If NULL, \c output_region + * implies the whole surface. + * + * Note that any pixels residing outside the specified region will + * be filled in with the \ref output_background_color. + */ + const VARectangle *output_region; + /** + * \brief Background color. + * + * Background color used to fill in pixels that reside outside of the + * specified \ref output_region. The color is specified in ARGB format: + * [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue. + * + * Unless the alpha value is zero or the \ref output_region represents + * the whole target surface size, implementations shall not render the + * source surface to the target surface directly. Rather, in order to + * maintain the exact semantics of \ref output_background_color, the + * driver shall use a temporary surface and fill it in with the + * appropriate background color. Next, the driver will blend this + * temporary surface into the target surface. + */ + unsigned int output_background_color; + /** + * \brief Requested output color primaries. + */ + VAProcColorStandardType output_color_standard; + /** + * \brief Pipeline filters. See video pipeline flags. + * + * Flags to control the pipeline, like whether to apply subpictures + * or not, notify the driver that it can opt for power optimizations, + * should this be needed. + */ + unsigned int pipeline_flags; + /** + * \brief Extra filter flags. See vaPutSurface() flags. + * + * Filter flags are used as a fast path, wherever possible, to use + * vaPutSurface() flags instead of explicit filter parameter buffers. + * + * Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() + * to check for implementation details: + * - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD, + * \c VA_BOTTOM_FIELD. Note that any deinterlacing filter + * (#VAProcFilterDeinterlacing) will override those flags. + * - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709, + * \c VA_SRC_SMPTE_240. + * - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST, + * \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC. + */ + unsigned int filter_flags; + /** + * \brief Array of filters to apply to the surface. + * + * The list of filters shall be ordered in the same way the driver expects + * them. i.e. as was returned from vaQueryVideoProcFilters(). + * Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned + * from vaRenderPicture() with this buffer. + * + * #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list + * contains an unsupported filter. + * + * Note: no filter buffer is destroyed after a call to vaRenderPicture(), + * only this pipeline buffer will be destroyed as per the core API + * specification. This allows for flexibility in re-using the filter for + * other surfaces to be processed. + */ + VABufferID *filters; + /** \brief Actual number of filters. */ + unsigned int num_filters; + /** \brief Array of forward reference frames. */ + VASurfaceID *forward_references; + /** \brief Number of forward reference frames that were supplied. */ + unsigned int num_forward_references; + /** \brief Array of backward reference frames. */ + VASurfaceID *backward_references; + /** \brief Number of backward reference frames that were supplied. */ + unsigned int num_backward_references; +} VAProcPipelineParameterBuffer; + +/** + * \brief Filter parameter buffer base. + * + * This is a helper structure used by driver implementations only. + * Users are not supposed to allocate filter parameter buffers of this + * type. + */ +typedef struct _VAProcFilterParameterBufferBase { + /** \brief Filter type. */ + VAProcFilterType type; +} VAProcFilterParameterBufferBase; + +/** + * \brief Default filter parametrization. + * + * Unless there is a filter-specific parameter buffer, + * #VAProcFilterParameterBuffer is the default type to use. + */ +typedef struct _VAProcFilterParameterBuffer { + /** \brief Filter type. */ + VAProcFilterType type; + /** \brief Value. */ + float value; +} VAProcFilterParameterBuffer; + +/** @name De-interlacing flags */ +/**@{*/ +/** + * \brief Bottom field first in the input frame. + * if this is not set then assumes top field first. + */ +#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001 +/** + * \brief Bottom field used in deinterlacing. + * if this is not set then assumes top field is used. + */ +#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002 +/** + * \brief A single field is stored in the input frame. + * if this is not set then assumes the frame contains two interleaved fields. + */ +#define VA_DEINTERLACING_ONE_FIELD 0x0004 +/**@}*/ + +/** \brief Deinterlacing filter parametrization. */ +typedef struct _VAProcFilterParameterBufferDeinterlacing { + /** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */ + VAProcFilterType type; + /** \brief Deinterlacing algorithm. */ + VAProcDeinterlacingType algorithm; + /** \brief Deinterlacing flags. */ + unsigned int flags; +} VAProcFilterParameterBufferDeinterlacing; + +/** + * \brief Color balance filter parametrization. + * + * This buffer defines color balance attributes. A VA buffer can hold + * several color balance attributes by creating a VA buffer of desired + * number of elements. This can be achieved by the following pseudo-code: + * + * \code + * enum { kHue, kSaturation, kBrightness, kContrast }; + * + * // Initial color balance parameters + * static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] = + * { + * [kHue] = + * { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 }, + * [kSaturation] = + * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }, + * [kBrightness] = + * { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 }, + * [kSaturation] = + * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 } + * }; + * + * // Create buffer + * VABufferID colorBalanceBuffer; + * vaCreateBuffer(va_dpy, vpp_ctx, + * VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4, + * colorBalanceParams, + * &colorBalanceBuffer + * ); + * + * VAProcFilterParameterBufferColorBalance *pColorBalanceParam; + * vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam); + * { + * // Change brightness only + * pColorBalanceBuffer[kBrightness].value = 0.75; + * } + * vaUnmapBuffer(va_dpy, colorBalanceBuffer); + * \endcode + */ +typedef struct _VAProcFilterParameterBufferColorBalance { + /** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */ + VAProcFilterType type; + /** \brief Color balance attribute. */ + VAProcColorBalanceType attrib; + /** + * \brief Color balance value. + * + * Special case for automatically adjusted attributes. e.g. + * #VAProcColorBalanceAutoSaturation, + * #VAProcColorBalanceAutoBrightness, + * #VAProcColorBalanceAutoContrast. + * - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is + * automatically adjusted and overrides any other attribute of + * the same type that would have been set explicitly; + * - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is + * disabled and other attribute of the same type is used instead. + */ + float value; +} VAProcFilterParameterBufferColorBalance; + +/** + * \brief Default filter cap specification (single range value). + * + * Unless there is a filter-specific cap structure, #VAProcFilterCap is the + * default type to use for output caps from vaQueryVideoProcFilterCaps(). + */ +typedef struct _VAProcFilterCap { + /** \brief Range of supported values for the filter. */ + VAProcFilterValueRange range; +} VAProcFilterCap; + +/** \brief Capabilities specification for the deinterlacing filter. */ +typedef struct _VAProcFilterCapDeinterlacing { + /** \brief Deinterlacing algorithm. */ + VAProcDeinterlacingType type; +} VAProcFilterCapDeinterlacing; + +/** \brief Capabilities specification for the color balance filter. */ +typedef struct _VAProcFilterCapColorBalance { + /** \brief Color balance operation. */ + VAProcColorBalanceType type; + /** \brief Range of supported values for the specified operation. */ + VAProcFilterValueRange range; +} VAProcFilterCapColorBalance; + +/** + * \brief Queries video processing filters. + * + * This function returns the list of video processing filters supported + * by the driver. The \c filters array is allocated by the user and + * \c num_filters shall be initialized to the number of allocated + * elements in that array. Upon successful return, the actual number + * of filters will be overwritten into \c num_filters. Otherwise, + * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters + * is adjusted to the number of elements that would be returned if enough + * space was available. + * + * The list of video processing filters supported by the driver shall + * be ordered in the way they can be iteratively applied. This is needed + * for both correctness, i.e. some filters would not mean anything if + * applied at the beginning of the pipeline; but also for performance + * since some filters can be applied in a single pass (e.g. noise + * reduction + deinterlacing). + * + * @param[in] dpy the VA display + * @param[in] context the video processing context + * @param[out] filters the output array of #VAProcFilterType elements + * @param[in,out] num_filters the number of elements allocated on input, + * the number of elements actually filled in on output + */ +VAStatus +vaQueryVideoProcFilters( + VADisplay dpy, + VAContextID context, + VAProcFilterType *filters, + unsigned int *num_filters +); + +/** + * \brief Queries video filter capabilities. + * + * This function returns the list of capabilities supported by the driver + * for a specific video filter. The \c filter_caps array is allocated by + * the user and \c num_filter_caps shall be initialized to the number + * of allocated elements in that array. Upon successful return, the + * actual number of filters will be overwritten into \c num_filter_caps. + * Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and + * \c num_filter_caps is adjusted to the number of elements that would be + * returned if enough space was available. + * + * @param[in] dpy the VA display + * @param[in] context the video processing context + * @param[in] type the video filter type + * @param[out] filter_caps the output array of #VAProcFilterCap elements + * @param[in,out] num_filter_caps the number of elements allocated on input, + * the number of elements actually filled in output + */ +VAStatus +vaQueryVideoProcFilterCaps( + VADisplay dpy, + VAContextID context, + VAProcFilterType type, + void *filter_caps, + unsigned int *num_filter_caps +); + +/** + * \brief Queries video processing pipeline capabilities. + * + * This function returns the video processing pipeline capabilities. The + * \c filters array defines the video processing pipeline and is an array + * of buffers holding filter parameters. + * + * Note: the #VAProcPipelineCaps structure contains user-provided arrays. + * If non-NULL, the corresponding \c num_* fields shall be filled in on + * input with the number of elements allocated. Upon successful return, + * the actual number of elements will be overwritten into the \c num_* + * fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned + * and \c num_* fields are adjusted to the number of elements that would + * be returned if enough space was available. + * + * @param[in] dpy the VA display + * @param[in] context the video processing context + * @param[in] filters the array of VA buffers defining the video + * processing pipeline + * @param[in] num_filters the number of elements in filters + * @param[in,out] pipeline_caps the video processing pipeline capabilities + */ +VAStatus +vaQueryVideoProcPipelineCaps( + VADisplay dpy, + VAContextID context, + VABufferID *filters, + unsigned int num_filters, + VAProcPipelineCaps *pipeline_caps +); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_VPP_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_x11.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_x11.h new file mode 100644 index 000000000..c9be38d6a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/va_x11.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef _VA_X11_H_ +#define _VA_X11_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Returns a suitable VADisplay for VA API + */ +VADisplay vaGetDisplay ( + Display *dpy +); + +/* + * Output rendering + * Following is the rendering interface for X windows, + * to get the decode output surface to a X drawable + * It basically performs a de-interlacing (if needed), + * color space conversion and scaling to the destination + * rectangle + */ +VAStatus vaPutSurface ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied destination clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* PutSurface flags */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_X11_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.am new file mode 100644 index 000000000..4f8262cc9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.am @@ -0,0 +1,69 @@ +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(WAYLAND_CFLAGS) \ + $(DRM_CFLAGS) \ + $(NULL) + +source_c = \ + va_wayland.c \ + va_wayland_drm.c \ + va_wayland_emgd.c \ + $(top_srcdir)/va/drm/va_drm_utils.c \ + $(NULL) + +source_h = \ + va_backend_wayland.h \ + va_wayland.h \ + $(NULL) + +source_h_priv = \ + va_wayland_drm.h \ + va_wayland_emgd.h \ + va_wayland_private.h \ + $(NULL) + +protocol_source_h = \ + wayland-drm-client-protocol.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_wayland.la +libva_waylandincludedir = ${includedir}/va +libva_waylandinclude_HEADERS = $(source_h) +libva_wayland_la_SOURCES = $(source_c) $(protocol_source_h) +noinst_HEADERS = $(source_h_priv) + +# Wayland protocol +va_wayland_drm.c: $(protocol_source_h) +%-client-protocol.h : %.xml + $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ + +EXTRA_DIST = \ + wayland-drm.xml \ + $(NULL) + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.in new file mode 100644 index 000000000..07b8b39aa --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/Makefile.in @@ -0,0 +1,743 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2012 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = va/wayland +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(libva_waylandinclude_HEADERS) \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libva_wayland_la_LIBADD = +am__objects_1 = va_wayland.lo va_wayland_drm.lo va_wayland_emgd.lo \ + va_drm_utils.lo +am__objects_2 = +am_libva_wayland_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libva_wayland_la_OBJECTS = $(am_libva_wayland_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_wayland_la_SOURCES) +DIST_SOURCES = $(libva_wayland_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libva_waylandincludedir)" +HEADERS = $(libva_waylandinclude_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(WAYLAND_CFLAGS) \ + $(DRM_CFLAGS) \ + $(NULL) + +source_c = \ + va_wayland.c \ + va_wayland_drm.c \ + va_wayland_emgd.c \ + $(top_srcdir)/va/drm/va_drm_utils.c \ + $(NULL) + +source_h = \ + va_backend_wayland.h \ + va_wayland.h \ + $(NULL) + +source_h_priv = \ + va_wayland_drm.h \ + va_wayland_emgd.h \ + va_wayland_private.h \ + $(NULL) + +protocol_source_h = \ + wayland-drm-client-protocol.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_wayland.la +libva_waylandincludedir = ${includedir}/va +libva_waylandinclude_HEADERS = $(source_h) +libva_wayland_la_SOURCES = $(source_c) $(protocol_source_h) +noinst_HEADERS = $(source_h_priv) +EXTRA_DIST = \ + wayland-drm.xml \ + $(NULL) + + +# Extra clean files so that maintainer-clean removes *everything* +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/wayland/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/wayland/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva_wayland.la: $(libva_wayland_la_OBJECTS) $(libva_wayland_la_DEPENDENCIES) $(EXTRA_libva_wayland_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libva_wayland_la_OBJECTS) $(libva_wayland_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_drm_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_wayland.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_wayland_drm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_wayland_emgd.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +va_drm_utils.lo: $(top_srcdir)/va/drm/va_drm_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT va_drm_utils.lo -MD -MP -MF $(DEPDIR)/va_drm_utils.Tpo -c -o va_drm_utils.lo `test -f '$(top_srcdir)/va/drm/va_drm_utils.c' || echo '$(srcdir)/'`$(top_srcdir)/va/drm/va_drm_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/va_drm_utils.Tpo $(DEPDIR)/va_drm_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/va/drm/va_drm_utils.c' object='va_drm_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o va_drm_utils.lo `test -f '$(top_srcdir)/va/drm/va_drm_utils.c' || echo '$(srcdir)/'`$(top_srcdir)/va/drm/va_drm_utils.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libva_waylandincludeHEADERS: $(libva_waylandinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libva_waylandinclude_HEADERS)'; test -n "$(libva_waylandincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libva_waylandincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libva_waylandincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libva_waylandincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libva_waylandincludedir)" || exit $$?; \ + done + +uninstall-libva_waylandincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libva_waylandinclude_HEADERS)'; test -n "$(libva_waylandincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libva_waylandincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libva_waylandincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-libva_waylandincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libva_waylandincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libva_waylandincludeHEADERS \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-libva_waylandincludeHEADERS + + +# Wayland protocol +va_wayland_drm.c: $(protocol_source_h) +%-client-protocol.h : %.xml + $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_backend_wayland.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_backend_wayland.h new file mode 100644 index 000000000..b33e3a13d --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_backend_wayland.h @@ -0,0 +1,65 @@ +/* + * va_backend_wayland.h - VA driver implementation hooks for Wayland + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_BACKEND_WAYLAND_H +#define VA_BACKEND_WAYLAND_H + +#include +#include + +/** \brief VA/Wayland API version. */ +#define VA_WAYLAND_API_VERSION (0x574c4400) /* WLD0 */ + +/* Forward declarations */ +struct VADriverContext; + +/** \brief VA/Wayland implementation hooks. */ +struct VADriverVTableWayland { + /** + * \brief Interface version. + * + * Implementations shall set this field to \ref VA_WAYLAND_API_VERSION. + */ + unsigned int version; + + /** \brief Hook to return Wayland buffer associated with the VA surface. */ + VAStatus (*vaGetSurfaceBufferWl)( + struct VADriverContext *ctx, + VASurfaceID surface, + unsigned int flags, + struct wl_buffer **out_buffer + ); + + /** \brief Hook to return Wayland buffer associated with the VA image. */ + VAStatus (*vaGetImageBufferWl)( + struct VADriverContext *ctx, + VAImageID image, + unsigned int flags, + struct wl_buffer **out_buffer + ); +}; + +#endif /* VA_BACKEND_WAYLAND_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.c new file mode 100644 index 000000000..88a841fe6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.c @@ -0,0 +1,194 @@ +/* + * va_wayland.c - Wayland API + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include "va_wayland.h" +#include "va_wayland_drm.h" +#include "va_wayland_emgd.h" +#include "va_wayland_private.h" +#include "va_backend.h" +#include "va_backend_wayland.h" + +static inline VADriverContextP +get_driver_context(VADisplay dpy) +{ + if (!vaDisplayIsValid(dpy)) + return NULL; + return ((VADisplayContextP)dpy)->pDriverContext; +} + +void +va_wayland_error(const char *format, ...) +{ + va_list args; + + va_start(args, format); + fprintf(stderr, "VA error: wayland: "); + vfprintf(stderr, format, args); + fprintf(stderr, "\n"); + va_end(args); +} + +static int +va_DisplayContextIsValid(VADisplayContextP pDisplayContext) +{ + VADriverContextP const pDriverContext = pDisplayContext->pDriverContext; + + return (pDriverContext && + pDriverContext->display_type == VA_DISPLAY_WAYLAND); +} + +static void +va_DisplayContextDestroy(VADisplayContextP pDisplayContext) +{ + VADriverContextP pDriverContext; + VADisplayContextWaylandP pDisplayContextWl; + + if (!pDisplayContext) + return; + + pDisplayContextWl = pDisplayContext->opaque; + if (pDisplayContextWl && pDisplayContextWl->destroy) + pDisplayContextWl->destroy(pDisplayContext); + + pDriverContext = pDisplayContext->pDriverContext; + if (pDriverContext) { + free(pDriverContext->vtable_wayland); + pDriverContext->vtable_wayland = NULL; + free(pDriverContext); + pDisplayContext->pDriverContext = NULL; + } + + free(pDisplayContext->opaque); + pDisplayContext->opaque = NULL; + free(pDisplayContext); +} + +static VAStatus +va_DisplayContextGetDriverName(VADisplayContextP pDisplayContext, char **name) +{ + *name = NULL; + return VA_STATUS_ERROR_UNKNOWN; +} + +/* -------------------------------------------------------------------------- */ +/* --- Public interface --- */ +/* -------------------------------------------------------------------------- */ + +struct va_wayland_backend { + VADisplayContextCreateFunc create; + VADisplayContextDestroyFunc destroy; +}; + +static const struct va_wayland_backend g_backends[] = { + { va_wayland_drm_create, + va_wayland_drm_destroy }, + { va_wayland_emgd_create, + va_wayland_emgd_destroy }, + { NULL, } +}; + +VADisplay +vaGetDisplayWl(struct wl_display *display) +{ + VADisplayContextP pDisplayContext = NULL; + VADriverContextP pDriverContext; + struct VADriverVTableWayland *vtable; + unsigned int i; + + pDisplayContext = calloc(1, sizeof(*pDisplayContext)); + if (!pDisplayContext) + return NULL; + + pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + pDriverContext = calloc(1, sizeof(*pDriverContext)); + if (!pDriverContext) + goto error; + pDisplayContext->pDriverContext = pDriverContext; + + pDriverContext->native_dpy = display; + pDriverContext->display_type = VA_DISPLAY_WAYLAND; + + vtable = calloc(1, sizeof(*vtable)); + if (!vtable) + goto error; + pDriverContext->vtable_wayland = vtable; + + vtable->version = VA_WAYLAND_API_VERSION; + + for (i = 0; g_backends[i].create != NULL; i++) { + if (g_backends[i].create(pDisplayContext)) + break; + g_backends[i].destroy(pDisplayContext); + } + + return (VADisplay)pDisplayContext; + +error: + va_DisplayContextDestroy(pDisplayContext); + return NULL; +} + +VAStatus +vaGetSurfaceBufferWl( + VADisplay dpy, + VASurfaceID surface, + unsigned int flags, + struct wl_buffer **out_buffer +) +{ + VADriverContextP const ctx = get_driver_context(dpy); + + if (!ctx) + return VA_STATUS_ERROR_INVALID_DISPLAY; + if (!ctx->vtable_wayland || !ctx->vtable_wayland->vaGetSurfaceBufferWl) + return VA_STATUS_ERROR_UNIMPLEMENTED; + return ctx->vtable_wayland->vaGetSurfaceBufferWl(ctx, surface, flags, + out_buffer); +} + +VAStatus +vaGetImageBufferWl( + VADisplay dpy, + VAImageID image, + unsigned int flags, + struct wl_buffer **out_buffer +) +{ + VADriverContextP const ctx = get_driver_context(dpy); + + if (!ctx) + return VA_STATUS_ERROR_INVALID_DISPLAY; + if (!ctx->vtable_wayland || !ctx->vtable_wayland->vaGetImageBufferWl) + return VA_STATUS_ERROR_UNIMPLEMENTED; + return ctx->vtable_wayland->vaGetImageBufferWl(ctx, image, flags, + out_buffer); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.h new file mode 100644 index 000000000..46fbf2c67 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland.h @@ -0,0 +1,131 @@ +/* + * va_wayland.h - Wayland API + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_WAYLAND_H +#define VA_WAYLAND_H + +#include +#include + +/** + * \file va_wayland.h + * \brief The Wayland rendering API + * + * This file contains the \ref api_wayland "Wayland rendering API". + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup api_wayland Wayland rendering API + * + * @{ + * + * Theory of operations: + * - Create a VA display for an active Wayland display ; + * - Perform normal VA-API operations, e.g. decode to a VA surface ; + * - Get wl_buffer associated to the VA surface ; + * - Attach wl_buffer to wl_surface ; + */ + +/** + * \brief Returns a VA display wrapping the specified Wayland display. + * + * This functions returns a (possibly cached) VA display from the + * specified Wayland @display. + * + * @param[in] display the native Wayland display + * @return the VA display + */ +VADisplay +vaGetDisplayWl(struct wl_display *display); + +/** + * \brief Returns the Wayland buffer associated with a VA surface. + * + * This function returns a wl_buffer handle that can be used as an + * argument to wl_surface_attach(). This buffer references the + * underlying VA @surface. As such, the VA @surface and Wayland + * @out_buffer have the same size and color format. Should specific + * color conversion be needed, then VA/VPP API can fulfill this + * purpose. + * + * The @flags describe the desired picture structure. This is useful + * to expose a de-interlaced buffer. If the VA driver does not support + * any of the supplied flags, then #VA_STATUS_ERROR_FLAG_NOT_SUPPORTED + * is returned. The following flags are allowed: \c VA_FRAME_PICTURE, + * \c VA_TOP_FIELD, \c VA_BOTTOM_FIELD. + * + * @param[in] dpy the VA display + * @param[in] surface the VA surface + * @param[in] flags the deinterlacing flags + * @param[out] out_buffer a wl_buffer wrapping the VA @surface + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus +vaGetSurfaceBufferWl( + VADisplay dpy, + VASurfaceID surface, + unsigned int flags, + struct wl_buffer **out_buffer +); + +/** + * \brief Returns the Wayland buffer associated with a VA image. + * + * This function returns a wl_buffer handle that can be used as an + * argument to wl_surface_attach(). This buffer references the + * underlying VA @image. As such, the VA @image and Wayland + * @out_buffer have the same size and color format. Should specific + * color conversion be needed, then VA/VPP API can fulfill this + * purpose. + * + * The @flags describe the desired picture structure. See + * vaGetSurfaceBufferWl() description for more details. + * + * @param[in] dpy the VA display + * @param[in] image the VA image + * @param[in] flags the deinterlacing flags + * @param[out] out_buffer a wl_buffer wrapping the VA @image + * @return VA_STATUS_SUCCESS if successful + */ +VAStatus +vaGetImageBufferWl( + VADisplay dpy, + VAImageID image, + unsigned int flags, + struct wl_buffer **out_buffer +); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_WAYLAND_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.c new file mode 100644 index 000000000..d292316cd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.c @@ -0,0 +1,223 @@ +/* + * va_wayland_drm.c - Wayland/DRM helpers + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include +#include +#include "va_drmcommon.h" +#include "drm/va_drm_utils.h" +#include "va_wayland_drm.h" +#include "va_wayland_private.h" +#include "wayland-drm-client-protocol.h" + +/* XXX: Wayland/DRM support currently lives in Mesa libEGL.so.* library */ +#define LIBWAYLAND_DRM_NAME "libEGL.so.1" + +typedef struct va_wayland_drm_context { + struct va_wayland_context base; + void *handle; + struct wl_drm *drm; + struct wl_registry *registry; + void *drm_interface; + unsigned int is_authenticated : 1; +} VADisplayContextWaylandDRM; + +static void +drm_handle_device(void *data, struct wl_drm *drm, const char *device) +{ + VADisplayContextP const pDisplayContext = data; + VADriverContextP const ctx = pDisplayContext->pDriverContext; + VADisplayContextWaylandDRM * const wl_drm_ctx = pDisplayContext->opaque; + struct drm_state * const drm_state = ctx->drm_state; + drm_magic_t magic; + struct stat st; + + if (stat(device, &st) < 0) { + va_wayland_error("failed to identify %s: %s (errno %d)", + device, strerror(errno), errno); + return; + } + + if (!S_ISCHR(st.st_mode)) { + va_wayland_error("%s is not a device", device); + return; + } + + drm_state->fd = open(device, O_RDWR); + if (drm_state->fd < 0) { + va_wayland_error("failed to open %s: %s (errno %d)", + device, strerror(errno), errno); + return; + } + + drmGetMagic(drm_state->fd, &magic); + wl_drm_authenticate(wl_drm_ctx->drm, magic); +} + +static void +drm_handle_format(void *data, struct wl_drm *drm, uint32_t format) +{ +} + +static void +drm_handle_authenticated(void *data, struct wl_drm *drm) +{ + VADisplayContextP const pDisplayContext = data; + VADriverContextP const ctx = pDisplayContext->pDriverContext; + VADisplayContextWaylandDRM * const wl_drm_ctx = pDisplayContext->opaque; + struct drm_state * const drm_state = ctx->drm_state; + + wl_drm_ctx->is_authenticated = 1; + drm_state->auth_type = VA_DRM_AUTH_CUSTOM; +} + +static const struct wl_drm_listener drm_listener = { + drm_handle_device, + drm_handle_format, + drm_handle_authenticated +}; + +static VAStatus +va_DisplayContextGetDriverName( + VADisplayContextP pDisplayContext, + char **driver_name_ptr +) +{ + VADriverContextP const ctx = pDisplayContext->pDriverContext; + + return VA_DRM_GetDriverName(ctx, driver_name_ptr); +} + +void +va_wayland_drm_destroy(VADisplayContextP pDisplayContext) +{ + VADriverContextP const ctx = pDisplayContext->pDriverContext; + struct va_wayland_drm_context * const wl_drm_ctx = pDisplayContext->opaque; + struct drm_state * const drm_state = ctx->drm_state; + + if (wl_drm_ctx->drm) { + wl_drm_destroy(wl_drm_ctx->drm); + wl_drm_ctx->drm = NULL; + } + wl_drm_ctx->is_authenticated = 0; + + if (wl_drm_ctx->handle) { + dlclose(wl_drm_ctx->handle); + wl_drm_ctx->handle = NULL; + } + + if (drm_state) { + if (drm_state->fd >= 0) { + close(drm_state->fd); + drm_state->fd = -1; + } + free(ctx->drm_state); + ctx->drm_state = NULL; + } +} + +static void +registry_handle_global( + void *data, + struct wl_registry *registry, + uint32_t id, + const char *interface, + uint32_t version +) +{ + struct va_wayland_drm_context *wl_drm_ctx = data; + + if (strcmp(interface, "wl_drm") == 0) { + wl_drm_ctx->drm = + wl_registry_bind(wl_drm_ctx->registry, id, wl_drm_ctx->drm_interface, 1); + } +} + +static const struct wl_registry_listener registry_listener = { + registry_handle_global, + NULL, +}; + +bool +va_wayland_drm_create(VADisplayContextP pDisplayContext) +{ + VADriverContextP const ctx = pDisplayContext->pDriverContext; + struct va_wayland_drm_context *wl_drm_ctx; + struct drm_state *drm_state; + uint32_t id; + + wl_drm_ctx = malloc(sizeof(*wl_drm_ctx)); + if (!wl_drm_ctx) + return false; + wl_drm_ctx->base.destroy = va_wayland_drm_destroy; + wl_drm_ctx->handle = NULL; + wl_drm_ctx->drm = NULL; + wl_drm_ctx->drm_interface = NULL; + wl_drm_ctx->is_authenticated = 0; + pDisplayContext->opaque = wl_drm_ctx; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + drm_state = calloc(1, sizeof(struct drm_state)); + if (!drm_state) + return false; + drm_state->fd = -1; + drm_state->auth_type = 0; + ctx->drm_state = drm_state; + + wl_drm_ctx->handle = dlopen(LIBWAYLAND_DRM_NAME, RTLD_LAZY|RTLD_LOCAL); + if (!wl_drm_ctx->handle) + return false; + + wl_drm_ctx->drm_interface = + dlsym(wl_drm_ctx->handle, "wl_drm_interface"); + if (!wl_drm_ctx->drm_interface) + return false; + + wl_drm_ctx->registry = wl_display_get_registry(ctx->native_dpy); + wl_registry_add_listener(wl_drm_ctx->registry, ®istry_listener, wl_drm_ctx); + wl_display_roundtrip(ctx->native_dpy); + + /* registry_handle_global should have been called by the + * wl_display_roundtrip above + */ + + if (!wl_drm_ctx->drm) + return false; + + wl_drm_add_listener(wl_drm_ctx->drm, &drm_listener, pDisplayContext); + wl_display_roundtrip(ctx->native_dpy); + if (drm_state->fd < 0) + return false; + + wl_display_roundtrip(ctx->native_dpy); + if (!wl_drm_ctx->is_authenticated) + return false; + return true; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.h new file mode 100644 index 000000000..6fb8f5221 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_drm.h @@ -0,0 +1,52 @@ +/* + * va_wayland_drm.h - Wayland/DRM helpers + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_WAYLAND_DRM_H +#define VA_WAYLAND_DRM_H + +#include +#include "va_wayland.h" +#include "va_backend.h" +#include "va_backend_wayland.h" + +/** + * \brief Initializes Wayland/DRM layer. + * + * This is an internal function used to initialize the VA/DRM subsystem + * if the application is running on a DRM-based server. + * + * @param[in] pDisplayContext the VA display context + * @return true if successful + */ +DLL_HIDDEN +bool +va_wayland_drm_create(VADisplayContextP pDisplayContext); + +DLL_HIDDEN +void +va_wayland_drm_destroy(VADisplayContextP pDisplayContext); + +#endif /* VA_WAYLAND_DRM_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.c new file mode 100644 index 000000000..cb885d1bc --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.c @@ -0,0 +1,157 @@ +/* + * va_wayland_emgd.c - Wayland/EMGD helpers + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include "va_drmcommon.h" +#include "va_wayland_emgd.h" +#include "va_wayland_private.h" + +/* XXX: Wayland/EMGD support currently lives in libwayland-emgd.so.* library */ +#define LIBWAYLAND_EMGD_NAME "libwayland-emgd.so.1" + +typedef struct va_wayland_emgd_context { + struct va_wayland_context base; + void *handle; + struct wl_emgd *emgd; + void *emgd_interface; + unsigned int is_created : 1; + struct wl_registry *registry; +} VADisplayContextWaylandEMGD; + +static inline void +wl_emgd_destroy(struct wl_emgd *emgd) +{ + wl_proxy_destroy((struct wl_proxy *)emgd); +} + +static VAStatus +va_DisplayContextGetDriverName( + VADisplayContextP pDisplayContext, + char **driver_name_ptr +) +{ + *driver_name_ptr = strdup("emgd"); + return VA_STATUS_SUCCESS; +} + +void +va_wayland_emgd_destroy(VADisplayContextP pDisplayContext) +{ + VADriverContextP const ctx = pDisplayContext->pDriverContext; + VADisplayContextWaylandEMGD * const wl_emgd_ctx = pDisplayContext->opaque; + struct drm_state * const drm_state = ctx->drm_state; + + if (wl_emgd_ctx->emgd) { + wl_emgd_destroy(wl_emgd_ctx->emgd); + wl_emgd_ctx->emgd = NULL; + } + wl_emgd_ctx->is_created = 0; + + if (wl_emgd_ctx->handle) { + dlclose(wl_emgd_ctx->handle); + wl_emgd_ctx->handle = NULL; + } + + if (drm_state) { + if (drm_state->fd >= 0) { + close(drm_state->fd); + drm_state->fd = -1; + } + free(ctx->drm_state); + ctx->drm_state = NULL; + } +} + +static void +registry_handle_global( + void *data, + struct wl_registry *registry, + uint32_t id, + const char *interface, + uint32_t version +) +{ + VADisplayContextWaylandEMGD *wl_emgd_ctx = data; + + if (strcmp(interface, "wl_emgd") == 0) { + wl_emgd_ctx->emgd = + wl_registry_bind(registry, id, wl_emgd_ctx->emgd_interface, 1); + } +} + +static const struct wl_registry_listener registry_listener = { + registry_handle_global, + NULL, +}; + +bool +va_wayland_emgd_create(VADisplayContextP pDisplayContext) +{ + VADriverContextP const ctx = pDisplayContext->pDriverContext; + VADisplayContextWaylandEMGD *wl_emgd_ctx; + struct drm_state *drm_state; + uint32_t id; + + wl_emgd_ctx = malloc(sizeof(*wl_emgd_ctx)); + if (!wl_emgd_ctx) + return false; + wl_emgd_ctx->base.destroy = va_wayland_emgd_destroy; + wl_emgd_ctx->handle = NULL; + wl_emgd_ctx->emgd = NULL; + wl_emgd_ctx->emgd_interface = NULL; + wl_emgd_ctx->is_created = 0; + pDisplayContext->opaque = wl_emgd_ctx; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + + drm_state = calloc(1, sizeof(struct drm_state)); + if (!drm_state) + return false; + drm_state->fd = -1; + drm_state->auth_type = 0; + ctx->drm_state = drm_state; + + wl_emgd_ctx->handle = dlopen(LIBWAYLAND_EMGD_NAME, RTLD_LAZY|RTLD_LOCAL); + if (!wl_emgd_ctx->handle) + return false; + + wl_emgd_ctx->emgd_interface = + dlsym(wl_emgd_ctx->handle, "wl_emgd_interface"); + if (!wl_emgd_ctx->emgd_interface) + return false; + + wl_emgd_ctx->registry = wl_display_get_registry(ctx->native_dpy); + wl_registry_add_listener(wl_emgd_ctx->registry, ®istry_listener, wl_emgd_ctx); + wl_display_roundtrip(ctx->native_dpy); + + /* registry_handle_global should have been called by the + * wl_display_roundtrip above + */ + if (!wl_emgd_ctx->emgd) + return false; + return true; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.h new file mode 100644 index 000000000..053b6b4b6 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_emgd.h @@ -0,0 +1,52 @@ +/* + * va_wayland_emgd.h - Wayland/EMGD helpers + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_WAYLAND_EMGD_H +#define VA_WAYLAND_EMGD_H + +#include +#include "va_wayland.h" +#include "va_backend.h" +#include "va_backend_wayland.h" + +/** + * \brief Initializes Wayland/EMGD layer. + * + * This is an internal function used to initialize the VA/EMGD subsystem + * if the application is running on an EMGD-based server. + * + * @param[in] pDisplayContext the VA display context + * @return true if successful + */ +DLL_HIDDEN +bool +va_wayland_emgd_create(VADisplayContextP pDisplayContext); + +DLL_HIDDEN +void +va_wayland_emgd_destroy(VADisplayContextP pDisplayContext); + +#endif /* VA_WAYLAND_EMGD_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_private.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_private.h new file mode 100644 index 000000000..f09f4b7a2 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/va_wayland_private.h @@ -0,0 +1,44 @@ +/* + * va_wayland_private.h - Wayland private API + * + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_WAYLAND_PRIVATE_H +#define VA_WAYLAND_PRIVATE_H + +struct va_wayland_context; + +typedef bool (*VADisplayContextCreateFunc)(VADisplayContextP pDisplayContext); +typedef void (*VADisplayContextDestroyFunc)(VADisplayContextP pDisplayContext); + +/* VA/Wayland base display context */ +typedef struct va_wayland_context { + VADisplayContextDestroyFunc destroy; +} VADisplayContextWayland, *VADisplayContextWaylandP; + +DLL_HIDDEN +void +va_wayland_error(const char *format, ...); + +#endif /* VA_WAYLAND_PRIVATE_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm-client-protocol.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm-client-protocol.h new file mode 100644 index 000000000..a215c6bab --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm-client-protocol.h @@ -0,0 +1,203 @@ +/* + * Copyright © 2008-2011 Kristian Høgsberg + * Copyright © 2010-2011 Intel Corporation + * + * Permission to use, copy, modify, distribute, and sell this + * software and its documentation for any purpose is hereby granted + * without fee, provided that\n the above copyright notice appear in + * all copies and that both that copyright notice and this permission + * notice appear in supporting documentation, and that the name of + * the copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + */ + +#ifndef DRM_CLIENT_PROTOCOL_H +#define DRM_CLIENT_PROTOCOL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "wayland-client.h" + +struct wl_client; +struct wl_resource; + +struct wl_drm; + +extern const struct wl_interface wl_drm_interface; + +#ifndef WL_DRM_ERROR_ENUM +#define WL_DRM_ERROR_ENUM +enum wl_drm_error { + WL_DRM_ERROR_AUTHENTICATE_FAIL = 0, + WL_DRM_ERROR_INVALID_FORMAT = 1, + WL_DRM_ERROR_INVALID_NAME = 2, +}; +#endif /* WL_DRM_ERROR_ENUM */ + +#ifndef WL_DRM_FORMAT_ENUM +#define WL_DRM_FORMAT_ENUM +enum wl_drm_format { + WL_DRM_FORMAT_C8 = 0x20203843, + WL_DRM_FORMAT_RGB332 = 0x38424752, + WL_DRM_FORMAT_BGR233 = 0x38524742, + WL_DRM_FORMAT_XRGB4444 = 0x32315258, + WL_DRM_FORMAT_XBGR4444 = 0x32314258, + WL_DRM_FORMAT_RGBX4444 = 0x32315852, + WL_DRM_FORMAT_BGRX4444 = 0x32315842, + WL_DRM_FORMAT_ARGB4444 = 0x32315241, + WL_DRM_FORMAT_ABGR4444 = 0x32314241, + WL_DRM_FORMAT_RGBA4444 = 0x32314152, + WL_DRM_FORMAT_BGRA4444 = 0x32314142, + WL_DRM_FORMAT_XRGB1555 = 0x35315258, + WL_DRM_FORMAT_XBGR1555 = 0x35314258, + WL_DRM_FORMAT_RGBX5551 = 0x35315852, + WL_DRM_FORMAT_BGRX5551 = 0x35315842, + WL_DRM_FORMAT_ARGB1555 = 0x35315241, + WL_DRM_FORMAT_ABGR1555 = 0x35314241, + WL_DRM_FORMAT_RGBA5551 = 0x35314152, + WL_DRM_FORMAT_BGRA5551 = 0x35314142, + WL_DRM_FORMAT_RGB565 = 0x36314752, + WL_DRM_FORMAT_BGR565 = 0x36314742, + WL_DRM_FORMAT_RGB888 = 0x34324752, + WL_DRM_FORMAT_BGR888 = 0x34324742, + WL_DRM_FORMAT_XRGB8888 = 0x34325258, + WL_DRM_FORMAT_XBGR8888 = 0x34324258, + WL_DRM_FORMAT_RGBX8888 = 0x34325852, + WL_DRM_FORMAT_BGRX8888 = 0x34325842, + WL_DRM_FORMAT_ARGB8888 = 0x34325241, + WL_DRM_FORMAT_ABGR8888 = 0x34324241, + WL_DRM_FORMAT_RGBA8888 = 0x34324152, + WL_DRM_FORMAT_BGRA8888 = 0x34324142, + WL_DRM_FORMAT_XRGB2101010 = 0x30335258, + WL_DRM_FORMAT_XBGR2101010 = 0x30334258, + WL_DRM_FORMAT_RGBX1010102 = 0x30335852, + WL_DRM_FORMAT_BGRX1010102 = 0x30335842, + WL_DRM_FORMAT_ARGB2101010 = 0x30335241, + WL_DRM_FORMAT_ABGR2101010 = 0x30334241, + WL_DRM_FORMAT_RGBA1010102 = 0x30334152, + WL_DRM_FORMAT_BGRA1010102 = 0x30334142, + WL_DRM_FORMAT_YUYV = 0x56595559, + WL_DRM_FORMAT_YVYU = 0x55595659, + WL_DRM_FORMAT_UYVY = 0x59565955, + WL_DRM_FORMAT_VYUY = 0x59555956, + WL_DRM_FORMAT_AYUV = 0x56555941, + WL_DRM_FORMAT_NV12 = 0x3231564e, + WL_DRM_FORMAT_NV21 = 0x3132564e, + WL_DRM_FORMAT_NV16 = 0x3631564e, + WL_DRM_FORMAT_NV61 = 0x3136564e, + WL_DRM_FORMAT_YUV410 = 0x39565559, + WL_DRM_FORMAT_YVU410 = 0x39555659, + WL_DRM_FORMAT_YUV411 = 0x31315559, + WL_DRM_FORMAT_YVU411 = 0x31315659, + WL_DRM_FORMAT_YUV420 = 0x32315559, + WL_DRM_FORMAT_YVU420 = 0x32315659, + WL_DRM_FORMAT_YUV422 = 0x36315559, + WL_DRM_FORMAT_YVU422 = 0x36315659, + WL_DRM_FORMAT_YUV444 = 0x34325559, + WL_DRM_FORMAT_YVU444 = 0x34325659, +}; +#endif /* WL_DRM_FORMAT_ENUM */ + +struct wl_drm_listener { + /** + * device - (none) + * @name: (none) + */ + void (*device)(void *data, + struct wl_drm *wl_drm, + const char *name); + /** + * format - (none) + * @format: (none) + */ + void (*format)(void *data, + struct wl_drm *wl_drm, + uint32_t format); + /** + * authenticated - (none) + */ + void (*authenticated)(void *data, + struct wl_drm *wl_drm); +}; + +static inline int +wl_drm_add_listener(struct wl_drm *wl_drm, + const struct wl_drm_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) wl_drm, + (void (**)(void)) listener, data); +} + +#define WL_DRM_AUTHENTICATE 0 +#define WL_DRM_CREATE_BUFFER 1 +#define WL_DRM_CREATE_PLANAR_BUFFER 2 + +static inline void +wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data); +} + +static inline void * +wl_drm_get_user_data(struct wl_drm *wl_drm) +{ + return wl_proxy_get_user_data((struct wl_proxy *) wl_drm); +} + +static inline void +wl_drm_destroy(struct wl_drm *wl_drm) +{ + wl_proxy_destroy((struct wl_proxy *) wl_drm); +} + +static inline void +wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id) +{ + wl_proxy_marshal((struct wl_proxy *) wl_drm, + WL_DRM_AUTHENTICATE, id); +} + +static inline struct wl_buffer * +wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t stride, uint32_t format) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_drm, + WL_DRM_CREATE_BUFFER, &wl_buffer_interface, NULL, name, width, height, stride, format); + + return (struct wl_buffer *) id; +} + +static inline struct wl_buffer * +wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_drm, + WL_DRM_CREATE_PLANAR_BUFFER, &wl_buffer_interface, NULL, name, width, height, format, offset0, stride0, offset1, stride1, offset2, stride2); + + return (struct wl_buffer *) id; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm.xml b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm.xml new file mode 100644 index 000000000..265d4f892 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/wayland/wayland-drm.xml @@ -0,0 +1,155 @@ + + + + + Copyright © 2008-2011 Kristian Høgsberg + Copyright © 2010-2011 Intel Corporation + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that\n the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.am b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.am new file mode 100644 index 000000000..0853016cd --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.am @@ -0,0 +1,58 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(X11_CFLAGS) \ + $(XEXT_CFLAGS) \ + $(XFIXES_CFLAGS) \ + $(DRM_CFLAGS) \ + $(NULL) + +source_c = \ + dri2_util.c \ + va_dri2.c \ + va_dricommon.c \ + va_fglrx.c \ + va_nvctrl.c \ + va_x11.c \ + $(NULL) + +source_h = \ + va_dri2.h \ + va_dricommon.h \ + $(NULL) + +source_h_priv = \ + va_dri2str.h \ + va_dri2tokens.h \ + va_fglrx.h \ + va_nvctrl.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_x11.la +libva_x11includedir = ${includedir}/va +libva_x11include_HEADERS = $(source_h) +libva_x11_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.in b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.in new file mode 100644 index 000000000..08143e870 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/Makefile.in @@ -0,0 +1,725 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = va/x11 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/depcomp $(libva_x11include_HEADERS) \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libva_x11_la_LIBADD = +am__objects_1 = dri2_util.lo va_dri2.lo va_dricommon.lo va_fglrx.lo \ + va_nvctrl.lo va_x11.lo +am_libva_x11_la_OBJECTS = $(am__objects_1) +libva_x11_la_OBJECTS = $(am_libva_x11_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libva_x11_la_SOURCES) +DIST_SOURCES = $(libva_x11_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libva_x11includedir)" +HEADERS = $(libva_x11include_HEADERS) $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DRM_CFLAGS = @DRM_CFLAGS@ +DRM_LIBS = @DRM_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGL_CFLAGS = @EGL_CFLAGS@ +EGL_LIBS = @EGL_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLX_CFLAGS = @GLX_CFLAGS@ +GLX_LIBS = @GLX_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDRM_VERSION = @LIBDRM_VERSION@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ +LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ +LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ +LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ +LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ +LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ +LIBVA_VERSION = @LIBVA_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TODAY = @TODAY@ +VA_API_MAJOR_VERSION = @VA_API_MAJOR_VERSION@ +VA_API_MICRO_VERSION = @VA_API_MICRO_VERSION@ +VA_API_MINOR_VERSION = @VA_API_MINOR_VERSION@ +VA_API_VERSION = @VA_API_VERSION@ +VERSION = @VERSION@ +WAYLAND_API_VERSION = @WAYLAND_API_VERSION@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WAYLAND_SCANNER = @WAYLAND_SCANNER@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XFIXES_CFLAGS = @XFIXES_CFLAGS@ +XFIXES_LIBS = @XFIXES_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = \ + -DLINUX \ + -I$(top_srcdir) \ + -I$(top_srcdir)/va \ + $(X11_CFLAGS) \ + $(XEXT_CFLAGS) \ + $(XFIXES_CFLAGS) \ + $(DRM_CFLAGS) \ + $(NULL) + +source_c = \ + dri2_util.c \ + va_dri2.c \ + va_dricommon.c \ + va_fglrx.c \ + va_nvctrl.c \ + va_x11.c \ + $(NULL) + +source_h = \ + va_dri2.h \ + va_dricommon.h \ + $(NULL) + +source_h_priv = \ + va_dri2str.h \ + va_dri2tokens.h \ + va_fglrx.h \ + va_nvctrl.h \ + $(NULL) + +noinst_LTLIBRARIES = libva_x11.la +libva_x11includedir = ${includedir}/va +libva_x11include_HEADERS = $(source_h) +libva_x11_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu va/x11/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu va/x11/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libva_x11.la: $(libva_x11_la_OBJECTS) $(libva_x11_la_DEPENDENCIES) $(EXTRA_libva_x11_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libva_x11_la_OBJECTS) $(libva_x11_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dri2_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_dri2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_dricommon.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_fglrx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_nvctrl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_x11.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-libva_x11includeHEADERS: $(libva_x11include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libva_x11include_HEADERS)'; test -n "$(libva_x11includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libva_x11includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libva_x11includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libva_x11includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libva_x11includedir)" || exit $$?; \ + done + +uninstall-libva_x11includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libva_x11include_HEADERS)'; test -n "$(libva_x11includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libva_x11includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libva_x11includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-libva_x11includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libva_x11includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libva_x11includeHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libva_x11includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/dri2_util.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/dri2_util.c new file mode 100644 index 000000000..d076fb3c4 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/dri2_util.c @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include +#include +#include +#include + +#include + +#include +#include +#include "va.h" +#include "va_backend.h" + +#include "va_dri2.h" +#include "va_dri2tokens.h" +#include "va_dricommon.h" + +#define __DRI_BUFFER_FRONT_LEFT 0 +#define __DRI_BUFFER_BACK_LEFT 1 +#define __DRI_BUFFER_FRONT_RIGHT 2 +#define __DRI_BUFFER_BACK_RIGHT 3 +#define __DRI_BUFFER_DEPTH 4 +#define __DRI_BUFFER_STENCIL 5 +#define __DRI_BUFFER_ACCUM 6 +#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 +#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 + +struct dri2_drawable +{ + struct dri_drawable base; + union dri_buffer buffers[5]; + int width; + int height; + int has_backbuffer; + int back_index; + int front_index; +}; + +static int gsDRI2SwapAvailable; + +static struct dri_drawable * +dri2CreateDrawable(VADriverContextP ctx, XID x_drawable) +{ + struct dri2_drawable *dri2_drawable; + + dri2_drawable = calloc(1, sizeof(*dri2_drawable)); + + if (!dri2_drawable) + return NULL; + + dri2_drawable->base.x_drawable = x_drawable; + dri2_drawable->base.x = 0; + dri2_drawable->base.y = 0; + VA_DRI2CreateDrawable(ctx->native_dpy, x_drawable); + + return &dri2_drawable->base; +} + +static void +dri2DestroyDrawable(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + VA_DRI2DestroyDrawable(ctx->native_dpy, dri_drawable->x_drawable); + free(dri_drawable); +} + +static void +dri2SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; + XRectangle xrect; + XserverRegion region; + + if (dri2_drawable->has_backbuffer) { + if (gsDRI2SwapAvailable) { + CARD64 ret; + VA_DRI2SwapBuffers(ctx->native_dpy, dri_drawable->x_drawable, 0, 0, + 0, &ret); + } else { + xrect.x = 0; + xrect.y = 0; + xrect.width = dri2_drawable->width; + xrect.height = dri2_drawable->height; + + region = XFixesCreateRegion(ctx->native_dpy, &xrect, 1); + VA_DRI2CopyRegion(ctx->native_dpy, dri_drawable->x_drawable, region, + DRI2BufferFrontLeft, DRI2BufferBackLeft); + XFixesDestroyRegion(ctx->native_dpy, region); + } + } +} + +static union dri_buffer * +dri2GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; + int i; + int count; + unsigned int attachments[5]; + VA_DRI2Buffer *buffers; + + i = 0; + if (dri_drawable->is_window) + attachments[i++] = __DRI_BUFFER_BACK_LEFT; + else + attachments[i++] = __DRI_BUFFER_FRONT_LEFT; + + buffers = VA_DRI2GetBuffers(ctx->native_dpy, dri_drawable->x_drawable, + &dri2_drawable->width, &dri2_drawable->height, + attachments, i, &count); + assert(buffers); + if (buffers == NULL) + return NULL; + + dri2_drawable->has_backbuffer = 0; + + for (i = 0; i < count; i++) { + dri2_drawable->buffers[i].dri2.attachment = buffers[i].attachment; + dri2_drawable->buffers[i].dri2.name = buffers[i].name; + dri2_drawable->buffers[i].dri2.pitch = buffers[i].pitch; + dri2_drawable->buffers[i].dri2.cpp = buffers[i].cpp; + dri2_drawable->buffers[i].dri2.flags = buffers[i].flags; + + if (buffers[i].attachment == __DRI_BUFFER_BACK_LEFT) { + dri2_drawable->has_backbuffer = 1; + dri2_drawable->back_index = i; + } + + if (buffers[i].attachment == __DRI_BUFFER_FRONT_LEFT) + dri2_drawable->front_index = i; + } + + dri_drawable->width = dri2_drawable->width; + dri_drawable->height = dri2_drawable->height; + Xfree(buffers); + + if (dri2_drawable->has_backbuffer) + return &dri2_drawable->buffers[dri2_drawable->back_index]; + + return &dri2_drawable->buffers[dri2_drawable->front_index]; +} + +static void +dri2Close(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + + free_drawable_hashtable(ctx); + + if (dri_state->base.fd >= 0); + close(dri_state->base.fd); +} + +Bool +isDRI2Connected(VADriverContextP ctx, char **driver_name) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + int major, minor; + int error_base; + int event_base; + char *device_name = NULL; + drm_magic_t magic; + *driver_name = NULL; + dri_state->base.fd = -1; + dri_state->base.auth_type = VA_NONE; + if (!VA_DRI2QueryExtension(ctx->native_dpy, &event_base, &error_base)) + goto err_out; + + if (!VA_DRI2QueryVersion(ctx->native_dpy, &major, &minor)) + goto err_out; + + + if (!VA_DRI2Connect(ctx->native_dpy, RootWindow(ctx->native_dpy, ctx->x11_screen), + driver_name, &device_name)) + goto err_out; + + dri_state->base.fd = open(device_name, O_RDWR); + + if (dri_state->base.fd < 0) + goto err_out; + + if (drmGetMagic(dri_state->base.fd, &magic)) + goto err_out; + + if (!VA_DRI2Authenticate(ctx->native_dpy, RootWindow(ctx->native_dpy, ctx->x11_screen), + magic)) + goto err_out; + + dri_state->base.auth_type = VA_DRI2; + dri_state->createDrawable = dri2CreateDrawable; + dri_state->destroyDrawable = dri2DestroyDrawable; + dri_state->swapBuffer = dri2SwapBuffer; + dri_state->getRenderingBuffer = dri2GetRenderingBuffer; + dri_state->close = dri2Close; + gsDRI2SwapAvailable = (minor >= 2); + + if (device_name) + Xfree(device_name); + + return True; + +err_out: + if (device_name) + Xfree(device_name); + + if (*driver_name) + Xfree(*driver_name); + + if (dri_state->base.fd >= 0) + close(dri_state->base.fd); + + *driver_name = NULL; + dri_state->base.fd = -1; + + return False; +} + diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.c new file mode 100644 index 000000000..a39526023 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.c @@ -0,0 +1,424 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + + +#define NEED_REPLIES +#include +#include +#include +#include "xf86drm.h" +#include "va_dri2.h" +#include "va_dri2str.h" +#include "va_dri2tokens.h" + +#ifndef DRI2DriverDRI +#define DRI2DriverDRI 0 +#endif + +static int +VA_DRI2Error(Display *dpy, xError *err, XExtCodes *codes, int *ret_code); + +static VA_DRI2Buffer * +VA_DRI2GetBuffers_internal(XExtDisplayInfo *info, + Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, + int count, + int *outCount); + +static char va_dri2ExtensionName[] = DRI2_NAME; +static XExtensionInfo _va_dri2_info_data; +static XExtensionInfo *va_dri2Info = &_va_dri2_info_data; +static XEXT_GENERATE_CLOSE_DISPLAY (VA_DRI2CloseDisplay, va_dri2Info) +static /* const */ XExtensionHooks va_dri2ExtensionHooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + VA_DRI2CloseDisplay, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + VA_DRI2Error, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay, va_dri2Info, + va_dri2ExtensionName, + &va_dri2ExtensionHooks, + 0, NULL) + +static CARD32 _va_resource_x_error_drawable = 0; +static Bool _va_resource_x_error_matched = False; + +#define VA_EnterResourceError(drawable) \ + do { \ + _va_resource_x_error_drawable = (drawable); \ + _va_resource_x_error_matched = False; \ + } while (0) + +#define VA_LeaveResourceError() \ + do { \ + _va_resource_x_error_drawable = 0; \ + } while (0) + +#define VA_ResourceErrorMatched() \ + (_va_resource_x_error_matched) + +static int +VA_DRI2Error(Display *dpy, xError *err, XExtCodes *codes, int *ret_code) +{ + if (_va_resource_x_error_drawable == err->resourceID) { + _va_resource_x_error_matched = True; + return True; + } + + return False; +} + +Bool VA_DRI2QueryExtension(Display *dpy, int *eventBase, int *errorBase) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + + if (XextHasExtension(info)) { + *eventBase = info->codes->first_event; + *errorBase = info->codes->first_error; + return True; + } + + return False; +} + +Bool VA_DRI2QueryVersion(Display *dpy, int *major, int *minor) +{ + XExtDisplayInfo *info = DRI2FindDisplay (dpy); + xDRI2QueryVersionReply rep; + xDRI2QueryVersionReq *req; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2QueryVersion, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2QueryVersion; + req->majorVersion = DRI2_MAJOR; + req->minorVersion = DRI2_MINOR; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + *major = rep.majorVersion; + *minor = rep.minorVersion; + UnlockDisplay(dpy); + SyncHandle(); + + return True; +} + +Bool VA_DRI2Connect(Display *dpy, XID window, + char **driverName, char **deviceName) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2ConnectReply rep; + xDRI2ConnectReq *req; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2Connect, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2Connect; + req->window = window; + req->driverType = DRI2DriverDRI; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + if (rep.driverNameLength == 0 && rep.deviceNameLength == 0) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + *driverName = Xmalloc(rep.driverNameLength + 1); + if (*driverName == NULL) { + _XEatData(dpy, + ((rep.driverNameLength + 3) & ~3) + + ((rep.deviceNameLength + 3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + _XReadPad(dpy, *driverName, rep.driverNameLength); + (*driverName)[rep.driverNameLength] = '\0'; + + *deviceName = Xmalloc(rep.deviceNameLength + 1); + if (*deviceName == NULL) { + Xfree(*driverName); + _XEatData(dpy, ((rep.deviceNameLength + 3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + _XReadPad(dpy, *deviceName, rep.deviceNameLength); + (*deviceName)[rep.deviceNameLength] = '\0'; + + UnlockDisplay(dpy); + SyncHandle(); + + return True; +} + +Bool VA_DRI2Authenticate(Display *dpy, XID window, drm_magic_t magic) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2AuthenticateReq *req; + xDRI2AuthenticateReply rep; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2Authenticate, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2Authenticate; + req->window = window; + req->magic = magic; + + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + UnlockDisplay(dpy); + SyncHandle(); + + return rep.authenticated; +} + +void VA_DRI2CreateDrawable(Display *dpy, XID drawable) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2CreateDrawableReq *req; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + LockDisplay(dpy); + GetReq(DRI2CreateDrawable, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2CreateDrawable; + req->drawable = drawable; + UnlockDisplay(dpy); + SyncHandle(); +} + +void VA_DRI2DestroyDrawable(Display *dpy, XID drawable) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2DestroyDrawableReq *req; + unsigned int attachement = 0; // FRONT_LEFT + VA_DRI2Buffer *buffers; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + XSync(dpy, False); + + LockDisplay(dpy); + /* + * We have no way of catching DRI2DestroyDrawable errors because + * this message doesn't have a defined answer. So we test whether + * the drawable is still alive by sending DRIGetBuffers first and + * checking whether we get an error. + */ + VA_EnterResourceError(drawable); + + buffers = VA_DRI2GetBuffers_internal(info, dpy, drawable, + NULL, NULL, + &attachement, 1, NULL); + VA_LeaveResourceError(); + if (buffers) + XFree(buffers); + if (VA_ResourceErrorMatched()) { + UnlockDisplay(dpy); + SyncHandle(); + return; + } + + GetReq(DRI2DestroyDrawable, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2DestroyDrawable; + req->drawable = drawable; + UnlockDisplay(dpy); + SyncHandle(); +} + +VA_DRI2Buffer *VA_DRI2GetBuffers_internal(XExtDisplayInfo *info, + Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, int count, + int *outCount) +{ + xDRI2GetBuffersReply rep; + xDRI2GetBuffersReq *req; + VA_DRI2Buffer *buffers; + xDRI2Buffer repBuffer; + CARD32 *p; + int i; + + GetReqExtra(DRI2GetBuffers, count * 4, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2GetBuffers; + req->drawable = drawable; + req->count = count; + p = (CARD32 *) &req[1]; + for (i = 0; i < count; i++) + p[i] = attachments[i]; + + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + return NULL; + } + + if (width) + *width = rep.width; + if (height) + *height = rep.height; + if (outCount) + *outCount = rep.count; + + buffers = Xmalloc(rep.count * sizeof buffers[0]); + if (buffers == NULL) { + _XEatData(dpy, rep.count * sizeof repBuffer); + return NULL; + } + + for (i = 0; i < rep.count; i++) { + _XReadPad(dpy, (char *) &repBuffer, sizeof repBuffer); + buffers[i].attachment = repBuffer.attachment; + buffers[i].name = repBuffer.name; + buffers[i].pitch = repBuffer.pitch; + buffers[i].cpp = repBuffer.cpp; + buffers[i].flags = repBuffer.flags; + } + + return buffers; +} + +VA_DRI2Buffer *VA_DRI2GetBuffers(Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, int count, + int *outCount) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + VA_DRI2Buffer *buffers; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + + buffers = VA_DRI2GetBuffers_internal(info, dpy, drawable, width, height, + attachments, count, outCount); + + UnlockDisplay(dpy); + SyncHandle(); + + return buffers; +} + +void VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, + CARD32 dest, CARD32 src) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2CopyRegionReq *req; + xDRI2CopyRegionReply rep; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + LockDisplay(dpy); + GetReq(DRI2CopyRegion, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2CopyRegion; + req->drawable = drawable; + req->region = region; + req->dest = dest; + req->src = src; + + _XReply(dpy, (xReply *)&rep, 0, xFalse); + + UnlockDisplay(dpy); + SyncHandle(); +} + +static void +load_swap_req(xDRI2SwapBuffersReq *req, CARD64 target, CARD64 divisor, + CARD64 remainder) +{ + req->target_msc_hi = target >> 32; + req->target_msc_lo = target & 0xffffffff; + req->divisor_hi = divisor >> 32; + req->divisor_lo = divisor & 0xffffffff; + req->remainder_hi = remainder >> 32; + req->remainder_lo = remainder & 0xffffffff; +} + +static CARD64 +vals_to_card64(CARD32 lo, CARD32 hi) +{ + return (CARD64)hi << 32 | lo; +} + +void VA_DRI2SwapBuffers(Display *dpy, XID drawable, CARD64 target_msc, + CARD64 divisor, CARD64 remainder, CARD64 *count) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2SwapBuffersReq *req; + xDRI2SwapBuffersReply rep; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + LockDisplay(dpy); + GetReq(DRI2SwapBuffers, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2SwapBuffers; + req->drawable = drawable; + load_swap_req(req, target_msc, divisor, remainder); + + _XReply(dpy, (xReply *)&rep, 0, xFalse); + + *count = vals_to_card64(rep.swap_lo, rep.swap_hi); + + UnlockDisplay(dpy); + SyncHandle(); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.h new file mode 100644 index 000000000..165f3fe7f --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2.h @@ -0,0 +1,73 @@ +/* + * Copyright © 2007,2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _VA_DRI2_H_ +#define _VA_DRI2_H_ + +#include +#include +#include +#include + +typedef struct { + unsigned int attachment; + unsigned int name; + unsigned int pitch; + unsigned int cpp; + unsigned int flags; +} VA_DRI2Buffer; + +extern Bool +VA_DRI2QueryExtension(Display *display, int *eventBase, int *errorBase); +extern Bool +VA_DRI2QueryVersion(Display *display, int *major, int *minor); +extern Bool +VA_DRI2Connect(Display *display, XID window, + char **driverName, char **deviceName); +extern Bool +VA_DRI2Authenticate(Display *display, XID window, drm_magic_t magic); +extern void +VA_DRI2CreateDrawable(Display *display, XID drawable); +extern void +VA_DRI2DestroyDrawable(Display *display, XID handle); +extern VA_DRI2Buffer * +VA_DRI2GetBuffers(Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, int count, + int *outCount); +extern void +VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, + CARD32 dest, CARD32 src); +extern void +VA_DRI2SwapBuffers(Display *dpy, XID drawable, CARD64 target_msc, CARD64 divisor, + CARD64 remainder, CARD64 *count); +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2str.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2str.h new file mode 100644 index 000000000..1515eeb03 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2str.h @@ -0,0 +1,227 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _DRI2_PROTO_H_ +#define _DRI2_PROTO_H_ + +#define DRI2_NAME "DRI2" +#define DRI2_MAJOR 1 +#define DRI2_MINOR 2 + +#define DRI2NumberErrors 0 +#define DRI2NumberEvents 2 +#define DRI2NumberRequests 13 + +#define X_DRI2QueryVersion 0 +#define X_DRI2Connect 1 +#define X_DRI2Authenticate 2 +#define X_DRI2CreateDrawable 3 +#define X_DRI2DestroyDrawable 4 +#define X_DRI2GetBuffers 5 +#define X_DRI2CopyRegion 6 +#define X_DRI2GetBuffersWithFormat 7 +#define X_DRI2SwapBuffers 8 +#define X_DRI2GetMSC 9 +#define X_DRI2WaitMSC 10 +#define X_DRI2WaitSBC 11 +#define X_DRI2SwapInterval 12 + +typedef struct { + CARD32 attachment B32; + CARD32 name B32; + CARD32 pitch B32; + CARD32 cpp B32; + CARD32 flags B32; +} xDRI2Buffer; + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 majorVersion B32; + CARD32 minorVersion B32; +} xDRI2QueryVersionReq; +#define sz_xDRI2QueryVersionReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 majorVersion B32; + CARD32 minorVersion B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xDRI2QueryVersionReply; +#define sz_xDRI2QueryVersionReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 window B32; + CARD32 driverType B32; +} xDRI2ConnectReq; +#define sz_xDRI2ConnectReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 driverNameLength B32; + CARD32 deviceNameLength B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xDRI2ConnectReply; +#define sz_xDRI2ConnectReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 window B32; + CARD32 magic B32; +} xDRI2AuthenticateReq; +#define sz_xDRI2AuthenticateReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 authenticated B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xDRI2AuthenticateReply; +#define sz_xDRI2AuthenticateReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; +} xDRI2CreateDrawableReq; +#define sz_xDRI2CreateDrawableReq 8 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; +} xDRI2DestroyDrawableReq; +#define sz_xDRI2DestroyDrawableReq 8 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; + CARD32 count B32; +} xDRI2GetBuffersReq; +#define sz_xDRI2GetBuffersReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 width B32; + CARD32 height B32; + CARD32 count B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xDRI2GetBuffersReply; +#define sz_xDRI2GetBuffersReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; + CARD32 region B32; + CARD32 dest B32; + CARD32 src B32; +} xDRI2CopyRegionReq; +#define sz_xDRI2CopyRegionReq 20 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; +} xDRI2CopyRegionReply; +#define sz_xDRI2CopyRegionReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; + CARD32 target_msc_hi B32; + CARD32 target_msc_lo B32; + CARD32 divisor_hi B32; + CARD32 divisor_lo B32; + CARD32 remainder_hi B32; + CARD32 remainder_lo B32; +} xDRI2SwapBuffersReq; +#define sz_xDRI2SwapBuffersReq 32 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 swap_hi B32; + CARD32 swap_lo B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xDRI2SwapBuffersReply; +#define sz_xDRI2SwapBuffersReply 32 + +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2tokens.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2tokens.h new file mode 100644 index 000000000..087159f5c --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dri2tokens.h @@ -0,0 +1,48 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _DRI2_TOKENS_H_ +#define _DRI2_TOKENS_H_ + +#define DRI2BufferFrontLeft 0 +#define DRI2BufferBackLeft 1 +#define DRI2BufferFrontRight 2 +#define DRI2BufferBackRight 3 +#define DRI2BufferDepth 4 +#define DRI2BufferStencil 5 +#define DRI2BufferAccum 6 +#define DRI2BufferFakeFrontLeft 7 +#define DRI2BufferFakeFrontRight 8 + +#define DRI2DriverDRI 0 + +#endif diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.c new file mode 100644 index 000000000..379e3d410 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.c @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "va_dricommon.h" + +// X error trap +static int x11_error_code = 0; +static int (*old_error_handler)(Display *, XErrorEvent *); + +static int +error_handler(Display *dpy, XErrorEvent *error) +{ + x11_error_code = error->error_code; + return 0; +} + +static void +x11_trap_errors(void) +{ + x11_error_code = 0; + old_error_handler = XSetErrorHandler(error_handler); +} + +static int +x11_untrap_errors(void) +{ + XSetErrorHandler(old_error_handler); + return x11_error_code; +} + +static int +is_window(Display *dpy, Drawable drawable) +{ + XWindowAttributes wattr; + + x11_trap_errors(); + XGetWindowAttributes(dpy, drawable, &wattr); + return x11_untrap_errors() == 0; +} + +static struct dri_drawable * +do_drawable_hash(VADriverContextP ctx, XID drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + int index = drawable % DRAWABLE_HASH_SZ; + struct dri_drawable *dri_drawable = dri_state->drawable_hash[index]; + + while (dri_drawable) { + if (dri_drawable->x_drawable == drawable) + return dri_drawable; + dri_drawable = dri_drawable->next; + } + + dri_drawable = dri_state->createDrawable(ctx, drawable); + dri_drawable->x_drawable = drawable; + dri_drawable->is_window = is_window(ctx->native_dpy, drawable); + dri_drawable->next = dri_state->drawable_hash[index]; + dri_state->drawable_hash[index] = dri_drawable; + + return dri_drawable; +} + +void +free_drawable(VADriverContextP ctx, struct dri_drawable* dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + int i = 0; + + while (i < DRAWABLE_HASH_SZ) { + if (dri_drawable == dri_state->drawable_hash[i]) { + dri_state->destroyDrawable(ctx, dri_drawable); + dri_state->drawable_hash[i] = NULL; + } + i++; + } +} + +void +free_drawable_hashtable(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + int i; + struct dri_drawable *dri_drawable, *prev; + + for (i = 0; i < DRAWABLE_HASH_SZ; i++) { + dri_drawable = dri_state->drawable_hash[i]; + + while (dri_drawable) { + prev = dri_drawable; + dri_drawable = prev->next; + dri_state->destroyDrawable(ctx, prev); + } + + dri_state->drawable_hash[i] = NULL; + } +} + +struct dri_drawable * +dri_get_drawable(VADriverContextP ctx, XID drawable) +{ + return do_drawable_hash(ctx, drawable); +} + +void +dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + + dri_state->swapBuffer(ctx, dri_drawable); +} + +union dri_buffer * +dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; + + return dri_state->getRenderingBuffer(ctx, dri_drawable); +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.h new file mode 100644 index 000000000..eb6ddadf1 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_dricommon.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2012 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef _VA_DRICOMMON_H_ +#define _VA_DRICOMMON_H_ + +#ifndef ANDROID +#include +#include +#include +#include +#endif + +#include +#include + +#ifdef ANDROID +#define XID unsigned int +#define Bool int +#endif + +enum { + /* Compatibility. Do not use for newly-written code. */ + VA_NONE = VA_DRM_AUTH_NONE, + VA_DRI1 = VA_DRM_AUTH_DRI1, + VA_DRI2 = VA_DRM_AUTH_DRI2, + VA_DUMMY = VA_DRM_AUTH_CUSTOM +}; + +union dri_buffer +{ + struct { + unsigned int attachment; + unsigned int name; + unsigned int pitch; + unsigned int cpp; + unsigned int flags; + } dri2; +}; + +struct dri_drawable +{ + XID x_drawable; + int is_window; + int x; + int y; + unsigned int width; + unsigned int height; + struct dri_drawable *next; +}; + +#define DRAWABLE_HASH_SZ 32 +struct dri_state +{ + struct drm_state base; +#ifndef ANDROID + struct dri_drawable *drawable_hash[DRAWABLE_HASH_SZ]; + + struct dri_drawable *(*createDrawable)(VADriverContextP ctx, XID x_drawable); + void (*destroyDrawable)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + void (*swapBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + union dri_buffer *(*getRenderingBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + void (*close)(VADriverContextP ctx); +#endif +}; + +Bool isDRI2Connected(VADriverContextP ctx, char **driver_name); +void free_drawable(VADriverContextP ctx, struct dri_drawable* dri_drawable); +void free_drawable_hashtable(VADriverContextP ctx); +struct dri_drawable *dri_get_drawable(VADriverContextP ctx, XID drawable); +void dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); +union dri_buffer *dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); + +#endif /* _VA_DRICOMMON_H_ */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.c new file mode 100644 index 000000000..058e23d13 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.c @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2010 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "sysdeps.h" +#include +#include +#include +#include +#include + +#define ADL_OK 0 +#define ADL_MAX_PATH 256 + +/* + * Based on public AMD Display Library (ADL) SDK: + * + */ +typedef struct AdapterInfo { + int iSize; + int iAdapterIndex; + char strUDID[ADL_MAX_PATH]; + int iBusNumber; + int iDeviceNumber; + int iFunctionNumber; + int iVendorID; + char strAdapterName[ADL_MAX_PATH]; + char strDisplayName[ADL_MAX_PATH]; + int iPresent; + int iXScreenNum; + int iDrvIndex; + char strXScreenConfigName[ADL_MAX_PATH]; +} AdapterInfo, *LPAdapterInfo; + +typedef struct XScreenInfo { + int iXScreenNum; + char strXScreenConfigName[ADL_MAX_PATH]; +} XScreenInfo, *LPXScreenInfo; + +typedef void *(*ADL_MAIN_MALLOC_CALLBACK)(int); +typedef int (*ADL_MAIN_CONTROL_CREATE)(ADL_MAIN_MALLOC_CALLBACK, int); +typedef int (*ADL_MAIN_CONTROL_DESTROY)(void); +typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET)(int *); +typedef int (*ADL_ADAPTER_ADAPTERINFO_GET)(LPAdapterInfo, int); +typedef int (*ADL_ADAPTER_XSCREENINFO_GET)(LPXScreenInfo, int); + +static void *ADL_Main_Memory_Alloc(int iSize) +{ + return malloc(iSize); +} + +static void ADL_Main_Memory_Free(void *arg) +{ + void ** const lpBuffer = arg; + + if (lpBuffer && *lpBuffer) { + free(*lpBuffer); + *lpBuffer = NULL; + } +} + +static int get_display_name_length(const char *name) +{ + const char *m; + + if (!name) + return 0; + + /* Strip out screen number */ + m = strchr(name, ':'); + if (m) { + m = strchr(m, '.'); + if (m) + return m - name; + } + return strlen(name); +} + +static int match_display_name(Display *x11_dpy, const char *display_name) +{ + Display *test_dpy; + char *test_dpy_name, *x11_dpy_name; + int test_dpy_namelen, x11_dpy_namelen; + int m; + + test_dpy = XOpenDisplay(display_name); + if (!test_dpy) + return 0; + + test_dpy_name = XDisplayString(test_dpy); + test_dpy_namelen = get_display_name_length(test_dpy_name); + x11_dpy_name = XDisplayString(x11_dpy); + x11_dpy_namelen = get_display_name_length(x11_dpy_name); + + m = (test_dpy_namelen == x11_dpy_namelen && + (test_dpy_namelen == 0 || + (test_dpy_namelen > 0 && + strncmp(test_dpy_name, x11_dpy_name, test_dpy_namelen) == 0))); + + XCloseDisplay(test_dpy); + return m; +} + +Bool VA_FGLRXGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ) +{ + ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create; + ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy; + ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get; + ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get; + ADL_ADAPTER_XSCREENINFO_GET ADL_Adapter_XScreenInfo_Get; + + LPAdapterInfo lpAdapterInfo = NULL; + LPXScreenInfo lpXScreenInfo = NULL; + void *libadl_handle = NULL; + Bool success = False; + int is_adl_initialized = 0; + int i, num_adapters, lpAdapterInfo_size, lpXScreenInfo_size; + + if (ddxDriverMajorVersion) + *ddxDriverMajorVersion = 0; + if (ddxDriverMinorVersion) + *ddxDriverMinorVersion = 0; + if (ddxDriverPatchVersion) + *ddxDriverPatchVersion = 0; + if (clientDriverName) + *clientDriverName = NULL; + + libadl_handle = dlopen("libatiadlxx.so", RTLD_LAZY|RTLD_GLOBAL); + if (!libadl_handle) + goto end; + + dlerror(); + ADL_Main_Control_Create = (ADL_MAIN_CONTROL_CREATE) + dlsym(libadl_handle,"ADL_Main_Control_Create"); + if (dlerror()) + goto end; + + ADL_Main_Control_Destroy = (ADL_MAIN_CONTROL_DESTROY) + dlsym(libadl_handle,"ADL_Main_Control_Destroy"); + if (dlerror()) + goto end; + + ADL_Adapter_NumberOfAdapters_Get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET) + dlsym(libadl_handle,"ADL_Adapter_NumberOfAdapters_Get"); + if (dlerror()) + goto end; + + ADL_Adapter_AdapterInfo_Get = (ADL_ADAPTER_ADAPTERINFO_GET) + dlsym(libadl_handle,"ADL_Adapter_AdapterInfo_Get"); + if (dlerror()) + goto end; + + ADL_Adapter_XScreenInfo_Get = (ADL_ADAPTER_XSCREENINFO_GET) + dlsym(libadl_handle,"ADL_Adapter_XScreenInfo_Get"); + if (dlerror()) + goto end; + + if (ADL_Main_Control_Create(ADL_Main_Memory_Alloc, 1) != ADL_OK) + goto end; + is_adl_initialized = 1; + + if (ADL_Adapter_NumberOfAdapters_Get(&num_adapters) != ADL_OK) + goto end; + if (num_adapters <= 0) + goto end; + + lpAdapterInfo_size = num_adapters * sizeof(*lpAdapterInfo); + lpAdapterInfo = ADL_Main_Memory_Alloc(lpAdapterInfo_size); + if (!lpAdapterInfo) + goto end; + memset(lpAdapterInfo, 0, lpAdapterInfo_size); + + for (i = 0; i < num_adapters; i++) + lpAdapterInfo[i].iSize = sizeof(lpAdapterInfo[i]); + + lpXScreenInfo_size = num_adapters * sizeof(*lpXScreenInfo); + lpXScreenInfo = ADL_Main_Memory_Alloc(lpXScreenInfo_size); + if (!lpXScreenInfo) + goto end; + memset(lpXScreenInfo, 0, lpXScreenInfo_size); + + if (ADL_Adapter_AdapterInfo_Get(lpAdapterInfo, lpAdapterInfo_size) != ADL_OK) + goto end; + + if (ADL_Adapter_XScreenInfo_Get(lpXScreenInfo, lpXScreenInfo_size) != ADL_OK) + goto end; + + for (i = 0; i < num_adapters; i++) { + LPXScreenInfo const lpCurrXScreenInfo = &lpXScreenInfo[i]; + LPAdapterInfo const lpCurrAdapterInfo = &lpAdapterInfo[i]; + if (!lpCurrAdapterInfo->iPresent) + continue; +#if 0 + printf("Adapter %d:\n", i); + printf(" iAdapterIndex: %d\n", lpCurrAdapterInfo->iAdapterIndex); + printf(" strUDID: '%s'\n", lpCurrAdapterInfo->strUDID); + printf(" iBusNumber: %d\n", lpCurrAdapterInfo->iBusNumber); + printf(" iDeviceNumber: %d\n", lpCurrAdapterInfo->iDeviceNumber); + printf(" iFunctionNumber: %d\n", lpCurrAdapterInfo->iFunctionNumber); + printf(" iVendorID: 0x%04x\n", lpCurrAdapterInfo->iVendorID); + printf(" strAdapterName: '%s'\n", lpCurrAdapterInfo->strAdapterName); + printf(" strDisplayName: '%s'\n", lpCurrAdapterInfo->strDisplayName); + printf(" iPresent: %d\n", lpCurrAdapterInfo->iPresent); + printf(" iXScreenNum: %d\n", lpCurrXScreenInfo->iXScreenNum); +#endif + if (screen == lpCurrXScreenInfo->iXScreenNum && + match_display_name(dpy, lpCurrAdapterInfo->strDisplayName)) { + if (clientDriverName) + *clientDriverName = strdup("fglrx"); + success = True; + break; + } + } + +end: + if (lpXScreenInfo) + ADL_Main_Memory_Free(&lpXScreenInfo); + if (lpAdapterInfo) + ADL_Main_Memory_Free(&lpAdapterInfo); + if (is_adl_initialized) + ADL_Main_Control_Destroy(); + if (libadl_handle) + dlclose(libadl_handle); + return success; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.h new file mode 100644 index 000000000..93ddd4bb9 --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_fglrx.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2010 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_FGLRX_H +#define VA_FGLRX_H + +#include + +DLL_HIDDEN +Bool VA_FGLRXGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ); + +#endif /* VA_FGLRX_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.c new file mode 100644 index 000000000..20c63d51a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.c @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2008 NVIDIA, Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include + +#define NEED_REPLIES +#include +#include +#include +#include +#include +#include "va_nvctrl.h" + +#define NV_CONTROL_ERRORS 0 +#define NV_CONTROL_EVENTS 5 +#define NV_CONTROL_NAME "NV-CONTROL" + +#define NV_CTRL_TARGET_TYPE_X_SCREEN 0 +#define NV_CTRL_TARGET_TYPE_GPU 1 +#define NV_CTRL_TARGET_TYPE_FRAMELOCK 2 +#define NV_CTRL_TARGET_TYPE_VCSC 3 /* Visual Computing System */ + +#define NV_CTRL_STRING_NVIDIA_DRIVER_VERSION 3 /* R--G */ + +#define X_nvCtrlQueryExtension 0 +#define X_nvCtrlIsNv 1 +#define X_nvCtrlQueryStringAttribute 4 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; +} xnvCtrlQueryExtensionReq; +#define sz_xnvCtrlQueryExtensionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 padb1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 major B16; + CARD16 minor B16; + CARD32 padl4 B32; + CARD32 padl5 B32; + CARD32 padl6 B32; + CARD32 padl7 B32; + CARD32 padl8 B32; +} xnvCtrlQueryExtensionReply; +#define sz_xnvCtrlQueryExtensionReply 32 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; + CARD32 screen B32; +} xnvCtrlIsNvReq; +#define sz_xnvCtrlIsNvReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 padb1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 isnv B32; + CARD32 padl4 B32; + CARD32 padl5 B32; + CARD32 padl6 B32; + CARD32 padl7 B32; + CARD32 padl8 B32; +} xnvCtrlIsNvReply; +#define sz_xnvCtrlIsNvReply 32 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; + CARD16 target_id B16; /* X screen number or GPU number */ + CARD16 target_type B16; /* X screen or GPU */ + CARD32 display_mask B32; + CARD32 attribute B32; +} xnvCtrlQueryStringAttributeReq; +#define sz_xnvCtrlQueryStringAttributeReq 16 + +typedef struct { + BYTE type; + BYTE pad0; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 flags B32; + CARD32 n B32; /* Length of string */ + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; +} xnvCtrlQueryStringAttributeReply; +#define sz_xnvCtrlQueryStringAttributeReply 32 + +#define NVCTRL_EXT_NEED_CHECK (XPointer)(~0) +#define NVCTRL_EXT_NEED_NOTHING (XPointer)(0) +#define NVCTRL_EXT_NEED_TARGET_SWAP (XPointer)(1) + +static XExtensionInfo _nvctrl_ext_info_data; +static XExtensionInfo *nvctrl_ext_info = &_nvctrl_ext_info_data; +static /* const */ char *nvctrl_extension_name = NV_CONTROL_NAME; + +#define XNVCTRLCheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, nvctrl_extension_name, val) +#define XNVCTRLSimpleCheckExtension(dpy,i) \ + XextSimpleCheckExtension (dpy, i, nvctrl_extension_name) + +static int close_display(); +static /* const */ XExtensionHooks nvctrl_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, nvctrl_ext_info, + nvctrl_extension_name, + &nvctrl_extension_hooks, + NV_CONTROL_EVENTS, NVCTRL_EXT_NEED_CHECK) + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, nvctrl_ext_info) + +static Bool XNVCTRLQueryVersion (Display *dpy, int *major, int *minor); + +/* + * NV-CONTROL versions 1.8 and 1.9 pack the target_type and target_id + * fields in reversed order. In order to talk to one of these servers, + * we need to swap these fields. + */ +static void XNVCTRLCheckTargetData(Display *dpy, XExtDisplayInfo *info, + int *target_type, int *target_id) +{ + /* Find out what the server's NV-CONTROL version is and + * setup for swapping if we need to. + */ + if (info->data == NVCTRL_EXT_NEED_CHECK) { + int major, minor; + + if (XNVCTRLQueryVersion(dpy, &major, &minor)) { + if (major == 1 && + (minor == 8 || minor == 9)) { + info->data = NVCTRL_EXT_NEED_TARGET_SWAP; + } else { + info->data = NVCTRL_EXT_NEED_NOTHING; + } + } else { + info->data = NVCTRL_EXT_NEED_NOTHING; + } + } + + /* We need to swap the target_type and target_id */ + if (info->data == NVCTRL_EXT_NEED_TARGET_SWAP) { + int tmp; + tmp = *target_type; + *target_type = *target_id; + *target_id = tmp; + } +} + + +static Bool XNVCTRLQueryExtension ( + Display *dpy, + int *event_basep, + int *error_basep +){ + XExtDisplayInfo *info = find_display (dpy); + + if (XextHasExtension(info)) { + if (event_basep) *event_basep = info->codes->first_event; + if (error_basep) *error_basep = info->codes->first_error; + return True; + } else { + return False; + } +} + + +static Bool XNVCTRLQueryVersion ( + Display *dpy, + int *major, + int *minor +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlQueryExtensionReply rep; + xnvCtrlQueryExtensionReq *req; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + + LockDisplay (dpy); + GetReq (nvCtrlQueryExtension, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlQueryExtension; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + if (major) *major = rep.major; + if (minor) *minor = rep.minor; + UnlockDisplay (dpy); + SyncHandle (); + return True; +} + + +static Bool XNVCTRLIsNvScreen ( + Display *dpy, + int screen +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlIsNvReply rep; + xnvCtrlIsNvReq *req; + Bool isnv; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + + LockDisplay (dpy); + GetReq (nvCtrlIsNv, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlIsNv; + req->screen = screen; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + isnv = rep.isnv; + UnlockDisplay (dpy); + SyncHandle (); + return isnv; +} + + +static Bool XNVCTRLQueryTargetStringAttribute ( + Display *dpy, + int target_type, + int target_id, + unsigned int display_mask, + unsigned int attribute, + char **ptr +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlQueryStringAttributeReply rep; + xnvCtrlQueryStringAttributeReq *req; + Bool exists; + int length, numbytes, slop; + + if (!ptr) return False; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); + + LockDisplay (dpy); + GetReq (nvCtrlQueryStringAttribute, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlQueryStringAttribute; + req->target_type = target_type; + req->target_id = target_id; + req->display_mask = display_mask; + req->attribute = attribute; + if (!_XReply (dpy, (xReply *) &rep, 0, False)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + length = rep.length; + numbytes = rep.n; + slop = numbytes & 3; + *ptr = (char *) Xmalloc(numbytes); + if (! *ptr) { + _XEatData(dpy, length); + UnlockDisplay (dpy); + SyncHandle (); + return False; + } else { + _XRead(dpy, (char *) *ptr, numbytes); + if (slop) _XEatData(dpy, 4-slop); + } + exists = rep.flags; + UnlockDisplay (dpy); + SyncHandle (); + return exists; +} + +static Bool XNVCTRLQueryStringAttribute ( + Display *dpy, + int screen, + unsigned int display_mask, + unsigned int attribute, + char **ptr +){ + return XNVCTRLQueryTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, + screen, display_mask, + attribute, ptr); +} + + +Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, + Bool *isCapable ) +{ + int event_base; + int error_base; + + if (isCapable) + *isCapable = False; + + if (!XNVCTRLQueryExtension(dpy, &event_base, &error_base)) + return False; + + if (isCapable && XNVCTRLIsNvScreen(dpy, screen)) + *isCapable = True; + + return True; +} + +Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ) +{ + if (ddxDriverMajorVersion) + *ddxDriverMajorVersion = 0; + if (ddxDriverMinorVersion) + *ddxDriverMinorVersion = 0; + if (ddxDriverPatchVersion) + *ddxDriverPatchVersion = 0; + if (clientDriverName) + *clientDriverName = NULL; + + char *nvidia_driver_version = NULL; + if (!XNVCTRLQueryStringAttribute(dpy, screen, 0, NV_CTRL_STRING_NVIDIA_DRIVER_VERSION, &nvidia_driver_version)) + return False; + + char *end, *str = nvidia_driver_version; + unsigned long v = strtoul(str, &end, 10); + if (end && end != str) { + if (ddxDriverMajorVersion) + *ddxDriverMajorVersion = v; + if (*(str = end) == '.') { + v = strtoul(str + 1, &end, 10); + if (end && end != str && (*end == '.' || *end == '\0')) { + if (ddxDriverMinorVersion) + *ddxDriverMinorVersion = v; + if (*(str = end) == '.') { + v = strtoul(str + 1, &end, 10); + if (end && end != str && *end == '\0') { + if (ddxDriverPatchVersion) + *ddxDriverPatchVersion = v; + } + } + } + } + } + Xfree(nvidia_driver_version); + + if (clientDriverName) + *clientDriverName = strdup("nvidia"); + + return True; +} diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.h b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.h new file mode 100644 index 000000000..36175378f --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_nvctrl.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2008 NVIDIA, Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef VA_NVCTRLLIB_H +#define VA_NVCTRLLIB_H + +#include + +DLL_HIDDEN +Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, + Bool *isCapable ); + +DLL_HIDDEN +Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ); + +#endif /* VA_NVCTRLLIB_H */ diff --git a/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_x11.c b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_x11.c new file mode 100644 index 000000000..a8db4c87a --- /dev/null +++ b/contrib/sdk/sources/vaapi/libva-1.6.2/va/x11/va_x11.c @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "sysdeps.h" +#include "va.h" +#include "va_backend.h" +#include "va_trace.h" +#include "va_fool.h" +#include "va_x11.h" +#include "va_dri2.h" +#include "va_dricommon.h" +#include "va_nvctrl.h" +#include "va_fglrx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int va_DisplayContextIsValid ( + VADisplayContextP pDisplayContext +) +{ + return (pDisplayContext != NULL && + pDisplayContext->pDriverContext != NULL); +} + +static void va_DisplayContextDestroy ( + VADisplayContextP pDisplayContext +) +{ + VADriverContextP ctx; + struct dri_state *dri_state; + + if (pDisplayContext == NULL) + return; + + ctx = pDisplayContext->pDriverContext; + dri_state = ctx->drm_state; + + if (dri_state && dri_state->close) + dri_state->close(ctx); + + free(pDisplayContext->pDriverContext->drm_state); + free(pDisplayContext->pDriverContext); + free(pDisplayContext); +} + + +static VAStatus va_DRI2GetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + + if (!isDRI2Connected(ctx, driver_name)) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_NVCTRL_GetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + int direct_capable, driver_major, driver_minor, driver_patch; + Bool result; + + result = VA_NVCTRLQueryDirectRenderingCapable(ctx->native_dpy, ctx->x11_screen, + &direct_capable); + if (!result || !direct_capable) + return VA_STATUS_ERROR_UNKNOWN; + + result = VA_NVCTRLGetClientDriverName(ctx->native_dpy, ctx->x11_screen, + &driver_major, &driver_minor, + &driver_patch, driver_name); + if (!result) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_FGLRX_GetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + int driver_major, driver_minor, driver_patch; + Bool result; + + result = VA_FGLRXGetClientDriverName(ctx->native_dpy, ctx->x11_screen, + &driver_major, &driver_minor, + &driver_patch, driver_name); + if (!result) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_DisplayContextGetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VAStatus vaStatus; + + if (driver_name) + *driver_name = NULL; + else + return VA_STATUS_ERROR_UNKNOWN; + + vaStatus = va_DRI2GetDriverName(pDisplayContext, driver_name); + if (vaStatus != VA_STATUS_SUCCESS) + vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name); + if (vaStatus != VA_STATUS_SUCCESS) + vaStatus = va_FGLRX_GetDriverName(pDisplayContext, driver_name); + return vaStatus; +} + + +VADisplay vaGetDisplay ( + Display *native_dpy /* implementation specific */ +) +{ + VADisplay dpy = NULL; + VADisplayContextP pDisplayContext; + + if (!native_dpy) + return NULL; + + if (!dpy) + { + /* create new entry */ + VADriverContextP pDriverContext; + struct dri_state *dri_state; + pDisplayContext = calloc(1, sizeof(*pDisplayContext)); + pDriverContext = calloc(1, sizeof(*pDriverContext)); + dri_state = calloc(1, sizeof(*dri_state)); + if (pDisplayContext && pDriverContext && dri_state) + { + pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; + + pDriverContext->native_dpy = (void *)native_dpy; + pDriverContext->x11_screen = XDefaultScreen(native_dpy); + pDriverContext->display_type = VA_DISPLAY_X11; + pDisplayContext->pDriverContext = pDriverContext; + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + pDisplayContext->opaque = NULL; + pDriverContext->drm_state = dri_state; + dpy = (VADisplay)pDisplayContext; + } + else + { + if (pDisplayContext) + free(pDisplayContext); + if (pDriverContext) + free(pDriverContext); + if (dri_state) + free(dri_state); + } + } + + return dpy; +} + +#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) +#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } + +void va_TracePutSurface ( + VADisplay dpy, + VASurfaceID surface, + void *draw, /* the target Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +); + + +VAStatus vaPutSurface ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +) +{ + VADriverContextP ctx; + + if (fool_postp) + return VA_STATUS_SUCCESS; + + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + VA_TRACE_LOG(va_TracePutSurface, dpy, surface, (void *)draw, srcx, srcy, srcw, srch, + destx, desty, destw, desth, + cliprects, number_cliprects, flags ); + + return ctx->vtable->vaPutSurface( ctx, surface, (void *)draw, srcx, srcy, srcw, srch, + destx, desty, destw, desth, + cliprects, number_cliprects, flags ); +}